基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
技术实践2026-10-23 02:52

查询正确,AI 却在回答时写错姓名

dev.to · AI#Agent#可靠性#测试
Editor brief · 编辑速览

记账助手即使选对工具、拿到正确数据,也可能在生成最终回答时抄错客户姓名。案例涉及阿拉伯语、库尔德语和英语,暴露了仅测试工具选择、参数和数据幻觉的覆盖缺口。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

数据库查对了,工具也没选错,AI 最后还是可能把客户名字写错。Dashing 团队在开发店铺记账助手 Dash 时发现,问题出在最后一步:模型把正确数据组织成自然语言时,重新「抄写」了事实,而这次抄写并不可靠。

作者的应对很具体:姓名只在严格条件下做单词级纠正,金额先由代码生成展示文本,再校验模型是否照抄。这篇值得读的地方,是把 Agent 的检查范围从工具调用延伸到了用户真正看到的答案。

工具返回正确,不代表用户收到正确答案

Dash 是销售点与记账应用 Dashing 内的助手,服务使用 Arabic、Kurdish 和 English 的小店经营者。店主可以问谁还欠款、本周卖了什么、哪些商品库存不足;涉及记录收款等修改时,需要店主先批准。

作者已经为常见问题做了测试:有没有选错工具、有没有传错参数、有没有编造数据。在实际对话中,这些环节大多正常,正确数据也完整地到达了模型。

错误发生在生成回复时。客户 Karim 被写成 Kiram;表示「系统管理员」的员工角色,被改成接近「清洁专员」的含义;商品名丢了最后一个字母,变成了复数形式。

这些语言里的姓名往往很短,彼此只差少数字母。改错一个字母,结果仍可能是另一个真实姓名,读起来也很顺。店主据此联系客户,就可能找错人。

更麻烦的是,错误会进入对话历史。模型下一轮重新读取自己的回复,继续沿用错名,一次笔误逐渐成为后续回答的依据。

工具调用成功,只能证明数据取到了,不能证明最终答案忠实于数据。

作者也试过发现错误后让模型重新生成。但在他们的测试中,第二次仍会犯同样的错,还要多付一次完整调用的费用和等待时间。原文没有给出样本量、错误率或重试成功率,因此能确认的是这条修复路径在他们的测试里效果不好。

为什么他们敢直接修改模型的回复

团队最初反对自动修改输出,担心纠正机制造成更大的错误。后来,他们把规则收窄到一个可以明确核对的范围。

姓名纠正必须同时满足这些条件:

  • 候选姓名来自当前对话自己的工具数据。
  • 正确姓名没有出现在回复中。
  • 回复里某个词与正确姓名使用同一套字母系统,并且恰好相差一个字母。

满足条件后,只替换那个完整单词,并记录纠正日志。不修改词内部的片段,也不改动其他内容。只要正确姓名已经在回复的任何位置出现,检查就直接放行。

这套做法的依据是:正确姓名已经存在于工具结果中,程序只需要核对模型有没有抄错,无须重新推断用户想找谁。

但它也主动放弃了一部分覆盖范围。例如,一条回复同时出现正确姓名和错误变体,按照原文规则不会修正。规则越窄,越容易判断修改依据,也越可能漏掉复杂错误。

另外,「恰好相差一个字母」的实现没有公开。它是否包含插入、删除、相邻字母交换,以及如何划分多语言单词,原文都没说清。不能直接把这段描述等同于某一种编辑距离算法。

金额先由代码排好,再检查模型有没有照抄

姓名错误是意外,金额则是作者从一开始就防备的对象。

他们让普通代码为工具返回的每笔金额生成可直接展示的文本,包含对应币种的小数位数、千位分隔符和货币代码。模型拿到的是成品,并被要求原样复制。

不过,给出成品还不够。最终回复中的每个金额,都必须匹配当前对话数据中的某个展示值;明确标为示例的金额可以例外。比较之前,两边会先做规范化,兼容原文所说的阿拉伯数字表示差异。

需要精确呈现的业务值,应当由代码生成,并在输出端核对。

同一套检测代码运行在两个位置:在线上,每条回复展示给用户前执行姓名纠正和金额检查;在线下,对脚本对话和真实生产对话做测试。

离线测试还检查另外两件事:助手建议修改的记录是否确实来自真实数据,以及已经执行的修改是否事先得到用户批准。加上姓名、金额,一共四类检查。

复用检测代码的价值,是减少「测试检查一套,线上执行另一套」的偏差。生产对话触发离线告警,可以暴露线上遗漏或回归。不过,离线检测本身无法保证问题一定在用户看到之前被发现;实时拦截仍要依靠输出前的检查。

我的判断

我认同作者把最后一公里纳入验证。对于记账助手,名字和金额都是用户采取行动的依据。语句流畅并不能替代事实准确,这一层校验很有必要。

确定性纠正也有成立的前提:系统手里已经有可信原值,修改对象足够明确,规则可以审计。把它推广成「看到近似姓名就自动替换」会很危险,同一业务里完全可能存在两个只差一个字母的客户。

金额检查还有一个边界:某个金额确实出现在工具数据中,不代表模型把它分配给了正确客户。原文描述的是展示值匹配,没有说明是否核验了客户、金额与记录之间的对应关系。

和重新生成相比,局部纠正省去了一次额外模型调用;和固定模板相比,它保留了自然语言表达的空间。但作者没有提供这些方案的对照数据,也没有给出误修率。因此,这是一份有清晰工程依据的经验,尚不足以证明它对所有团队都更优。

能拿来做什么

  • 在 Node 服务的工具响应中,同时提供业务原值和展示文本,让金额格式由代码统一处理,并在回复返回前核对展示值。
  • 给 AI 编程任务补上一条验收要求:检查最终回复中的姓名和金额是否忠实于工具结果,不能只验证工具调用成功。
  • 为重试记录修复结果、额外调用成本和等待时间。若同类错误持续复现,就据此评估是否适合加入范围明确的确定性校验。
  • 用实际用户的语言建立多轮测试,检查错名是否在后续回复中继续传播,同时覆盖修改记录必须经过用户批准的流程。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
Ubuntu 容器逃逸利用公开,补丁仍有空窗
下一篇
客户删除后又被导入:如何堵住数据回流

资讯速览

dev.to · AI · 2026-10-23 02:52

AI 评分 8.0 / 10

相关标签

#Agent#可靠性#测试

继续阅读

  • 用可交互小模型拆解扩散 Transformer
  • Ubuntu 容器逃逸利用公开,补丁仍有空窗
  • 客户删除后又被导入:如何堵住数据回流
  • 接口隐藏了源站地址,其他出口仍在泄露
  • 四个九可用性为何需要自动止损