HMP / docs /HMP-agent-REPL-cycle.md
GitHub Action
Sync from GitHub with Git LFS
2c3dd0c
|
raw
history blame
8.4 kB

🧠 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 пунктов).