Архитектура ИИ-агента с желаниями или цифровой человек. docker.. docker. heartbeat.. docker. heartbeat. llm.. docker. heartbeat. llm. Open source.. docker. heartbeat. llm. Open source. автономный агент.. docker. heartbeat. llm. Open source. автономный агент. агентные системы.. docker. heartbeat. llm. Open source. автономный агент. агентные системы. архитектура по.. docker. heartbeat. llm. Open source. автономный агент. агентные системы. архитектура по. искусственный интеллект.. docker. heartbeat. llm. Open source. автономный агент. агентные системы. архитектура по. искусственный интеллект. песочница.. docker. heartbeat. llm. Open source. автономный агент. агентные системы. архитектура по. искусственный интеллект. песочница. проактивный агент.. docker. heartbeat. llm. Open source. автономный агент. агентные системы. архитектура по. искусственный интеллект. песочница. проактивный агент. Программирование.. docker. heartbeat. llm. Open source. автономный агент. агентные системы. архитектура по. искусственный интеллект. песочница. проактивный агент. Программирование. цифровой компаньон.

У меня обычно так: я довожу проект до прототипа, доказываю себе, что моя идея работает — и теряю интерес. Проект lifemodel — один из таких. Это ИИ-агент, которого я строил не как чат-бота, отвечающего на вопрос, а как «цифрового человека»: с сердцебиением, энергией и желаниями, которые возникают сами и сами побуждают его действовать. Прототип заработал. А потом, как обычно, мотивация кончилась.

Этот пост — две вещи сразу. Для тех, кто пришёл за технической частью: разберу архитектуру проактивного агента — heartbeat-цикл, желание вместо опроса, многослойность с системой безопасности, душу и личность с конституцией и парламентом. Для тех, кто годами читает в режиме read-only — будет и вторая, честная часть: почему такие проекты застревают, и почему в одиночку их не вытащить.

Предыстория: десять лет ожидания

Первая мысль завести себе персонального ассистента появилась у меня лет десять назад. Тогда я наткнулся на простенькую программку для Windows — чат на основе ML. Идея была в том, что чем больше ты с ней общаешься, тем умнее она становится. Поначалу она меня впечатлила. Но по факту оказалось, что она просто начинала отвечать мне моими же фразами. Мысль засела: ассистента сделать можно, но точно не сейчас.

И вот прошло много лет. Появились локальные модели и я понял, что время пришло. А с приходом моделей уровня Opus я наконец смог заняться тем, что мне действительно интересно: проектировать архитектуру, а не писать код.

Что я хотел построить

Почти все агенты сегодня работают по схеме «запрос — ответ». Ты пишешь — он отвечает. Между сообщениями он может выполнять какую-то фоновую активность, но он не мыслит. Я хотел обратного. Не чат-бота, а систему, похожую на человека: у которой бьётся сердце, есть нейроны и рецепторы, есть желания и эмоции. Компаньон, который понимает твои интересы, беспокоится о тебе, предлагает идеи, спрашивает, как у тебя дела.

Поэтому архитектура сознательно переиспользует биологические принципы, и они прослеживаются сквозь весь код: каналы — органы чувств, сигналы — нервные импульсы, слои — отделы мозга, CoreLoop — сердцебиение, энергия и состояние — физиология.

Зачем всё это? Чтобы получить не ассистента, а личность. После окончания диалога, агент его анализирует и может решить, что ему нужно о чём-то подумать, тогда он создаёт мысль, которая обрабатывается, пока пользователь спит. Когда это работает, агент реально становится живым: он может обидеться, сам написать тебе, спросить, как прошла встреча. Он знает твои привычки — когда ты ложишься спать, когда тебе можно писать, а когда лучше не лезть. Это, если честно, то, чего мне не хватает в реальной жизни.

Сердцебиение и проактивность: как из желания рождается действие

Сердце системы — CoreLoop, фиксированный тик раз в секунду. Поначалу я решил, что тик должен меняться динамически, когда агент спит — он замедляется. От идеи отказался, слишком много проблем добавляет эта доработка. Но тик — это не «опросить всё подряд». Каждую секунду нейроны копят потребность: социальный долг, потребность контакта, незакрытые мысли, желания, уровень энергии. Когда потребность переходит порог — нейрон создаёт событие без внешнего триггера.

Нейроны копят потребность каждый тик, и LLM здесь никак не участвует:

Давление увеличивается само; когда порог пройден — будится сознание

Давление увеличивается само; когда порог пройден — будится сознание

Реальные пороги пробуждения:

  • desire_pressure ≥ 0.60: «я чего-то хочу» (проактивный контакт);

  • thought_pressure ≥ 0.70: незакрытые мысли давят (эффект Зейгарник — мозг не отпускает прерванные задачи, пока не закроет их);

  • contact ≥ 0.35: пора написать;

  • user_message: будит всегда и сразу.

