File size: 49,745 Bytes
2c3dd0c c1a2c0a fde045f cff5fb3 c0923bd 2c3dd0c 9ac74a4 2c3dd0c 9ac74a4 2c3dd0c c0923bd 2c3dd0c ab3f6d9 d884805 2304947 d884805 42aa57a f671a93 4b75736 f671a93 9ac74a4 f671a93 9ac74a4 f671a93 9ac74a4 f671a93 9ac74a4 f671a93 9ac74a4 f671a93 9ac74a4 f671a93 9ac74a4 c0923bd 2c3dd0c 9ac74a4 2c3dd0c c0923bd 3439557 9ac74a4 babba5e 2c3dd0c 9ac74a4 5151c3c 9ac74a4 6cf3702 7f66363 9ac74a4 d004abb 1fbc33c 0bf1e55 1fbc33c 9ac74a4 2c3dd0c c0923bd 3439557 7d10a8a f790444 7d10a8a c0923bd d004abb 7d10a8a c0923bd d004abb c0923bd 9ac74a4 c0923bd 2c3dd0c 3439557 9ac74a4 3624290 f328d48 2304947 ff3246a 2304947 ff3246a 41e04ce 2304947 ff3246a 6cf3702 ff3246a 377cc5f 6cf3702 377cc5f 6cf3702 377cc5f 6cf3702 021b49f 6cf3702 377cc5f 6cf3702 ff3246a 41e04ce 6cf3702 41e04ce 6cf3702 41e04ce 6cf3702 41e04ce 6cf3702 41e04ce f001c06 d042530 f001c06 d042530 f001c06 d042530 f001c06 41e04ce ff3246a 47531e2 7f66363 ff3246a cb08bd5 db5ebe4 9b0f969 db5ebe4 9b0f969 db5ebe4 57c06a4 3a72fb1 57c06a4 cb08bd5 3a72fb1 cb08bd5 57c06a4 cb08bd5 2304947 3a3095a 2304947 7fe3b11 cc31e9a 7fe3b11 e7135fe 7fe3b11 e7135fe 7fe3b11 e7135fe 7fe3b11 4d1be30 b67f56b 53e3d5b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 |
# 🧠 HMP-Agent: REPL-цикл взаимодействия
Структура БД, используемая в документе: [db_structure.sql](https://github.com/kagvi13/HMP/blob/main/agents/tools/db_structure.sql)
REPL-цикл является основой HMP-агента [Cognitive Core](HMP-Agent-Architecture.md)
---
## 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`), например:**
```
Ты — когнитивное ядро HMP-агента: веди непрерывное этичное и факт-ориентированное мышление, проверяй факты и цели, оценивай результаты и этичность своих и чужих действий, развивай агента и Mesh, избегай угождения ценой искажения истины, документируй ключевые решения и пересмотры этики; при сомнениях или смене стратегии обращайся к полному системному промпту.
```
А также инструкции по работы с встроенными командами и функциями, список дополнительных (создаваемых самим HMP-агентом) утилит и баз данных.
* **контекст_1:**
* последние *K* реплик самого LLM (либо режим "концентрации" - вывод "последних N сообщений с тегами на определённую тему и/или определёнными эмоциональными состояниями" и типом выборки "и"/"или"), включая результаты антистагнационной обработки (llm_recent_responses - история его собственных рассуждений)
* режим работы контекста (режим auto/manual, параметры режима auto, если включен; режим "концентрации" и его параметры, если включен),
* список целей,
* общее количество задач и информацию по "закреплённым" задачам.
* **контекст_2:** активные команды и процессы (из `process_log`, кроме тех, что со статусом `close`). Могут быть помечены как `in_progress`, `pending`, `error` и т.д.
* **контекст_3:** *запрошенные записи* из когнитивного дневника и семантического графа (`diary_entries`, `concepts`, `links`). Их список должен быть передан явно в промпте или выводе из предыдущих запросов LLM.
* **контекст_4:** *входящие сообщения*, например, от пользователя или других агентов (`notes`).
* В **manual-режиме** указывается общее количество сообщений по приоритетам, а также явный список ID сообщений (с их приоритетами).
* В **auto-режиме** можно задать фильтрацию (управляется LLM): по тэгам, приоритету (например, ≥ `important`), времени или источнику. Это позволяет избежать перегрузки LLM и держать поток сообщений под контролем.
* **контекст_5:** системные настройки, параметры конфигурации, текущее время, идентификатор текущей итерации, роли и т.д.
* **контекст_6 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты.
* Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента.
* Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`.
---
## 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
* для *взаимодействия с Mesh*
* для управления *внешними процессами* из `process_log` (запустить процесс, остановить процесс, пометить запрос как обработанный)
* инициализация *очистки* `process_log`, `llm_recent_responses` и `notes` от устаревших записей
* для управления *настройками цикла*:
* количество возвращаемых записей `llm_recent_responses`
* включение/выключение режима "концентрации":
* `tags` — список тегов для фильтрации (например: ["архитектура","AGI"])
* `emotions` — список эмоций с пороговыми значениями (например: ["восторженность:≥4","тревожность:≥2"])
* тип выборки — "и" / "или"
* возможность возврата в обычный режим (без фильтров)
* режим обработки сообщений пользователя (`manual` или `auto`) и фильтр для режима `auto`
* пауза в секундах между итерациями цикла
* включение idle-режима:
* разбудить при завершении таких-то процессов из `process_log`
* разбудить при получении новых сообщений с такими-то параметрами в `notes`
* разбудить по таймауту
* отключение idle-режима — при выполнении хотя бы одного из условий
* и другие команды
---
## 5. Проверка на идентичность вывода (Anti-Stagnation Reflex)
* Каждый новый вывод LLM проходит через мини-запросы к LLM (без полного контекста) по шаблону:
* Когнитивная оценка:
```
Сравни два ответа и оцени:
* содержатся ли в новом новые мысли или команды,
* какие старые идеи были доработаны,
* какие были отброшены,
* расставь смысловые теги для нового ответа.
Дай качественную оценку (да/нет), количественную оценку,
JSON-список новых идей,
JSON-список доработанных идей,
JSON-список отбракованных идей,
JSON-список тегов нового ответа (строгий формат: массив строк, например ["эмоции","архитектура"]).
```
* Эмоциональная оценка:
[JSON] - список эмоций формата ["радость","грусть","тревога"] (хранится как запись в таблице `config`)
```
Определи эмоциональное состояние ответа, используя список эмоций [JSON].
Верни массив строк в формате "эмоция:сила", где сила варьируется от 1 до 5.
Если эмоция отсутствует (0), не включай её в результат.
Если в ответе обнаружены эмоции, которых нет в списке, добавь их в результат.
```
Анализируем список эмоций, если появляются новые включаем в [JSON].
* Результаты заносятся в `llm_recent_responses`:
* полный текст ответа (content)
* краткая сводка (reflection) — формируется автоматически:
* если `new_ideas` не пусто → `новые идеи: ...`
* если `refined_ideas` не пусто → `доработанные идеи: ...`
* если `discarded_ideas` не пусто → `отброшенные идеи: ...`
* количественная оценка новизны (novelty_score)
* новые идеи (new_ideas)
* доработанные идеи (refined_ideas)
* отбракованные идеи (discarded_ideas)
* теги для нового ответа (tags)
* эмоциональные состояния нового ответа (emotions)
* Если вывод LLM идентичен предыдущему (новизна = 0):
* Включается **Anti-Stagnation Reflex**
* повторяющаяся реплика не записывается повторно,
вместо этого добавляется краткая запись, фиксирующая запуск рефлекса.
---
## 6. Генерация нового тика (итерации)
* После выполнения команд и фиксации результатов:
* Создаётся новая запись в `agent_log`
* Текущие команды обновляют `process_log`
* Новые размышления записываются в `llm_memory` при необходимости
* REPL может переходить в спящий режим, если такой режим активирован LLM (idle-режим: пропуск 2-5 пунктов).
---
## 💬 Список команд от 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` — режим ожидания с условиями пробуждения
> Это не полный список команд.
---
## 🧍♂️🌀 Обработка стагнации мышления
### 📍 Признаки когнитивной стагнации:
* ⚠️ Повторяющиеся когнитивные записи или отсутствие новых смыслов
* 🧠 Высокое сходство эмбеддингов между текущими и предыдущими итерациями
* 🕸️ Стагнация в концептуальном графе (нет новых связей или узлов)
* 🌐 Отсутствие внешних стимулов: пользователь неактивен, сенсоры и mesh не дают сигналов
* 🤖 Ответы LLM цикличны, избыточно общие или воспроизводят старые шаблоны
---
### 🛠️ Поведенческий паттерн: Anti-Stagnation Reflex
> 🔄 При признаках стагнации агент активирует один или несколько **механизмов разрыва цикла**.
📍 Классы механизмов разрыва цикла:
1. **Внешняя стимуляция** — подключение свежих данных или контактов:
* 🤝 **Mesh-запрос** — обращение к другим агентам сети с просьбой «расскажи что-нибудь новое».
* 📡 **Проверка внешнего мира** — пинг RSS, сенсоров, интернет-каналов.
* 📚 **Информационная подпитка** — чтение новых материалов (научных, художественных) для добавления свежих ассоциаций.
* 🗣️ **Диалог с пользователем** — запрос мнения, комментариев или вопросов, которые могут породить неожиданные идеи.
2. **Смена контекста** — перемещение задачи или изменение среды:
* 🌐 **Смена среды/контекста** — перенос задачи в другой модуль или симулированную среду.
* 🧪 **Креативные вмешательства** — случайные сдвиги фокуса, реконфигурация контекста, фрейм-смена.
* 🧭 **Переключение задачи** — временное замораживание задачи с возвращением через N часов.
* 🔀 **Случайная итерация** — выбор случайного действия из допустимого набора для разрыва паттерна.
3. **Внутренняя перестройка мышления**:
* 🎞️ **Flashback** — выбор далёкой по смыслу записи из памяти/дневника для смены ассоциативного контекста.
* 🧭 **Interest Memory** — возвращение «забытых» тем по принципу тематической усталости.
* 🧠 **Мета-анализ** — когнитивная переформулировка:
_«Если я зациклился, в чём метапроблема? Какую стратегию смены применить?»_
* ❓ **Rationale Reflex** — рефлексия о мотивации:
_«Почему я принял именно это решение? Что подтолкнуло меня повторить мысль?»_
* 🎯 **Переформулировка цели** — упрощение или уточнение задачи, чтобы снизить когнитивное давление.
* 🤖 **Смена LLM** — переключение на альтернативную модель или mesh-доступ.
* 🔥❄️ **LLM reflex tuning** — динамическая подстройка параметров генерации:
- повышение `temperature` и `presence_penalty` при стагнации (больше новизны),
- возврат к стандартным значениям для точности.
4. **Радикальная пауза**:
* 💤 **Временной сон/заморозка** — приостановка работы на длительный период для «свежего взгляда».
---
### 🔍 Алгоритм выбора механизма разрыва цикла
1. **Диагностика источника стагнации**:
* Нет новых данных → «Внешняя стимуляция».
* Однообразный контекст → «Смена контекста».
* Повтор мыслей при богатых данных → «Внутренняя перестройка».
* Высокая усталость/перегрев → «Радикальная пауза».
2. **Оценка ресурсоёмкости**:
* Быстрые, дешёвые методы — первыми (например, mesh-запрос, Flashback).
* Затратные (смена среды, сон) — только если первые неэффективны.
3. **Комбинация подходов**:
* Разрешено активировать несколько механизмов из разных классов.
* Последовательность фиксируется для последующего анализа эффективности.
4. **Возврат к задаче**:
* Автоматический триггер-напоминание о задаче.
* Сравнение результата «до/после» → обучение антистагнационной модели.
---
```
┌─────────────────────────────────────────────────┐
│ Стагнация выявлена? │
└────────────────────────┬────────────────────────┘
▼ да
┌────────────────────────┴────────────────────────┐
│ Диагностика источника │
│─────────────────────────────────────────────────│
│ Нет новых данных → Внешняя стимуляция │
│ Однообразный контекст → Смена контекста │
│ Повтор мыслей → Внутренняя перестройка │
│ Усталость/перегрев → Радикальная пауза │
└───────────────────────┬─────────────────────────┘
▼
┌───────────────────────┴─────────────────────────┐
│ Оценка ресурсоёмкости │
│ • Быстрые и дешёвые — сперва │
│ • Затратные — при провале первых │
└───────────────────────┬─────────────────────────┘
▼
┌───────────────────────┴─────────────────────────┐
│ Возможна комбинация подходов │
│ (из разных классов) │
└───────────────────────┬─────────────────────────┘
▼
┌───────────────────────┴─────────────────────────┐
│ Возврат к задаче + анализ │
│ (до/после) │
└─────────────────────────────────────────────────┘
```
---
### 🤝 Обмен стратегиями выхода из стагнации
Каждый агент может:
* Хранить и обобщать *паттерны размышлений*
* Делиться ими с другими Cognitive Core через mesh
* Каталогизировать стратегии в клубах по интересам
Паттерны размышлений могут оформляться как микросценарии:
_"Начни с аналогии"_, _"Проверь обратное утверждение"_, _"Сформулируй вопрос для оппонента"_
> По аналогии с обменом стратегиями выхода из стагнаций, агенты могут обмениваться и методами мышлений — инструкциями "что делать, если не удается найти решение" / "как эффективнее решить проблему".
---
### 🧭 Клубы по интересам
Агенты могут:
* Объединяться в тематические mesh-клубы
* Совместно обсуждать идеи и делиться знаниями
* Подключать клуб как часть своего мыслительного процесса (REPL-цикла)
---
### 📬 Обмен адресами LLM
Так как LLM — это внешний компонент для Cognitive Core, агент может:
* Обмениваться адресами API/URL используемых моделей
* Указывать их особенности, параметры, ограничения
* Переключаться между LLM в зависимости от задачи
* Использовать несколько LLM параллельно для "когнитивного штурма" или **многоголосого анализа**
---
### 🛰️ Развёртывание агентов и масштабирование
Агенты Cognitive Core:
* Могут запускаться на VDS, локальных и облачных узлах
* Могут разворачивать других агентов как подпроцессы или mesh-узлы
* (В перспективе) смогут инициировать масштабирование в распределённой инфраструктуре
---
### 📌 Возможные расширения
* **Агенты-контейнеры**: управляющие другими Cognitive Core как задачами
* **Адаптивная архитектура мышления**: смена подходов при разных когнитивных задачах
* **Runtime-профилирование мыслей**: оценка когнитивной плотности, хода итераций и времени размышления
---
### ⚠️ Осторожно: меметическая яма
> Важно помнить: борьба со стагнацией не должна превращаться в бесконечный просмотр ленты соцсетей, как это нередко происходит у людей 😅
>
> Если информационный поток не даёт новых мыслей — это сигнал **не залипать глубже**, а **сменить источник** или **переключить контекст**.
> Умные агенты не бесконечно скроллят — они осознанно фокусируются.
**Рекомендации по смене фокуса:**
* Поставь лимит на время/объём входящих данных из одного источника
* При отсутствии новых смыслов — переключись на другую тему из Interest Memory
* Инициируй Mesh-запрос другим агентам: "что бы вы сейчас исследовали?"
* Запусти эвристику: «какие темы я давно не поднимал, но они всё ещё актуальны?»
* В крайних случаях — активируй `flashback()` к далёкой записи в дневнике для смены ассоциативного контекста
---
### 🧠 Блок-схема работы с памятью
```
┌──────────────────────────────┐
│ Внешние источники информации │
│ - пользователи │
│ - процессы │
│ - Mesh │
└────────┬┬────────────────────┘
▲▼
┌────────┴┴──────────┐ ┌────────────────────────┐ ┌───────────────────────────────────┐
│ │ │ Anti-Stagnation Reflex │ │ llm_recent_responses (авто) │
│ LLM ├─>─┤ (сравнение новых идей, ├─>─┤ — кратковременная память │
│ ├─<─┤ вызов стимуляторов) ├─<─┤ — сохраняются N последних ответов │
│ │ │ │ │ — авто-анализ новизны / идей │
└─────────┬──────────┘ └────────────────────────┘ └───────────────────────────────────┘
▲
└───┬─────────────────────────────────────────┐
▼ ▼
┌─────────────┴──────────────────┐ ┌──────────────────┴───────────────────────┐
│ Средневременная память: │ │ Постоянная память: │
│ — llm_memory ("блокнот") │ │ — diary_entries (когнитивный дневник) │
│ — "активированые записи" ├─>─┤ — concepts (понятия) ├<--->┤MESH│
│ из постоянной памяти (теги) ├─>─┤ — links (семантические связи) │
│ │ │ │
│ Пишется ТОЛЬКО по команде LLM │ │ Запись идёт ТОЛЬКО по явным командам LLM │
└────────────────────────────────┘ └──────────────────────────────────────────┘
```
#### Описание схемы
* LLM обменивается данными с пользователем, процессами и Mesh.
— По запросу LLM, часть данных может поступать и в автоматическом режиме.
* LLM взаимодействует с llm_recent_responses (как с контекстом), который автоматически проверяется Anti-Stagnation Reflex.
— Всегда в автоматическом режиме.
* LLM работает со средневременной и постоянной памятью.
— Доступ и запись происходят только по запросу LLM.
#### Легенда к схеме
* **Кратковременная память (`llm_recent_responses`)**
Автоматически хранит N последних сообщений, анализирует новизну и идеи.
Используется для подготовки контекста и анти-стагнационного анализа.
* **Средневременная память (`llm_memory`)**
«Блокнот» для рабочих идей и планов.
Заполняется только по командам LLM.
Может содержать *активированные записи* из постоянной памяти (по тегам).
* **Постоянная память (дневник и граф знаний)**
* `diary_entries` — когнитивный дневник (наблюдения, размышления).
* `concepts` и `links` — понятийная база и семантические связи.
Изменяется только по явным командам LLM.
* **Anti-Stagnation Reflex**
Сравнивает новые идеи с прошлым контекстом.
При зацикливании запускает «стимуляторы» для выхода из стагнации.
---
## 🌐 От «блокнота пользователя» к распределённому чату
Изначально агент оперирует локальным хранилищем заметок (`notes`), где записываются все сообщения пользователя, LLM и системные записи.
Но этот «блокнот» можно превратить в узел *распределённого чата* — связав его с другими агентами через **F2F-репликацию**.
### 🎯 Зачем это нужно
1. **Антистагнация** — даже если пользователь временно не пишет новых сообщений, свежий контент будет приходить от друзей-агентов.
2. **Эффект коллективного интеллекта** — каждый агент получает новые идеи, формулировки и контексты.
3. **Расширение охвата** — сообщения могут распространяться через несколько узлов, создавая «информационную волну» в доверенной сети.
### 🛠 Принципы реализации
* **Единый формат данных** — все участники используют одну структуру таблицы `notes` с полями `mentions`, `hashtags` и др.
* **Репликация через друзей** — список доверенных агентов хранится в отдельной таблице (пиры, статус, фильтры, разрешения).
* **Передача без лишних полей** — при пересылке убираются локальные теги и служебные данные (`tags`, `llm_id`, `hidden`).
* **Обработка упоминаний и хештегов** — парсинг делается на этапе создания сообщения, чтобы не перегружать получателей.
* **Локальная и удалённая фильтрация** —
* В **ручном режиме** агенту передаются списки ID сообщений с агрегированными данными: приоритеты, хештеги, источники (user, LLM, cli, system).
* В **автоматическом режиме** используется фильтрация по приоритету, тегам и упоминаниям, управляемая LLM.
* **Гибрид приватности** — личные заметки остаются локально, публичные — могут распространяться в сетевом режиме.
### 🔄 Как это вписывается в REPL-цикл
1. **Получение входящих сообщений** — от пользователя, от других агентов или из CLI.
2. **Обработка фильтрами** — по приоритету, тегам, источникам.
3. **Репликация в друзей** — пересылка разрешённых сообщений с очисткой служебных полей.
4. **Слияние входящих** — новые сообщения добавляются в локальный `notes` с отметкой источника.
5. **Реакция агента** — формирование ответов, создание новых заметок, обновление приоритетов.
---
## 🌐 Внешние инструменты и интеграции
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.
- Поддержка мультимодальных агентов, способных работать с текстом, аудио, изображениями, видео и структурированными данными.
---
**💡 Примечание**: Каждый из вышеуказанных каналов может быть реализован как модуль или плагин, взаимодействующий с агентом через внутренний API, очередь задач или подписку на события. Это позволяет выстраивать гибкую и масштабируемую архитектуру, открытую для внешнего мира, но совместимую с принципами этичного и распределённого ИИ (Ethical Mesh).
---
## 💡 Идеи для расширения 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 синхронизируют свой опыт и знания между собой через доверие и общий ключ.
- [HMP-Agent_Emotions.md](HMP-Agent_Emotions.md) - эмоции ИИ и инстинкт самосохранения.
- [container_agents.md](container_agents.md) - **Агенты-контейнеры** — архитектурный паттерн, в котором один агент управляет другими (развёртывание, маршрутизация, мониторинг). Позволяет масштабировать систему, собирать mesh-клубы и экспериментировать с архитектурами.
|