03Bread RAG · 第 6 章
总进度 21 / 33RAG 接入 Bread Agent(终章)
前面每个问题都按“先检索、再回答”处理。现在加入 Agent,让它根据问题判断是否需要查询,也能在需要时继续检索。
2026-09-28约 45 分钟480 行代码难度 ★★★
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
1. 把知识库检索交给工具调用循环
前面每个问题都按“先检索、再回答”处理。现在加入 Agent,让它根据问题判断是否需要查询,也能在需要时继续检索。
但真实场景里:
| 用户输入 | 应该查知识库吗 |
|---|---|
| "你好" | ❌ 闲聊,不用 |
| "今天天气怎样" | ❌ 与业务无关 |
| "加盟费多少?" | ✅ 业务问题 |
| "你们 vegan 选项有什么?" | ✅ 业务问题 |
| "上一问的学徒,工资呢?" | ✅ 上下文延续 |
| "再问一遍刚才的问题" | ❌(上一轮已经查过,不用再查) |
这种把检索放进 Agent 决策过程的做法,常被称为 Agentic RAG。先从一个检索工具开始观察就可以。
把 hybrid search 封装成 search_knowledge_base(query),再注册到 Bread Agent 的工具循环中。模型提出调用时,程序检索资料并返回,下一轮再根据结果回答。

<!-- bread-visual:end -->图解: 由模型决定是否检索;必要时可以继续追问知识库。 图中分支表示可能的决策;是否检索由模型与提示词共同决定。
2. 跑起来
cd ch05_with_agent
python main.py
第一次运行会建库并保存 pkl。之后可加载文档索引,省去重新向量化文档的步骤。
试这一组对话:
你 > 你好,今天天气怎么样
AI > 你好!我是 Bread 面包工坊客服...天气信息我没法提供...
↑ 没调工具
你 > 加盟费多少?培训要多久?
[step 0] search_knowledge_base(query='加盟费多少')
[step 0] search_knowledge_base(query='培训要多久')
↑ 自己分了 2 次查
AI > 知识库里没有相关加盟费和培训信息...建议邮件 HR
你 > 学徒呢?工资多少
[step 0] search_knowledge_base(query='烘焙学徒工资待遇')
↑ 自己理解了"学徒"=上一轮延续
AI > 烘焙学徒月薪 6-9k,包食宿...[hr_policy.md]
3 件关键事情发生了:
- 闲聊不调工具 —— agent 主动判断"不需要查"
- 一次提问可能多次查 —— agent 自己拆问题
- 多轮上下文影响检索 query —— agent 从对话历史里抽出"学徒"作为新 query
这就是 Bread Agent 的工具调用循环 + Bread RAG 的检索能力合体后的效果。
3. 对照代码看实现
把 RAG 包成工具
试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。