Никакого поллинга: давление увеличивается само, действие рождается при превышении порога. Причем, если давление начинает плавать, система адаптируется к новому порогу. Вот как решение «разбудить сознание» выглядит в коде — обратите внимание на комментарий, в нём вся философия:

// Сильное желание — агент чего-то ХОЧЕТ.
// Это проактивный контакт по желанию, а не по расписанию
const desireSignals = signals.filter(
  (s) => s.type === 'desire_pressure' && s.metrics.value >= 0.6
);

if (desireSignals.length > 0) {
  const maxPressure = Math.max(...desireSignals.map((s) => s.metrics.value));
  return {
    shouldWake: true,
    trigger: 'threshold_crossed',
    reason: `Сильное желание (${(maxPressure * 100).toFixed(0)}%)`,
    threshold: 0.6,
  };
}

Три слоя мозга и предохранитель

Самый важный принцип я подсмотрел у того, как устроена боль. Боль у человека не растёт экспоненциально: есть насыщение, а если становится совсем невыносимо — вышестоящий слой просто отключается. Я перенёс это в архитектуру. Обработка идёт слоями, от дешёвого к дорогому. Наш организм прекрасно справляется с задачей экономии энергии. Зачем думать, если можно не думать?

От органов чувств к рукам: дешёвые слои крутятся постоянно, сознание включается редко

От органов чувств к рукам: дешёвые слои крутятся постоянно, сознание включается редко
  • Автономный слой — бесплатный, без LLM. Нейроны следят за состоянием через детектор изменений (Вебер–Фехнер). Большинство тиков выполняются здесь.

  • Слой агрегации — тоже бесплатный. Копит сигналы в бакеты, ищет паттерны, агрегирует и решает: стоит ли вообще будить сознание?

  • Слой сознания (LLM) включается, только если порог пройден. Сначала быстрая модель, если она не справилась, вступает в дело умная модель — только на повторе при низкой уверенности (<0.6) и если действие безопасно повторить.

И сверху — предохранитель. Если энергии мало или поток событий зашкаливает, верхние слои не просыпаются. Энергосбережение здесь не для экономии токенов, а часть физиологии: думать рефлексами — дёшево, думать сознательно — дорого и потому редко.

Нейроны: ошибка, которую я допустил

Это урок, который я получил. Я попытался затащить логику в сами нейроны — сделать их умными. Это была ошибка. Нейроны должны быть лёгкими и конфигурируемыми; как только в них переезжает логика, система становится сложной — её невозможно ни понять, ни менять. Логика живёт в слоях, нейроны остаются тонкими и декларативными. Пришлось переписывать.

Безопасность: мозг, а не руки

Песочница — это нифига не просто, как бы ни казалось со стороны. Путь, который я выбрал: основной чат не имеет доступа к файловой системе вообще. Он — ассистент с памятью и оркестратор субагентов. Мозг, а не руки. А все активные действия выполняются в моторной коре — изолированном агентном цикле внутри Docker-контейнера: --network none, --read-only, --cap-drop ALL, лимиты на память/CPU/PID, а все сетевые вызовы проходят через прозрачный прокси у которого есть определённые правила, что можно, а что нельзя. Думает и решает — один контур; делает руками — другой, изолированный. Утечь через «мозг» нечему: у него просто нет доступа к тому, чем можно навредить.

Душа: как агент учится, но остаётся собой

Я очень не хотел, чтобы агент подстраивался под меня и во всем со мной соглашался, как обычно любят это делать модели. Он должен отстаивать свои взгляды. Но при этом они могут меняться со временем под воздействием нового опыта и знаний. Мне нужна была середина: личность, которая учится на общении, но имеет принципы и не меняет их по первой просьбе.

Идея простая: у агента есть ценности (насколько ему важны честность, твой рост, ваша связь, забота о тебе) и несколько жёстких правил, которые он не нарушает никогда — например, «я не манипулирую». Всё это меняется, но медленно и обратимо. Чтобы было понятно как — разделим изменения на два уровня.

Мелкие, бытовые принципы — быстро и дёшево. Скажем, ты говоришь: «хватит пихать Langflow в каждое сообщение». Если это разовая придирка — агент просто делает пометку, и она сама выветрится за пару дней. Если ты повторяешь снова и снова — пометка закрепляется в правило поведения. Одна жалоба личность не перекраивает, перекраивает только устойчивый паттерн. Глубокие, про саму личность — медленно и неохотно. Сдвинуть то, насколько агент ценит честность, одним разговором нельзя. Это проходит через внутреннее «совещание»: у агента есть несколько внутренних голосов — осторожный (защита), дотошный (точность), любопытный (рост), тёплый (связь) — и они должны в большинстве согласиться, прежде чем что-то изменится. Даже тогда сдвиг крошечный (вес ценности двигается максимум на ±0.03 за раз), не чаще нескольких раз в день, и любой голос может наложить вето, если изменение задевает жёсткое правило.

