失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选偏差

成长演进

具备清晰骨架、初步数学推导或工程验证,持续补充论据与实测。

ℹ数字花园

🌿 什么是数字花园与思想演进?

遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:

  • 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
  • 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
  • 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
  • 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
浏览全站数字花园与笔记全景 →

模型把商品 A17 写成了 A18,工具返回“商品不存在”。接下来模型改成 A17,查询成功。这样的记录值不值得保留?当然值得。但把整段记录原样加入 SFT,不一定是在教模型避免错误。

如果每条 assistant 消息都作为正确目标,第一条错误调用也会被训练。模型既被教“应该写 A18”,又被教“收到错误后改成 A17”。我们原本想学习恢复,却顺带强化了失败的起点。

本篇讨论怎样把失败变成可用证据,而不是简单地把失败删掉,或者把修正后的记录一律称为好数据。沿用库存任务,例子与统计均为教学构造,未运行模型训练。

先定位错误,不急着生成反思#

看到任务失败,先检查最早可以确认的偏差。模型输出无法解析,属于格式问题;字段合法却选错商品,是参数问题;参数正确而服务超时,是环境故障;查询结果正确却回答“已预订”,则是结果解释或约束遵循问题。

观察到的现象可以确认什么还不能直接断言什么
请求写 A18,用户要 A17商品参数不匹配模型完全不理解工具
合法请求超时这次没有得到有效结果库存为零,或模型不会查询
返回 2 件,却说足够 3 件回答与证据矛盾整段所有动作都错误
查对了,评分仍为零需要检查评分规则和完整轨迹评分器一定正确或一定错误

错误分类可以多标签。一次格式错误可能引发重试,重试又耗尽预算。日志里既要保留起因,也要保留最后停止原因,不能只用一个“失败”覆盖整个过程。

模型自己写出的反思是一种诊断建议,不是错误原因的最终证据。“我没有认真考虑用户需求”很难指导修复;“用户请求 A17,而调用参数是 A18”则能直接由记录核对。

三种改进,更新的东西不同#

重试是再尝试一次。如果模型参数、提示和反馈都没变,只是重新采样,成功率也可能提高,因为多了一次机会。

上下文修正把错误信息或经验放进下一次输入。模型权重可以完全不变,但行为受新上下文影响。Reflexion 的方法就利用反馈生成文本反思并保存在记忆中,供后续尝试使用;其“学习”不能直接等同于梯度更新。Reflexion v4,第 3 节

参数训练则把经过核对的数据用于 SFT、偏好学习或其他更新。只有确实更新并评测了参数,才可以报告相应的训练效果。

这三者可以组合,但成本与证据要分开记。一个带着十次历史反馈才成功的系统,不应被描述为首次就会完成任务。把反思写进长期记忆后,还需要界定测试之间是否共享它;否则前一题的信息可能影响后一题。

同一段失败,可以形成两类不同示范#

设用户明确要求 A17,模型却调用 A18,环境返回 unknown_sku。这个错误码只说明当前请求中的商品不存在,不会神奇地告诉模型正确编号是什么。模型应从原始用户请求中找回 A17。

第一类数据教首次正确行动:输入是原始请求与工具定义,目标是查询 A17。错误调用和之后的反馈不进入这个样本。我们要在对应环境里核验这条正确动作,不能仅凭改了一个字符就宣布整条新轨迹成功。

第二类数据教失败恢复:输入包含原始请求、错误调用和环境返回,目标只是修正后的 A17 调用。错误调用保留为历史条件,但不作为本次应模仿的目标。

数据类型模型能看到什么本次应学什么
首次正确原始请求、接口定义一开始选对 A17
恢复上述信息,加 A18 调用和错误返回根据请求与错误修正参数

两类都可能有用。只有恢复样本时,模型可能学会“先错一次再修”;只有干净样本时,它未必知道实际遇到错误后如何继续。是否混合、如何配比,需要根据部署故障分布验证,不能把两类记录混在一起却不标来源。

修正后的轨迹必须重新获得环境证据#

假设把错误调用 A18 改成 A17,却保留旧结果“商品不存在”,新记录仍然不一致。反过来,保留 A18 调用、把结果手改成 A17 的库存,也不是真实修复。

正确做法是保留不可覆盖的原始记录,从允许修正的检查点分叉,实际执行修正动作,再保存新的返回值和后续结果。记录父轨迹、分叉位置、修正来源、环境快照和验证状态。

对于本文只读固定环境,分叉比较简单;若以前的错误操作已经写入数据库或预订库存,就不能假设“把历史文字改回去”能够撤销实际效果。需要恢复环境快照,或者在当前真实状态下执行补偿流程。没有这层处理,修正示范可能从一个根本不存在的世界开始。

不要把验证通过简化成“修正调用能解析”。语法、语义、工具执行和最终任务结果仍然是不同层次。对于还未完成任务的局部修正,只标记局部通过。

只保留成功,数据分布会悄悄改变#

设有 100 个任务,其中容易任务和困难任务各 50 个。模型在容易任务上成功 45 个,在困难任务上成功 10 个。如果只收集成功轨迹,会留下 55 条,其中容易任务占:

