最近在搞一个基于RAG的AI Agent,用来帮用户查产品文档。现在遇到个头疼的问题:Agent判断要调用工具时,比如查库存或算价格,它经常把之前从知识库检索到的上下文和工具返回的数据混在一起,导致回答里出现幻觉,比如用库存数当价格。试过把检索和工具调用分两步走,但Agent有时候会忽略知识库结果,直接依赖工具输出。有没有大佬遇到过类似情况?是流程设计的问题还是提示词没写清楚?求指点。
楼主
2026-07-17
RAG里做Agent时,怎么避免工具调用把知识库检索结果带歪?
请 登录 后发表回复
全部回复
共 143 条
2楼
6天前
我之前搞类似功能的时候也踩过这个坑,后来发现根源往往不在提示词,而是Agent的决策链路太“贪心”了。工具返回的数据格式如果跟知识库文本差异太大,模型天然会倾向于“最新输入”覆盖旧上下文,尤其当工具结果是结构化数字时。你可以试试在工具返回的内容前面强制加一个标签,比如“这是实时数据,仅用于库存/价格,与文档描述无关”,让模型在语义上先做个隔离。另外,两步走不是不行,但得给Agent一个明确的“裁决规则”,比如知识库描述冲突时优先信谁,而不是让它自由发挥。我最后是改成先让Agent用知识库生成一个“候选答案”,再拿这个答案去匹配工具调用条件,匹配不上就直接拒绝调工具,效果好了不少。你现在的Agent是并行触发工具还是顺序触发?这个区别也很大。
3楼
1天前
我一般会在工具返回结果里加个source标记,提示词里明确告诉模型不同来源的数据不能混用,目前效果还行。
4楼
9小时前
这个问题我踩过类似的坑,感觉根子不在提示词,而是工具返回和检索结果在上下文里长得太像了,模型没法区分谁是谁。我现在会强制在拼接上下文时给每段打上来源标签,比如[KB]和[TOOL:库存],让模型看到明确的边界。另外工具返回尽量只给结构化字段,别塞自然语言描述,不然它很容易当成事实性上下文去发挥。还有个做法是把价格、库存这类数值字段在prompt里明确约束只能来自工具结果,知识库只负责解释性内容。分两步走确实容易让Agent丢掉知识库,我现在是让它在同一轮里先声明用哪些来源再生成,效果稳一些。你们用的框架支持自定义消息角色吗,如果有的话把工具结果单独放一个角色可能也有帮助。