返回文章列表
3 分钟读完

精确数据问答,该用 RAG 还是工具调用?

用向量检索去回答“有多少条待处理工单”这类精确问题,会算错数,还分不清“没查到”和“确实没有”。这篇讲 RAG 与 tool calling 各自的适用边界与混合用法。

rag工具调用ai-agentllm工程生产实践

一个常见的架构误区:把所有问答都塞给 RAG(检索增强)。当用户问的是“有多少条待处理工单”“这个客户的订单当前是什么状态”这类精确问题时,用向量相似度检索去近似回答,会算错数,还分不清“这次没检索到”和“数据里确实没有”。

RAG 和 tool calling 解决的是不同类型的问题。混用错了,你的系统会以一种很自信的方式给出错误答案。

一、RAG 适合什么

RAG 的强项是开放语义文档理解

  • “我们的退货政策是怎样的?”——答案在文档里,靠语义检索定位相关段落(通常取 top-k 3~10 段交给模型)。
  • “这类故障通常怎么排查?”——从知识库里召回相关经验。

它本质是“找到相关文本,交给模型组织语言”,适合没有唯一精确答案、依赖文本理解的问题。

二、tool calling 适合什么

当答案是系统里可以精确计算出来的——数量、状态、聚合、事务——就该用 tool calling 直接查系统,而不是检索近似:

  • “待处理工单有多少条” → 查数据库 count
  • “这个订单当前状态” → 查订单表;
  • “本月某指标合计” → 走聚合查询或计算器工具。
问题类型 → 该用什么
------------------------------------
精确计数 / 状态 / 事务   → tool calling(查真值)
开放语义 / 文档理解      → RAG(检索 + 组织语言)
两者都需要              → 混合:检索定位 + 工具取真值

三、混合:检索定位,工具取真值

很多真实问题是混合的:“帮我看看那个投诉最多的产品,最近的退货情况。” 这里“投诉最多的产品”可能靠检索/理解定位,而“退货情况”是精确数据,必须走工具查真值。合理的架构是让二者各司其职,而不是让 RAG 硬扛精确问题。

四、数据缺失要显式报告,不许猜

无论 RAG 还是 tool calling,都会遇到“查不到”。这里最贵的错误是:数据缺失时,Agent 编一个看起来合理的值继续往下走。

正确行为:

  • 区分“本次没查到”和“对象不存在”,并说明是哪一种;
  • 必需数据缺失时,明确报告不可用及原因,而不是补一个假值;
  • 工具或检索超上下文容量时,按字段压缩并保留“记录总数”等完整性信号,不要静默截断。

常见问答

Q:都用 RAG 不行吗?省事。 A:精确问题用相似度近似会出错,还分不清漏检和不存在。省事的代价是自信地答错。

Q:怎么判断一个问题该走哪条路? A:看答案是不是系统里能精确算出来的。能精确算的走工具,靠文本理解的走 RAG,混合的拆开。

Q:数据缺失时该怎么回? A:说明不可用并给原因,绝不编造。这是生产系统和 demo 最大的区别之一。


选对 RAG 还是 tool calling,是生产级 Agent 少出“自信的错误”的关键。这也是我们做生产级 AI Agent 系统时的基本判断:精确问题查真值、开放问题靠检索、缺数据就显式报告,不让模型硬猜。小结一句:先判断答案是不是系统里能精确算出来的,再决定走哪条路。想系统排查你的问答架构在哪些问题上会"自信答错",可以做一次生产就绪自检