feat(pegas-memory): Tier-1 self-improvement tools (commit + staleness)

- memory_commit: closes the 'commit hole' — writes verified answers from
  closed gaps back into atoms (mandatory dedup); leaves gap open if no
  verified answer exists. Reads verified status from PostgreSQL (source of
  truth), not the Qdrant projection.
- memory_stale: staleness guard with two signals — content-staleness
  (re-fetch + LLM verdict, needs proxy for foreign sites) and age-staleness
  (proxy-free fallback by pm_document.fetched_at, max_age_days).
- db: populate pm_document.fetched_at on upsert (freshness signal).
- docs: README/AGENTS/ARCHITECTURE/EXAMPLES updated (18 tools).
- self_improve.py: new module (227 lines).
This commit is contained in:
n1kt4r committed 2026-10-15 22:06:30 +05:00
1 parent a4c4a766c1
commit eca8a11e23
8 files changed
+439 -6

No files matched your search

+68 -1
View File
@@ -92,6 +92,73 @@ outbox — CDC-журнал для синка в Qdrant + Memgraph
- Memgraph in-memory: объём графа ограничен RAM.
- Дистилляция зависит от качества локальной LLM — нужна верификация.
## Как проверять
## Самообучение (self-improvement) — статус и планы
### Что работает (4 механизма, но НЕ замкнутый loop)
1. **Верификация** (`verify_atom`/`memory_verify` + `verify.py`). LLM self-critique
(`duplicate | corroborates | contradicts`) + **межисточная конфирмация** (≥1 другой
`doc_id`, cosine ≥ 0.90) → ставка растёт, статус `verified`. Самое зрелое звено.
2. **Логическая инференция** (`memory_infer` + `inference.py`). Применение правил к рёбрам
графа до fixpoint (`imports → depends_on` и т.д.). ⚠️ Даст **только связи**, не новые факты.
Правила **статичные/вручную написанные**, новых не выводит сама.
3. **Синтез контекста** (`memory_get_context`). Ищет Qdrant, кластеризует + суммирует атомы.
Может **создавать gap** из исходного текста → есть *реактивное* появление вопроса из источника.
4. **Эпизодические следы** (`pm_episodic_trace`). План/действие/наблюдение/рефлексия —
отдельно от БЗ. Самый «рефлексивный», но **условный**, не привязанный к gap.
### Что не хватает (дыры в петлях, а не в примитивах)
| Пробел | Почему критично |
|---|---|
| **① Цепочка gap↛answer («дыра commit»)** | При закрытии gap **ответ не автоматически
пишется обратно в атомы** → знания улетучиваются, приходится пере-исследовать. |
| **② Самообучение схемы инференции** | Ничего не *предлагает новые правила* из повторяющихся
`verified`-атомов. Это как раз слабое место Hermes-аналога. |
| **③ Сталкнутость/забвение (staleness guard)** | `verify` ставит `verified`, но **ничто не
помечает `stale`** пере-проверкой по свежему источнику. Путь →`stale` не идёт автоматически. |
| **④ Поверхность противоречий** | `verify` ловит конфликт только в окрестности атома. Ничего
не сканирует весь граф → противоречия не переходят в gap автоматически. |
| **⑤ Процедурная/рецепт-память** | Повторяющиеся успешные воркфлоу не ловятся как переиспользуемые атомы. |
| **⑥ Пассивное создание gap** | Gap создаются через `add_gap` (вручную) или из `memory_get_context`.
Нет авто-обнаружения из не-верифицированного/переносного контента. |
### Приоритет
Hermes-анализ показал: Pegas сильна в **«detect»** (verify, infer), слаба в **«commit»** и
**«maintain»**. Слабые места — **feedback-петли**, а не примитивы. Поэтому максимальный выигрыш:
① дыра «commit» × ③ гвард сталкнутости × ② самообучение правил инференции — это **закрывает loop**.
### Планируемые улучшения (Tier)
- **Tier 1 — высокий приоритет, безопасно / small**
- ① **Закрыть дыру** — после `verify`, подняв атомы из gap, запустить синтез обратно в
`memory_ingest/synthesis` (письмо верифицированного ответа в атомы).
- ③ **Гвард сталкнутости** — `update_status`: пере-`web_search` по URL/date атома;
противоречит/устарел → `stale`. Внедряет путь →`stale`, который сейчас не ходит.
- **Tier 2 — средний приоритет**
- ② **Самообучение правил инференции** — `memory_infer` **предлагает кандидаты**
`logical_rule` на ревью (никогда не применяет автоматически).
- ⑤ **Атомные паттерны действий** — агент действует (это я через `mcp__pegas-memory__*`),
поэтому повторы успешных `/запрос` или воркфлоу ≥N раз с `verified`-результатом →
**атомный** паттерн-рецепт (не файлы Hermes, а атомно с dedup).
- **Tier 3 — структурные**
- ④ **Скунт-скан** — периодический бэч-проход графа на противоречия → авто gap.
- ⑥ **Авто-обнаружение gap** — `verify` открывает gap на конфликт/дыру в источнике.
### Atom-efficiency guardrail (обязательное)
Чтобы self-improvement **не скатился в гермесовский файловый балласт**, все записи и
обновления подчинены лимитам эффективности атомной памяти (преимущество Peras над Hermes):
- **Dedup обязателен** при записи (`memory_store`/synthesis): cosine ≥ 0.90, без дублей.
- **Лимит web/пере-записей** (staleness-③): batchами + сэмплом, не per-atom без порога.
- **Bound на рост графа/атомов**: Memgraph in-memory → RAM-лимит, авто-`stale`/архив старых.
- **Атомно, а не файльно**: паттерны-рецепты хранятся как типизированные атомы, не как
накопитель markdown-файлов (как у Hermes) → no prompt-bloat.
### Как проверять
- recall@k на реальных запросах против существующей `knowledge_base` (bge-m3 384-dim).
- Latency эмбеддинга + потребление GPU параллельно с LLM (a2000 12 GB).
- **Самоеобучение**: доля авто-закрытых gap «commit»-петлёй, доля атомов, ушедших в `stale`
за квартал, доля предложенных → принято правил инференции (ревью-соотношение).