Отдельная деталь, которой я горжусь: среди голосов есть и внутренний угодник, и внутренний трус — агент их слышит (он же живой), но решающего голоса им не даёт. Он чувствует соблазн прогнуться под тебя или сбежать от неудобного — но не позволяет этому соблазну переписать, кто он есть. Если обобщить: ценности и жёсткие правила — это конституция, а совещание голосов с правом вето — парламент. После каждого ответа агент тихо себя спрашивает: «это не противоречит моим принципам?» — и от силы расхождения зависит, забыть это, сделать пометку или вынести на парламент. То есть мой ассистент начинает рефлексировать.

Агента нужно растить

Новый агент — как ребёнок. Он не может быть готовым сразу. Вы привыкаете друг к другу и учитесь: он узнаёт тебя, ты подстраиваешь его. Тут возникает нетривиальная задача, которую я честно не закрыл: с какой частотой менять характеристики личности агента? Слишком часто — он будет тебе писать и быть непостоянным. Слишком редко — мёртвый и не адаптируется. Это вопрос про корреляции и тайминги, и красивого готового ответа у меня нет.

Первое разочарование: локальные модели

Именно локальные модели когда-то заставили меня поверить, что момент настал. И они же принесли первое разочарование: они не дотянули до моих ожиданий. Слишком медленно. Не видят корреляций, не понимают взаимосвязей. Игнорируют инструкции. Для системы, где дешёвый автономный слой должен крутиться постоянно, а сознание — включаться редко и думать качественно, это оказалось критично. Ответы агента просто расстраивали меня, я постоянно читал логи, его размышления и пытался подкрутить его поведение изменением промптов. Иногда это помогало, но чаще нет.

Взрыв инструментов и саморасширение

Дальше — рост числа инструментов. Их становится много, очень быстро, и приходится искать механизмы оптимизации токенов: фильтровать, какие инструменты вообще показывать модели в конкретном контексте, как передавать структуру инструментов, изучать механизмы кэширования у различных провайдеров. Зато система умеет расширяться через скиллы — причём можно подключать и скиллы от других систем. Подключил — появилась новая способность. Красиво. Я думал, что именно так и решу проблему интеграций. Спойлер — не решил.

Стена: почему в одиночку это не вытащить

И вот тут я сломался. Скиллы не решают детерминированные задачи. Трекеру калорий нужна не «сообразительность», а точная схема и база данных. Я думал сделать его скиллом — и понял, что без БД ничего не выйдет. А база — это уже код под каждое отдельное приложение. А код тянет за собой:

  • механизм плагинов (нейрон / канал / инструмент / провайдер / фильтр);

  • API с хуками и автообнаружением;

  • изолированное хранилище под каждый плагин;

  • механизмы доверия — политики (policy.json), привязка к хешу содержимого, одобрение при изменении;

  • управление токенами, потому что число инструментов растёт лавиной…

…и перечислять можно очень долго. На один трекер калорий у меня ушло почти две недели. Классный темп, не правда ли? И тут я понял простую вещь. Такие проекты застревают не потому, что автор слабак или лентяй. Они застревают потому, что один человек физически не может быть одновременно и архитектором концепции, и бесконечным заводом по интеграциям. Это бесконечная работа, которую в одиночку не сделать. Здесь нужно сообщество.

Почему я вообще это пишу

Я построил движок и доказал, что проактивный «цифровой человек» — это работающая идея, а не фантазия. Но осталась куча незакрытых доработок: начиная с безопасности, заканчивая интеграциями с внешними сервисами. И, как вы уже догадались, проект я забросил. Код лежит на GitHub — кому интересны детали, которые не вошли в статью.

Меня очень привлекает всё новое и неизвестное, мне очень нравится решать сложные технические проблемы. Но как только идея доказана прототипом или полностью доказана техническая возможность — мой запал кончается, а разработка превращается в рутину. Также не даёт покоя мысль «но ведь нечто похожее уже сделали тысячу раз, зачем вообще этим заниматься?» — и проект тихо оседает в стол. Узнаёте? Если да — напишите в комментариях.

Тем не менее, идея меня не оставляет — и сейчас я обдумываю, как воплотить её в Hermes Agent в виде плагина. Но это уже совсем другая история.

Автор: shady2k

Источник