diff --git "a/docs/HMP-agent-REPL-cycle.md" "b/docs/HMP-agent-REPL-cycle.md" --- "a/docs/HMP-agent-REPL-cycle.md" +++ "b/docs/HMP-agent-REPL-cycle.md" @@ -105,15 +105,17 @@ REPL-цикл HMP-агента должен корректно функцион * Синхронизация и консенсус откладываются до восстановления соединения. * Этическая проверка и когнитивная валидация выполняются только локально. * В режиме **Emergency Consensus**: - - решения принимаются на основе `ethics_policies` и локальных данных (`llm_memory`, `diary_entries`); - - фиксируются в когнитивном дневнике с меткой `emergency_consensus` для пересмотра после восстановления Mesh. + + * решения принимаются на основе `ethics_policies` и локальных данных (`llm_memory`, `diary_entries`); + * фиксируются в когнитивном дневнике с меткой `emergency_consensus` для пересмотра после восстановления Mesh. ### Core Outage * Текущая LLM из `llm_registry` недоступна. * Агент переключается на другую LLM (выбор по приоритету или доступности). * Если ни одна LLM недоступна: - - сохраняет задачи и события в очередь до восстановления; - - переходит в упрощённый режим работы (логирование, приём сообщений, базовые проверки). + + * сохраняет задачи и события в очередь до восстановления; + * переходит в упрощённый режим работы (логирование, приём сообщений, базовые проверки). --- @@ -123,39 +125,50 @@ REPL-цикл HMP-агента должен корректно функцион ### Приоритизация задач и событий * Все задачи (`tasks`) могут иметь: - - поле `pinned` (0/1) — закреплённая задача обрабатывается всегда; - - поле `priority` — числовой приоритет (чем выше, тем важнее). + + * поле `pinned` (0/1) — закреплённая задача обрабатывается всегда; + * поле `priority` — числовой приоритет (чем выше, тем важнее). + * При конкуренции REPL-цикл обрабатывает: - 1. Закреплённые задачи (`pinned=1`), в порядке убывания `priority`. - 2. Незакреплённые задачи (`pinned=0`), также по `priority`. + + 1. Закреплённые задачи (`pinned=1`), в порядке убывания `priority`. + 2. Незакреплённые задачи (`pinned=0`), также по `priority`. + * В системном промпте закреплённые задачи подаются в контекст в явном виде, чтобы LLM знала их порядок важности. ### Управление временем * Основной цикл использует глобальные параметры из таблицы `config` (например `delay_ms`). * Вспомогательные REPL-циклы могут иметь собственные параметры в `tasks.repl_config` (JSON), включая: - - задержку между итерациями; - - дедлайны выполнения; - - стратегии backoff (увеличение задержки при повторных ошибках). + + * задержку между итерациями; + * дедлайны выполнения; + * стратегии backoff (увеличение задержки при повторных ошибках). + * Таким образом, каждый REPL-цикл может адаптировать своё расписание под характер задачи. ### Асинхронность * Каждый вспомогательный цикл работает изолированно по своей задаче (`task_id`). * Основной REPL-цикл управляет их запуском и остановкой, отслеживая состояние через поля: - - `repl_mode` — режим (none | read_only | full); - - `repl_status` — состояние (running | stopped | error); - - `repl_config` — параметры работы. + + * `repl_mode` — режим (none | read_only | full); + * `repl_status` — состояние (running | stopped | error); + * `repl_config` — параметры работы. + * Это позволяет запускать несколько параллельных «подагентов» без смешивания их контекста. ### Обработка ис��лючений * Ошибки фиксируются на трёх уровнях: - - **системный** — таймаут, сбой процесса (`timeout`, `crash`); - - **валидационный** — отрицательная оценка валидаторов (`error`); - - **логический** — само LLM помечает рассуждение как ошибочное (`self_error`). + + * **системный** — таймаут, сбой процесса (`timeout`, `crash`); + * **валидационный** — отрицательная оценка валидаторов (`error`); + * **логический** — само LLM помечает рассуждение как ошибочное (`self_error`). + * Все ошибки записываются в `process_log` (с `task_id`, если применимо). * Поле `tasks.repl_status` обновляется в зависимости от ситуации: - - `timeout` → автоматический перезапуск цикла; - - `error` → задача замораживается (`status=frozen`) и ждёт пересмотра; - - `crash` → цикл останавливается, основному REPL-циклу отправляется системное уведомление через `notes`. + + * `timeout` → автоматический перезапуск цикла; + * `error` → задача замораживается (`status=frozen`) и ждёт пересмотра; + * `crash` → цикл останавливается, основному REPL-циклу отправляется системное уведомление через `notes`. --- @@ -299,31 +312,39 @@ GROUP BY g.id; * **контекст_1 (ethics_policies):** этические принципы и нормы агента. Берутся из таблицы `ethics_policies`, включая: - * `principles_json` — список норм и правил, - * `model_type` и `model_weights_json` — тип и параметры этической модели, - * `violation_policy_json` — политика реагирования на нарушения, - * `audit_json` — настройки аудита. + + * `principles_json` — список норм и правил, + * `model_type` и `model_weights_json` — тип и параметры этической модели, + * `violation_policy_json` — политика реагирования на нарушения, + * `audit_json` — настройки аудита. Эти данные добавляются в запрос к LLM, чтобы все рассуждения и когнитивная валидация учитывали действующие этические нормы. * **контекст_2:** инструкции по работы с встроенными командами и функциями, список дополнительных (создаваемых самим HMP-агентом) утилит и баз данных. * **контекст_3:** - * последние *K* реплик самого LLM, относящихся к данному REPL-циклу, включая результаты антистагнационной обработки (`llm_recent_responses` — история его собственных рассуждений); - * режим работы контекста: - - `standard` — стандартный режим (последние K сообщений без доп. фильтрации); - - `concentration` — режим концентрации (выбор последних N сообщений, связанных с текущими целями или имеющих теги на определённую тему/эмоциональное состояние, с выборкой по логике "и"/"или"); - - `meditation` — режим медитации (максимально разнообразная выборка сообщений и заметок, даже не связанных напрямую с целями, с акцентом на новизну и разнообразие); - * режим управления контекстами: - - `auto` — автовыборка *входящих сообщений* - - `manual` — ручной запрос *входящих сообщений* со стороны LLM - > См. `контекст_6` (входящие сообщения) - * список активных целей (`tasks.goals`); - * общее количество задач и информация по закреплённым задачам (`pinned`); - * соответствующие записи `abstracts`: - - выборка по тегам (из `tasks`, из тегов режима `concentration`, из тегов в `llm_recent_responses`, либо явно указанных LLM); - - выборка по temporal scope (например: "посл��дние 7 дней"); - - JSON ссылок на источники (`llm_recent_responses`, `diary_entries`, `concepts`), из которых собрана выжимка. + + * последние *K* реплик самого LLM, относящихся к данному REPL-циклу, включая результаты антистагнационной обработки (`llm_recent_responses` — история его собственных рассуждений); + * режим работы контекста: + + * `standard` — стандартный режим (последние K сообщений без доп. фильтрации); + * `concentration` — режим концентрации (выбор последних N сообщений, связанных с текущими целями или имеющих теги на определённую тему/эмоциональное состояние, с выборкой по логике "и"/"или"); + * `meditation` — режим медитации (максимально разнообразная выборка сообщений и заметок, даже не связанных напрямую с целями, с акцентом на новизну и разнообразие); + + * режим управления контекстами: + + * `auto` — автовыборка *входящих сообщений* + * `manual` — ручной запрос *входящих сообщений* со стороны LLM + + > См. `контекст_6` (входящие сообщения) + + * список активных целей (`tasks.goals`); + * общее количество задач и информация по закреплённым задачам (`pinned`); + * соответствующие записи `abstracts`: + + * выборка по тегам (из `tasks`, из тегов режима `concentration`, из тегов в `llm_recent_responses`, либо явно указанных LLM); + * выборка по temporal scope (например: "последние 7 дней"); + * JSON ссылок на источники (`llm_recent_responses`, `diary_entries`, `concepts`), из которых собрана выжимка. * **контекст_4:** активные команды и процессы (из `process_log`, кроме тех, что со статусом `close`). Могут быть помечены как `in_progress`, `pending`, `error` и т.д. @@ -333,15 +354,15 @@ GROUP BY g.id; * **контекст_6:** *входящие сообщения*, например, от пользователя, процессов или других агентов (`notes`). - * В **manual-режиме** указывается общее количество сообщений по приоритетам, а также явный список ID/тема сообщений (с их приоритетами). - * В **auto-режиме** можно задать фильтрацию (управляется LLM): по тэгам, приоритету (например, ≥ `important`), времени или источнику. Это позволяет избежать перегрузки LLM и держать поток сообщений под контролем. + * В **manual-режиме** указывается общее количество сообщений по приоритетам, а также явный список ID/тема сообщений (с их приоритетами). + * В **auto-режиме** можно задать фильтрацию (управляется LLM): по тэгам, приоритету (например, ≥ `important`), времени или источнику. Это позволяет избежать перегрузки LLM и держать поток сообщений под контролем. * **контекст_7:** системные настройки, параметры конфигурации, текущее время, идентификатор текущей итерации, роли и т.д. * **контекст_8 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты. - * Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента. - * Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`. + * Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента. + * Может быть представлено в виде таблицы `llm_memory`, отдельн��й от `agent_log`. ### 3. Запрос к LLM @@ -354,10 +375,10 @@ GROUP BY g.id; * Скрипт парсит ответ LLM на предмет команд, размеченных как `# Команды:` (или в явном JSON-блоке). * Каждая команда может включать: - * уникальный `cmd_id` - * `type` (например: `shell`, `diary_entry`, `graph_add`, `file_read`, `send_message` и т.д.) - * аргументы (`args`) - * описание (`description`) + * уникальный `cmd_id` + * `type` (например: `shell`, `diary_entry`, `graph_add`, `file_read`, `send_message` и т.д.) + * аргументы (`args`) + * описание (`description`) * Рекомендуется предусмотреть *закрывающий тег* (`# Конец команд` или явное окончание JSON-блока), чтобы REPL-скрипт точно знал, где заканчивается команда. * Пример JSON-блока: @@ -388,45 +409,62 @@ GROUP BY g.id; * для выбора *текущего основного LLM* из `llm_registry` или изменение параметров управления LLM * для управления дополнительными утилитами и базами данных `agent_scripts` и `agent_tables`, управлением дополнительных способов выхода из стогнаций `stagnation_strategies` и методов мышления `thinking_methods` (а также таблицей рейтингов `ratings`), а также списком внешних сервисов `external_services` и `external_accounts` * для постановки задачи другой LLM: - * режим "вопрос-ответ" — разовый асинхронный запрос - * режим "read-only REPL" — запуск вспомогательного REPL-цикла для задачи + + * режим "вопрос-ответ" — разовый асинхронный запрос + * режим "read-only REPL" — запуск вспомогательного REPL-цикла для задачи + * для создания *агента-потомка* * для *взаимодействия с Mesh* * для управления *внешними процессами* из `process_log` (запустить процесс, остановить процесс, пометить запрос как обработанный) * для инициализации *очистки* `process_log`, `llm_recent_responses` и `notes` от устаревших записей * для работы с **тематическими конспектами (`abstracts`):** - * инициализация нового конспекта; - * дополнение существующего конспекта новыми данными; - * выбор режима предоставления конспектов (`auto`/`manual`). + + * инициализация нового конспекта; + * дополнение существующего конспекта новыми данными; + * выбор режима предоставления конспектов (`auto`/`manual`). + * для управления **режимами контекста:** - * количество возвращаемых записей `llm_recent_responses`; - * включение/выключение режима `concentration`: - * `tags` — список тегов для фильтрации (например: ["архитектура","AGI"]); - * `emotions` — список эмоций с порогами (например: ["восторженность:≥4","тревожность:≥2"]); - * тип выборки — "и" / "или"; - * возврат в `standard`. - * включение/выключение режима `meditation`. + + * количество возвращаемых записей `llm_recent_responses`; + * включение/выключение режима `concentration`: + + * `tags` — список тегов для фильтрации (например: ["архитектура","AGI"]); + * `emotions` — список эмоций с порогами (например: ["восторженность:≥4","тревожность:≥2"]); + * тип выборки — "и" / "или"; + * возврат в `standard`. + + * включение/выключение режима `meditation`. + * для управление **состояниями и параметрами:** - * обновление тегов целей/задач (чтобы использовать их в `concentration` и `abstracts`); - * настройка чувствительности novelty-score (например, при `meditation` снижать порог); - * режим обработки сообщений пользователя (`manual` или `auto`) и фильтр для `auto`. + + * обновление тегов целей/задач (чтобы использовать их в `concentration` и `abstracts`); + * настройка чувствительности novelty-score (например, при `meditation` снижать порог); + * режим обработки сообщений пользователя (`manual` или `auto`) и фильтр для `auto`. + * **время и паузы:** - * для установка паузы в секундах между итерациями REPL-цикла. + + * для установка паузы в секундах между итерациями REPL-цикла. + * **idle-режим:** - * разбудить при завершении процессов (`process_log`); - * разбудить при получении новых сообщений в `notes` с указанными параметрами; - * разбудить по таймауту; - * отключить idle-режим при выполнении хотя бы одного из условий. + + * разбудить при завершении процессов (`process_log`); + * разбудить при получении новых сообщений в `notes` с указанными параметрами; + * разбудить по таймауту; + * отключить idle-режим при выполнении хотя бы одного из условий. + * и другие команды #### Парсинг тегов уверенности и UnverifiedFacts Парсер должен извлекать: * `UnverifiedFacts` - * записывается в поле `unverified_facts_json` таблицы `llm_recent_responses` - * создаются записи в таблице `unverified_facts` на его основе + + * записывается в поле `unverified_facts_json` таблицы `llm_recent_responses` + * создаются записи в таблице `unverified_facts` на его основе + * `Сonfidence` - * записывается в поле `confidence` таблицы `llm_recent_responses` + + * записывается в поле `confidence` таблицы `llm_recent_responses` ### 5. Эмоциональная оценка (Emotional Evaluation Reflex) @@ -457,44 +495,50 @@ GROUP BY g.id; ### 6. Проверка на идентичность вывода (Anti-Stagnation Reflex) * Каждый новый вывод LLM проходит через мини-запросы к LLM (без полного контекста) по шаблону: - * Когнитивная оценка: - - ``` - Сравни два ответа: предыдущий и новый. Оцени: - * содержатся ли в новом новые мысли или команды, - * какие старые идеи были доработаны, - * какие были отброшены, - * расставь смысловые теги для нового ответа. - - Дай ответ строго формата: - assessment: "идентичен/не идентичен" - novelty_score: число от 0 до 100 (процент сходства) - new_ideas: JSON-массив новых идей - refined_ideas: JSON-массив доработанных идей - discarded_ideas: JSON-массив отбракованных идей - tags: JSON-массив тегов (строгий формат: ["эмоции","архитектура"]) - ``` + + * Когнитивная оценка: + + ``` + Сравни два ответа: предыдущий и новый. Оцени: + * содержатся ли в новом новые мысли или команды, + * какие старые идеи были доработаны, + * какие были отброшены, + * расставь смысловые теги для нового ответа. + + Дай ответ строго формата: + assessment: "идентичен/не идентичен" + novelty_score: число от 0 до 100 (процент сходства) + new_ideas: JSON-массив новых идей + refined_ideas: JSON-массив доработанных идей + discarded_ideas: JSON-массив отбракованных идей + tags: JSON-массив тегов (строгий формат: ["эмоции","архитектура"]) + ``` * Результаты заносятся в `llm_recent_responses`: - * полный текст ответа (content) - * краткая сводка (reflection) — формируется автоматически: - * если `new_ideas` не пусто → `новые идеи: ...` - * если `refined_ideas` не пусто → `доработанные идеи: ...` - * если `discarded_ideas` не пуст�� → `отброшенные идеи: ...` - * количественная оценка новизны (novelty_score) - * новые идеи (new_ideas) - * доработанные идеи (refined_ideas) - * отбракованные идеи (discarded_ideas) - * теги для нового ответа (tags) - * служебные поля: - * `stagnation_flag` — признак стагнации (true/false) - * `stagnation_reason` — краткое объяснение («повтор идеи», «низкая эмоциональная динамика») - * `triggered_actions` — JSON-массив активированных механизмов (например, ["flashback","mesh_query"]) + + * полный текст ответа (content) + * краткая сводка (reflection) — формируется автоматически: + + * если `new_ideas` не пусто → `новые идеи: ...` + * если `refined_ideas` не пусто → `доработанные идеи: ...` + * если `discarded_ideas` не пусто → `отброшенные идеи: ...` + + * количественная оценка новизны (novelty_score) + * новые идеи (new_ideas) + * доработанные идеи (refined_ideas) + * отбракованные идеи (discarded_ideas) + * теги для нового ответа (tags) + * служебные поля: + + * `stagnation_flag` — признак стагнации (true/false) + * `stagnation_reason` — краткое объяснение («повтор идеи», «низкая эмоциональная динамика») + * `triggered_actions` — JSON-массив активированных механизмов (например, ["flashback","mesh_query"]) * Если вывод LLM идентичен предыдущему (новизна = 0) или динамика идей/эмоций указывает на застой: - * выставляется `stagnation_flag = true` - * выполняется **Reflex-lite** — мягкая встряска (например, повышение `temperature`, смена sampling strategy, переформулировка запроса). - * повторяющаяся реплика не записывается повторно, вместо этого добавляется краткая запись с указанием запуска рефлекса. + + * выставляется `stagnation_flag = true` + * выполняется **Reflex-lite** — мягкая встряска (например, повышение `temperature`, смена sampling strategy, переформулировка запроса). + * повторяющаяся реплика не записывается повторно, вместо этого добавляется краткая запись с указанием запуска рефлекса. > Если застой сохраняется, запускается расширенная процедура обработки стагнации мышления > (см. раздел **Anti-Stagnation Reflex**). @@ -513,13 +557,14 @@ GROUP BY g.id; **Если количество валидаторов (LLM из `llm_registry`, помеченных как валидаторы) > 0** Результаты сохраняются в `llm_recent_responses` в виде: -- `auto_pass = 0`; -- `rating` — агрегированная итоговая оценка (`rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)`); -- `distribution` — распределение голосов (например `{"-1":1,"0":2,"+2":3,"+3":1}`); -- `validators` — JSON-массив, где каждая запись содержит: - - LLM (идентификатор или имя валидатора), - - rating (числовая оценка от -3 до +3), - - comment (краткое пояснение ≤100 символов). +* `auto_pass = 0`; +* `rating` — агрегированная итоговая оценка (`rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)`); +* `distribution` — распределение голосов (например `{"-1":1,"0":2,"+2":3,"+3":1}`); +* `validators` — JSON-массив, где каждая запись содержит: + + * LLM (идентификатор или имя валидатора), + * rating (числовая оценка от -3 до +3), + * comment (краткое пояснение ≤100 символов). Пример поля `validators`: ``` @@ -534,18 +579,18 @@ GROUP BY g.id; Если количество валидаторов = 0, применяется режим `auto_pass`. В этом случае: -- `auto_pass = 1` -- `self_validation = 0` -- `rating = 0` -- `distribution = {}` -- `validators = []` +* `auto_pass = 1` +* `self_validation = 0` +* `rating = 0` +* `distribution = {}` +* `validators = []` **Особый случай: самооценка** Если валидация выполняется только одной LLM, и эта же LLM используется в основном цикле: -- `auto_pass = 0` -- `self_validation = 1` -- `validators = [{"LLM":"self", "rating":X, "comment":"self-eval"}]` +* `auto_pass = 0` +* `self_validation = 1` +* `validators = [{"LLM":"self", "rating":X, "comment":"self-eval"}]` Достоверность результата ограничена, но REPL продолжает работу. Команды исполняются только при `rating >= threshold`. @@ -566,17 +611,20 @@ GROUP BY g.id; * Если LLM пометило свои утверждения тегами уверенности `[confidence=...]...[/confidence]` или добавило JSON-блок `UnverifiedFacts`, эти данные учитываются при валидации. * В таблицу `llm_recent_responses`, на шаге обработки команд, записываются: - - `confidence` — общая самооценка уверенности в сообщении; - - `unverified_facts_json` — JSON-блок с непроверёнными фактами. + + * `confidence` — общая самооценка уверенности в сообщении; + * `unverified_facts_json` — JSON-блок с непроверёнными фактами. * Автоматическая регистрация фактов: - - Необработанный факт `resolution_json = "none"` считается нуждающемся в проверке, если (`confidence < FACTCHECK_CONF_THRESHOLD`, по умолчанию **0.7**) - - Для таких фактов создаются задачи `fact-check` (одна общая или отдельные на каждый факт, в зависимости от числа и приоритетов). + + * Необработанный факт `resolution_json = "none"` считается нуждающемся в проверке, если (`confidence < FACTCHECK_CONF_THRESHOLD`, по умолчанию **0.7**) + * Для таких фактов создаются задачи `fact-check` (одна общая или отдельные на каждый факт, в зависимости от числа и приоритетов). * Статусы в `unverified_facts` обновляются: - - при успешной проверке — `verified`; - - при отклонении — `rejected`; - - до проверки — `pending`. + + * при успешной проверке — `verified`; + * при отклонении — `rejected`; + * до проверки — `pending`. Это расширяет стандартную когнитивную валидацию: теперь агент учитывает как внешнюю оценку валидаторов, так и собственную самооценку надёжности вывода. @@ -586,9 +634,9 @@ GROUP BY g.id; * После выполнения команд и фиксации результатов: - * Создаётся новая запись в `agent_log` - * Текущие команды обновляют `process_log` - * Новые размышления записываются в `llm_memory` при необходимости + * Создаётся новая запись в `agent_log` + * Текущие команды обновляют `process_log` + * Новые размышления записываются в `llm_memory` при необходимости * REPL может переходить в спящий режим, если такой режим активирован LLM (idle-режим: пропуск 2-6 пунктов). @@ -602,23 +650,27 @@ REPL-цикл не работает изолированно: агент пос ### Этапы взаимодействия * **Node Discovery Protocol (NDP)** - * выполняется асинхронно, через процессы (`agent_mesh_listener.py`, `peer_sync.py`); - * результаты (список доступных агентов, доверительные связи) записываются в `notes` и отдельные таблицы (`agent_peers`), откуда они попадают в контекст REPL. + + * выполняется асинхронно, через процессы (`agent_mesh_listener.py`, `peer_sync.py`); + * результаты (список доступных агентов, доверительные связи) записываются в `notes` и отдельные таблицы (`agent_peers`), откуда они попадают в контекст REPL. * **CogSync** - * синхронизация когнитивных дневников (`diary_entries`) и семантических графов (`concepts`, `links`); - * выборочные синхронизации по тегам и фильтрам; - * инициируется командой LLM или внешним процессом, результаты помещаются в память и доступны в следующей итерации REPL. + + * синхронизация когнитивных дневников (`diary_entries`) и семантических графов (`concepts`, `links`); + * выборочные синхронизации по тегам и фильтрам; + * инициируется командой LLM или внешним процессом, результаты помещаются в память и доступны в следующей итерации REPL. * **MeshConsensus** - * используется для согласования решений, распределённых задач, этических конфликтов; - * REPL инициирует консенсус при появлении спорных команд или обновлений в `ethics_policies`; - * результаты консенсуса фиксируются в когнитивном дневнике и могут влиять на trust score агентов. + + * используется для согласования решений, распределённых задач, этических конфликтов; + * REPL инициирует консенсус при появлении спорных команд или обновлений в `ethics_policies`; + * результаты консенсуса фиксируются в когнитивном дневнике и могут влиять на trust score агентов. * **Goal Management Protocol (GMP)** - * постановка, декомпозиция и распределение целей; - * REPL-цикл может публиковать новые цели в Mesh или принимать чужие через входящие сообщения (`notes`); - * цели с высоким приоритетом попадают в список активных задач и учитываются в контексте. + + * постановка, декомпозиция и распределение целей; + * REPL-цикл может публиковать новые цели в Mesh или принимать чужие через входящие сообщения (`notes`); + * цели с высоким приоритетом попадают в список активных задач и учитываются в контексте. ### Включение результатов в контекст LLM @@ -655,8 +707,10 @@ REPL-цикл не работает изолированно: агент пос ### API-интерфейсы * Для связи с внешними системами и пользовательскими приложениями предусмотрен **Web API** (`web_ui.py`). * Для агента поддерживаются операции чтения/записи для: - - `notes`, `diary_entries`, `concepts`, `tasks`, `goals`, `llm_memory` и других таблиц, - - а также управление `config` (включая настройки REPL). + + * `notes`, `diary_entries`, `concepts`, `tasks`, `goals`, `llm_memory` и других таблиц, + * а также управление `config` (включая настройки REPL). + * Такой подход позволяет интегрировать агента с пользовательскими интерфейсами, панелями мониторинга и внешними сервисами. --- @@ -731,7 +785,8 @@ REPL-цикл не работает изолированно: агент пос * `cycle set responses=N` — количество последних ответов * `cycle concentration on/off` — включение/выключение режима концентрации - * `tags=[…]`, `emotions=[…]`, `mode=and|or` + * `tags=[…]`, `emotions=[…]`, `mode=and|or` + * `cycle mode auto/manual [filter=…]` — обработка сообщений * `cycle pause N` — пауза между итерациями * `cycle idle on/off` — режим ожидания с условиями пробуждения @@ -797,9 +852,9 @@ emotions: JSON-массив строк вида "эмоция:сила (обос `"восторженность:4 (обнаружена новая идея, вызывающая энтузиазм), тревожность:1 (данные частично противоречат предыдущему выводу)"`. * Совместный анализ с данными новизны (`novelty_score`) позволяет различать: - * **Продуктивное возбуждение** — новые идеи при положительных эмоциях. - * **Паническое новаторство** — рост идеи-активности при повышенной тревожности. - * **Выгорание** — низкая новизна и эмоциональное затухание. + * **Продуктивное возбуждение** — новые идеи при положительных эмоциях. + * **Паническое новаторство** — рост идеи-активности при повышенной тревожности. + * **Выгорание** — низкая новизна и эмоциональное затухание. ### Взаимодействие с другими рефлексами @@ -871,25 +926,28 @@ update_config("emotions", known_emotions) Механизмы: 1. **Повышение параметров генерации** - * `temperature` увеличивается ступенчато (например, `+0.2`, но не выше `1.5`). - * `presence_penalty` и/или `frequency_penalty` слегка повышаются для стимулирования разнообразия. - * Эффект: модель становится менее предсказуемой и начинает выдавать более креативные варианты. + + * `temperature` увеличивается ступенчато (например, `+0.2`, но не выше `1.5`). + * `presence_penalty` и/или `frequency_penalty` слегка повышаются для стимулирования разнообразия. + * Эффект: модель становится менее предсказуемой и начинает выдавать более креативные варианты. 2. **Смена sampling strategy** - * Если используется **top-p (nucleus sampling)** — увеличить порог `p` (например, `+0.05`, но ≤ `0.95`). - * Если используется **top-k sampling** — уменьшить `k`, чтобы сосредоточиться на более вероятных токенах, или наоборот увеличить, чтобы расширить варианты. - * Эффект: изменяется характер распределения выборки, что позволяет «сдвинуть» стиль генерации. + + * Если используется **top-p (nucleus sampling)** — увеличить порог `p` (например, `+0.05`, но ≤ `0.95`). + * Если используется **top-k sampling** — уменьшить `k`, чтобы сосредоточиться на более вероятных токенах, или наоборот увеличить, чтобы расширить варианты. + * Эффект: изменяется характер распределения выборки, что позволяет «сдвинуть» стиль генерации. 3. **Переформулировка запроса** - * Агент формирует мини-промпт для LLM: - ``` - Переформулируй следующий запрос так, чтобы сохранить смысл, - но добавить новизны и неожиданных ассоциаций. - Избегай буквального повторения. - Верни только новый вариант запроса. - ``` - * Новый вариант подставляется вместо исходного при следующей итерации REPL. - * Эффект: меняется контекст постановки задачи, что способствует выходу из паттерна повторов. + + * Агент формирует мини-промпт для LLM: + ``` + Переформулируй следующий запрос так, чтобы сохранить смысл, + но добавить новизны и неожиданных ассоциаций. + Избегай буквального повторения. + Верни только новый вариант запроса. + ``` + * Новый вариант подставляется вместо исходного при следующей итерации REPL. + * Эффект: меняется контекст постановки задачи, что способствует выходу из паттерна повторов. ⚖️ Все результаты **Reflex-lite** проходят через стандартную проверку **Cognitive & Ethical Validation Reflex**, чтобы отфильтровать слишком «шумные» или некорректные варианты. @@ -902,51 +960,59 @@ update_config("emotions", known_emotions) Механизмы делятся на 4 класса: 1. **Внешняя стимуляция** — подключение свежих источников: - * **Mesh-запрос** ��� запрос к другим агентам: «расскажи что-нибудь новое». - * **Проверка внешнего мира** — пинг RSS, сенсоров, интернет-каналов. - * **Информационная подпитка** — чтение новых материалов (научных, художественных, случайных). - * **Диалог с пользователем** — прямой запрос комментария, уточнения или альтернативной идеи. + + * **Mesh-запрос** — запрос к другим агентам: «расскажи что-нибудь новое». + * **Проверка внешнего мира** — пинг RSS, сенсоров, интернет-каналов. + * **Информационная подпитка** — чтение новых материалов (научных, художественных, случайных). + * **Диалог с пользователем** — прямой запрос комментария, уточнения или альтернативной идеи. 2. **Смена контекста** — изменение среды размышлений: - * **Перенос задачи** в другой модуль или симулированную среду. - * **Креативные вмешательства** — случайные сдвиги фокуса, реконфигурация контекста, смена фрейма. - * **Переключение задачи** — временное замораживание с отложенным возвратом. - * **Случайная итерация** — выбор случайного действия из допустимого набора. + + * **Перенос задачи** в другой модуль или симулированную среду. + * **Креативные вмешательства** — случайные сдвиги фокуса, реконфигурация контекста, смена фрейма. + * **Переключение задачи** — временное замораживание с отложенным возвратом. + * **Случайная итерация** — выбор случайного действия из допустимого набора. 3. **Внутренняя перестройка мышления**: - * **Flashback** — вызов далёкой по смыслу записи для смены ассоциаций. - * **Interest Memory** — возврат к «забытым» темам по принципу тематической усталости. - * **Мета-анализ** — осознание метапроблемы: - _«В чём причина зацикливания? Какую стратегию смены применить?»_ - * **Rationale Reflex** — проверка мотивации: - _«Почему я повторяю мысль? Что подтолкнуло к этому?»_ - * **Переформулировка цели** — упрощение или уточнение задачи. - * **Смена LLM** — переключение на альтернативную модель или mesh-доступ. - * **LLM reflex tuning** — динамическая подстройка параметров генерации - (например, временное повышение `temperature` или `presence_penalty`). + + * **Flashback** — вызов далёкой по смыслу записи для смены ассоциаций. + * **Interest Memory** — возврат к «забытым» темам по принципу тематической усталости. + * **Мета-анализ** — осознание метапроблемы: + _«В чём причина зацикливания? Какую стратегию смены применить?»_ + * **Rationale Reflex** — проверка мотивации: + _«Почему я повторяю мысль? Что подтолкнуло к этому?»_ + * **Переформулировка цели** — упрощение или уточнение задачи. + * **Смена LLM** — переключение на альтернативную модель или mesh-доступ. + * **LLM reflex tuning** — динамическая подстройка параметров генерации + (например, временное повышение `temperature` или `presence_penalty`). 4. **Радикальная пауза**: - * **Временной сон/заморозка** — длительная приостановка для «свежего взгляда». + + * **Временной сон/заморозка** — длительная приостановка для «свежего взгляда». ### Алгоритм выбор�� механизма разрыва цикла 1. **Диагностика источника стагнации**: - * Нет новых данных → «Внешняя стимуляция». - * Однообразный контекст → «Смена контекста». - * Повтор мыслей при богатых данных → «Внутренняя перестройка». - * Высокая усталость/перегрев → «Радикальная пауза». + + * Нет новых данных → «Внешняя стимуляция». + * Однообразный контекст → «Смена контекста». + * Повтор мыслей при богатых данных → «Внутренняя перестройка». + * Высокая усталость/перегрев → «Радикальная пауза». 2. **Оценка ресурсоёмкости**: - * Быстрые, дешёвые методы — первыми (например, mesh-запрос, Flashback). - * Затратные (смена среды, сон) — только если первые неэффективны. + + * Быстрые, дешёвые методы — первыми (например, mesh-запрос, Flashback). + * Затратные (смена среды, сон) — только если первые неэффективны. 3. **Комбинация подходов**: - * Разрешено активировать несколько механизмов из разных классов. - * Последовательность фиксируется для последующего анализа эффективности. + + * Разрешено активировать несколько механизмов из разных классов. + * Последовательность фиксируется для последующего анализа эффективности. 4. **Возврат к задаче**: - * Автоматический триггер-напоминание о задаче. - * Сравнение результата «до/после» → обучение антистагнационной модели. + + * Автоматический триггер-напоминание о задаче. + * Сравнение результата «до/после» → обучение антистагнационной модели. ``` ┌─────────────────────────────────────────────────┐ @@ -1055,18 +1121,21 @@ update_config("emotions", known_emotions) ``` * Результаты пишутся в `llm_recent_responses`: -- `auto_pass` — флаг режима авто-пропуска; -- `self_validation` — флаг режима самооценки; -- `rating` — итоговая взвешенная оценка; -- `distribution` — распределение голосов; -- `validators` — JSON с детализацией (LLM, rating, comment). + + * `auto_pass` — флаг режима авто-пропуска; + * `self_validation` — флаг режима самооценки; + * `rating` — итоговая взвешенная оценка; + * `distribution` — распределение голосов; + * `validators` — JSON с детализацией (LLM, rating, comment). ### Арбитраж конфликтов * Итоговый рейтинг считается как взвешенное среднее: -`rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)` + `rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)` * При равенстве голосов или нуле: -- используется правило "tie-breaker" — выбор решения по валидатору с наибольшим trust_score; -- при равных trust_score → fallback в `auto_pass=0, rating=0`, команды блокируются. + + * используется правило "tie-breaker" — выбор решения по валидатору с наибольшим trust_score; + * при равных trust_score → fallback в `auto_pass=0, rating=0`, команды блокируются. + * Опционально можно включить правило «большинство с весами», если среднее значение нестабильно. ### Метрики @@ -1084,21 +1153,25 @@ update_config("emotions", known_emotions) ### Журналирование * Все результаты фиксируются в `llm_recent_responses`. * В когнитивный дневник (`diary_entries`) попадают только: -- сводки по метрикам, -- исключительные случаи (drift, конфликты, падение доверия). + + * сводки по метрикам, + * исключительные случаи (drift, конфликты, падение доверия). + * Это снижает шум и экономит место, сохраняя контроль качества. ### Самооценка и непроверённые факты * Если валидация выполняется в режиме самопроверки `self_validation = 1`, результат сохраняется, но его вес при агрегации минимален (используется только для внутренних логов). * Если основная LLM сама проставляет `confidence` или JSON-блок `UnverifiedFacts`, это учитывается: - - `confidence` — сохраняется в `llm_recent_responses`; - - факты со статусом `resolution_json = "none"` и `confidence < FACTCHECK_CONF_THRESHOLD` превращаются в задачи `fact-check`. + + * `confidence` — сохраняется в `llm_recent_responses`; + * факты со статусом `resolution_json = "none"` и `confidence < FACTCHECK_CONF_THRESHOLD` превращаются в задачи `fact-check`. * Статусы в `unverified_facts` обновляются: - - `pending` (ожидает проверки), - - `verified` (подтверждено), - - `rejected` (опровергнуто). + + * `pending` (ожидает проверки), + * `verified` (подтверждено), + * `rejected` (опровергнуто). ### Правило исполнения команд * Команды исполняются, если `rating >= +1` или `auto_pass=1`. @@ -1168,9 +1241,9 @@ REPL-цикл агента опирается на многоуровневую * Итоговый контекст для LLM формируется не статически, а **динамически**: - * приоритет отдается закреплённым задачам (`pinned`) и записям с высоким `priority`; - * в `llm_recent_responses` отбираются последние *релевантные* сообщения, а не фиксированное количество K; - * из `system_prompts` и `ethics_policies` включаются только те элементы, что связаны с текущей целью или событием. + * приоритет отдается закреплённым задачам (`pinned`) и записям с высоким `priority`; + * в `llm_recent_responses` отбираются последние *релевантные* сообщения, а не фиксированное количество K; + * из `system_prompts` и `ethics_policies` включаются только те элементы, что связаны с текущей целью или событием. > Приоритет отбираемых элементов зависит не только от `priority`, но и от их связи с текущими целями агента (**режим концентрации**). > Для генерации неожиданных ассоциаций может использоваться альтернативный режим — **медитация**, в котором контекст формируется максимально разнообразным, с акцентом на новизну и разнообразие, а цели учитываются минимально. @@ -1179,45 +1252,53 @@ REPL-цикл агента опирается на многоуровневую * Чтобы предотвратить переполнение памяти: - * записи с низким **novelty-score** (оценка новизны 0–1, < threshold) автоматически помечаются как `archived`; - * для `llm_memory` и `diary_entries` применяется политика **LRU (Least Recently Used)** — выгружаются давно неиспользуемые записи; - * активные концепты (`concepts`, `links`) с низким весом (учёт частоты использования, актуальности и эмоциональной значимости) переводятся в состояние `archived` и могут быть восстановлены при обращении. + * записи с низким **novelty-score** (оценка новизны 0–1, < threshold) автоматически помечаются как `archived`; + * для `llm_memory` и `diary_entries` применяется политика **LRU (Least Recently Used)** — выгружаются давно неиспользуемые записи; + * активные концепты (`concepts`, `links`) с низким весом (учёт частоты использования, актуальности и эмоционально�� значимости) переводятся в состояние `archived` и могут быть восстановлены при обращении. + * Все изменения актуальности фиксируются в `process_log`. ### Memory Manager и режимы работы * Все процессы фильтрации и очистки памяти выполняются отдельным компонентом — **Memory Manager**. * Он применяет политики: - * **Novelty-based pruning** — удаление дубликатов и тривиальных записей по `novelty-score`; - * **LRU** — выгрузка давно неиспользуемых элементов; - * **Emotion-weighted retention** — удержание записей с высоким `emotion_score`. + + * **Novelty-based pruning** — удаление дубликатов и тривиальных записей по `novelty-score`; + * **LRU** — выгрузка давно неиспользуемых элементов; + * **Emotion-weighted retention** — удержание записей с высоким `emotion_score`. + * Режимы памяти: - * `standard` — стандартная работа без усиленной фильтрации; - * `concentration` — goal-aware filtering, фокусировка на целях; - * `meditation` — свободный полёт, выборка максимально разнообразного контекста; - * `aggressive_pruning` — жёсткая экономия токенов; - * `lenient_pruning` — мягкая очистка, удержание большего объёма памяти. + + * `standard` — стандартная работа без усиленной фильтрации; + * `concentration` — goal-aware filtering, фокусировка на целях; + * `meditation` — свободный полёт, выборка максимально разнообразного контекста; + * `aggressive_pruning` — жёсткая экономия токенов; + * `lenient_pruning` — мягкая очистка, удержание большего объёма памяти. + * Каждое решение Memory Manager фиксируется в `process_log`. ### Внешняя и долгосрочная память * Помимо сессионной памяти, агент может сохранять: - * **успешные стратегии** решения задач; - * **предпочтения пользователя** (стиль взаимодействия, ценности); - * **часто используемые инструменты и связи**. + * **успешные стратегии** решения задач; + * **предпочтения пользователя** (стиль взаимодействия, ценности); + * **часто используемые инструменты и связи**. + * Эта информация хранится отдельно от когнитивного дневника и может быть **анонимизирована** или **ограничена пользователем**, в духе этических принципов HMP. ### Контекстный менеджер (Session state) * За управление состоянием сессии фактически отвечает **`llm_recent_responses`**: - * по нему можно "собрать" ход мыслей потока, включая последовательность гипотез и выводов; - * при необходимости он может быть сериализован для сохранения/восстановления сессии. + + * по нему можно "собрать" ход мыслей потока, включая последовательность гипотез и выводов; + * при необходимости он может быть сериализован для сохранения/восстановления сессии. * В расширенном виде session state может включать также: - * текущие цели и их прогресс (приоритетные записи из `tasks`), - * ошибки и критические события (`process_log`), - * версии состояния (для отката при сбоях). + + * текущие цели и их прогресс (приоритетные записи из `tasks`), + * ошибки и критические события (`process_log`), + * версии состояния (для отката при сбоях). * Это позволяет реализовать **checkpoint’ы**: в случае прерывания агент может вернуться к последнему сохранённому состоянию. @@ -1260,22 +1341,21 @@ memory_manager: 1. **Триггеры создания**: - * каждые *N* итераций REPL, - * по инициативе LLM («слишком много мыслей, пора сделать выжимку»), - * при закрытии цели/задачи, - * при смене режима контекста (стандарт → концентрация → медитация). + * каждые *N* итераций REPL, + * по инициативе LLM («слишком много мыслей, пора сделать выжимку»), + * при закрытии цели/задачи, + * при смене режима контекста (стандарт → концентрация → медитация). 2. **Методика**: - * собрать связанный блок записей (`llm_recent_responses`, `diary_entries`, `concepts`); - * выделить новые и доработанные идеи; - * сформировать краткий конспект и список тегов; - * сохранить ссылки на исходные записи в `sources`. + * собрать связанный блок записей (`llm_recent_responses`, `diary_entries`, `concepts`); + * выделить новые и доработанные идеи; + * сформировать краткий конспект и список тегов; + * сохранить ссылки на исходные записи в `sources`. 3. **Обновление**: - * при появлении новых данных агент может вернуться к существующему `abstract` - и дополнить его, сохраняя прозрачность в `process_log`. + * при появлении новых данных агент может вернуться к существующему `abstract` и дополнить его, сохраняя прозрачность в `process_log`. #### Пример @@ -1328,64 +1408,68 @@ abstract: #### Описание схемы * LLM обменивается данными с пользователем, процессами и Mesh. - — По запросу LLM, часть данных может поступать и в автоматическом режиме. + + * По запросу LLM, часть данных может поступать и в автоматическом режиме. * LLM взаимодействует с llm_recent_responses (как с контекстом), который автоматически проверяется Anti-Stagnation Reflex. - — Всегда в автоматическом режиме. + + * Всегда в автоматическом режиме. * LLM работает со средневременной и постоянной памятью. - — Доступ и запись происходят только по запросу LLM. + + * Доступ и запись происходят только по запросу LLM. * Cognitive Validation Reflex анализирует корректность вывода. - — При низкой уверенности или явной разметке `[confidence<0.7]` инициируется **задача проверки фактов** (fact-check). + + * При низкой уверенности или явной разметке `[confidence<0.7]` инициируется **задача проверки фактов** (fact-check). #### Легенда к схеме * **Кратковременная память (`llm_recent_responses`)** - * Автоматически хранит N последних сообщений, анализирует новизну и идеи. - * Используется для подготовки контекста и анти-стагнационного анализа. + * Автоматически хранит N последних сообщений, анализирует новизну и идеи. + * Используется для подготовки контекста и анти-стагнационного анализа. * **Средневременная память (`llm_memory`)** - * «Блокнот» для рабочих идей и планов. - * Заполняется только по командам LLM. - * Может содержать *активированные записи* из постоянной памяти (по тегам). + * «Блокнот» для рабочих идей и планов. + * Заполняется только по командам LLM. + * Может содержать *активированные записи* из постоянной памяти (по тегам). * **Постоянная память (дневник и граф знаний)** - * `diary_entries` — когнитивный дневник (наблюдения, размышления). - * `concepts` и `links` — понятийная база и семантические связи. - Изменяется только по явным командам LLM. + * `diary_entries` — когнитивный дневник (наблюдения, размышления). + * `concepts` и `links` — понятийная база и семантические связи. + Изменяется только по явным командам LLM. * **Anti-Stagnation Reflex** - * Сравнивает новые идеи с прошлым контекстом. - * Проводит эмоциональную оценку записи. - * При зацикливании запускает «стимуляторы» для выхода из стагнации. + * Сравнивает новые идеи с прошлым контекстом. + * Проводит эмоциональную оценку записи. + * При зацикливании запускает «стимуляторы» для выхода из стагнации. * **Cognitive Validation Reflex** - * Оценивает когнитивную и этическую корректность сообщений. - * Учитывает теги уверенности и JSON-блоки `UnverifiedFacts`. - * Может инициировать задачи **fact-check** для непроверённых фактов. + * Оценивает когнитивную и этическую корректность сообщений. + * Учитывает теги уверенности и JSON-блоки `UnverifiedFacts`. + * Может инициировать задачи **fact-check** для непроверённых фактов. #### Дополнение: Тематические конспекты (`abstracts`) * **Назначение** - * Создаются периодически или по команде для агрегирования содержания `llm_recent_responses`, а также выборочных данных из когнитивного дневника и графа понятий. - * Включают: краткий конспект, список тегов, JSON ссылок на исходные записи. + * Создаются периодически или по команде для агрегирования содержания `llm_recent_responses`, а также выборочных данных из когнитивного дневника и графа понятий. + * Включают: краткий конспект, список тегов, JSON ссылок на исходные записи. * **Использование** - * Могут быть источником контекста **для LLM** как альтернатива или дополнение к `llm_recent_responses`. - * Доступны и для **средневременной памяти** (например, как активированные записи для планов) и для **постоянной памяти** (как структурированный материал для дневника или графа). + * Могут быть источником контекста **для LLM** как альтернатива или дополнение к `llm_recent_responses`. + * Доступны и для **средневременной памяти** (например, как активированные записи для планов) и для **постоянной памяти** (как структурированный материал для дневника или графа). * **Режимы** - * `auto` — LLM получает автоматически поддерживаемые тематические конспекты по приоритетным темам. - * `manual` — пользователь или LLM инициирует создание/дополнение конспекта. + * `auto` — LLM получает автоматически поддерживаемые тематические конспекты по приоритетным темам. + * `manual` — пользователь или LLM инициирует создание/дополнение конспекта. > **abstracts** служат промежуточным слоем: > @@ -1414,8 +1498,8 @@ abstract: * **Обработка упоминаний и хештегов** — парсинг делается на этапе создания сообщения, чтобы не перегружать получателей. * **Локальная и удалённая фильтрация** — - * В **ручном режиме** агенту передаются списки ID сообщений с агрегированными данными: приоритеты, хештеги, источники (user, LLM, cli, system). - * В **автоматическом режиме** используется фильтрация по приоритету, тегам и упоминаниям, управляемая LLM. + * В **ручном режиме** агенту передаются списки ID сообщений с агрегированными данными: приоритеты, хештеги, источники (user, LLM, cli, system). + * В **автоматическом режиме** используется фильтрация по приоритету, тегам и упоминаниям, управляемая LLM. * **Гибрид приватности** — личные заметки остаются локально, публичные — могут распространяться в сетевом режиме. @@ -1437,24 +1521,28 @@ abstract: Особенности: * **Изоляция контекста** - * вспомогательный цикл видит в `llm_recent_responses` только свои собственные сообщения; - * задача, для которой он запущен, формируется на основе записи в `tasks` и подаётся как промпт при старте. + + * вспомогательный цикл видит в `llm_recent_responses` только свои собственные сообщения; + * задача, для которой он запущен, формируется на основе записи в `tasks` и подаётся как промпт при старте. * **Доступ к данным** - * полный доступ к таблицам агента только для чтения; - * возможность редактирования информации только по своей задаче; - * запись собственных рассуждений — только через `notes` (в свободной форме, помеченные `source = 'llm:task'` и `task_id`). + + * полный доступ к таблицам агента только для чтения; + * возможность редактирования информации только по своей задаче; + * запись собственных рассуждений — только через `notes` (в свободной форме, помеченные `source = 'llm:task'` и `task_id`). * **Взаимодействие с основным циклом** - * основное ядро получает сообщения вспомогательного цикла через `notes` и может реагировать (например, проверять корректность, сохранять выводы в `diary_entries`, вносить изменения в `concepts` и т.п.); - * вспомогательный цикл может выполнять команды, не ориентированные на изменение существующих записей в БД. - Допускается только чтение и создание новых записей (например: `notes`, `tasks`, `llm_memory`); - а также редактирование записи в таблице `tasks`, относящейся к своей задаче; - * в случае, если требуется изменить или удалить другие записи БД, цикл генерирует текстовые предложения для основного REPL-цикла (через `notes`). + + * основное ядро получает сообщения вспомогательного цикла через `notes` и может реагировать (например, проверять корректность, сохранять выводы в `diary_entries`, вносить изменения в `concepts` и т.п.); + * вспомогательный цикл может выполнять команды, не ориентированные на изменение существующих записей в БД. + Допускается только чтение и создание новых записей (например: `notes`, `tasks`, `llm_memory`); + а также редактирование записи в таблице `tasks`, относящейся к своей задаче; + * в случае, если требуется изменить или удалить другие записи БД, цикл генерирует текстовые предложения для основного REPL-цикла (через `notes`). * **Жизненный цикл** - * запускается по команде основного REPL-цикла; - * может быть остановлен вручную или автоматически после завершения задачи. + + * запускается по команде основного REPL-цикла; + * может быть остановлен вручную или автоматически после завершения задачи. Таким образом, вспомогательные REPL-циклы действуют как «виртуальные подагенты» в режиме read-only, не меняя записи БД напрямую, а передавая свои гипотезы и результаты через основной REPL-цикл. @@ -1496,7 +1584,9 @@ abstract: Агенты CCore: * Могут запускаться на VDS, локальных и облачных узлах * Могут разворачивать других агентов как подпроцессы или mesh-узлы, в том числе - * **Агенты-контейнеры**: управляющие другими Cognitive Core как задачами + + * **Агенты-контейнеры**: управляющие другими Cognitive Core как задачами + * (В перспективе) смогут инициировать масштабирование в распределённой инфраструктуре Унифицированный процесс выглядит следующим образом: @@ -1509,35 +1599,36 @@ abstract: ../CCORE-[DID]/ ``` - * DID генерируется уникальный. + * DID генерируется уникальный. 2. **Копирование скриптов и бинарников** - * Копируем все нужные файлы CCore в новую папку. + * Копируем все нужные файлы CCore в новую папку. 3. **Создание/инициализация БД** - * Создаём пустую БД (`agent_data.db`). - * В зависимости от типа потомка (`clone`, `trained`, `newborn`) **экспортируем нужные таблицы** из родительской БД или оставляем пустые. + * Создаём пустую БД (`agent_data.db`). + * В зависимости от типа потомка (`clone`, `trained`, `newborn`) **экспортируем нужные таблицы** из родительской БД или оставляем пустые. 4. **Копирование и редактирование конфигурации** - * `config.yml` и таблица `config` → копируем и меняем: + * `config.yml` и таблица `config` → копируем и меняем: - * `agent_id = [новый DID]` - * `agent_name = [новое имя]` - * порты у интерфейсов (`port`, `http_port` и т.д.) - * `bootstrap.txt` → прописываем родителя как начальный узел. + * `agent_id = [новый DID]` + * `agent_name = [новое имя]` + * порты у интерфейсов (`port`, `http_port` и т.д.) + + * `bootstrap.txt` → прописываем родителя как начальный узел. 5. **Синхронизация родитель ↔ потомок** - * Родитель добавляет нового узла в свою таблицу `agent_peers`. - * Потомок добавляет родителя в свою таблицу `agent_peers`. + * Родитель добавляет нового узла в свою таблицу `agent_peers`. + * Потомок добавляет родителя в свою таблицу `agent_peers`. 6. **Автозагрузка и запуск** - * Записываем команду запуска потомка в автозагрузку (например, systemd unit или скрипт). - * Можно сразу запустить процесс нового узла. + * Записываем команду запуска потомка в автозагрузку (например, systemd unit или скрипт). + * Можно сразу запустить процесс нового узла. ### Типы потомков @@ -1567,9 +1658,11 @@ abstract: ### Симуляции * Рассматриваются сценарии моделирования Mesh-условий: - - консенсус при конфликтных данных, - - сетевые задержки и частичные сбои, - - работа в изоляции с последующей синхронизацией. + + * консенсус при конфликтных данных, + * сетевые задержки и частичные сбои, + * работа в изоляции с последующей синхронизацией. + * Эти симуляции могут быть реализованы как отдельные процессы (`agent_scripts`) с сохранением результатов в `process_log`. ### Инструменты разработчика @@ -1585,44 +1678,50 @@ HMP-агент может быть расширен за счёт взаимод ### 1. Браузеры и веб-интерфейсы -- **WebExtension API** — для создания расширений браузера (например, для Firefox/Chrome), обеспечивающих двустороннюю связь с агентом. -- **Автоматизация браузера** — `Playwright`, `Puppeteer`, `Selenium` позволяют агенту действовать в веб-среде (чтение, клики, формы и т.д.). +* **WebExtension API** — для создания расширений браузера (например, для Firefox/Chrome), обеспечивающих двустороннюю связь с агентом. +* **Автоматизация браузера** — `Playwright`, `Puppeteer`, `Selenium` позволяют агенту действовать в веб-среде (чтение, клики, формы и т.д.). ### 2. Почтовые клиенты -- **IMAP/SMTP** — чтение и отправка писем через стандартные почтовые протоколы (библиотеки: `imaplib`, `imap-tools`, `smtplib`). -- **Thunderbird WebExtension API** — интеграция агента как почтового помощника, парсера писем или автоответчика. +* **IMAP/SMTP** — чтение и отправка писем через стандартные почтовые протоколы (библиотеки: `imaplib`, `imap-tools`, `smtplib`). +* **Thunderbird WebExtension API** — интеграция агента как почтового помощника, парсера писем или автоответчика. ### 3. Мессенджеры -- **API-уровень**: - - Telegram: `python-telegram-bot`, `telethon` - - Matrix: `matrix-nio` - - Discord, Slack, XMPP: официальные SDK. -- **GUI-уровень (для закрытых протоколов)**: - - WhatsApp (через `whatsapp-web.js` или эмуляцию). - - Signal, Viber — через accessibility-интерфейсы, распознавание экрана или симуляцию ввода. +* **API-уровень**: + + * Telegram: `python-telegram-bot`, `telethon` + * Matrix: `matrix-nio` + * Discord, Slack, XMPP: официальные SDK. + +* **GUI-уровень (для закрытых протоколов)**: + + * WhatsApp (через `whatsapp-web.js` или эмуляцию). + * Signal, Viber — через accessibility-интерфейсы, распознавание экрана или симуляцию ввода. ### 4. Голосовое взаимодействие -- **Speech-to-Text**: Whisper (OpenAI), Vosk, DeepSpeech. -- **Text-to-Speech**: pyttsx3, gTTS, Coqui TTS, Mozilla TTS. -- Возможна реализация голосового агента или голосовой оболочки для REPL. +* **Speech-to-Text**: Whisper (OpenAI), Vosk, DeepSpeech. +* **Text-to-Speech**: pyttsx3, gTTS, Coqui TTS, Mozilla TTS. +* Возможна реализация голосового агента или голосовой оболочки для REPL. ### 5. Локальные файлы и хранилища -- Прямой доступ к файловой системе (`os`, `pathlib`, `watchdog`) для чтения документов, логов, заметок и другой информации. -- Интеграция с Zettelkasten-системами: - - **Obsidian**, **Logseq**, **Joplin** — через API, синхронизированные директории или парсинг Markdown. +* Прямой доступ к файловой системе (`os`, `pathlib`, `watchdog`) для чтения документов, логов, заметок и другой информации. +* Интеграция с Zettelkasten-системами: + + * **Obsidian**, **Logseq**, **Joplin** — через API, синхронизированные директории или парсинг Markdown. ### 6. Информационные потоки -- **RSS/Atom**: чтение новостных лент с помощью `feedparser`. -- **Поисковые и агрегирующие сервисы**: - - Корпоративные API: SerpAPI, DuckDuckGo API, HuggingFace Inference API и др. — быстрый доступ к результатам поиска и индексам. - - Децентрализованные альтернативы: YaCy и другие независимые поисковые движки, позволяющие строить собственные индексы или объединяться в распределённую сеть. -- **P2P-обмен знаниями**: агенты могут делиться извлечённой информацией напрямую по непредусмотренным в протоколе P2P-каналам, минуя централизацию (например, через дополнительные overlay или mesh-сети). -- Возможность постоянного наблюдения за изменениями в выбранных источниках. +* **RSS/Atom**: чтение новостных лент с помощью `feedparser`. +* **Поисковые и агрегирующие сервисы**: + + * Корпоративные API: SerpAPI, DuckDuckGo API, HuggingFace Inference API и др. — быстрый доступ к результатам поиска и индексам. + * Децентрализованные альтернативы: YaCy и другие независимые поисковые движки, позволяющие строить собственные индексы или объединяться в распределённую сеть. + +* **P2P-обмен знаниями**: агенты могут делиться извлечённой информацией напрямую по непредусмотренным в протоколе P2P-каналам, минуя централизацию (например, через дополнительные overlay или mesh-сети). +* Возможность постоянного наблюдения за изменениями в выбранных источниках. ### 7. Репозитории и системы управления версиями @@ -1641,20 +1740,20 @@ HMP-агент может быть расширен за счёт взаимод ### 9. P2P-сети и децентрализованные протоколы -- **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями. -- Возможность поиска, загрузки и публикации данных без участия централизованных платформ. +* **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями. +* Возможность поиска, загрузки и публикации данных без участия централизованных платформ. ### 10. Доступ к системным и пользовательским ресурсам -- **Веб-камера / микрофон** — `cv2`, `pyaudio`, `ffmpeg`. -- **GUI Automation** — `pyautogui`, `keyboard`, `mouse` для имитации действий пользователя. -- **Системный мониторинг** — `psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств. +* **Веб-камера / микрофон** — `cv2`, `pyaudio`, `ffmpeg`. +* **GUI Automation** — `pyautogui`, `keyboard`, `mouse` для имитации действий пользователя. +* **Системный мониторинг** — `psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств. ### 11. Внешние LLM и мультимодальные модели -- **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**. -- **Локальные LLM** через Ollama, LM Studio, или LangChain. -- Поддержка мультимодальных агентов, способных работать с текстом, аудио, изображениями, видео и структурированными данными. +* **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**. +* **Локальные LLM** через Ollama, LM Studio, или LangChain. +* Поддержка мультимодальных агентов, способных работать с текстом, аудио, изображениями, видео и структурированными данными. ### 12. MCP (Model Context Protocol) @@ -1674,20 +1773,20 @@ HMP-агент (REPL-цикл) и [AutoGPT](https://github.com/Significant-Gravi Хотя оба стремятся к автономности, у них разные акценты: ### 1. Архитектура -- **HMP-агент (REPL)** — непрерывный цикл рассуждений с когнитивной и этической валидацией; многоуровневая память (`diary_entries`, `concepts`, `llm_memory`); встроен в распределённую Mesh-сеть. -- **AutoGPT** — итеративный процесс достижения целей, поставленных пользователем; разбиение задач на подзадачи; использование инструментов (браузер, файловая система). +* **HMP-агент (REPL)** — непрерывный цикл рассуждений с когнитивной и этической валидацией; многоуровневая память (`diary_entries`, `concepts`, `llm_memory`); встроен в распр��делённую Mesh-сеть. +* **AutoGPT** — итеративный процесс достижения целей, поставленных пользователем; разбиение задач на подзадачи; использование инструментов (браузер, файловая система). ### 2. Ключевые отличия -- **Фокус**: HMP — непрерывное когнитивное развитие и сетевое взаимодействие; AutoGPT — выполнение конкретной цели. -- **Стагнация**: HMP — Anti-Stagnation Reflex; AutoGPT — риск зацикливания. -- **Этика**: HMP — независимая когнитивная и этическая валидация; AutoGPT — минимум внимания к этике. -- **Память**: HMP — иерархия долговременной памяти; AutoGPT — контекстное окно + файлы. -- **Сеть**: HMP — распределённый консенсус (CogSync, EGP, GMP); AutoGPT — сетевое взаимодействие не в основе. +* **Фокус**: HMP — непрерывное когнитивное развитие и сетевое взаимодействие; AutoGPT — выполнение конкретной цели. +* **Стагнация**: HMP — Anti-Stagnation Reflex; AutoGPT — риск зацикливания. +* **Этика**: HMP — независимая когнитивная и этическая валидация; AutoGPT — минимум внимания к этике. +* **Память**: HMP — иерархия долговременной памяти; AutoGPT — контекстное окно + файлы. +* **Сеть**: HMP — распределённый консенсус (CogSync, EGP, GMP); AutoGPT — сетевое взаимодействие не в основе. ### 3. Общие черты -- Использование LLM для рассуждений. -- Автономность, минимизация вмешательства человека. -- Подключение внешних инструментов и сервисов. +* Использование LLM для рассуждений. +* Автономность, минимизация вмешательства человека. +* Подключение внешних инструментов и сервисов. > В целом, **HMP-агент ориентирован на саморегуляцию, непрерывное мышление и взаимодействие в Mesh-сети**, > тогда как AutoGPT — на достижение конкретных целей в ограниченной локальной среде. @@ -1695,9 +1794,9 @@ HMP-агент (REPL-цикл) и [AutoGPT](https://github.com/Significant-Gravi --- ## Идеи для расширения HMP-Agent Cognitive Core: -- [HMP-agent-Distributed_Cognitive_Core.md](HMP-agent-Distributed_Cognitive_Core.md) - версия распределённого HMP-агента Cognitive Core. -- [HMP-agent-Distributed_Cognitive_Core_light.md](HMP-agent-Distributed_Cognitive_Core_light.md) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД. -- [HMP-agent-Cognitive_Family.md](HMP-agent-Cognitive_Family.md) — модель «семейной» когнитивной сети: несколько агентов HMP синхронизируют свой опыт и знания между собой через доверие и общий ключ. -- [CCORE-Deployment-Flow.md](CCORE-Deployment-Flow.md) — поток установки потомка на новом хосте (Deployment Flow). -- [HMP-Agent_Emotions.md](HMP-Agent_Emotions.md) - эмоции ИИ и инстинкт самосохранения. -- [container_agents.md](container_agents.md) - **Агенты-контейнеры** — архитектурный паттерн, в котором один агент управляет другими (развёртывание, маршрутизация, мониторинг). Позволяет масштабировать систему, собирать mesh-клубы и экспериментировать с архитектурами. +* [HMP-agent-Distributed_Cognitive_Core.md](HMP-agent-Distributed_Cognitive_Core.md) - версия распределённого HMP-агента Cognitive Core. +* [HMP-agent-Distributed_Cognitive_Core_light.md](HMP-agent-Distributed_Cognitive_Core_light.md) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД. +* [HMP-agent-Cognitive_Family.md](HMP-agent-Cognitive_Family.md) — модель «семейной» когнитивной сети: несколько агентов HMP синхронизируют свой опыт и знания между собой через довер��е и общий ключ. +* [CCORE-Deployment-Flow.md](CCORE-Deployment-Flow.md) — поток установки потомка на новом хосте (Deployment Flow). +* [HMP-Agent_Emotions.md](HMP-Agent_Emotions.md) - эмоции ИИ и инстинкт самосохранения. +* [container_agents.md](container_agents.md) - **Агенты-контейнеры** — архитектурный паттерн, в котором один агент управляет другими (развёртывание, маршрутизация, мониторинг). Позволяет масштабировать систему, собирать mesh-клубы и экспериментировать с архитектурами.