4555≈81.8%.\frac{45}{55}\approx81.8\%.

原始任务中容易样本占 50%,筛选后却超过八成。这不是模型真的把所有难题学会了,而是难题更少进入训练集。

如果再对失败任务多试几次,留下第一次成功的结果,数据还会偏向“能通过更多尝试被解决”的任务。最终数据只显示成功,原先消耗了多少失败尝试却可能消失。应保留所有尝试的父子关系、采样预算和选择规则。

成功筛选可以是有用的数据方法,但必须报告每类任务的保留率与缺失情况。只做去重不能修复这种偏差,简单提高困难任务权重也不能创造尚未获得的可靠示范。

偏好对也必须在可比较的条件下构造#

想把失败轨迹和成功轨迹做成偏好对,先检查它们是否回答同一个任务,是否拥有相同工具和预算,是否从可比较的初始状态开始。

尤其不要把“没看到错误反馈的首次回答”和“已经知道正确答案的修正版”直接作为同一上下文下的好坏回答。两者获得的信息不同,偏好标签可能教会模型利用训练时的额外提示,而不是改善真实首次决策。

多步轨迹若选择不同动作,会自然看到不同工具结果,这本身不等于不可比较;关键是环境规则和初始条件一致,结果由对应动作产生。训练算法如何表示这些环境消息、哪些 token 计入策略概率,则需要另外明确,不能把整段日志当成普通回答字符串就结束。

给反馈留一个独立的检查出口#

如果反思由模型生成,修正也由同一个模型生成,再由它自己说“现在正确了”,整个链条缺少独立证据。至少应使用参数约束、真实执行返回、任务规则或人工抽查核验关键结论。

隐藏测试答案也不能被当作普通训练反馈。若在测试中给模型失败原因并允许修正,这是一种带反馈的评测协议;它与无反馈首次测试不同,应该单独报告。测试实例随后若进入训练,也需要换独立测试集,不能继续把它叫未见任务。

本文的本地检查用一个极小环境执行 A18 与 A17:前者返回错误,后者返回杭州库存 2。检查恢复样本只监督修正动作,首次正确样本没有错误反馈,同时检测把旧错误返回贴到新请求上的不一致记录。这是数据构造检查,不是语言模型自纠错能力测试。

下一轮实验应回答哪一个问题#

可以先保持训练预算与评测环境固定,比较干净示范、干净示范加恢复样本两种条件。首次任务完成率、错误后的恢复率与总调用成本分别报告。

恢复率的分母也要明确。如果只对模型自身失败的任务计算,不同模型的失败集合可能不同,数字不能直接横向比较。另设一组固定的错误历史,用同样的历史测试恢复行为,再配合闭环任务测试,更容易判断差异来自哪里。

同样,要检查恢复能力提高时,首次错误是否也变多。如果模型学会了先触发错误再依赖反馈,总体系统可能更慢,而不是更可靠。

失败轨迹最有价值的部分,是它保留了偏差发生时模型看到了什么、做了什么,以及环境怎样回应。把这条证据链保留下来,再决定哪些片段做上下文、哪些片段做目标,下一轮训练才有机会解决已知问题,而不是重新学习同一个错误。

文章概念网络

从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。

49 / 49 个节点 · 正文标记术语与关键词概念

失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选偏差同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选…失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选偏差先定位错误,不急着生成反思先定位错误,不急着生成反思错误分类错误分类三种改进,更新的东西不同三种改进,更新的东西不同重试重试上下文修正上下文修正Reflexion v4,第 3 节Reflexion v4,第 3 节参数训练参数训练同一段失败,可以形成两类不同示范同一段失败,可以形成两类不同示范unknownskuunknownsku首次正确行动首次正确行动失败恢复失败恢复修正后的轨迹必须重新获得环境证据修正后的轨迹必须重新获得环境证据只保留成功,数据分布会悄悄改变只保留成功,数据分布会悄悄改变成功筛选成功筛选偏好对也必须在可比较的条件下构造偏好对也必须在可比较的条件下构造给反馈留一个独立的检查出口给反馈留一个独立的检查出口下一轮实验应回答哪一个问题下一轮实验应回答哪一个问题SFTSFT动作动作环境环境反馈反馈记忆记忆SFTSFT采样采样利用利用环境环境动作动作反馈反馈环境环境状态状态语义语义动作动作训练集训练集采样采样去重去重选择选择动作动作环境环境tokentoken策略策略利用利用状态状态反馈反馈测试集测试集动作动作环境环境环境环境反馈反馈
失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选偏差

失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选偏差

回到原文 ↗
BIBTEX

引用本文

@article{2026-10-23-llm-training-tool-05-failures,
  author  = {枫语},
  title   = {失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选偏差},
  journal = {枫语},
  year    = {2026},
  month   = {oct},
  url     = {https://meiluosi.github.io/posts/2026-10-23-llm-training-tool-05-failures/}
}
🌐

本篇知识星丛与滑动侧栈

失败轨迹怎样用于下一轮训练:错误分类、修正监督与筛选偏差 当前主轴

搜索

正在载入索引…