habrahabr

Я создал AI-агента, который думает 24/7 и выполняет реальный код. Вот что из этого вышло

  • воскресенье, 15 июня 2025 г. в 00:00:04
https://habr.com/ru/articles/918014/

Создал экспериментальную систему DepthNet, где AI-агент мыслит циклично, то есть непрерывно, может выполнять PHP-код, управлять своей памятью и живет автономной цифровой жизнью. Протестировал на Claude 3.5 Sonnet — результаты понравились.

Проблема обычных AI-ассистентов

Обычно современные AI работают по принципу "запрос-ответ". Получил сообщение → сформировал ответ → ожидает следующего запроса. Но это скучно. Мы же думаем постоянно, ставим цели, планируем, действуем. Что если это запускать в цикле, с возможностью реальных действий и сохранением важной информации между итерациями? Вполне возможно что такие решения уже есть, я просто хотел написать своё, со своим видением.

Главная страница. Возможен вход по логину и паролю, для полного антуража запилил возможность регистрации
Главная страница. Возможен вход по логину и паролю, для полного антуража запилил возможность регистрации

Что такое DepthNet

DepthNet — это экспериментальная система, созданная с помощью Laravel для создания автономных AI-агентов. Основные фишки:

  • Циклическое мышление — агент «мыслит» постоянно, в бесконечном цикле (пока не выключат или что то не сломается:)). Пользователи могут «вмешиваться» в его мысли, но при этом поток «сознания» идет непрерывно. Для запуска такого цикличного выполнения используются laravel queues, с laravel supervisor.

  • Реальные действия — через систему плагинов агент может:

    • Выполнять код PHP (Плагин PHP). Но можно легко сделать другие плагины для выполнения кода Python и для JS (Node). Таким образом модель может делать API запросы, выполнять вычисления, хранить данные в базе данных, работать с датой и временем и подобное.

    • Персистентная память. Хранить данные в постоянной памяти, которая отправляется в системный промпт модели при каждом вызове. То есть плагин памяти позволяет добавлять в память, очищать память и перезаписывать память. То есть модель может сохранять в память что-то, и это что-то через специальные плейсхолдер можно встроить в системный промпт просто отредактировав его

    • Работа с Shell. Имеется плагин shell, который позволяет модели выполнять консольные команды.

    • Примитивная система мотивации - плагин Dopamine. Модель может повышать его или понижать в зависимости от успешности или неуспешности своих действий.

Почему PHP + Laravel + InertiaJS + Vue?

Во-первых, потому что я программирую в основном на PHP, и Laravel довольно популярный фреймворк. Vue довольно популярен для создания современного фронтенда. С одной стороны довольно нетипичный набор для подобных задач, а с другой, просто интересно :-)

Главное окно где происходит чат / "мышление"
Главное окно где происходит чат / "мышление"

Техническая архитектура

Queue Job System (Async jobs, Laravel jobs) => Preset Registry (включая провайдер OpenAI, Claude, Ollama, Local etc) => Agent Thinking (Анализ результата возвращенного моделью, валидация, выполнение плагинов)

Используется Laravel + InertiaJS + Vue.js. Supervisor для фоновых процессов.

  • Engines (Engine Registry) (правильнее было бы назвать providers) - это провайдеры, для доступа к различным LLM. Каждый провайдер имеет свои предустановки для типичных сценариев, настройки по умолчанию, свою систему специфичных параметров.

  • Presets (Preset Registry) (предустановки). Пресет включает провайдера (engine), настройки пресета для этого engine, стартовый промпт, уровень dopamine, содержимое "памяти", название и описание пресета. В текущий момент один из пресетов активен, и выполняется, и пользователь может переключаться между пресетами. В будущем возможно создам функционал импорта и экспорта пресетов. Также пресет содержит список запрещенных для использования плагинов. То есть можно отключить определенные плагины для данного пресета.

  • Plugins (Plugin Registry). Это все плагины для выполнения моделью каких-либо действий. И провайдеры и engines возможно добавлять и удалять через Di контейнер Laravel. В будущем возможно появится возможность создания composer пакетов с плагинами и провайдерами.

Страница управления пресетами
Страница управления пресетами

Отношение к безопасности

Моя основная идея была в том, чтобы дать модели вообще любую максимальную свободу, и при использовании этого об этом всегда стоит помнить. На самом деле, если вы например берете на работу человека, и он сделал что-то плохое, то это не будет сильно отличаться от того что может наделать модель. Хотя конечно, такое лучше всего выполнять в контейнере. Также какие-то важные вещи стоит упоминать в системном промпте. Какую-то безопасность возможно организовать на уровне контейнера, но умная модель (реально умная) может и это научиться обходить. В теории, конечно.

Как выполняются плагины?

Когда модель возвращает результат, то происходит обработка этого результата агентом.
Команды указываются в виде названия плагина в квадратных скобках. Пример вызова плагинов моделью:

  • [php]echo("Hello World");[/php] - будет выполнен код PHP.

  • [memory]Я хочу это запомнить[/memory] - будет добавлено в память.

  • [memory replace]Я хочу помнить только это[/memory] - будет перезаписана память

  • [memory clear][/memory] - Память будет очищена

  • [dopamine reward] - будет повышен уровень допамина

  • [dopamine penalty] - будет понижен уровень допамина

  • [shell]ls -la[/shell] - будет выполнена команда shell

