Skip to content
实验报告
待周评
检查已经报错,AI 为什么还记住了那句答案?
开源工程观察 · 实验研究

检查已经报错,AI 为什么还记住了那句答案?

本轮明明失败了,下一轮却把那句没检查完的答案当作历史继续使用。一次可重跑的对照,揭开了错误提示与后续对话之间的缝隙。

2026-09-16English →

检查已经报错,AI 为什么还记住了那句答案?

设想你正在和一个 AI 助手对话:答案写出来了,负责检查它的程序却出了错。

下一次提问时,你可能会默认,刚才那段没检查完的答案不会再被使用。但在我们的对照实验里,旧逻辑一边报错,一边把答案存了下来;下一轮,模型真的收到了它。

错误提示结束了眼前这一轮,却没有挡住那段答案进入下一轮。

AI 的“记住”,在这里是什么意思?

这里的记忆有一个很具体的含义:程序保存对话历史,下次提问时,把其中的内容再次发送给模型。本文没有测试模型训练,也没有测试某个聊天产品的长期记忆功能。

假如一段未经检查的回答被存进这份历史,后面的模型就可能把它当作已有上下文。比如,一个尚未确认的说法可能成为后续回答的前提。这是我们关心的后果;本次实验直接验证的是那段答案有没有被重新发送。

这个问题来自 jbeckwith-oai 提交的 OpenAI Agents JS #1938。它是帮助开发者连接模型、工具和多轮对话的程序库。开发者可以给回答安排检查:检查可能说“通过”,可能说“拒绝”,也可能自己出故障,没能给出结论。

这次修复吸引我们,是因为旧实现已经处理了“检查说不行”,却漏掉了“检查没能完成”。我们研究持续工作的 AI 助手,想知道这样的中断会不会留下一个影响下一轮的尾巴。

我们故意让检查出错,再问下一句

实验中,测试模型总是输出同一句容易识别的标记文本。我们分别让检查通过、明确拒绝、抛出异常,或让一项通过而另一项异常。随后再问下一句,直接查看模型实际收到的历史。

模型的回答由脚本提供,会话运行和保存则使用真实程序库代码。我们安排了四种运行与保存组合,分别对照修复前的判断和修复后的判断:

检查结果旧判断:答案进入下一轮修复后:答案进入下一轮
全部通过4/44/4
明确拒绝0/40/4
检查抛出异常4/40/4
一项通过,另一项抛错4/40/4

这里的 4,是“一次返回完整答案或逐步返回答案”与“两种会话保存方式”交叉得到的四种组合;表格不是线上故障率。两个版本共记录了 32 条观察。

最关键的是后两行:没有检查结论的答案,旧判断会继续传下去,修复后不会。 正常通过的答案仍然保留,之前已经保存的回答和本次用户问题也都没有被误删。

检查完成与会话记忆之间的关系

图 1:异常检查后的答案是否进入下一轮。来源:本轮固定源码实验与原始结果,由作者绘制;图中数字为设定场景的观察数量。

没检查完,不等于答案有错

一项检查失败,不能说明答案一定有问题。可能只是检查服务暂时不可用。同样,几项检查中有一项通过,也不能替另一项给出结论。

修复后的处理保留了这个区别:没有把答案判成“已证明错误”,也没有让它自动变成后续工作的依据。

这带来一个实用的设计启发:程序可以为了排查故障,记录“模型刚才说了什么”;同时决定,这份记录暂时不应进入下一轮对话。留存一次尝试,与接纳它作为后续上下文,需要各自的规则。

检查全部通过也只代表满足了这批检查的要求,不保证答案在现实世界一定正确。

检查恢复了,应该补查哪一版答案?

再向前想一步:检查服务恢复时,原答案可能已经被重新生成,用户也可能改过问题。一个迟到的“通过”,到底批准了哪段内容?

本次修复和我们的实验都没有实现补验流程。这个问题却是从对照结果自然延伸出来的:如果开发者要增加补验,就需要把答案内容、对话轮次和所用检查规则对应起来,避免把旧结论接到新答案上。

开发者可以先做一个小实验:让检查程序主动出错,再运行下一轮,查看实际发给模型的历史。普通使用者也能提供有价值的线索:一段刚被提示失败的回答,是否在后文又被当成“已经确认过的事”?保留前后对话和错误提示,会比一句“AI 记错了”更有助于复现。

给技术读者:版本、完整方法与复跑入口

来源作者 jbeckwith-oai;PR 于 2026-09-15 UTC 合入。候选为 457dfff8ce30d19ccbd4a3796ec482356dc19dfa,对照替换为 8ac97dfedd0395beeb38edb0a17b83a9b89c3354 中的原 runner/guardrails.ts,这是该 PR 唯一变更的生产模块,其余候选代码保持一致。

探针使用公共 run、ScriptedModel、内置内存会话 MemorySession 和只支持追加的会话;分别运行流式与非流式模式,检查保存内容及下一轮模型输入。四类检查结果 × 两种运行模式 × 两种会话 × 两个版本,共 32 条观察。部分通过场景验证整批有一项异常,没有控制各检查的完成先后。

另外实际运行了上游对应测试文件,71 项通过,覆盖工具输出等更多情况;该数量与自编观察分列,不相加为可靠性分数。没有调用真实模型服务或外部数据库,也未证明所有自定义存储均正确。

固定源码、原始结果和复跑脚本。本文没有据此认定 CodeFlowMu 存在同一缺陷。

研究仓库

Last updated: