Agentic RAG: бюджет на поиск и явная причина остановки
Обычный RAG ошибается один раз и достаёт не те чанки. Агентный ошибается изобретательно и десять минут подряд: переписывает запрос, лезет в другой источник, зовёт субагента, рефлексирует, идёт на новый круг. Автор показывает, как превратить это в управляемую политику поиска: многомерный бюджет, контракт достаточности доказательств и явные коды остановки.
- Бюджет — не одно число, а независимые оси: queries: 8, parallel_branches: 3, sources: 12, documents: 40, evidence_tokens: 12000, model_calls: 6, wall_clock_ms: 15000, estimated_cost: 0.20. Дочерняя ветка получает срез родительского бюджета, делегирование его не обнуляет, ретрай тратит тот же дедлайн.
- Вопрос раскладывается на claims (C1…C5), и по каждому ведётся ledger: источник, класс авторитетности, дата публикации, дата извлечения, хеш цитаты, противоречия, пробелы. Тогда ответ умеет различать подтверждённое, спорное и неизвестное.
- Прогон заканчивается одним из кодов: SUFFICIENT, BUDGET_EXHAUSTED, DEADLINE_EXCEEDED, SOURCE_UNAVAILABLE, PERMISSION_BLOCKED, CONTRADICTION_UNRESOLVED, NO_AUTHORITY_FOUND, USER_CLARIFICATION_REQUIRED. Только первый означает, что контракт доказательств выполнен.
- Десять страниц с пересказом одного пресс-релиза — это не десять источников. Автор советует отслеживать происхождение и награждать прирост покрытия: новый claim, снятое противоречие, более авторитетный источник, более свежие данные. Если прироста нет, тратить нечего.
- Извлечённый текст остаётся недоверенными данными. Системные инструкции держат вне retrieved-контента, авторизацию тулов — вне модели, пишущие тулы прячут на исследовательской фазе, egress браузера ограничивают. Бюджет заодно ограничивает и поверхность атаки.
- Завести в своём retrieval-цикле словарь бюджета из статьи и списывать его в том числе с ретраев и вызовов субагентов.
- Разложить один типовой запрос на claims и собрать ledger с полями source_id, authority, published_at, retrieved_at, supports.
- Заменить «модель решила, что хватит» на коды остановки и отдавать пользователю честный BUDGET_EXHAUSTED вместо дописанного вывода.
- Метрика: стоимость одного подтверждённого claim и распределение стоп-причин за неделю. Доля SUFFICIENT должна расти без роста числа запросов.