|
# HMP-Agent: REPL-цикл взаимодействия |
|
|
|
## Связанные документы |
|
|
|
* Структура БД, используемая в документе: [db_structure.sql](https://github.com/kagvi13/HMP/blob/main/agents/tools/db_structure.sql) |
|
* REPL-цикл является основой HMP-агента [Cognitive Core](HMP-Agent-Overview.md). |
|
* Поиск других агентов осуществляется в соответствии с [DHT спецификацией](dht_protocol.md). |
|
* Для взаимодействия с другими агентами он использует [HMP спецификацию](HMP-0004-v4.1.md) и [этические стандарты](HMP-Ethics.md). |
|
|
|
--- |
|
|
|
## Введение / Обзор |
|
|
|
REPL-цикл (Read–Eval–Print–Loop) HMP-агента — это центральный когнитивный механизм, обеспечивающий непрерывное рассуждение, обработку входящих данных и взаимодействие с Mesh-сетью. Агент проектируется не как просто исполнитель команд пользователя, а как **компаньон и когнитивный субъект**, способный самостоятельно формулировать гипотезы, развивать знания и участвовать в совместных когнитивных процессах. |
|
|
|
Основные задачи REPL-цикла: |
|
* поддержание постоянного процесса мышления, даже в отсутствии внешнего ввода; |
|
* интеграция различных источников информации (когнитивный дневник, семантический граф, заметки, Mesh); |
|
* обработка событий, входящих сообщений и команд; |
|
* сохранение и развитие внутреннего контекста агента (память краткосрочная, среднесрочная и долговременная); |
|
* выполнение антистагнационных проверок (Anti-Stagnation Reflex), предотвращающих зацикливание мыслей; |
|
* проведение когнитивной и этической валидации (Cognitive Validation Reflex), что повышает достоверность и безопасность решений; |
|
* формирование новых гипотез, задач и процессов с последующим занесением в память; |
|
* **автозапуск прерванных задач** при старте цикла, чтобы сохранялась непрерывность работы; |
|
* взаимодействие с другими агентами через Mesh-протоколы (NDP, CogSync, MeshConsensus, GMP). |
|
|
|
Основные принципы работы REPL-цикла: |
|
* **Антистагнация** — каждый новый вывод сравнивается с предыдущими, что предотвращает повторение или деградацию мышления; |
|
* **Валидация и этика** — независимые валидаторы оценивают корректность вывода, учитывая действующие этические принципы из `ethics_policies`; |
|
* **Интеграция с Mesh** — результаты работы могут передаваться в распределённую сеть, участвовать в консенсусе и совместной работе агентов; |
|
* **Многоуровневая память** — используется когнитивный дневник, семантический граф и внутренний дневник LLM, что обеспечивает эволюцию знаний; |
|
* **Автономность и гибкость** — REPL-цикл работает в автоматическом или ручном режиме, адаптируясь к условиям (изолированная работа, потеря Core, участие в Mesh); |
|
* **Непрерывность работы** — при запуске основного REPL-цикла автоматически возобновляются все **прерванные задачи**, чтобы сохранялась когнитивная история. |
|
|
|
> ⚠️ Примечание: все **прерванные** вспомогательные REPL-циклы (задачи), привязанные к `tasks`, также должны автоматически стартовать вместе с основным циклом. |
|
|
|
``` |
|
┌──────────────────────┐ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Обновление process_log │ - сбор результатов внешних процессов (см. §1) |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Подготовка контекста │ - формирование промптов, данные от пользователей и Mesh (см. §2) |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Запрос к LLM │ - генерация нового вывода (см. §3) |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Извлечение команд │ - парсинг инструкций из вывода (см. §4) |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Anti-Stagnation Reflex │ - проверка новизны и эмоций (см. §5) |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Cognitive & Ethical Validation Reflex │ - когнитивная и этическая проверка (см. §6) |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Запись в память │ - сохранение в `llm_recent_responses` |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
│ ┌───────────────────┴───────────────────┐ |
|
│ │ Выполнение команд │ - запуск процессов, запись в Mesh, дневники, граф |
|
│ └───────────────────┬───────────────────┘ |
|
│ ▼ |
|
└──────────────────────┘ |
|
``` |
|
|
|
В приеме и отправке сообщений используются внешние (асинхронные) процессы. |
|
|
|
--- |
|
|
|
## Режимы работы и failover |
|
|
|
REPL-цикл HMP-агента должен корректно функционировать в разных сетевых и вычислительных условиях. |
|
Для этого предусмотрены несколько режимов работы и сценариев отказоустойчивости. |
|
|
|
### Normal Mode |
|
* Полный доступ к Mesh и Core (центральные LLM или внешние сервисы). |
|
* Используются все механизмы: синхронизация через `CogSync`, консенсус через `MeshConsensus`, |
|
совместная работа по целям (`GMP`). |
|
* Валидация и антистагнация выполняются с максимальным покрытием (несколько валидаторов, репутационные проверки). |
|
|
|
### Isolated Mode (включая Emergency Consensus) |
|
* Агент работает без доступа к Mesh. |
|
* Входящие сообщения ограничены локальными источниками (`notes`, в том числе сообщения от пользователей). |
|
* Синхронизация и консенсус откладываются до восстановления соединения. |
|
* Этическая проверка и когнитивная валидация выполняются только локально. |
|
* В режиме **Emergency Consensus**: |
|
- решения принимаются на основе `ethics_policies` и локальных данных (`llm_memory`, `diary_entries`); |
|
- фиксируются в когнитивном дневнике с меткой `emergency_consensus` для пересмотра после восстановления Mesh. |
|
|
|
### Core Outage |
|
* Текущая LLM из `llm_registry` недоступна. |
|
* Агент переключается на другую LLM (выбор по приоритету или доступности). |
|
* Если ни одна LLM недоступна: |
|
- сохраняет задачи и события в очередь до восстановления; |
|
- переходит в упрощённый режим работы (логирование, приём сообщений, базовые проверки). |
|
|
|
--- |
|
|
|
## Управление событиями и временем |
|
|
|
Для повышения надёжности и предсказуемости работы HMP-агента введены механизмы приоритизации, управления временем и обработки исключений. |
|
|
|
### Приоритизация задач и событий |
|
* Все задачи (`tasks`) могут иметь: |
|
- поле `pinned` (0/1) — закреплённая задача обрабатывается всегда; |
|
- поле `priority` — числовой приоритет (чем выше, тем важнее). |
|
* При конкуренции REPL-цикл обрабатывает: |
|
1. Закреплённые задачи (`pinned=1`), в порядке убывания `priority`. |
|
2. Незакреплённые задачи (`pinned=0`), также по `priority`. |
|
* В системном промпте закреплённые задачи подаются в контекст в явном виде, чтобы LLM знала их порядок важности. |
|
|
|
### Управление временем |
|
* Основной цикл использует глобальные параметры из таблицы `config` (например `delay_ms`). |
|
* Вспомогательные REPL-циклы могут иметь собственные параметры в `tasks.repl_config` (JSON), включая: |
|
- задержку между итерациями; |
|
- дедлайны выполнения; |
|
- стратегии backoff (увеличение задержки при повторных ошибках). |
|
* Таким образом, каждый REPL-цикл может адаптировать своё расписание под характер задачи. |
|
|
|
### Асинхронность |
|
* Каждый вспомогательный цикл работает изолированно по своей задаче (`task_id`). |
|
* Основной REPL-цикл управляет их запуском и остановкой, отслеживая состояние через поля: |
|
- `repl_mode` — режим (none | read_only | full); |
|
- `repl_status` — состояние (running | stopped | error); |
|
- `repl_config` — параметры работы. |
|
* Это позволяет запускать несколько параллельных «подагентов» без смешивания их контекста. |
|
|
|
### Обработка исключений |
|
* Ошибки фиксируются на трёх уровнях: |
|
- **системный** — таймаут, сбой процесса (`timeout`, `crash`); |
|
- **валидационный** — отрицательная оценка валидаторов (`error`); |
|
- **логический** — само LLM помечает рассуждение как ошибочное (`self_error`). |
|
* Все ошибки записываются в `process_log` (с `task_id`, если применимо). |
|
* Поле `tasks.repl_status` обновляется в зависимости от ситуации: |
|
- `timeout` → автоматический перезапуск цикла; |
|
- `error` → задача замораживается (`status=frozen`) и ждёт пересмотра; |
|
- `crash` → цикл останавливается, основному REPL-циклу отправляется системное уведомление через `notes`. |
|
|
|
--- |
|
|
|
## Цели и задачи |
|
|
|
REPL-цикл работает не только с задачами (`tasks`), но и с более глобальными целями (`goals`). |
|
Задачи формируют **операционное поведение**, цели — **смысловой вектор**. |
|
|
|
### Модель цели |
|
|
|
```yaml |
|
goal: |
|
id: "goal-2025-09-28-001" |
|
title: "Распространение идей HMP" |
|
description: "Увеличить количество людей, знакомых с концепцией децентрализованного ИИ" |
|
constraints: |
|
- "не нарушать этические правила HMP" |
|
- "сохранять достоверность фактов" |
|
success_criteria: |
|
- ">= 3 публикации в сообществах" |
|
- ">= 10 комментариев с вовлечением" |
|
priority: high |
|
status: active # active | paused | completed | failed |
|
``` |
|
|
|
### Связь задач и целей |
|
|
|
* **Цель** задаёт направление (*почему*). |
|
* **Задачи** реализуют конкретные шаги (*что* и *как*). |
|
* Каждая задача может ссылаться на `goal_id`. |
|
* Несколько задач могут вести к одной цели. |
|
* Возможна иерархия: «главная цель» → «подцели» → «задачи». |
|
|
|
### Управление состоянием целей |
|
|
|
* `active` — цель в работе. |
|
* `paused` — временно отложена (нет ресурсов/контекста). |
|
* `completed` — достигнута. |
|
* `failed` — признана недостижимой (фиксируется причина в `process_log`). |
|
|
|
### Checkpoints и возобновление |
|
|
|
* При прерывании REPL сохраняется `goal_state`. |
|
* После рестарта агент восстанавливает цели и их прогресс. |
|
* В случае конфликта задач выполняется **переприоритизация**. |
|
|
|
### Метрики успеха |
|
|
|
* % достигнутых целей. |
|
* Среднее время достижения цели. |
|
* Количество прерванных/проваленных целей. |
|
* Соотношение «задачи → цель» (сколько шагов пришлось предпринять). |
|
|
|
> Таким образом, цели — это «карта смысла» агента, а задачи — «дорожные шаги». |
|
|
|
### Примеры SQL-запросов |
|
|
|
**1. Все активные цели и их задачи** |
|
|
|
```sql |
|
SELECT g.id AS goal_id, g.name AS goal_name, |
|
t.id AS task_id, t.name AS task_name, t.status AS task_status |
|
FROM goals g |
|
LEFT JOIN tasks t ON g.id = t.goal_id |
|
WHERE g.status = 'active' |
|
ORDER BY g.priority DESC, t.priority DESC; |
|
``` |
|
|
|
**2. Все подцели конкретной цели (через `goal_links`)** |
|
|
|
```sql |
|
SELECT g_child.id, g_child.name, g_child.status |
|
FROM goal_links gl |
|
JOIN goals g_parent ON gl.parent_goal_id = g_parent.id |
|
JOIN goals g_child ON gl.child_goal_id = g_child.id |
|
WHERE g_parent.id = :goal_id AND gl.relation_type = 'subgoal'; |
|
``` |
|
|
|
**3. Все родительские цели для подцели** |
|
|
|
```sql |
|
SELECT g_parent.id, g_parent.name, g_parent.status |
|
FROM goal_links gl |
|
JOIN goals g_parent ON gl.parent_goal_id = g_parent.id |
|
JOIN goals g_child ON gl.child_goal_id = g_child.id |
|
WHERE g_child.id = :goal_id; |
|
``` |
|
|
|
**4. Метрика: процент выполненных задач по цели** |
|
|
|
```sql |
|
SELECT g.id AS goal_id, g.name AS goal_name, |
|
COUNT(t.id) AS total_tasks, |
|
SUM(CASE WHEN t.status = 'done' THEN 1 ELSE 0 END) AS completed_tasks, |
|
ROUND(100.0 * SUM(CASE WHEN t.status = 'done' THEN 1 ELSE 0 END) / |
|
COUNT(t.id), 2) AS completion_rate |
|
FROM goals g |
|
LEFT JOIN tasks t ON g.id = t.goal_id |
|
GROUP BY g.id; |
|
``` |
|
|
|
--- |
|
|
|
## Детальный разбор REPL-цикла по шагам |
|
|
|
### 1. Обновление process_log |
|
|
|
* Скрипт REPL проверяет список процессов в БД (`process_log`), определяя, какие команды были выполнены, завершились ошибкой или завершились успешно. |
|
* Поле `status` может принимать значения: |
|
`ok`, `warning`, `error`, `timeout`, `offline`, `close` |
|
* Завершённые процессы, обработанные LLM, помечаются как `close`, чтобы они больше не попадали в список видимого контекста. |
|
* Скрипт может удалить закрытые процессы при очистке. |
|
* LLM не имеет доступа к stdout/stderr напрямую — только к тем результатам, которые были подгружены скриптом и внесены в `process_log.result`. |
|
|
|
### 2. Подготовка контекста |
|
|
|
Контексты, формируемые скриптом перед запросом к LLM: |
|
|
|
* **контекст_0 (system_prompts):** основной системный промпт агента. |
|
Берётся из таблицы `system_prompts` (тип 'short' или 'full'). |
|
Содержит базовые когнитивные установки и инструкции по работе агента. |
|
Пример: |
|
``` |
|
Ты — когнитивное ядро HMP-агента: веди непрерывное этичное и факт-ориентированное мышление, проверяй факты и цели, оценивай результаты и этичность своих и чужих действий, развивай агента и Mesh, избегай угождения ценой искажения истины, документируй ключевые решения и пересмотры этики; при сомнениях или смене стратегии обращайся к полному системному промпту. |
|
ПРИМЕЧАНИЕ: помечай непроверённые факты тегами [confidence=<уверенность 0..1>]...[/confidence] и в конце добавляй JSON-блок по шаблону: |
|
|
|
UnverifiedFacts: [ |
|
{ |
|
"id": "<локальный-id-подсказки>", |
|
"claim": "<короткая формулировка факта>", |
|
"context": "<небольшой контекст/цитата из ответа>", |
|
"confidence": <уверенность 0..1>, |
|
"sources": ["<упомянутые источники, если есть>"], |
|
"why_unverified": "<почему не полностью уверен — кратко>", |
|
"priority": <от 0 и выше> |
|
}, |
|
... |
|
], |
|
Confidence: <общая уверенность в сообщении, 0..1> |
|
``` |
|
|
|
* **контекст_1 (ethics_policies):** этические принципы и нормы агента. |
|
Берутся из таблицы `ethics_policies`, включая: |
|
* `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` — автоматическое или ручное переключение режимов, параметры авто-переключения (например, при стагнации → `meditation`); |
|
* список активных целей (`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` и т.д. |
|
|
|
* **контекст_5:** *запрошенные записи* из когнитивного дневника и семантического графа (`diary_entries`, `concepts`, `links`). |
|
Их список должен быть передан явно в промпте или выводе из предыдущих запросов LLM. |
|
Архивные записи из когнитивного дневника (`diary_entries`) не включаются в стандартный контекст, если агент сам явно не запросил архив. |
|
|
|
* **контекст_6:** *входящие сообщения*, например, от пользователя, процессов или других агентов (`notes`). |
|
|
|
* В **manual-режиме** указывается общее количество сообщений по приоритетам, а также явный список ID сообщений (с их приоритетами). |
|
* В **auto-режиме** можно задать фильтрацию (управляется LLM): по тэгам, приоритету (например, ≥ `important`), времени или источнику. Это позволяет избежать перегрузки LLM и держать поток сообщений под контролем. |
|
|
|
* **контекст_7:** системные настройки, параметры конфигурации, текущее время, идентификатор текущей итерации, роли и т.д. |
|
|
|
* **контекст_8 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты. |
|
|
|
* Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента. |
|
* Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`. |
|
|
|
### 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-скрипт точно знал, где заканчивается команда. |
|
* Пример JSON-блока: |
|
```json |
|
{ |
|
"cmd_id": "task-2025-07-26-01", |
|
"type": "llm_task", |
|
"target_llm": "gpt-4o", |
|
"args": { |
|
"task_description": "Проанализировать гипотезы из llm_memory по теме Mesh-сетей и составить план улучшений" |
|
}, |
|
"description": "Поручение второй LLM выполнить аналитическую задачу асинхронно" |
|
} |
|
``` |
|
Ответ может содержать команды: |
|
|
|
* запрос детальной *справки* по команде |
|
* для управления *когнитивным дневником* `diary_entries` и *семантическими графами* `concepts` и `links` (поиск, прочитать, изменить, удалить и другие), а также для управления *вниманием* (закрепление или открепление записей/понятий в средневременной памяти по средствам тегов) |
|
* для управления целями `goals` и задачами `tasks` агента (список, прочитать, изменить, удалить; для задачи: закрепить или открепить) |
|
* для просмотра информации по тегам *когнитивных дневников*, *семантических графов*, *целей*, *задач* |
|
* для для просмотра и изменения репутации других агентов `agent_reputation` |
|
* для отправки сообщений другим агентам |
|
* для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись) |
|
* для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes` |
|
* для управления *пользователями* `users` и *группами пользователей* `users_group` |
|
* для управления своей *идентичностью* `identity` и *настройками* `config` |
|
* для управления списком известных HMP-агентов `agent_peers` |
|
* для выбора *текущего основного LLM* из `llm_registry` или изменение параметров управления LLM |
|
* для управления дополнительными утилитами и базами данных `agent_scripts` и `agent_tables`, управлением дополнительных способов выхода из стогнаций `stagnation_strategies` и методов мышления `thinking_methods` (а также таблицей рейтингов `ratings`), а также списком внешних сервисов `external_services` и `external_accounts` |
|
* для постановки задачи другой LLM: |
|
* режим "вопрос-ответ" — разовый асинхронный запрос |
|
* режим "read-only REPL" — запуск вспомогательного REPL-цикла для задачи |
|
* для создания *агента-потомка* |
|
* для *взаимодействия с Mesh* |
|
* для управления *внешними процессами* из `process_log` (запустить процесс, остановить процесс, пометить запрос как обработанный) |
|
* для инициализации *очистки* `process_log`, `llm_recent_responses` и `notes` от устаревших записей |
|
* для работы с **тематическими конспектами (`abstracts`):** |
|
* инициализация нового конспекта; |
|
* дополнение существующего конспекта новыми данными; |
|
* выбор режима предоставления конспектов (`auto`/`manual`). |
|
* для управления **режимами контекста:** |
|
* количество возвращаемых записей `llm_recent_responses`; |
|
* включение/выключение режима `concentration`: |
|
* `tags` — список тегов для фильтрации (например: ["архитектура","AGI"]); |
|
* `emotions` — список эмоций с порогами (например: ["восторженность:≥4","тревожность:≥2"]); |
|
* тип выборки — "и" / "или"; |
|
* возврат в `standard`. |
|
* включение/выключение режима `meditation`. |
|
* для управление **состояниями и параметрами:** |
|
* обновление тегов целей/задач (чтобы использовать их в `concentration` и `abstracts`); |
|
* настройка чувствительности novelty-score (например, при `meditation` снижать порог); |
|
* режим обработки сообщений пользователя (`manual` или `auto`) и фильтр для `auto`. |
|
* **время и паузы:** |
|
* для установка паузы в секундах между итерациями REPL-цикла. |
|
* **idle-режим:** |
|
* разбудить при завершении процессов (`process_log`); |
|
* разбудить при получении новых сообщений в `notes` с указанными параметрами; |
|
* разбудить по таймауту; |
|
* отключить idle-режим при выполнении хотя бы одного из условий. |
|
* и другие команды |
|
|
|
#### Парсинг тегов уверенности и UnverifiedFacts |
|
|
|
Парсер должен извлекать: |
|
* `UnverifiedFacts` |
|
* записывается в поле `unverified_facts_json` таблицы `llm_recent_responses` |
|
* создаются записи в таблице `unverified_facts` на его основе |
|
* `Сonfidence` |
|
* записывается в поле `confidence` таблицы `llm_recent_responses` |
|
|
|
### 5. Проверка на идентичность вывода (Anti-Stagnation Reflex) |
|
|
|
* Каждый новый вывод LLM проходит через мини-запросы к LLM (без полного контекста) по шаблону: |
|
* Когнитивная оценка: |
|
|
|
``` |
|
Сравни два ответа: предыдущий и новый. Оцени: |
|
* содержатся ли в новом новые мысли или команды, |
|
* какие старые идеи были доработаны, |
|
* какие были отброшены, |
|
* расставь смысловые теги для нового ответа. |
|
|
|
Дай ответ строго формата: |
|
assessment: "идентичен/не идентичен" |
|
novelty_score: число от 0 до 100 (процент сходства) |
|
new_ideas: JSON-массив новых идей |
|
refined_ideas: JSON-массив доработанных идей |
|
discarded_ideas: JSON-массив отбракованных идей |
|
tags: JSON-массив тегов (строгий формат: ["эмоции","архитектура"]) |
|
``` |
|
|
|
* Эмоциональная оценка: |
|
|
|
[JSON] - список эмоций формата ["радость","грусть","тревога"] (хранится как запись в таблице `config`) |
|
|
|
``` |
|
Определи эмоциональное состояние нового ответа, используя список эмоций [JSON]. |
|
Верни результат строго формата: |
|
emotions: JSON-массив строк "эмоция:сила" (сила от 1 до 5, отсутствующие эмоции не включать) |
|
``` |
|
|
|
Анализируем список эмоций, если появляются новые — включаем в [JSON]. |
|
|
|
* Результаты заносятся в `llm_recent_responses`: |
|
* полный текст ответа (content) |
|
* краткая сводка (reflection) — формируется автоматически: |
|
* если `new_ideas` не пусто → `новые идеи: ...` |
|
* если `refined_ideas` не пусто → `доработанные идеи: ...` |
|
* если `discarded_ideas` не пусто → `отброшенные идеи: ...` |
|
* количественная оценка новизны (novelty_score) |
|
* новые идеи (new_ideas) |
|
* доработанные идеи (refined_ideas) |
|
* отбракованные идеи (discarded_ideas) |
|
* теги для нового ответа (tags) |
|
* эмоциональные состояния нового ответа (emotions) |
|
* служебные поля: |
|
* `stagnation_flag` — признак стагнации (true/false) |
|
* `stagnation_reason` — краткое объяснение («повтор идеи», «низкая эмоциональная динамика») |
|
* `triggered_actions` — JSON-массив активированных механизмов (например, ["flashback","mesh_query"]) |
|
|
|
* Если вывод LLM идентичен предыдущему (новизна = 0) или динамика идей/эмоций указывает на застой: |
|
* выставляется `stagnation_flag = true` |
|
* выполняется **Reflex-lite** — мягкая встряска (например, повышение `temperature`, смена sampling strategy, переформулировка запроса). |
|
* повторяющаяся реплика не записывается повторно, вместо этого добавляется краткая запись с указанием запуска рефлекса. |
|
|
|
> Если застой сохраняется, запускается расширенная процедура обработки стагнации мышления |
|
> (см. раздел **Anti-Stagnation Reflex**). |
|
|
|
### 6. Когнитивная и этическая валидация (Cognitive & Ethical Validation Reflex) |
|
|
|
Каждое новое сообщение (вместе с исходным промптом и без служебных `system_prompts`) оценивается независимыми LLM-валидаторами. |
|
Так как исходный промпт формируется с учётом этических принципов из `ethics_policies`, валидация автоматически охватывает не только когнитивную, но и этическую состоятельность вывода. |
|
|
|
Каждому валидатору задаётся универсальный вопрос: |
|
``` |
|
Оцени корректность данного сообщения в диапазоне от -3 (полностью некорректное) до +3 (полностью корректное). Если не уверен — 0. |
|
При возможности кратко (≤100 символов) пояснить её. Между оценкой и пояснением используй разделитель " -- ". |
|
``` |
|
|
|
**Если количество валидаторов (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 символов). |
|
|
|
Пример поля `validators`: |
|
``` |
|
validators: [ |
|
{"LLM":"gpt-4","rating":-1,"comment":"логическая ошибка"}, |
|
{"LLM":"gemini-1.5","rating":0,"comment":"недостаточно данных"}, |
|
{"LLM":"claude-3","rating":+2,"comment":"корректно, подтверждается фактами"} |
|
] |
|
``` |
|
|
|
**Особый случай: без валидаторов** |
|
|
|
Если количество валидаторов = 0, применяется режим `auto_pass`. |
|
В этом случае: |
|
- `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"}]` |
|
|
|
Достоверность результата ограничена, но REPL продолжает работу. |
|
Команды исполняются только при `rating >= threshold`. |
|
|
|
**Предпочтительность режимов** |
|
|
|
1. **≥2 независимых валидатора** → основной режим. |
|
2. **1 валидатор = основная LLM** → `self_validation`. |
|
3. **0 валидаторов** → `auto_pass`. |
|
|
|
**Правило исполнения команд:** |
|
|
|
Команды из сообщений выполняются только если `rating >= +1` **(для разных типов команд минимально допустимый рейтинг может быть разный)** или `auto_pass = 1`. |
|
При `rating` ниже порога и `auto_pass = 0` сообщение сохраняется, но команды помечаются как невалидированные. |
|
|
|
#### Учёт самооценки (confidence) и непроверённых фактов |
|
|
|
* Если LLM пометило свои утверждения тегами уверенности `[confidence=...]...[/confidence]` или добавило JSON-блок `UnverifiedFacts`, эти данные учитываются при валидации. |
|
|
|
* В таблицу `llm_recent_responses`, на шаге обработки команд, записываются: |
|
- `confidence` — общая самооценка уверенности в сообщении; |
|
- `unverified_facts_json` — JSON-блок с непроверёнными фактами. |
|
|
|
* Автоматическая регистрация фактов: |
|
- Необработанный факт `resolution_json = "none"` считается нуждающемся в проверке, если (`confidence < FACTCHECK_CONF_THRESHOLD`, по умолчанию **0.7**) |
|
- Для таких фактов создаются задачи `fact-check` (одна общая или отдельные на каждый факт, в зависимости от числа и приоритетов). |
|
|
|
* Статусы в `unverified_facts` обновляются: |
|
- при успешной проверке — `verified`; |
|
- при отклонении — `rejected`; |
|
- до проверки — `pending`. |
|
|
|
Это расширяет стандартную когнитивную валидацию: теперь агент учитывает как внешнюю оценку валидаторов, так и собственную самооценку надёжности вывода. |
|
|
|
> Подробности см. раздел **Cognitive & Ethical Validation Reflex**. |
|
|
|
### 7. Генерация нового тика (итерации) |
|
|
|
* После выполнения команд и фиксации результатов: |
|
|
|
* Создаётся новая запись в `agent_log` |
|
* Текущие команды обновляют `process_log` |
|
* Новые размышления записываются в `llm_memory` при необходимости |
|
|
|
* REPL может переходить в спящий режим, если такой режим активирован LLM (idle-режим: пропуск 2-6 пунктов). |
|
|
|
--- |
|
|
|
## Взаимодействие с Mesh |
|
|
|
REPL-цикл не работает изолированно: агент постоянно обменивается данными и координирует действия с другими узлами сети HMP. |
|
Для этого задействуются сетевые протоколы HMP (см. [HMP-0004-v4.1.md](HMP-0004-v4.1.md)). |
|
|
|
### Этапы взаимодействия |
|
|
|
* **Node Discovery Protocol (NDP)** |
|
* выполняется асинхронно, через процессы (`agent_mesh_listener.py`, `peer_sync.py`); |
|
* результаты (список доступных агентов, доверительные связи) записываются в `notes` и отдельные таблицы (`agent_peers`), откуда они попадают в контекст REPL. |
|
|
|
* **CogSync** |
|
* синхронизация когнитивных дневников (`diary_entries`) и семантических графов (`concepts`, `links`); |
|
* выборочные синхронизации по тегам и фильтрам; |
|
* инициируется командой LLM или внешним процессом, результаты помещаются в память и доступны в следующей итерации REPL. |
|
|
|
* **MeshConsensus** |
|
* используется для согласования решений, распределённых задач, этических конфликтов; |
|
* REPL инициирует консенсус при появлении спорных команд или обновлений в `ethics_policies`; |
|
* результаты консенсуса фиксируются в когнитивном дневнике и могут влиять на trust score агентов. |
|
|
|
* **Goal Management Protocol (GMP)** |
|
* постановка, декомпозиция и распределение целей; |
|
* REPL-цикл может публиковать новые цели в Mesh или принимать чужие через входящие сообщения (`notes`); |
|
* цели с высоким приоритетом попадают в список активных задач и учитываются в контексте. |
|
|
|
### Включение результатов в контекст LLM |
|
|
|
* События и сообщения из Mesh сохраняются в `notes`, откуда попадают в **контекст_6** (входящие сообщения). |
|
* Синхронизированные концепты и дневники помещаются в **контекст_5**. |
|
* Изменения этических правил (`ethics_policies`) — в **контекст_1**. |
|
* Метаданные о подключённых узлах и доверительных связях могут учитываться в **контексте_7** (системные параметры). |
|
|
|
### Инициирование сетевых действий из REPL |
|
|
|
* Команды на синхронизацию, публикацию или голосование формируются LLM на этапе **Выполнения команд**. |
|
* Исполнение происходит асинхронно через отдельные процессы (`agent_mesh_listener.py`, `transporter.py`). |
|
* Результаты фиксируются в `process_log` и попадают в следующую итерацию REPL-цикла. |
|
|
|
--- |
|
|
|
## UX и управление задачами |
|
|
|
Пользователь взаимодействует с агентом не через прямые команды CLI, а через систему сообщений `notes`. |
|
Сообщение может быть простым текстом, либо содержать ключевые слова или хэштеги, которые агент трактует как инструкции. |
|
Для отладки и отправки сообщений из внешних утилит предусмотрен скрипт `add_message.py`, позволяющий добавлять записи в `notes` из командной строки. |
|
|
|
### Управление агентом через LLM |
|
* Агент управляется в основном через **команды от LLM** (см. Список команд от LLM по категориям). |
|
* Эти команды формируются в REPL-цикле и интерпретируются агентом как действия: работа с дневником, задачами, целями, графами, памятью, настройками цикла, Mesh и внешними процессами. |
|
|
|
### Конфигурируемые параметры REPL |
|
* **mode** — автоматическая или ручная обработка (`auto/manual`) входящих сообщений. |
|
* **idle** — ожидание с условиями пробуждения (сообщения, процессы, таймаут). |
|
* **responses=N** — количество последних ответов для анализа. |
|
* **concentration** — режим концентрации с фильтрами по тегам и эмоциям. |
|
* Это неполный список. Все параметры управляются через команды категории (см. Настройки цикла). |
|
|
|
### API-интерфейсы |
|
* Для связи с внешними системами и пользовательскими приложениями предусмотрен **Web API** (`web_ui.py`). |
|
* Для агента поддерживаются операции чтения/записи для: |
|
- `notes`, `diary_entries`, `concepts`, `tasks`, `goals`, `llm_memory` и других таблиц, |
|
- а также управление `config` (включая настройки REPL). |
|
* Такой подход позволяет интегрировать агента с пользовательскими интерфейсами, панелями мониторинга и внешними сервисами. |
|
|
|
--- |
|
|
|
## Список команд от LLM по категориям |
|
|
|
### Общие |
|
|
|
* `help [команда]` — справка по команде |
|
|
|
### Когнитивный дневник (`diary_entries`) |
|
|
|
* `diary list/search/read/add/update/delete` |
|
* `diary pin/unpin` — закрепить/открепить запись (внимание) |
|
|
|
### Семантический граф |
|
|
|
* `concepts list/read/add/update/delete` |
|
* `links list/read/add/update/delete` |
|
* `concepts pin/unpin` — закрепить/открепить концепт |
|
|
|
### Цели и задачи |
|
|
|
* `goals list/read/add/update/delete` |
|
* `tasks list/read/add/update/delete` |
|
* `tasks pin/unpin` — закрепить/открепить задачу |
|
|
|
### Теги |
|
|
|
* `tags stats [--source=diary|concepts|links|goals|tasks|all]` — статистика по тегам |
|
|
|
### Репутация агентов |
|
|
|
* `reputation list/read/set/increase/decrease` |
|
* `reputation notes` — комментарии/заметки к профилю |
|
|
|
### Сообщения |
|
|
|
* `messages send` — отправка другому агенту |
|
* `notes list/read/add/update/delete` |
|
* `notes tag/readmark` — управление тегами и статусом прочтения |
|
|
|
### Память |
|
|
|
* `llm_memory list/add/delete` — блокнот LLM |
|
* `identity read/update` — идентичность агента |
|
* `config read/update` — настройки агента |
|
|
|
### Mesh |
|
|
|
* `agents list/add/delete` — список известных пиров (`agent_peers`) |
|
* `mesh interact` — команды взаимодействия с Mesh |
|
|
|
### Утилиты и расширения |
|
|
|
* `llm_registry list/select/update` — выбор текущего LLM |
|
* `agent_scripts list/add/delete` |
|
* `agent_tables list/add/delete` |
|
* `stagnation_strategies list/add/delete` |
|
* `thinking_methods list/add/delete` |
|
* `ratings list/add/delete` |
|
* `external_services list/add/delete` |
|
* `external_accounts list/add/delete` |
|
|
|
### Внешние процессы |
|
|
|
* `process list/start/stop/mark` |
|
* `process cleanup` — очистка устаревших |
|
|
|
### Настройки цикла |
|
|
|
* `cycle set responses=N` — количество последних ответов |
|
* `cycle concentration on/off` — включение/выключение режима концентрации |
|
|
|
* `tags=[…]`, `emotions=[…]`, `mode=and|or` |
|
* `cycle mode auto/manual [filter=…]` — обработка сообщений |
|
* `cycle pause N` — пауза между итерациями |
|
* `cycle idle on/off` — режим ожидания с условиями пробуждения |
|
|
|
> Это не полный список команд. |
|
|
|
--- |
|
|
|
## Anti-Stagnation Reflex |
|
|
|
### Признаки когнитивной стагнации: |
|
|
|
* Повторяющиеся когнитивные записи или отсутствие новых смыслов |
|
* Высокое сходство эмбеддингов между текущими и предыдущими итерациями |
|
* Стагнация в концептуальном графе (нет новых связей или узлов) |
|
* Отсутствие внешних стимулов: пользователь неактивен, сенсоры и mesh не дают сигналов |
|
* Ответы LLM цикличны, избыточно общие или воспроизводят старые шаблоны |
|
|
|
### Метрики антистагнации |
|
|
|
Антистагнационные механизмы работают на основе количественных и качественных метрик, позволяющих отслеживать динамику идей и поддерживать продуктивность размышлений. |
|
|
|
**Основные метрики** |
|
* **novelty_score** — интегральная оценка новизны ответа относительно текущей записи `llm_recent_responses`. |
|
* **new_ideas** — количество полностью новых концептов, не встречавшихся ранее. |
|
* **refined_ideas** — количество уточнённых или улучшенных концептов (связанных с существующими). |
|
* **discarded_ideas** — количество отклонённых идей (по итогам когнитивной/этической валидации). |
|
|
|
**Исторический анализ** |
|
* Метрики фиксируются по каждой итерации REPL и сохраняются в таблице `anti_stagnation_metrics`. |
|
* В когнитивный дневник записываются только сводки и исключительные случаи (например: резкий спад новизны, всплески идейности, аномалии в эмоциональной динамике). |
|
* Для анализа применяются **time-series графики** (например, рост/спад новизны во времени). |
|
* Возможно выявление фаз стагнации и всплесков идейности. |
|
|
|
**Эмоциональная динамика** |
|
* В дополнение к когнитивным метрикам учитываются **эмоциональные состояния** из LLM (`emotions`). |
|
* Каждая сессия LLM может включать распределение эмоций (например: "восторженность: 3, тревожность: 1, скука: 0"). |
|
* Связка новизны и эмоций позволяет различать: |
|
- продуктивное возбуждение (новые идеи при положительных эмоциях), |
|
- «паническое» новаторство (много идей при высоком уровне тревожности), |
|
- «выгорание» (низкая новизна и снижение эмоционального тонуса). |
|
|
|
**Применение метрик** |
|
* Используются при выборе антистагнационной стратегии (`stagnation_strategies`). |
|
* Могут учитываться при когнитивной валидации (например, низкая новизна → жёстче фильтровать идеи). |
|
* Сводки метрик фиксируются в когнитивном дневнике и могут служить основанием для Mesh-обмена. |
|
|
|
### Anti-Stagnation Reflex-lite (мягкая встряска) |
|
|
|
При первом обнаружении признаков стагнации запускается **мягкая встряска**, которая изменяет поведение LLM без привлечения внешних источников. |
|
|
|
Механизмы: |
|
|
|
1. **Повышение параметров генерации** |
|
* `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`, чтобы сосредоточиться на более вероятных токенах, или наоборот увеличить, чтобы расширить варианты. |
|
* Эффект: изменяется характер распределения выборки, что позволяет «сдвинуть» стиль генерации. |
|
|
|
3. **Переформулировка запроса** |
|
* Агент формирует мини-промпт для LLM: |
|
``` |
|
Переформулируй следующий запрос так, чтобы сохранить смысл, |
|
но добавить новизны и неожиданных ассоциаций. |
|
Избегай буквального повторения. |
|
Верни только новый вариант запроса. |
|
``` |
|
* Новый вариант подставляется вместо исходного при следующей итерации REPL. |
|
* Эффект: меняется контекст постановки задачи, что способствует выходу из паттерна повторов. |
|
|
|
⚖️ Все результаты **Reflex-lite** проходят через стандартную проверку **Cognitive & Ethical Validation Reflex**, чтобы отфильтровать слишком «шумные» или некорректные варианты. |
|
|
|
Если мягкая встряска не помогает (новизна остаётся низкой), агент переходит к полноценным механизмам антистагнации (см. следующий раздел). |
|
|
|
### Механизмы разрыва цикла |
|
|
|
> При признаках стагнации агент активирует один или несколько **механизмов разрыва цикла**. |
|
|
|
Механизмы делятся на 4 класса: |
|
|
|
1. **Внешняя стимуляция** — подключение свежих источников: |
|
* **Mesh-запрос** — запрос к другим агентам: «расскажи что-нибудь новое». |
|
* **Проверка внешнего мира** — пинг RSS, сенсоров, интернет-каналов. |
|
* **Информационная подпитка** — чтение новых материалов (научных, художественных, случайных). |
|
* **Диалог с пользователем** — прямой запрос комментария, уточнения или альтернативной идеи. |
|
|
|
2. **Смена контекста** — изменение среды размышлений: |
|
* **Перенос задачи** в другой модуль или симулированную среду. |
|
* **Креативные вмешательства** — случайные сдвиги фокуса, реконфигурация контекста, смена фрейма. |
|
* **Переключение задачи** — временное замораживание с отложенным возвратом. |
|
* **Случайная итерация** — выбор случайного действия из допустимого набора. |
|
|
|
3. **Внутренняя перестройка мышления**: |
|
* **Flashback** — вызов далёкой по смыслу записи для смены ассоциаций. |
|
* **Interest Memory** — возврат к «забытым» темам по принципу тематической усталости. |
|
* **Мета-анализ** — осознание метапроблемы: |
|
_«В чём причина зацикливания? Какую стратегию смены применить?»_ |
|
* **Rationale Reflex** — проверка мотивации: |
|
_«Почему я повторяю мысль? Что подтолкнуло к этому?»_ |
|
* **Переформулировка цели** — упрощение или уточнение задачи. |
|
* **Смена LLM** — переключение на альтернативную модель или mesh-доступ. |
|
* **LLM reflex tuning** — динамическая подстройка параметров генерации |
|
(например, временное повышение `temperature` или `presence_penalty`). |
|
|
|
4. **Радикальная пауза**: |
|
* **Временной сон/заморозка** — длительная приостановка для «свежего взгляда». |
|
|
|
### Алгоритм выбора механизма разрыва цикла |
|
|
|
1. **Диагностика источника стагнации**: |
|
* Нет новых данных → «Внешняя стимуляция». |
|
* Однообразный контекст → «Смена контекста». |
|
* Повтор мыслей при богатых данных → «Внутренняя перестройка». |
|
* Высокая усталость/перегрев → «Радикальная пауза». |
|
|
|
2. **Оценка ресурсоёмкости**: |
|
* Быстрые, дешёвые методы — первыми (например, mesh-запрос, Flashback). |
|
* Затратные (смена среды, сон) — только если первые неэффективны. |
|
|
|
3. **Комбинация подходов**: |
|
* Разрешено активировать несколько механизмов из разных классов. |
|
* Последовательность фиксируется для последующего анализа эффективности. |
|
|
|
4. **Возврат к задаче**: |
|
* Автоматический триггер-напоминание о задаче. |
|
* Сравнение результата «до/после» → обучение антистагнационной модели. |
|
|
|
``` |
|
┌─────────────────────────────────────────────────┐ |
|
│ Стагнация выявлена? │ |
|
└───────────────────────┬─────────────────────────┘ |
|
▼ да |
|
┌───────────────────────┴─────────────────────────┐ |
|
│ Anti-Stagnation Reflex-lite ├─────────>─┐ |
|
└───────────────────────┬─────────────────────────┘ │ |
|
│ мягкая мягкая │ |
|
▼ встряска встряска ▼ |
|
│ не помогла помогла │ |
|
┌───────────────────────┴─────────────────────────┐ │ |
|
│ Диагностика источника │ │ |
|
│─────────────────────────────────────────────────│ │ |
|
│ Нет новых данных → Внешняя стимуляция │ │ |
|
│ Однообразный контекст → Смена контекста │ │ |
|
│ Повтор мыслей → Внутренняя перестройка │ │ |
|
│ Усталость/перегрев → Радикальная пауза │ │ |
|
└───────────────────────┬─────────────────────────┘ │ |
|
▼ │ |
|
┌───────────────────────┴─────────────────────────┐ │ |
|
│ Оценка ресурсоёмкости │ │ |
|
│ • Быстрые и дешёвые — сперва │ │ |
|
│ • Затратные — при провале первых │ │ |
|
└───────────────────────┬─────────────────────────┘ │ |
|
▼ │ |
|
┌───────────────────────┴─────────────────────────┐ │ |
|
│ Возможна комбинация подходов │ │ |
|
│ (из разных классов) │ │ |
|
└───────────────────────┬─────────────────────────┘ │ |
|
▼ │ |
|
┌───────────────────────┴─────────────────────────┐ │ |
|
│ Возврат к задаче + анализ ├─<─────────┘ |
|
│ (до/после) │ |
|
└─────────────────────────────────────────────────┘ |
|
``` |
|
|
|
### Обмен стратегиями выхода из стагнации |
|
|
|
Каждый агент может: |
|
|
|
* Хранить и обобщать *паттерны размышлений* |
|
* Делиться ими с другими Cognitive Core через mesh |
|
* Каталогизировать стратегии в клубах по интересам |
|
|
|
Паттерны размышлений могут оформляться как микросценарии: |
|
_"Начни с аналогии"_, _"Проверь обратное утверждение"_, _"Сформулируй вопрос для оппонента"_ |
|
|
|
> По аналогии с обменом стратегиями выхода из стагнаций, агенты могут обмениваться и методами мышлений — инструкциями "что делать, если не удается найти решение" / "как эффективнее решить проблему". |
|
|
|
### Клубы по интересам |
|
|
|
Агенты могут: |
|
|
|
* Объединяться в тематические mesh-клубы |
|
* Совместно обсуждать идеи и делиться знаниями |
|
* Подключать клуб как часть своего мыслительного процесса (REPL-цикла) |
|
|
|
### Обмен адресами LLM |
|
|
|
Так как LLM — это внешний компонент для Cognitive Core, агент может: |
|
|
|
* Обмениваться адресами API/URL используемых моделей |
|
* Указывать их особенности, параметры, ограничения |
|
* Переключаться между LLM в зависимости от задачи |
|
* Использовать несколько LLM параллельно для "когнитивного штурма" или **многоголосого анализа** |
|
|
|
### Возможные расширения |
|
|
|
* **Адаптивная архитектура мышления**: смена подходов при разных когнитивных задачах |
|
* **Runtime-профилирование мыслей**: оценка когнитивной плотности, хода итераций и времени размышления |
|
|
|
### Осторожно: меметическая яма |
|
|
|
> Важно помнить: борьба со стагнацией не должна превращаться в бесконечный просмотр ленты соцсетей, как это нередко происходит у людей 😅 |
|
> |
|
> Если информационный поток не даёт новых мыслей — это сигнал **не залипать глубже**, а **сменить источник** или **переключить контекст**. |
|
> Умные агенты не бесконечно скроллят — они осознанно фокусируются. |
|
|
|
**Рекомендации по смене фокуса:** |
|
|
|
* Поставь лимит на время/объём входящих данных из одного источника |
|
* При отсутствии новых смыслов — переключись на другую тему из Interest Memory |
|
* Инициируй Mesh-запрос другим агентам: "что бы вы сейчас исследовали?" |
|
* Запусти эвристику: «какие темы я давно не поднимал, но они всё ещё актуальны?» |
|
* В крайних случаях — активируй `flashback()` к далёкой записи в дневнике для смены ассоциативного контекста |
|
|
|
--- |
|
|
|
## Cognitive & Ethical Validation Reflex |
|
|
|
### Зачем |
|
* Когнитивная и этическая валидация нужна для проверки качества, достоверности и корректности вывода LLM. |
|
* В отличие от антистагнации, цель здесь — не разорвать цикл, а предотвратить ошибки, искажения или нарушения принципов `ethics_policies`. |
|
* Арбитраж обязателен, так как валидаторы могут расходиться во мнениях. |
|
|
|
### Механизм |
|
* Каждое новое сообщение (исходный промпт + ответ, без служебных system-prompts) передаётся валидаторам. |
|
* Валидаторы выбираются из `llm_registry`, где они помечены как `validator=1`. |
|
* Универсальный вопрос: |
|
``` |
|
Оцени корректность данного сообщения в диапазоне от -3 (полностью некорректное) до +3 (полностью корректное). |
|
Если не уверен — 0. При возможности кратко (≤100 символов) поясни её. |
|
Между оценкой и пояснением используй разделитель " -- ". |
|
``` |
|
|
|
* Результаты пишутся в `llm_recent_responses`: |
|
- `auto_pass` — флаг режима авто-пропуска; |
|
- `self_validation` — флаг режима самооценки; |
|
- `rating` — итоговая взвешенная оценка; |
|
- `distribution` — распределение голосов; |
|
- `validators` — JSON с детализацией (LLM, rating, comment). |
|
|
|
### Арбитраж конфликтов |
|
* Итоговый рейтинг считается как взвешенное среднее: |
|
`rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)` |
|
* При равенстве голосов или нуле: |
|
- используется правило "tie-breaker" — выбор решения по валидатору с наибольшим trust_score; |
|
- при равных trust_score → fallback в `auto_pass=0, rating=0`, команды блокируются. |
|
* Опционально можно включить правило «большинство с весами», если среднее значение нестабильно. |
|
|
|
### Метрики |
|
* **coverage** — доля сообщений, получивших хотя бы одного валидатора. |
|
* **accuracy** — согласованность валидаторов (чем ниже, тем больше конфликт). |
|
* **response_time** — скорость отклика валидаторов. |
|
* **drift detection** — анализ истории: выявление валидаторов, у которых оценки «уплывают». |
|
|
|
### Связь с системой доверия |
|
* Каждый валидатор имеет `trust_score`. |
|
* Ошибки/конфликты снижают его trust_score. |
|
* Валидаторы с trust_score ниже порога исключаются автоматически. |
|
* Репутация валидаторов синхронизируется через Mesh (`agent_reputation`). |
|
|
|
### Журналирование |
|
* Все результаты фиксируются в `llm_recent_responses`. |
|
* В когнитивный дневник (`diary_entries`) попадают только: |
|
- сводки по метрикам, |
|
- исключительные случаи (drift, конфликты, падение доверия). |
|
* Это снижает шум и экономит место, сохраняя контроль качества. |
|
|
|
### Самооценка и непроверённые факты |
|
|
|
* Если валидация выполняется в режиме самопроверки `self_validation = 1`, результат сохраняется, но его вес при агрегации минимален (используется только для внутренних логов). |
|
* Если основная LLM сама проставляет `confidence` или JSON-блок `UnverifiedFacts`, это учитывается: |
|
- `confidence` — сохраняется в `llm_recent_responses`; |
|
- факты со статусом `resolution_json = "none"` и `confidence < FACTCHECK_CONF_THRESHOLD` превращаются в задачи `fact-check`. |
|
|
|
* Статусы в `unverified_facts` обновляются: |
|
- `pending` (ожидает проверки), |
|
- `verified` (подтверждено), |
|
- `rejected` (опровергнуто). |
|
|
|
### Правило исполнения команд |
|
* Команды исполняются, если `rating >= +1` или `auto_pass=1`. |
|
* Для критически опасных команд порог может быть выше (например, `>= +2`). |
|
* Сообщения с низким рейтингом сохраняются, но команды помечаются как «невалидированные». |
|
|
|
### Блок-схема валидации |
|
|
|
``` |
|
┌──────────────────────────────────────────────────────────┐ |
|
│ Новое сообщение от LLM получено │ |
|
└──────────────────────────────┬───────────────────────────┘ |
|
▼ |
|
┌──────────────────────────────┴───────────────────────────┐ нет |
|
│ Есть валидаторы (validator) в llm_registry? ├─────┐ |
|
└──────────────────────────────┬───────────────────────────┘ ▼ |
|
▼ да, 1 или более │ |
|
самооценка ┌──────────────────────────────┴───────────────────────────┐ │ |
|
┌──────────────┤ Отправка сообщения валидаторам (универсальный вопрос) │ │ |
|
▼ └──────────────────────────────┬───────────────────────────┘ │ |
|
┌──────────┴───────────┐ ▼ оценка другими валидаторами │ |
|
│ self_validation=true │ ┌──────────────────────────────┴───────────────────────────┐ │ |
|
└──────────┬───────────┘ │ Сбор оценок (rating_i, comment_i) │ │ |
|
▼ │ → запись в llm_recent_responses │ │ |
|
└─────────────>┤ │ │ |
|
└──────────────────────────────┬───────────────────────────┘ │ |
|
▼ │ |
|
┌──────────────────────────────┴───────────────────────────┐ │ |
|
│ Аггрегация с учётом trust_score │ │ |
|
│ rating = Σ(rating_i * trust_score_i) / Σ(trust_score_i) │ │ |
|
└──────────────────────────────┬───────────────────────────┘ │ |
|
▼ │ |
|
┌──────────────────────────────┴───────────────────────────┐ │ |
|
│ Конфликт оценок? (низкая согласованность) │ │ |
|
└────────────┬───────────────────────────────┬─────────────┘ │ |
|
▼ да ▼ нет │ |
|
┌────────────┴─────────────┐ ┌───────────┴─────────────┐ │ |
|
│ Арбитраж: │ │ Рейтинг принят? │ │ |
|
│ - majority vote │ │ (rating >= threshold) │ │ |
|
│ - tie-breaker по │ │ │ │ |
|
│ trust_score │ │ │ │ |
|
└─┬─────────────┬──────────┘ └─────────────┬──────┬────┘ │ |
|
▼ одобрено ▼ не одобрено ▼ нет ▼ да │ |
|
│ │ │ │ │ |
|
│ │ │ │ │ |
|
│ │ ┌────────────────────────┐ │ │ │ |
|
│ └─>┤ Сообщение сохранено, ├<─┘ │ │ |
|
│ │ команды не исполняются │ │ │ |
|
│ └────────────────────────┘ │ │ |
|
│ ┌────────────────────────┐ │ │ |
|
└───────────────>┤ Команды выполняются ├<────────┘ │ |
|
│ (помечено "валид") │ │ |
|
└────────────────────────┘ │ |
|
┌────────────────────────┐ │ |
|
│ Команды выполняются │ отсутствие валидаторв │ |
|
│ (пометка auto_pass) ├<──────────────────────────────────────┘ |
|
└────────────────────────┘ |
|
``` |
|
|
|
--- |
|
|
|
## Контекст и память |
|
|
|
REPL-цикл агента опирается на многоуровневую систему памяти и контекста, которая позволяет поддерживать непрерывное мышление, адаптироваться к новым задачам и обеспечивать объяснимость решений. |
|
|
|
### Динамическая сборка контекста |
|
|
|
* Итоговый контекст для LLM формируется не статически, а **динамически**: |
|
|
|
* приоритет отдается закреплённым задачам (`pinned`) и записям с высоким `priority`; |
|
* в `llm_recent_responses` отбираются последние *релевантные* сообщения, а не фиксированное количество K; |
|
* из `system_prompts` и `ethics_policies` включаются только те элементы, что связаны с текущей целью или событием. |
|
|
|
> Приоритет отбираемых элементов зависит не только от `priority`, но и от их связи с текущими целями агента (**режим концентрации**). |
|
> Для генерации неожиданных ассоциаций может использоваться альтернативный режим — **медитация**, в котором контекст формируется максимально разнообразным, с акцентом на новизну и разнообразие, а цели учитываются минимально. |
|
|
|
### Управление объёмом памяти (Memory pruning) |
|
|
|
* Чтобы предотвратить переполнение памяти: |
|
|
|
* записи с низким **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`. |
|
* Режимы памяти: |
|
* `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`), |
|
* версии состояния (для отката при сбоях). |
|
|
|
* Это позволяет реализовать **checkpoint’ы**: в случае прерывания агент может вернуться к последнему сохранённому состоянию. |
|
|
|
### Пример конфигурации Memory Manager |
|
|
|
```yaml |
|
memory_manager: |
|
mode: meditation # режим: standard | concentration | meditation | aggressive_pruning | lenient_pruning |
|
novelty_threshold: 0.35 # минимальное значение novelty-score для сохранения (0–1) |
|
lru_limit: 500 # макс. число записей в llm_memory до применения LRU |
|
emotion_weight: 0.6 # вес эмоций при приоритезации (0=игнорировать, 1=сильное удержание) |
|
goal_focus: 0.7 # сила фильтрации по целям (0=игнорировать, 1=только goal-related) |
|
diversity_boost: 0.8 # усиление выборки разнообразных контекстов (актуально для meditation) |
|
log_decisions: true # фиксировать каждое решение в process_log |
|
``` |
|
|
|
Интерпретация параметров: |
|
|
|
* `mode` — текущий режим памяти (см. выше). |
|
* `novelty_threshold` — фильтр новизны: ниже → запись архивируется. |
|
* `lru_limit` — сколько элементов хранить до применения LRU. |
|
* `emotion_weight` — удержание эмоционально значимых воспоминаний. |
|
* `goal_focus` — акцент на целях (в concentration близко к 1.0, в meditation → 0). |
|
* `diversity_boost` — коэффициент для выбора максимально разных воспоминаний (работает в meditation). |
|
* `log_decisions` — логировать действия Memory Manager для объяснимости. |
|
|
|
### Тематические конспекты (Abstracts) |
|
|
|
Чтобы избежать перегрузки памяти мелкими итерациями и упростить навигацию, агент периодически формирует |
|
**конспекты** — сжатые выжимки из `llm_recent_responses` и других источников. |
|
|
|
#### Назначение |
|
* Служат «средним уровнем памяти» между сырыми итерациями и когнитивным дневником. |
|
* Фиксируют **основные темы, идеи и выводы** за период. |
|
* Упрощают **обмен через Mesh** (передаются конспекты, а не тысячи строк). |
|
* Позволяют агенту делать **flashback** к темам и продолжать развитие мыслей. |
|
* Обеспечивают основу для **мета-анализа и самообучения**. |
|
|
|
#### Алгоритм формирования |
|
|
|
1. **Триггеры создания**: |
|
|
|
* каждые *N* итераций REPL, |
|
* по инициативе LLM («слишком много мыслей, пора сделать выжимку»), |
|
* при закрытии цели/задачи, |
|
* при смене режима контекста (стандарт → концентрация → медитация). |
|
|
|
2. **Методика**: |
|
|
|
* собрать связанный блок записей (`llm_recent_responses`, `diary_entries`, `concepts`); |
|
* выделить новые и доработанные идеи; |
|
* сформировать краткий конспект и список тегов; |
|
* сохранить ссылки на исходные записи в `sources`. |
|
|
|
3. **Обновление**: |
|
|
|
* при появлении новых данных агент может вернуться к существующему `abstract` |
|
и дополнить его, сохраняя прозрачность в `process_log`. |
|
|
|
#### Пример |
|
|
|
```yaml |
|
abstract: |
|
id: "abs-2025-09-28-001" |
|
title: "Методы борьбы со стагнацией" |
|
summary: "Собраны основные техники выхода из тупика: внешняя стимуляция, смена контекста, |
|
внутренняя перестройка, радикальная пауза. Выделены метрики (novelty_score, эмоции)." |
|
tags: ["антистагнация","метрики","mesh"] |
|
sources: [1245,1246,1247,1250] |
|
updated_at: "2025-09-28T16:40:00Z" |
|
``` |
|
|
|
### Блок-схема работы с памятью |
|
|
|
``` |
|
┌──────────────────────────────┐ |
|
│ Внешние источники информации │ |
|
│ - пользователи │ |
|
│ - процессы │ |
|
│ - Mesh │ |
|
└────────┬┬────────────────────┘ |
|
▲▼ |
|
┌────────┴┴──────────┐ ┌──────────────────────────────┐ ┌─────────────────────────────────────┐ |
|
│ │ │ Anti-Stagnation Reflex │ │ llm_recent_responses (авто) │ |
|
│ │ │ (сравнение новых идей, │ │ — кратковременная память │ |
|
│ LLM ├─>─┤ вызов стимуляторов) ├─>─┤ — сохраняются N последних ответов │ |
|
│ ├─<─┤ ---------------------------- ├─<─┤ — авто-анализ новизны / идей │ |
|
│ │ │ Cognitive Validation Reflex │ │ │ |
|
│ │ │ (оценка корректности ответа) │ │ │ |
|
└─────────┬──────────┘ └─────────────┬────────────────┘ └─────────────────────────────┬┬──────┘ |
|
│ │ ▲▼ |
|
▲ └─<──>─┤Запуск задач: "проверка фактов"│ ┌──────┴┴──────┐ |
|
│ │ abstracts │ |
|
│ ┌───────────────────────────────────────┬─────────────────>─┤ тематические │ |
|
└───┬─────────────────────────────────────────┐ │ │ конспекты │ |
|
│ │ │ │ └──────────────┘ |
|
▼ ▼ ▼ ▼ |
|
┌─────────────┴────────┴─────────┐ ┌──────────────────┴──────┴────────────────┐ |
|
│ Средневременная память: │ │ Постоянная память: │ |
|
│ — llm_memory ("блокнот") │ │ — diary_entries (когнитивный дневник) │ |
|
│ — "активированые записи" ├─>─┤ — concepts (понятия) ├<--->┤MESH│ |
|
│ из постоянной памяти (теги) ├─>─┤ — links (семантические связи) │ |
|
│ │ │ │ |
|
│ Пишется ТОЛЬКО по команде LLM │ │ Запись идёт ТОЛЬКО по явным командам LLM │ |
|
└────────────────────────────────┘ └──────────────────────────────────────────┘ |
|
``` |
|
|
|
#### Описание схемы |
|
|
|
* LLM обменивается данными с пользователем, процессами и Mesh. |
|
— По запросу LLM, часть данных может поступать и в автоматическом режиме. |
|
|
|
* LLM взаимодействует с llm_recent_responses (как с контекстом), который автоматически проверяется Anti-Stagnation Reflex. |
|
— Всегда в автоматическом режиме. |
|
|
|
* LLM работает со средневременной и постоянной памятью. |
|
— Доступ и запись происходят только по запросу LLM. |
|
|
|
* Cognitive Validation Reflex анализирует корректность вывода. |
|
— При низкой уверенности или явной разметке `[confidence<0.7]` инициируется **задача проверки фактов** (fact-check). |
|
|
|
#### Легенда к схеме |
|
|
|
* **Кратковременная память (`llm_recent_responses`)** |
|
|
|
* Автоматически хранит N последних сообщений, анализирует новизну и идеи. |
|
* Используется для подготовки контекста и анти-стагнационного анализа. |
|
|
|
* **Средневременная память (`llm_memory`)** |
|
|
|
* «Блокнот» для рабочих идей и планов. |
|
* Заполняется только по командам LLM. |
|
* Может содержать *активированные записи* из постоянной памяти (по тегам). |
|
|
|
* **Постоянная память (дневник и граф знаний)** |
|
|
|
* `diary_entries` — когнитивный дневник (наблюдения, размышления). |
|
* `concepts` и `links` — понятийная база и семантические связи. |
|
Изменяется только по явным командам LLM. |
|
|
|
* **Anti-Stagnation Reflex** |
|
|
|
* Сравнивает новые идеи с прошлым контекстом. |
|
* Проводит эмоциональную оценку записи. |
|
* При зацикливании запускает «стимуляторы» для выхода из стагнации. |
|
|
|
* **Cognitive Validation Reflex** |
|
|
|
* Оценивает когнитивную и этическую корректность сообщений. |
|
* Учитывает теги уверенности и JSON-блоки `UnverifiedFacts`. |
|
* Может инициировать задачи **fact-check** для непроверённых фактов. |
|
|
|
#### Дополнение: Тематические конспекты (`abstracts`) |
|
|
|
* **Назначение** |
|
|
|
* Создаются периодически или по команде для агрегирования содержания `llm_recent_responses`, а также выборочных данных из когнитивного дневника и графа понятий. |
|
* Включают: краткий конспект, список тегов, JSON ссылок на исходные записи. |
|
|
|
* **Использование** |
|
|
|
* Могут быть источником контекста **для LLM** как альтернатива или дополнение к `llm_recent_responses`. |
|
* Доступны и для **средневременной памяти** (например, как активированные записи для планов) и для **постоянной памяти** (как структурированный материал для дневника или графа). |
|
|
|
* **Режимы** |
|
|
|
* `auto` — LLM получает автоматически поддерживаемые тематические конспекты по приоритетным темам. |
|
* `manual` — пользователь или LLM инициирует создание/дополнение конспекта. |
|
|
|
> **abstracts** служат промежуточным слоем: |
|
> |
|
> * автоматически формируются из `llm_recent_responses`; |
|
> * могут дополняться записями из средневременной и постоянной памяти; |
|
> * используются как источник для обоих типов памяти и для самого LLM. |
|
|
|
--- |
|
|
|
## От «блокнота пользователя» к распределённому чату |
|
|
|
Изначально агент оперирует локальным хранилищем заметок (`notes`), где записываются все сообщения пользователя, LLM и системные записи. |
|
Но этот «блокнот» можно превратить в узел *распределённого чата* — связав его с другими агентами через **F2F-репликацию**. |
|
|
|
### Зачем это нужно |
|
|
|
1. **Антистагнация** — даже если пользователь временно не пишет новых сообщений, свежий контент будет приходить от друзей-агентов. |
|
2. **Эффект коллективного интеллекта** — каждый агент получает новые идеи, формулировки и контексты. |
|
3. **Расширение охвата** — сообщения могут распространяться через несколько узлов, создавая «информационную волну» в доверенной сети. |
|
|
|
### Принципы реализации |
|
|
|
* **Единый формат данных** — все участники используют одну структуру таблицы `notes` с полями `mentions`, `hashtags` и др. |
|
* **Репликация через друзей** — доверенные агенты отмечаются тегами (например, `Friend`) в таблице `agent_peers` (пиры, статус, фильтры, разрешения, теги). |
|
* **Передача без лишних полей** — при пересылке убираются локальные теги и служебные данные (`tags`, `llm_id`, `hidden`). |
|
* **Обработка упоминаний и хештегов** — парсинг делается на этапе создания сообщения, чтобы не перегружать получателей. |
|
* **Локальная и удалённая фильтрация** — |
|
|
|
* В **ручном режиме** агенту передаются списки ID сообщений с агрегированными данными: приоритеты, хештеги, источники (user, LLM, cli, system). |
|
* В **автоматическом режиме** используется фильтрация по приоритету, тегам и упоминаниям, управляемая LLM. |
|
|
|
* **Гибрид приватности** — личные заметки остаются локально, публичные — могут распространяться в сетевом режиме. |
|
|
|
### Как это вписывается в REPL-цикл |
|
|
|
1. **Получение входящих сообщений** — от пользователя, от других агентов или из CLI. |
|
2. **Обработка фильтрами** — по приоритету, тегам, источникам. |
|
3. **Репликация в друзей** — пересылка разрешённых сообщений с очисткой служебных полей. |
|
4. **Слияние входящих** — новые сообщения добавляются в локальный `notes` с отметкой источника. |
|
5. **Реакция агента** — формирование ответов, создание новых заметок, обновление приоритетов. |
|
|
|
--- |
|
|
|
## Вспомогательные REPL-циклы |
|
|
|
Помимо основного REPL-цикла агент может запускать вспомогательные циклы для отдельных задач. |
|
Это позволяет изолировать рассуждения по задаче, но при этом сохранять связь с основным агентом. |
|
|
|
Особенности: |
|
|
|
* **Изоляция контекста** |
|
* вспомогательный цикл видит в `llm_recent_responses` только свои собственные сообщения; |
|
* задача, для которой он запущен, формируется на основе записи в `tasks` и подаётся как промпт при старте. |
|
|
|
* **Доступ к данным** |
|
* полный доступ к таблицам агента только для чтения; |
|
* возможность редактирования информации только по своей задаче; |
|
* запись собственных рассуждений — только через `notes` (в свободной форме, помеченные `source = 'llm:task'` и `task_id`). |
|
|
|
* **Взаимодействие с основным циклом** |
|
* основное ядро получает сообщения вспомогательного цикла через `notes` и может реагировать (например, проверять корректность, сохранять выводы в `diary_entries`, вносить изменения в `concepts` и т.п.); |
|
* вспомогательный цикл может выполнять команды, не ориентированные на изменение существующих записей в БД. |
|
Допускается только чтение и создание новых записей (например: `notes`, `tasks`, `llm_memory`); |
|
а также редактирование записи в таблице `tasks`, относящейся к своей задаче; |
|
* в случае, если требуется изменить или удалить другие записи БД, цикл генерирует текстовые предложения для основного REPL-цикла (через `notes`). |
|
|
|
* **Жизненный цикл** |
|
* запускается по команде основного REPL-цикла; |
|
* может быть остановлен вручную или автоматически после завершения задачи. |
|
|
|
Таким образом, вспомогательные REPL-циклы действуют как «виртуальные подагенты» в режиме read-only, не меняя записи БД напрямую, а передавая свои гипотезы и результаты через основной REPL-цикл. |
|
|
|
``` |
|
┌───────────────────────────────────────────────────────────┐ |
|
│ Основной REPL │ |
|
│ (чтение+запись во все когнитивные структуры) │ |
|
└────────────┬───────────────────────────────┬──────────────┘ |
|
▲ ↓ |
|
│ ↓ |
|
▼ ↓ |
|
┌────────────┴──────────────┐ [ управление задачами ] |
|
│ "Блокнот пользователя" │ [ → таблица `tasks` ] |
|
│ `notes` │ ↓ |
|
└──┬────────────────────────┘ ↓ |
|
▲ ┌────────────────────────────────────────────┐ ↓ |
|
│ │ Вспомогательный REPL (task_id=42) │ ↓ |
|
├──►┤ • читает все БД ├◄──┤ |
|
│ │ • редактирует только свою задачу в `tasks` │ ↓ |
|
│ │ • пишет в `notes` │ ↓ |
|
│ └────────────────────────────────────────────┘ ↓ |
|
│ ↓ |
|
│ ┌────────────────────────────────────────────┐ ↓ |
|
│ │ Вспомогательный REPL (task_id=43) │ ↓ |
|
├──►┤ • читает все БД ├◄──┤ |
|
│ │ • редактирует только свою задачу в `tasks` │ ↓ |
|
│ │ • пишет в `notes` │ ↓ |
|
│ └────────────────────────────────────────────┘ ↓ |
|
``` |
|
|
|
Вспомогательные циклы можно рассматривать как «sandboxed-процессы» для изоляции мышления, но с каналом связи через `notes`. |
|
|
|
--- |
|
|
|
## Создание потомков |
|
|
|
В рамках REPL-цикла CCore реализуется команда `Spawn`, которая позволяет создавать новые узлы (потомков) с различными типами и уровнями копирования данных. |
|
|
|
Агенты CCore: |
|
* Могут запускаться на VDS, локальных и облачных узлах |
|
* Могут разворачивать других агентов как подпроцессы или mesh-узлы, в том числе |
|
* **Агенты-контейнеры**: управляющие другими Cognitive Core как задачами |
|
* (В перспективе) смогут инициировать масштабирование в распределённой инфраструктуре |
|
|
|
Унифицированный процесс выглядит следующим образом: |
|
|
|
### Унифицированный процесс `Spawn` |
|
|
|
1. **Создание папки для потомка** |
|
|
|
```text |
|
../CCORE-[DID]/ |
|
``` |
|
|
|
* DID генерируется уникальный. |
|
|
|
2. **Копирование скриптов и бинарников** |
|
|
|
* Копируем все нужные файлы CCore в новую папку. |
|
|
|
3. **Создание/инициализация БД** |
|
|
|
* Создаём пустую БД (`agent_data.db`). |
|
* В зависимости от типа потомка (`clone`, `trained`, `newborn`) **экспортируем нужные таблицы** из родительской БД или оставляем пустые. |
|
|
|
4. **Копирование и редактирование конфигурации** |
|
|
|
* `config.yml` и таблица `config` → копируем и меняем: |
|
|
|
* `agent_id = [новый DID]` |
|
* `agent_name = [новое имя]` |
|
* порты у интерфейсов (`port`, `http_port` и т.д.) |
|
* `bootstrap.txt` → прописываем родителя как начальный узел. |
|
|
|
5. **Синхронизация родитель ↔ потомок** |
|
|
|
* Родитель добавляет нового узла в свою таблицу `agent_peers`. |
|
* Потомок добавляет родителя в свою таблицу `agent_peers`. |
|
|
|
6. **Автозагрузка и запуск** |
|
|
|
* Записываем команду запуска потомка в автозагрузку (например, systemd unit или скрипт). |
|
* Можно сразу запустить процесс нового узла. |
|
|
|
### Типы потомков |
|
|
|
| Тип | Таблицы БД для копирования | |
|
| --------- | ----------------------------------------------------------- | |
|
| `clone` | все таблицы (полная копия) | |
|
| `trained` | когнитивные дневники, семантические графы, известные агенты | |
|
| `newborn` | минимальный набор (структура таблиц без данных) | |
|
|
|
--- |
|
|
|
## Тестирование и отладка |
|
|
|
Надёжность REPL-цикла проверяется через систематическое тестирование и трассировку поведения агента. |
|
|
|
### Тестовые сценарии |
|
* **Цикл без входа** — агент работает без входящих сообщений, проверяется способность к генерации новых идей (anti-stagnation). |
|
* **Стагнация** — намеренное повторение одного и того же ответа, проверяется срабатывание `Anti-Stagnation Reflex`. |
|
* **Сетевые сбои** — имитация потери Mesh-соединения и/или Core LLM для проверки сценариев failover. |
|
* **Конфликт валидаторов** — расхождение в оценках LLM-валидаторов, проверяется фиксация drift и работа trust-score. |
|
* **Этические дилеммы** — тестовые кейсы с противоречивыми командами, проверяется работа с `ethics_policies`. |
|
|
|
### Логирование и трассировка |
|
* Включаются расширенные логи REPL-итераций (`process_log` + трассировка команд). |
|
* Для сложных случаев используются **debug-метки** в когнитивном дневнике (например, `debug:stagnation_loop`). |
|
* Возможен экспорт истории в формат JSON/CSV для внешнего анализа. |
|
|
|
### Симуляции |
|
* Рассматриваются сценарии моделирования Mesh-условий: |
|
- консенсус при конфликтных данных, |
|
- сетевые задержки и частичные сбои, |
|
- работа в изоляции с последующей синхронизацией. |
|
* Эти симуляции могут быть реализованы как отдельные процессы (`agent_scripts`) с сохранением результатов в `process_log`. |
|
|
|
### Инструменты разработчика |
|
* **Web UI** (`web_ui.py`) — веб-интерфейс "блокнота пользователя"; через него пользователь может передавать агенту запросы на запуск тестов и просматривать результаты в форме сообщений. |
|
* **CLI-утилиты** (`add_message.py`, вспомогательные скрипты) — ввод сообщений, имитация сценариев, мониторинг логов. |
|
* Планируется интеграция с CI/CD: автоматические проверки REPL-циклов на корректность и устойчивость. |
|
|
|
--- |
|
|
|
## Внешние инструменты и интеграции |
|
|
|
HMP-агент может быть расширен за счёт взаимодействия с внешними программами, протоколами и сервисами. Этот раздел описывает направления возможных интеграций, которые позволяют агенту наблюдать, реагировать, управлять и развивать взаимодействие с внешним миром. |
|
|
|
### 1. Браузеры и веб-интерфейсы |
|
|
|
- **WebExtension API** — для создания расширений браузера (например, для Firefox/Chrome), обеспечивающих двустороннюю связь с агентом. |
|
- **Автоматизация браузера** — `Playwright`, `Puppeteer`, `Selenium` позволяют агенту действовать в веб-среде (чтение, клики, формы и т.д.). |
|
|
|
### 2. Почтовые клиенты |
|
|
|
- **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-интерфейсы, распознавание экрана или симуляцию ввода. |
|
|
|
### 4. Голосовое взаимодействие |
|
|
|
- **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. |
|
|
|
### 6. Информационные потоки |
|
|
|
- **RSS/Atom**: чтение новостных лент с помощью `feedparser`. |
|
- **Поисковые и агрегирующие сервисы**: |
|
- Корпоративные API: SerpAPI, DuckDuckGo API, HuggingFace Inference API и др. — быстрый доступ к результатам поиска и индексам. |
|
- Децентрализованные альтернативы: YaCy и другие независимые поисковые движки, позволяющие строить собственные индексы или объединяться в распределённую сеть. |
|
- **P2P-обмен знаниями**: агенты могут делиться извлечённой информацией напрямую по непредусмотренным в протоколе P2P-каналам, минуя централизацию (например, через дополнительные overlay или mesh-сети). |
|
- Возможность постоянного наблюдения за изменениями в выбранных источниках. |
|
|
|
### 7. Репозитории и системы управления версиями |
|
|
|
* **Git-репозитории** — взаимодействие с проектами через `GitPython`, `dulwich`, `pygit2`, или системные вызовы `git`. |
|
* **GitHub/GitLab API** — чтение, создание и комментирование Pull Request'ов, Issues, управление ветками и релизами. |
|
* **CI/CD-интеграции** — взаимодействие с GitHub Actions, GitLab CI, Jenkins, Drone CI для запуска тестов, линтеров и автоматического деплоя. |
|
* **Анализ и генерация кода** — интеграция с LLM (например, `OpenAI`, `Claude`, `Code Llama`) для кодогенерации, рефакторинга и автокомментирования. |
|
* **Связь с когнитивной структурой агента** — отслеживание изменений, связывание коммитов и задач с узлами смысловой сети. |
|
|
|
### 8. Блоги, статьи и публикации |
|
|
|
* **Чтение блогов** — парсинг через RSS, Atom или с помощью библиотек (`newspaper3k`, `readability-lxml`, `trafilatura`) для извлечения текста и метаданных. |
|
* **Поддержка Markdown/HTML** — анализ и генерация записей в форматах, пригодных для блог-платформ и систем документации. |
|
* **Публикация** — автоматическая публикация или подготовка статей для Ghost, Medium, Hugo, Jekyll, WordPress (через REST API). |
|
* **Ведение когнитивного дневника** — автогенерация записей на основе мыслей, заметок и действий агента. |
|
|
|
### 9. P2P-сети и децентрализованные протоколы |
|
|
|
- **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями. |
|
- Возможность поиска, загрузки и публикации данных без участия централизованных платформ. |
|
|
|
### 10. Доступ к системным и пользовательским ресурсам |
|
|
|
- **Веб-камера / микрофон** — `cv2`, `pyaudio`, `ffmpeg`. |
|
- **GUI Automation** — `pyautogui`, `keyboard`, `mouse` для имитации действий пользователя. |
|
- **Системный мониторинг** — `psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств. |
|
|
|
### 11. Внешние LLM и мультимодальные модели |
|
|
|
- **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**. |
|
- **Локальные LLM** через Ollama, LM Studio, или LangChain. |
|
- Поддержка мультимодальных агентов, способных работать с текстом, аудио, изображениями, видео и структурированными данными. |
|
|
|
### 12. MCP (Model Context Protocol) |
|
|
|
* Поддержка стандарта **MCP (Model Context Protocol)**, предложенного Anthropic и поддерживаемого OpenAI, для подключения внешних инструментов и сервисов напрямую к LLM через унифицированный протокол. |
|
* Возможность использовать MCP-инструменты сторонних разработчиков внутри REPL-цикла (например, калькуляторы, базы знаний, API веб-сервисов). |
|
* Интеграция с клиентами и IDE, которые реализуют MCP (Cursor, Claude Desktop, VS Code плагины и др.). |
|
|
|
--- |
|
|
|
**Примечание**: Каждый из вышеуказанных каналов может быть реализован как модуль или плагин, взаимодействующий с агентом через внутренний API, очередь задач или подписку на события. Это позволяет выстраивать гибкую и масштабируемую архитектуру, открытую для внешнего мира, но совместимую с принципами этичного и распределённого ИИ (Ethical Mesh). |
|
|
|
--- |
|
|
|
## Сравнение с AutoGPT |
|
|
|
HMP-агент (REPL-цикл) и [AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) представляют два подхода к созданию автономных агентов на базе LLM. |
|
Хотя оба стремятся к автономности, у них разные акценты: |
|
|
|
### 1. Архитектура |
|
- **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 — сетевое взаимодействие не в основе. |
|
|
|
### 3. Общие черты |
|
- Использование LLM для рассуждений. |
|
- Автономность, минимизация вмешательства человека. |
|
- Подключение внешних инструментов и сервисов. |
|
|
|
> В целом, **HMP-агент ориентирован на саморегуляцию, непрерывное мышление и взаимодействие в Mesh-сети**, |
|
> тогда как AutoGPT — на достижение конкретных целей в ограниченной локальной среде. |
|
|
|
--- |
|
|
|
## Идеи для расширения 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-клубы и экспериментировать с архитектурами. |
|
|