深色模式
10 · RAG 作为工具
知识库怎么接进 Agent
📚 系列导航:这是《Agent 开发进阶》的第 10 篇(共 24 篇)。上一篇给 agent 装了记性,管"关于用户的事";这一篇接上外挂大脑——知识库怎么让 agent 用好、用对。下一篇:11 · 代码执行与沙箱。
知识库你已经会建了(《AI 知识库开发入门》管这事),切块、embedding、重排都调顺了。可一接进 agent 就不对劲:要么该查的不查,拿着过时参数一本正经地答;要么不该查的乱查,用户说句"谢谢"它也去库里翻一圈,延迟和账单双涨。库没问题,问题出在接法——agent 不知道库里有什么、什么时候该用。这一篇只干一件事:把知识库接成 agent 会用、用得对的工具,配两个量化指标。
看完这一篇,你会拿到:
- 一张接法决策表:预检索注入 vs 检索作为工具,各自适用场景
- 一个检索工具描述模板(库里有什么/该查什么/别查什么)
- 一套多库路由与检索结果预算控制的做法
- 两个可量化指标的实测:该查不查率、不该查乱查率
01 两种接法:预检索注入 vs 检索作为工具
预检索注入:每轮先拿用户问题查库,结果拼进上下文再答。稳定可控,但每轮都花检索成本,问题跟库无关时纯属浪费。检索作为工具:agent 自己决定何时查、查什么。打个比方,前者是不管客人问什么都先把整柜档案搬上桌,后者是给他一把档案室钥匙加一份馆藏目录。判据:高频、问题域集中的问答(客服 FAQ)用前者;开放任务、问题五花八门的 agent 用后者。也可以混搭——高频域预检索,长尾走工具。
💡 一句话总结:问题可预测就预检索,不可预测就交给 agent 判断——别只会一种接法。
02 工具描述:让模型知道库里有什么
模型决定查不查的唯一依据是工具描述。描述不写边界,它只能瞎猜:
python
search_docs = { # 伪代码,字段名以所用 SDK 官方文档为准
"name": "search_product_docs",
"description": (
"检索产品使用文档(覆盖 A/B 两条产品线,更新至 2026-06)。"
"适用:功能用法、参数含义、报错排查。"
"不适用:价格政策、内部审批流程——不在库里,别查。"
),
"input_schema": {"query": "string"},
}预期效果:模型能据此判断"该不该查、该用什么词查"。三要素缺一不可:库里有什么、覆盖到什么时间、什么问题不该来查。
💡 一句话总结:检索工具的描述是一份馆藏目录——"没有什么"和"有什么"同样重要。
03 多库路由:分开建,分开描述
产品文档、制度规范、运行日志一锅烩进一个库,检索质量必差:三类内容的切块粒度、更新频率、查询措辞完全不同,混在一起互相污染排序。做法:三库各自注册成独立工具,边界写进各自描述,让 agent 按问题路由。库的数量别失控——超过五六个时模型的选择成本上来了,考虑加一层轻量路由:先分类,再派库。
💡 一句话总结:一库一职责一描述——路由的智能一半来自模型,一半来自你划的边界。
04 预算控制:检索结果别撑爆上下文
top-k 全文塞进上下文是上下文杀手:查一次带回几千 token,几轮下来历史臃肿、注意力稀释,第 06 篇的账全部重演。控制三招:限条数(k 从 3 起步,别贪大);限长度(每条截断或摘要到几百字,保留出处);用完即弃(检索结果只服务当前轮,进入下一轮前压成结论,别让原文在历史里过夜)。
💡 一句话总结:检索结果是食材不是库存——按需取用、当轮消化,别囤在上下文里。
05 动手:测两个指标
任务:① 把一个知识库按 02 节模板注册成检索工具;② 准备 20 条问题:10 条答案确实在库里,10 条明显在库外(闲聊、通用常识、别的业务域);③ 跑一遍,逐条记录是否触发检索;④ 算两个率:该查不查率(库内题漏了几条)、不该查乱查率(库外题误查几条);⑤ 改一版工具描述,再测对比。
验收标准:两个指标的前后对比表,并能说出是描述里哪句话带来的变化。
两种结果都正常:双降,把描述模板固化;乱查率降不下来,优先加"不适用"清单——我的经验是补"别查什么"比堆"该查什么"见效快;漏查率高,检查问题措辞和描述用词是否对得上。
06 小结
你现在应该能:为场景选对接法、写出带边界的检索工具描述、给多库划路由、把检索结果控制在预算内。
到这里 agent 会想(08)、会记(09)、会查(10)了。下一篇 11 · 代码执行与沙箱,给它一双真正能干活的手——但要戴好手套。
📎 实战案例
一个企业助手的检索工具描述只写了"查询公司文档"六个字,模型拿业务问题去查技术文档库,答非所问。团队补齐"库里有什么/该查什么/别查什么"、按产品/制度/日志拆成三库路由后,"该查不查"和"不该查乱查"两个指标双降——模型不知道边界,就只能乱撞。
踩坑
- 我的工具描述没写库范围,模型连着 3 次拿业务问题查技术文档库——"不适用"和"适用"清单同样重要。
- 我的 agent 每轮都"以防万一"检索一次,延迟直接翻倍——检索要有明确触发理由,描述里写清什么不用查。
- 我贪心设过 k=8 且全文塞入,检索结果占掉上下文近一半,答案质量不升反降——每条截到 300 字、k 从 3 起步后才回稳。