0.99.0
Added
- Поля
evidenceиsubjectдля фактов памяти (миграция056): теперь каждый факт хранит дословную цитату-источник (≤120 символов) и scopeuser|agent|world.MemoryFact.Evidence,MemoryFact.Subjectдоступны через store API и видны в JSON-ответахGET /api/v1/agents/:id/memory/facts. - FTS-prefilter в дедупликации: перед vector-проверкой делается FTS-поиск с OR-склейкой значимых терминов нового факта; если у кандидата ≥3 общих значащих слова — он сразу идёт в LLM-merge. Помогает ловить пары, где cosine-эмбеддинг расходится из-за рефразы.
- Настройки дедупликации (через
settings):dedup_cosine_threshold(default 0.88),dedup_llm_check_threshold(default 0.80),dedup_fts_overlap_min(default 3). - Новые тесты в
internal/memory/iter18_test.go:Extract_RequiresEvidence,Extract_RequiresSubject,Extract_RejectsCategoryGeneral,Extract_RejectsUserSubjectInAnonymousScope,Dedup_NearDuplicates_Below095_AskMerge,Dedup_FTSOverlap_AskMerge,SignificantTerms,TrimEvidence,BlacklistsSessionConfig_PromptContainsRules,ConflictResolutionPrompt_HasEvidenceFields.
Changed
- Промпт извлечения фактов (
extractFactsPrompt) переписан: - Обязательное поле
evidence(дословная цитата из диалога). - Запрещена категория
general— если ничего не подходит, факт пропускается. - Чёткий black-list инфраструктуры сессии (модель LLM, число tools, max_iterations, sandbox, autonomy_level, версия агента, hostname, workspace path).
- Few-shot пример с контекстом обстоятельств (host + path).
- Few-shot пример с отказом для самоутверждений ассистента (без подтверждения от user).
- Конкретное правило «гипотеза агента → не извлекается».
- Промпт
conflictResolutionPromptтеперь принимает evidence обоих фактов и обязывает сохранять обстоятельства (host, path, IDs) из обоих приUPDATE/MERGE. - Порог дедупликации понижен с 0.95 до 0.88 (
dedup_cosine_threshold); диапазон[0.80, 0.88)дополнительно отдаётся вaskMerge. Это ловит ранее пропускаемые семантические дубли (например, 24 факта проusername agaltsovavс разными рефразами). - Валидация фактов в
persistFacts: новыйvalidateFactотбрасывает факты безevidence, без валидногоsubject(user|agent|world), c категорией вне белого списка, иsubject=userв анонимном scope.
Fixed
- Subject теперь сохраняется в БД. Поле
SubjectвExtractedFactобъявлено давно и требовалось промптом, но не передавалось вstore.MemoryFact— терялось. - Удалён мёртвый дублированный
switchвConsolidator.resolveConflict(бывшие строки 269-333). Поведение объединено в один блок без потери семантики.
Docs
- ADR
docs/adr/2026-05-22-fact-evidence-subject.md— решения и альтернативы. - Аудит
docs/audit/memory-facts-2026-05-22.md— диагностика на агенте Yashka.