L07 练习
改
code.py里的代码,运行python agent-lessons/07_agentic_rag/code.py观察变化。
练习 1:观察 Agent 的工具选择逻辑
仔细看实验 1 的四个问题,Agent 分别选了什么工具:
| 问题 | Agent 选了什么? | 选对了吗? |
|---|---|---|
| "年假有几天?" | ? | |
| "1+1 等于几?" | ? | |
| "你好" | ? | |
| "北京天气?" | ? |
思考:Agent 是怎么"知道"什么时候该检索、什么时候不该的?(提示:靠 search_knowledge_base 的 description——里面写了"当用户问公司制度时使用")这印证了 L04 的"description 是灵魂"。
练习 2:实现多轮检索
当前 Agent 检索一次就结束。试着让它能"查不到就换关键词再查"。在 run_agentic_rag 里加逻辑:
# 如果检索结果里包含"没找到相关内容",Agent 自然会看到这个反馈
# 你只要在 prompt 里引导它"如果第一次没查到,换个关键词再查"
SYSTEM_PROMPT = """你是一个聪明的助手。如果 search_knowledge_base 的结果里说'没找到',
你可以换一个更宽泛或更具体的关键词再查一次(最多重试2次)。"""
然后问一个第一次可能查不准的问题(用一个生僻的表述),看 Agent 会不会自动换关键词重查。
思考:多轮检索是 Agentic RAG 相比传统 RAG 的核心优势——传统 RAG 查一次就结束,Agent 能自适应调整。
练习 3:对比成本(省钱对比)
传统 RAG 每个问题都要:1次 embedding + 1次检索 + 1次生成。Agentic RAG 对不需要检索的问题只:1次生成。
算一下,假设有 100 个用户问题,其中 30% 是闲聊/计算类(不需要 RAG):
传统 RAG:100 次 embedding + 100 次检索 + 100 次生成
Agentic RAG:约 70 次 embedding + 70 次检索 + 100 次生成(省了 30%)
思考:在生产环境,这种"按需检索"能省多少 API 成本?尤其 embedding 和检索量大的时候。
练习 4:加入你自己的文档
回顾 RAG 课程的 L09(毕业作品)。把你自己的一个文档放进 data/sample_docs/,重启本课程序。
然后问关于你自己文档的问题,看 Agentic RAG 能不能正确检索并回答。再问一个不相关的问题(如"今天几号"),看它会不会跳过检索。
思考:你已经把 RAG 和 Agent 两大体系打通了。这个 Agentic RAG 系统,本质上就是你 RAG 课毕业作品的"智能化升级版"——从"无脑检索"变成"按需检索"。
✅ 完成本课后,你应该能回答
- 传统 RAG 的核心局限是什么?(提示:无脑检索)
- Agentic RAG 怎么解决这个局限?(提示:Agent 自主决定)
- 怎么把 RAG 包装成 Agent 的工具?(提示:检索函数 + tools 定义)
- 多轮检索是什么?为什么传统 RAG 做不到?
- 为什么说"RAG 是 Agent 工具箱里的一把扳手"?这个认知为什么重要?