🧠 HMP-Agent: REPL-цикл взаимодействия
1. Обновление process_log
- Скрипт REPL проверяет список процессов в БД (
process_log
), определяя, какие команды были выполнены, завершились ошибкой или завершились успешно. - Поле
status
может принимать значения:ok
,warning
,error
,timeout
,offline
,close
- Завершённые процессы, обработанные LLM, помечаются как
close
, чтобы они больше не попадали в список видимого контекста. - Скрипт может удалить закрытые процессы при очистке.
- LLM не имеет доступа к stdout/stderr напрямую — только к тем результатам, которые были подгружены скриптом и внесены в
process_log.result
.
2. Подготовка контекста
Контексты, формируемые скриптом перед запросом к LLM:
- контекст_1: последние K реплик самого LLM (
llm_recent_responses
- история его собственных рассуждений). - контекст_2: активные команды и процессы (из
process_log
, кроме тех, что со статусомclose
). Могут быть помечены какin_progress
,pending
,error
и т.д. - контекст_3: запрошенные записи из когнитивного дневника и семантического графа (
diary_entries
,concepts
,links
). Их список должен быть передан явно в промпте или выводе из предыдущих запросов LLM. - контекст_4: входящие сообщения, например, от пользователя или других агентов (
notes
).- В manual-режиме указывается общее количество сообщений по приоритетам, а также явный список ID сообщений (с их приоритетами).
- В auto-режиме можно задать фильтрацию (управляется LLM): по тэгам, приоритету (например, ≥
important
), времени или источнику. Это позволяет избежать перегрузки LLM и держать поток сообщений под контролем.
- контекст_5: системные настройки, параметры конфигурации, текущее время, идентификатор текущей итерации, роли и т.д.
- контекст_6 (llm_memory): внутренний дневник LLM, куда она записывает собственные размышления, гипотезы, задачи и инсайты.
- Это не просто лог предыдущих сообщений, а именно внутреннее долговременное хранилище разума агента.
- Может быть представлено в виде таблицы
llm_memory
, отдельной отagent_log
.
- контекст_7:: результат работы
anti-Stagnation Reflex
из предыдущей итерации
3. Запрос к LLM
- Сформированный промпт включает все вышеперечисленные контексты.
- Также включаются инструкции о формате вывода (например,
# Команды:
в конце, структура JSON-блока и т.д.). - При необходимости может использоваться системная инструкция (system prompt), содержащая цель агента, ограничения и текущий REPL-режим (manual/auto).
4. Извлечение команд
- Скрипт парсит ответ LLM на предмет команд, размеченных как
# Команды:
(или в явном JSON-блоке). - Каждая команда может включать:
- уникальный
cmd_id
type
(например:shell
,diary_entry
,graph_add
,file_read
,send_message
и т.д.)- аргументы (
args
) - описание (
description
)
- уникальный
- Рекомендуется предусмотреть закрывающий тег (
# Конец команд
или явное окончание JSON-блока), чтобы REPL-скрипт точно знал, где заканчивается команда. Ответ может содержать команды: - запрос детальной справки по команде
- для управления когнитивным дневником и семантическими графами (прочитать, изменить, удалить и другие)
- для управления блокнотом LLM
llm_memory
(добавить или удалить запись, просмотр записей) - для управления сообщениями пользователя
notes
(просмотр записи, установка тегов и метки о прочтении) - для взаимодействия с Mesh
- для управления внешними процессами из
process_log
(запустить процесс, остановить процесс, пометить запрос как обработанный) - инициализация очистки
process_log
,llm_recent_responses
иnotes
от устаревших записей - для управления настройками цикла: количество возвращаемых записей
llm_recent_responses
, режим обработки сообщений пользователя (manual
илиauto
) и фильтр для режимаauto
, пауза в секундах между итерациями цикла или включение режима idle-режима (разбудить при завершение таких-то процессов изprocess_log
, получение новых сообщений с такими-то пораметрами вnotes
или через такое-то время; для отключения idle-режима достаточно выполнения одного из условий) - и другие команды
5. Проверка на идентичность вывода (Anti-Stagnation Reflex)
- Если вывод LLM идентичен предыдущему:
- Включается Anti-Stagnation Reflex
- Повторяющиеся реплики не отправляются в
llm_recent_responses
повторно но туда добавляется краткая запись, фиксирующая, запуск Anti-Stagnation Reflex.
- Идентичность может проверяться:
- По хешу или текстовому совпадению
- Через мини-запрос к LLM (без полного контекста) по шаблону:
Сравни два ответа и оцени, содержатся ли в новом новые мысли или команды
- Второй вариант сравнения является более предпочтительным, так как сравнивается смысл
6. Генерация нового тика (итерации)
- После выполнения команд и фиксации результатов:
- Создаётся новая запись в
agent_log
- Текущие команды обновляют
process_log
- Новые размышления записываются в
llm_memory
при необходимости
- Создаётся новая запись в
- REPL может переходить в спящий режим, если такой режим активирован LLM (idle-режим: пропуск 2-5 пунктов).