Retrieval and memory
После главы вы сможете выбрать между domain tool, retrieval и memory, а также измерить retrieval отдельно от качества final answer.
Не всё прошлое — память
| Объект | Пример | Source of truth | Типичный срок |
|---|---|---|---|
| Transcript | «Где мой заказ?» | Conversation store | Policy-dependent |
| Task state | pending approval | Event projection | До terminal/retention |
| Observation | get_order rev 5 | Domain system + event | До invalidation |
| User memory | язык ответа | Explicit preference store | До удаления/изменения |
| Episodic memory | прошлый успешный сценарий | Curated outcome | Ограниченный |
| Knowledge | cargo policy | Versioned corpus/API | По версии документа |
Сохранить transcript навсегда и назвать это memory — не архитектура: нет namespace, consent, freshness и deletion semantics.
Tool или retrieval?
API-shaped факты лучше читать domain tool: order status, balance, slots. Document-shaped знания подходят retrieval: policy, manuals, product comparison, FAQ.
точный изменяемый record → domain API/tool
неструктурированный корпус → retrieval
устойчивая user preference → scoped memory
текущий progress → task state
Поэтому RAG не обязателен каждому агенту. Для telehealth booking slots важнее API; для pharmacy/policy Q&A — retrieval.
RAG pipeline
Failure может возникнуть на каждом слое. Нельзя лечить низкий recall изменением final prompt.
Chunking
Fixed-size
Просто и воспроизводимо, но разрывает таблицы, исключения и определения.
Structural
По headings/sections/records. Лучше сохраняет смысл, требует parser для каждого формата.
Semantic/task-aware
Строится вокруг возможных вопросов или entities. Может улучшить retrieval, но дороже, сложнее обновляется и рискует закодировать текущие use cases.
Хороший chunk сохраняет provenance: source URI, version, section, effective date, access label.
Метрики retrieval
- Recall@k: попал ли хотя бы один релевантный документ в top-k.
- MRR: насколько рано появился первый релевантный результат.
- nDCG: учитывает порядок и градуированную релевантность.
- Filter/authorization recall: не отрезали ли нужное; не показали ли запрещённое.
- Freshness: соответствует ли найденная версия effective policy.
Answer groundedness не заменяет retrieval eval: модель не может процитировать документ, который pipeline не нашёл.
Memory write policy
Наивная схема записывает каждую фразу пользователя. Она быстро накапливает ошибки и sensitive data.
Перед записью спросите:
- Пользователь явно выразил устойчивую preference/fact?
- Есть consent и lawful purpose?
- Каков namespace: thread, user, tenant?
- Как подтвердить/изменить/удалить record?
- Когда истекает TTL?
- Как provenance попадёт обратно в context?
Model-generated inference вроде «пользователь, вероятно, богат» не должна автоматически становиться долговечной памятью.
Namespace isolation
Helios memory store возвращает tenant-scoped records плюс records точного thread. Record tenant-alpha не виден tenant-sol; preference thread-1 не переносится в thread-2.
Production identity обычно сложнее: organization, workspace, end user, legal region, purpose and sensitivity labels. Filter должен выполняться до semantic ranking и повторно на выдаче.
Freshness и provenance
Для каждого retrieved item полезны:
- stable source ID;
- source version/effective time;
- retrieved_at;
- access scope;
- relevance score и retriever version;
- transformation/chunk lineage.
Если cargo rule обновилась, старое memory нельзя «исправить» красивым summary. Нужна invalidation/re-index и domain policy check на актуальной версии.
Deletion и retention
Удаление source требует ответа на вопросы:
- удалить chunk из index;
- удалить embeddings/cache;
- перестроить summaries, где он использован;
- сохранить минимально необходимый audit без исходного content;
- прекратить future retrieval;
- доказать completion deletion job.
Для PHI/PII de-identification снижает риск, но не превращает данные в свободный учебный corpus. Назначьте purpose, access, retention и deletion до выгрузки.
Стратегии
| Решение | Выигрыш | Цена | Когда плохой выбор |
|---|---|---|---|
| Full corpus in context | Нет retrieval miss | Tokens/latency/leakage | Большой corpus |
| Lexical search | Прозрачно, дешёво | Слабые paraphrases | Семантически разнообразные вопросы |
| Dense retrieval | Semantic recall | Model/index lifecycle | Exact IDs/codes |
| Hybrid + reranker | Обычно сильнее | Latency и eval complexity | Малый low-traffic corpus |
| Domain API | Свежий structured state | Нужен integration | Документы/объяснения |
Helios и реальный аналог
Пользователь спрашивает cargo restrictions. Order route читается tool, а нормативные исключения ищутся в versioned corpus с jurisdiction metadata. Перед booking policy service проверяет правило ещё раз; retrieved paragraph помогает объяснить, но не авторизует shipment.
Лаборатория
npm run test:course:pattern -- "memory|stale"
Добавьте memory другой tenant и убедитесь, что retrieval его не возвращает. Затем сформулируйте offline fixture для Recall@k; реализация метрик появится в Applied ML lab.
Self-check
- Это API-shaped или document-shaped вопрос?
- Как измеряется retrieval до model call?
- Где применяются tenant/access filters?
- Как отмечается версия и freshness?
- Какие записи memory создаются только с consent?
- Как выполнить deletion во всех производных stores?