
🧠 记忆锚点:传统 RAG 检一次就答;Agentic RAG 会判断证据够不够,不够就换问法和数据源。
💡 答案要点
传统 RAG vs Agentic RAG 对比:
传统 RAG(被动、单次):
用户问题 → 向量检索 → 拼入 Prompt → LLM 生成答案
问题:检索一次,够不够看运气;无法应对多跳问题
Agentic RAG(主动、多轮):
用户问题 → Agent 分析 → 决定检索策略 → 检索
↓(结果不够?)
再次检索/换数据源/拆分子问题
↓(信息充分)
生成最终答案Agentic RAG 的五大核心能力:
| 能力 | 说明 |
|---|---|
| 自主判断检索充分性 | 判断"当前信息够不够回答问题" |
| 查询改写/分解 | 把复杂问题拆成多个子查询 |
| 多源检索 | 向量库 + SQL + 搜索引擎按需组合 |
| 迭代检索 | 第一次检索不够,自动补充检索 |
| 工具调用 | 不只检索文档,还能调用 API、执行代码 |
实现示例:
展开 Python 代码示例(44 行)
python
class AgenticRAG:
def __init__(self, vector_store, sql_db, web_search):
self.vector_store = vector_store
self.sql_db = sql_db
self.web_search = web_search
self.llm = ChatOpenAI(model="gpt-4o")
def run(self, question: str) -> str:
context = []
max_rounds = 3
for round in range(max_rounds):
# 1. 让 LLM 判断:现有信息够不够?需要检索什么?
plan = self.llm.invoke(f"""
问题: {question}
已有上下文: {context}
判断:
1. 当前信息是否足够回答问题?(yes/no)
2. 如果不够,下一步应该:
- vector_search: 语义搜索知识库(query=xxx)
- sql_query: 查询数据库(sql=xxx)
- web_search: 搜索网络(query=xxx)
- answer: 直接回答
以JSON格式输出。
""")
action = parse_json(plan)
if action["type"] == "answer":
return self.llm.invoke(f"基于以下信息回答:{context}\n问题:{question}")
# 2. 执行检索动作
if action["type"] == "vector_search":
result = self.vector_store.search(action["query"])
elif action["type"] == "sql_query":
result = self.sql_db.execute(action["sql"])
elif action["type"] == "web_search":
result = self.web_search.search(action["query"])
context.append(result)
# 超过最大轮次,用已有信息尽力回答
return self.llm.invoke(f"基于以下信息回答(信息可能不完整):{context}\n问题:{question}")典型应用场景:
- 多跳问题:"A公司CEO的母校的校友里有哪些AI创业者?"(需要3次检索)
- 跨源问题:需要同时查内部文档和实时数据
- 验证性问题:需要反复核实才能给出确定答案
面试话术:
示例表达(仅在能用本人经历或可复现实验佐证时使用): "Agentic RAG 是 2025 年 RAG 的进化方向。传统 RAG 是'一次检索,凑合用',Agentic RAG 是'AI 自主决定要查什么、查几次、查哪里'。核心差异是 Agent 会评估'现有信息够不够',不够就继续检索。我做过一个法律问答系统,传统 RAG 对多跳问题准确率只有 45%,改成 Agentic RAG 后升到 82%,因为它能自动拆解问题、分步检索。"