客户打电话问订单 #12345。数据库超时了。工具返回 isError: false, "No results found"。Agent 说:“我们系统里没有找到订单 #12345。您确定号码对吗?“客户有确认邮件。订单存在——数据库只是暂时挂了。
两种看起来一样的结果
访问失败(超时、连接错误、服务宕机):
- 查询没有成功执行
- 数据可能存在——只是我们查不了
- Agent 应该:重试或说”查的时候遇到了点问题”
有效空结果(查询成功执行,没有匹配记录):
- 查询成功执行并且什么都没找到
- 数据确实不存在
- Agent 应该:当作确定结论并通知用户
怎么区分
| 结果 | isError | Content | Agent 行为 |
|---|---|---|---|
| 数据库超时 | true | ”Database temporarily unavailable” | 重试或告知”查的时候遇到问题” |
| 无匹配记录 | false | ”No customer found for ID X” | 当作确定结论 |
规则:如果查询成功执行了 → isError: false(即使零结果)。如果查询执行失败了 → isError: true 加错误详情。
现实中的损害
学术研究 agent 搜索数据库。数据库不可达。工具返回空内容 + isError: false。Agent 告诉研究者:“该主题没有找到论文。“该主题有几千篇论文。研究者根据错误信息改变了研究方向。
客服 agent 在数据库宕机期间查订单。返回”No results found” + isError: false。Agent 告诉客户订单不存在。客户有确认邮件然后升级投诉——制造了一次不必要的投诉。
静默吞没
数据库不可达时返回 isError: false 加空内容是”静默吞没”——错误被吞掉,转成假阴性,agent(和用户)永远不知道发生了故障。
包含尝试的查询
超时错误应包含尝试了什么:“Database timeout while looking up order_id=‘ORD-12345’“。这让 agent 能用完全相同的参数重试,或具体告诉用户什么没查到。
一句话总结: 数据库宕机返回 isError: false + “无结果”会导致 agent 告诉客户数据不存在(其实只是服务挂了)——访问失败必须返回 isError: true,有效空结果返回 isError: false,这个区分防止假阴性。