通用方法 · 熟练
它答错了,不一定是不会
先分清是推理错,还是拿错了材料
长会话里 agent 出错时,人的第一反应通常是「模型不行了」——但把那一轮真正注入的上下文调出来看,会发现它经常是在用早前某一步检索回来的、陈旧或不完整的信息:任务早就换了,它还在按第三轮那份摘要办事。这类错和「推理错」的修法完全不同,可在对话表面上长得一模一样。这一页给一套把两者分开的排查法:给每一轮挂一个追踪标识并留下当时的记忆快照 → 让记忆的每次读、写、淘汰都产出一条结构化记录 → 对检索时延、错误率与用量异常设阈值 → 提示模板与抽取规则一律进版本控制。判据一句话:定位得了「坏上下文是哪一刻进来的」,才谈得上修。
方法 · 一图看懂
1
先分清两种错 — 拿错材料与推理失误,症状相同、修法相反
2
每轮留一份快照 — 挂唯一追踪标识,把当轮注入的记忆内容一起存下来
3
给记忆的每次读写留记录 — 查询入参 · 返回片段 · 淘汰动作,各出一条结构化日志
4
三个数设阈值 — 检索时延 · 错误率 · 用量突增,任一越线先看快照再看模型
5
规则进版本控制 — 提示模板与记忆抽取规则一改,行为变化才隔离得出来
原理 · 为什么有效
为什么必须把「记错」和「不会」分开?因为它们的修法互相抵消。判成「模型不行」,动作通常是换更强的模型、或者把要求写得更重 —— 但如果真因是检索回了一段过期的材料,这两招都只会让那一轮更贵:更强的模型会更努力地按错材料推理,写得更重的要求会把那份旧材料一起强化进去。反过来,判成「记忆问题」却实际是推理问题,动作会变成拼命清理记忆与加检索,而问题一次都不会好转。两者在对话表面上无法区分:它都表现成「答得头头是道但不对」。唯一能把它们分开的东西,是那一轮真实注入的内容 —— 而它默认不留痕,所以你必须主动留。这也是为什么这事属于「诊断」而不是「优化」:先要能看见,才谈得上改。
适用场景
适用:跑长会话或多步任务的 agent、且已经出现过「答得很像但不对」的人;记忆或检索是你自己接的(不是平台黑盒),能改日志与埋点的人;接手了一套别人搭的 agent、要先弄清它到底在看什么的人。
⛔ 不适用:只做单轮问答、没有跨轮记忆的场景 —— 那一轮注入的只有你贴进去的东西,不存在「检索回旧材料」这条路径。
⚠️ 前提:你能拿到「当轮实际注入的内容」。拿不到就别急着按本页下结论 —— 那时你连两种错都分不开。
自测 · 5 问
我能不能说出上一次它答错时,那一轮它实际看到的是什么?(说不出 = 没有快照)
我的日志里记没记「这次检索查了什么、返回了什么」?
我手上有没有一个明确的阈值,能在检索变慢或用量突增时先提醒我,而不是等结果出来才发现?
提示模板和记忆抽取规则有没有版本记录?我能不能指出上一次改它们是哪天?
上一次出错,我是先看了快照,还是先动了提示词?
怎么上手 · 验证步骤
先在一次会话上试通,别一上来铺全量:给这一轮的每次工具调用与记忆读写各打一行记录(时间 · 会话标识 · 查询入参 · 返回片段的前若干字符)并把当轮注入的上下文整份存一份;然后故意做一次「任务中途换目标」,跑完回头看那一轮注入的内容里,旧目标还在不在、它有没有被后来那句覆盖。这一步做出来,你就有了一根标尺 —— 之后任何一次「答得像但不对」,都可以拿同一份快照去比,不用再靠猜。
自检动作:拿最近一次出错复演一遍,写下「它当时看到的三样东西」(旧目标 / 被淘汰的记录 / 本轮要求)。三样都写得出来,说明快照机制成立;只能写出一两样,说明还缺某一段的埋点 —— 缺哪段就先补哪段,别先去改提示词。