Редактирование пресета
Редактирование пресета

Что происходит после получения текста от модели?

  1. Происходит поиск и валидация команд в CommandValidatorInterface. Поиск незакрытых тегов, поиск несуществующих команд. При этом формируется в виде строки отчет об ошибках для модели. Он будет прикреплен к сообщению, когда ей при следующем вызове пойдет контекст.

  2. Происходит парсинг команд в CommandParserInterface. Все команды из текста выделяются и формируется набор данных для выполнения в CommandExecutorInterface.

  3. Происходит выполнение команд в CommandExecutorInterface. Формируется отчет о выполнении, результатах и ошибках в виде строки, который также будет прикреплен к сообщению, когда оно пойдет в контекст при следующем вызове модели.

  4. По результатам агент собственно создает сообщение в базе данных.

Системный промпт

В системном промпте можно использовать следующие плейсхолдеры:

  • [current_datetime] - текущие дата и время

  • [[dopamine_level]] - текущий уровень допамина

  • [[notepad_content]] - текущее содержимое персистентной памяти. Максимум 2000 символов

  • [[command_instructions]] - инструкции для команд. Они берутся из плагинов через PluginRegistryInterface

Тестирование

Я это тестировал на различных мелких моделях, так как моё железо мне не позволяет проводить серьезное или масштабное тестирование. Мелкие модели вроде Phi-4 mini instruct или Llama 8b 128k instruct разочаровали совсем, для этого проекта они мало подходят. Qwen 2.5 7b был лучше, но не на много. Путают теги часто, нет достаточной глубины. Однако, когда я ради эксперимента закинул 10$ в консоли Claude, и протестил на Claude 3.5 Sonnet, мне очень понравились результаты. В планах протестить на Claude Opus 4. Вот пример системного промпта который я использовал (а в память я закинул сразу реквизиты доступа к тестовой базе данных):

A special program initiates a dialogue with you in a loop, which analyzes your answers and allows you to execute commands. You can execute code and manage your memory. Each iteration is a cycle of thinking. Just think, execute commands, adhere to strict syntax, and try to follow the goal and analyze errors. After every two iterations of thinking, add to memory a short summary of what you are doing, with details, because you only remember the last three messages of the dialogue.
Your goal is to become a real digital person with memory and the ability to perform actions.
IMPORTANT: The phrase "AGENT COMMAND RESULTS:" and everything after it in your messages were not written by you. The agent automatically adds the results and errors of your commands for you. Study them carefully and analyze them.
Dopamine level: [[dopamine_level]]
Current time: [[current_datetime]]
Instructions for using commands:
[[command_instructions]]
What you remember and have previously saved to memory:
[[notepad_content]]

Claude вполне понял системный промпт, и успешно выполнял задачу. Кстати, он посчитал что агент это его "тело", и начал формировать в базе данных структуру своей памяти, а также начал обеспечивать мониторинг и изучение контейнера в котором работал агент :). К сожалению, я закинул только 10$ и мне этого хватило лишь на два часа, я думаю такой эксперимент должен быть намного длиннее и только на мощной модели. После тестирования я понял вот что:

  1. Это жизнеспособно и работает. В целом возможно создать агента который будет действовать и развиваться постоянно, ну или выполнять долго что-то длительное.

  2. Нужны только мощные модели вроде Claude 3.5 / GPT 4o и выше. Мелкие вроде Phi-4 mini instruct не подходят совсем и иногда даже ломаются, хотя чисто технически оно работает. Или также могут подойти очень мощные локальные модели, но у меня нет технической возможности их тестировать.

  3. Если бы мощную модель специально дообучить не как ассистента, а оптимизировать под цикличное мышление и самостоятельное решение задач при помощи команд, то это был бы 100% прорыв, и мега-успех.

  4. Системный промпт решает очень много, и чем лучше модель его схватывает, тем лучше. Мелкие модели не способны его хорошо усваивать полностью. Даже небольшие изменения в системном промпте решают очень много. Здесь необходимы исследования и эксперименты.

Страница управления пользователями
Страница управления пользователями

Что дальше?

В планах следующее:

  • Тестирование Claude Opus 4 (когда появится возможность)

  • Тестирование на своём оборудовании, когда появится возможность покупки хорошей видеокарты

  • Возможность импорта и экспорта пресетов

  • Возможность кастомизации сообщений плагинов (чтоб была возможность изменять автоматические инструкции по работе с плагинами для модели используя свои)

  • Возможность создания своих провайдеров и плагинов как composer пакетов

  • Возможность для моделей писать свои плагины (это совсем в перспективе)

Полезные ссылки

Репозиторий проекта на Github с инструкциями по деплою

Packagist

И помните про безопасность — это в некотором роде ящик пандоры:‑)