Суть
Обычный RAG — один проход: запрос → поиск → ответ. Agentic RAG ставит над этим агента (ReAct-цикл), который оценивает найденное и при недостатке данных уходит на новую итерацию поиска.
Зачем это нужно
Single-shot retrieval проваливает multi-step и cross-system задачи: сложную аналитику, вопросы, где надо связать факты из БД + API + vector store, кейсы из финансов/юриспруденции/медицины. Снижение error rate в сложных кейсах до −78%.
Как работает (архитектура)
- Query Planner — декомпозиция сложного запроса на подзадачи.
- Retrieval Agent — динамический выбор источника и стратегии (vector / SQL / API).
- Reflection / Self-critique — LLM-as-Judge проверяет полноту и достоверность ответа.
- Iterative Loop — при нехватке данных запрос переписывается, поиск повторяется.
Псевдокод self-correcting loop (LangGraph):
def retrieval_agent(state):
docs = retrieve(state["query"])
if judge_relevance(docs, state["query"]) < 0.7:
state["query"] = rewrite_query(state["query"]) # ещё итерация
...
- Когда применять: multi-step, cross-system retrieval, сложная аналитика — там, где single-shot недостаточно. Для простых запросов избыточно (дороже и медленнее). Выбор между RAG / CAG / Agentic RAG — критерии в RAG vs CAG vs Agentic RAG.
- Лимит итераций цикла — это safety/cost guardrail: защита от зацикливания и runaway-расходов через стоп-условия
max_iterations/ «No Progress» (см. Agent CostControl). - Соотносится с «уровнями агентности»: Agentic RAG — это верхний уровень (многошаговый агент), а не просто tool call (см. альтернативный взгляд в Agent vs Workflow).
- Вместе с GraphRAG относится к «Enterprise»-фазе дорожной карты RAG.
Связано с
- RAG — Agentic RAG = надстройка-цикл над базовым RAG
- GraphRAG — обе техники Enterprise-уровня
- ReAct — агентный цикл reason→act, лежащий в основе
- Agent CostControl — лимит итераций как safety/cost guardrail (стоп-условия, No Progress)
- CAG — альтернатива без retrieval (small/stable корпус)
- RAG vs CAG vs Agentic RAG — критерии выбора между тремя архитектурами
Открытые вопросы
- как калибровать порог
judge_relevanceна реальном eval-наборе для Agentic RAG?