Appearance
第 03 课 · RAG 够了吗?什么时候才需要工具
RAG 负责「答」,工具负责「办」。 分不清这条线,要么把答疑做成一堆没必要的工具调用,要么让模型「一本正经地编」本该去查的数据。
本课要解决的问题
第 02 课选完了 Workflow 的结构。到了答疑 / 办事这类功能,最纠结的一步是:
光靠 检索教材(RAG) 够不够?什么时候必须 调工具(Function Calling) 才能完成?
本课给你:
- 一条清晰的 「答」与「办」分界线
- RAG 能覆盖 vs 必须上工具的 对照表
- Function Calling 的 最小落地(不引入完整 Agent)
- 三种常见 RAG / 工具误用 及纠正
一句话分界线:信息是「已存在的」还是「要现算 / 现查 / 现改」的?
| RAG(检索增强) | 工具(Function Calling) | |
|---|---|---|
| 解决什么 | 回答「资料里 已经写着 的东西」 | 获取 / 改变「此刻 才有的状态」 |
| 数据来源 | 教材、讲义、题库等 静态知识 | 数据库、后台 API、实时系统 |
| 典型动作 | 检索 → 拼 prompt → 生成带出处的答案 | 查进度、算分、写错题本、调组卷接口 |
| 能不能编 | 检不到就 拒答,不该编 | 必须真调用,绝不能让模型「猜」结果 |
口诀: 问「书里怎么说」→ RAG;问「我的数据现在是什么 / 帮我改一下」→ 工具。
先把 RAG 做对(大多数答疑到这里就够)
很多「答疑不准」的锅,不在没上工具,而在 RAG 本身没做对:
| RAG 常见问题 | 表现 | 纠正 |
|---|---|---|
| 章节直灌代替检索 | token 爆、易截断、答非所问 | 切块 + 语义检索,只塞相关 chunk |
| 切块太大 / 太小 | 太大不精准,太小丢上下文 | 常见 300~800 字,按内容调 |
| 检索不到却硬答 | 幻觉、编造出处 | 无依据则拒答 或提示问老师 |
| 不给出处 | 用户无法核对 | 答案附「依据第 X 节」 |
判断法: 如果用户的问题 答案就写在教材里,你要做的几乎总是 把 RAG 做扎实,而不是加工具。
什么时候 RAG 不够、必须上工具
当问题的答案 不在任何静态资料里,而在「运行时状态」里,RAG 无论怎么调都答不了 —— 这时才需要工具。
| 用户问 / 要 | RAG 能答吗 | 需要什么 |
|---|---|---|
| 「这个知识点讲了啥?」 | ✅ 能 | RAG |
| 「我这门课学到第几章了?」 | ❌ 不能(个人实时进度) | 查进度工具 |
| 「我上次这道题错在哪?」 | ❌ 不能(个人历史) | 查错题记录工具 |
| 「帮我把这题加进错题本」 | ❌ 不能(要写数据) | 写库工具 + 审批 |
| 「按我薄弱点出 5 道题」 | ⚠️ 部分(出题可 RAG,但要先知道薄弱点) | 查数据 + 生成组合 |
关键信号: 出现「我的」「现在」「帮我改 / 记 / 发」这类词,基本就越过了 RAG 的边界。
工具的最小落地:一次 Function Calling,不是完整 Agent
需要工具 ≠ 要上自主 Agent 循环。先用「单次固定工具调用」,这仍属于 Workflow:
用户问
↓
路由判断:这是「查/办」类问题吗?
├─ 否 → RAG 答疑(第 02 课那条主干)
└─ 是 → 单次 Function Calling
├─ 模型产出「调用 getProgress(userId)」
├─ 后端真正执行该函数(带权限校验)
├─ 把结果拼回 → LLM 组织成自然语言
└─ 高风险写操作 → 先弹人工确认和自主 Agent 的区别:
| 单次 Function Calling | 自主 Agent 循环 | |
|---|---|---|
| 调几次工具 | 1 次,固定 | 多次,模型自己决定 |
| 路径 | 你写死 | 模型临时规划 |
| 成本 / 延迟 | 可预测 | 不可控 |
| 适用 | 「查一下 / 改一下」这类明确动作 | 「自己想办法搞定」的开放任务 |
绝大多数「要动手」的教材 / 网校功能,一次 Function Calling 就够。 别一看到「工具」就跳到 ReAct。
工具设计的三条底线(教材场景)
- 只读优先,写操作必审批:查进度可直接调;改成绩 / 删记录 / 发通知必须人工确认。
- 参数由后端校验:模型给的
userId、题目 ID 等 不可信,后端要校验权限(不能查到别人的数据)。 - 失败要能兜底:工具超时 / 报错时,给「暂时查不到,请稍后再试」,而不是让模型编一个结果。
三种常见误用
| 误用 | 症状 | 纠正 |
|---|---|---|
| 该 RAG 却调工具 | 把「概念讲解」做成查数据库,慢且无意义 | 退回 纯 RAG 答疑 |
| 该工具却让模型编 | 问「我的进度」,模型不查库直接瞎说一个百分比 | 强制走 Function Calling,查不到就拒答 |
| 一步到位上 Agent | 「查数据 + 出题」直接丢给自主循环,超时又难测 | 拆成 查工具 → RAG 出题 的固定 Workflow |
一张分界速查表(读完用这个)
| 问题特征 | 方案 |
|---|---|
| 答案在教材 / 静态资料里 | RAG |
| 要个人实时状态(进度 / 成绩 / 历史) | RAG 无关,单次查询工具 |
| 要改数据 / 发通知 / 调后台 | 单次工具 + 人工审批 |
| 查完还要基于结果再生成(如按薄弱点出题) | 工具 → RAG/生成 的固定链 |
| 路径不确定、要多步自主探索 | 才上自主 Agent(第二篇细讲) |
本课结论(可直接发给团队)
- RAG 答「书里写了什么」,工具办「我的数据 / 现在的状态」。
- 答疑不准,先怀疑 RAG 没做对,别急着加工具。
- 需要工具 ≠ 需要 Agent:优先「单次固定 Function Calling」。
- 写操作必审批,参数必校验,失败必兜底。
- 决策篇到此结束: 要不要上(01)→ 用什么结构(02)→ RAG 还是工具(03)。下一篇进入六种模式的落地。
课后自检(3 分钟)
- [ ] 我能判断每个问题的答案是「在资料里」还是「在运行时状态里」
- [ ] 我的 RAG 有切块 + 语义检索 + 出处 + 拒答策略
- [ ] 我需要的工具能用「单次固定调用」表达,而非开放循环
- [ ] 我的写操作都加了人工审批,参数都在后端校验
- [ ] 我给工具失败设计了兜底话术
5 个都勾选 → 决策篇通关,进入模式篇。 还在「直灌 / 让模型编数据 / 一上来就 Agent」 → 回到本课分界表重看。
下一课预告
第 04 课 · 提示链与路由:网校最常见解法 —— 进入第二篇「模式篇」,把前五种 Workflow 模式落到真实网校代码结构。
延伸阅读
© 曹宇春