记录完整性感知的环境重建:被服务栈审查的工具调用能否解释跨源重建产出率的 3.7 倍差异
轨迹反推环境把日志当作完整观测,而审查证据显示它只是一次有损投影;本提案提出 CARE 框架,用意图—事件缺口与补全依赖度两个量给每个环境发完整性证书。
背景与动机
轨迹正在从训练对象变成观测通道。Terminal-Universe(arXiv:2609.04148)从 359,593 条公开轨迹重建出 68,263 个候选环境,经去重去污后评估 38,294 个终端环境与 1,900 个 SWE 仓库代表,认定 37,273 个为任务充分环境;在其上微调 Qwen3.5-27B,Terminal-Bench 2.1 从 46.2% 升到 58.1%(+11.9),EvoCode-Bench v2 MT@4 提升 13.8 分。吸引力很直白:一次性录像换成了可反复出题的工作区。
代价是把重建质量全押在「轨迹里的文件操作是完整的」这个前提上。Interface-Induced Trajectory Censoring(arXiv:2609.03966)给出的证据让这个前提站不住。固定权重、用例、解码与随机种子,只换 serving adapter,同一模型在 BFCL v4 上报 0.00 或 0.96 / 0.19;τ-bench 的 115 个交互式零售任务上,同一次替换让服务端解析到的调用从 0 变到 636、到达任何工具执行的任务从 0 变到 103。更难处理的是定位结果:模板 × 解析器的 2×2 里两个主效应恰好为零,效应全部落在交互项,修好合同的一边买不到任何东西。审查进到了训练环——verl 的 AgentLoop 在 7B 上有 45/115 次生成携带完整调用,其中 0 次被接受、0 次执行、0 次返回观测。在 Qwen2.5-Coder 的 21 倍尺度跨度上,服务端每一档都解析出 0/100,而格式良好的发出调用在 32B 涨到 80/100。
两篇论文放在一起露出一个盲区。Terminal-Universe 承认重建不完整,把原因归在记录侧——原文给出的三条是:回放只保留智能体触碰过的路径、智能体自建文件与其后的改动被整体排除在回放工作区之外、以及「轨迹只显示了文件的一部分或终端输出被截断」时文件内容本身就是残缺的;并把来源差异处理成编码差异——原文写的是 source corpora encode file operations differently,于是做归一化。这个处理覆盖了格式,没有覆盖到达率。一条被解析层丢掉的写文件调用,和一次从未发生的写文件调用,在归一化后的事件流里长得一模一样。
盲区无法在流水线内部发现,是因为质检与重建共用同一份记录。Terminal-Universe 的充分性判别由一个 agentic judge 读取工作区完成,而工作区本身是从那份记录反推出来的。裁判看得见「缺东西」,看不见「缺的是因为没发生,还是因为没记上」。
两处已发表的数字让这件事值得追。一是重建产出率在来源间相差 3.7 倍:LFM2-Terminal 每 100 条轨迹产出 32.9 个环境,SWE-Gym 22.4 个,SWE-smith 只有 8.8 个。二是 terminal 池的回放工作区中位数只有 2 个文件、0 行代码,补全智能体把它撑到 13 个文件、316 行代码;30 条抽检补全里有 8 条引入了与任务无关的大量文件或代码。跨源产出率差异被解释为任务类型差异,另一个解释是记录到达率的跨源差异。两者在现有数据上不可区分,处方却相反:前者应当继续扩大轨迹来源,后者应当先给每个来源做一次记录审计。
一处对动机有利、但原稿没有用上的证据:3.7 倍这个跨度并不能被”terminal 池 vs SWE 池”的任务类型二分干净地解释。按 Table 12 的轨迹数与环境数算每 100 条轨迹的产出率,六个来源排序为 LFM2-Terminal 32.9 > SWE-Gym 22.4 > LiteCoder-Terminal 13.8 > CoderForge 12.1 > SWE-rebench 9.1 > SWE-smith 8.8——SWE 池的 SWE-Gym(22.4)高于 terminal 池的 LiteCoder-Terminal(13.8),排序是跨池交错的。更反直觉的是方向:Table 13 显示 SWE 池的回放工作区文件证据反而更多(中位 5 个文件 / 421 行代码,terminal 池为 2 个文件 / 0 行代码),产出率却更低。任务类型解释需要额外假设才能把这两个事实一并解释,而记录到达率解释天然预测它们。
⚠️ 必须一并说出的限定:SWE-Gym 只有 4,152 条轨迹(929 个环境),是 LFM2-Terminal 的约 1/34,其 22.4 的估计区间远宽于后者。上述交错是提示性的,不是结论性的——它足以说明”任务类型”这个现有解释并不完整,不足以说明”接口审查”已经胜出。
另需补上该抽检的另一半结论,以免高估补全问题的严重性:那 30 个补全工作区中没有发现任何任务解(原文:we found no task solutions in the 30 completed workspaces)。8/30 引入的是无关内容,不是泄漏的答案——这决定了 CD 应当被当作权重与分层依据,而不是过滤条件。
核心思路
提出 CARE(Censoring-Aware Reconstruction of Environments,审查感知的环境重建)。它不替换重建算法,而是给每条轨迹与每个环境附两个可计算的量,把记录完整性从隐含前提变成显式变量。
第一个量是意图—事件缺口(Intent–Event Gap,IEG)。轨迹里智能体的自然语言常出现明确的操作承诺(写入配置、跑一遍测试),事件流里却没有对应条目。统计承诺后无事件的比例,得到一个只需要轨迹本身、不需要原始服务栈的审查代理量。它的合法性来自审查发生的位置:截断在模型输出与服务端解析之间,模型侧的意图文本不受影响。这个不对称性正是 IEG 与「命令密集型任务本身文件操作少」的分界线——后者同样压低事件数,却不会抬高意图承诺的密度。
第二个量是补全依赖度(Completion Dependence,CD)。Terminal-Universe 只在池的粒度上报了回放/补全前后的文件数与代码行数,CARE 把它下沉到每个环境:CD = 1 − 回放内容量 / 最终工作区内容量。terminal 池的中位数提示这个分布在 0.9 以上有很重的一块质量。
⚠️ CD 的口径需要在跑之前修一处:terminal 池回放工作区的代码行数中位数恰为 0(Table 13:代码行 0/43,文件数 2/2.9)。按 CD = 1 − 回放/最终计算,这批环境的代码口径 CD 恒等于 1.0,与补全量完全无关——也就是说 CD 在最需要分辨的那一半环境上完全饱和、失去分辨率。三个可选修法:① 分母改用全部文本行(terminal 池 60 → 539,中位数 CD ≈ 0.89,有分辨力);② 代码口径加伪计数(CD = 1 − (r+1)/(f+1));③ 只用文件数口径(2 → 13,中位数 CD ≈ 0.85)。若坚持代码行原口径,CD 只能当二值标记(“是否零回放”)用,不能进加权指数。
两者合起来构成环境的完整性证书 (ÎEG, CD),用途有三:给语料算完整性加权的有效规模;给来源排序,决定先审计谁;在下游按 (1−ÎEG) 折权重。
| 维度 | Terminal-Universe | 审查论文的 preflight | CARE |
|---|---|---|---|
| 观测对象 | 工作区是否充分 | 服务栈是否丢调用 | 单条轨迹的记录到达率 |
| 是否需要原始栈 | 否 | 是 | 否 |
| 能否定位到环境粒度 | 是(judge) | 否(二分判定) | 是(连续量) |
| 与重建是否独立 | 否,读同一份记录 | 是 | 是,读另一层证据 |
区别在测量结构,不在算法。CARE 的价值来自它是第一个不与被审计对象共用记录来源的尺。
技术路线
第一步,构造冻结的意图—事件探针。 定义操作承诺的判定模式(祈使式 + 路径或命令词 + 无后续同类事件),在两个方向上标定:人工标注 200 条轨迹给出金标准,另外在合成轨迹上注入已知数量的丢弃事件测召回。判定模式的口径在跑之前登记进仓库,避免事后调参。
建议并行构造第二个探针:发出调用—事件缺口(Emitted–Event Gap,EEG)。理由是审查论文测到的截断位置在”发出格式 → 服务端解析”之间(Qwen2.5-Coder 上服务端每一档都解析 0/100,而格式良好的发出调用在 32B 达 80/100),而 Terminal-Universe 的归一化事件流保留了 agent actions——“轨迹文本里存在一条完整的写文件调用、而事件流里没有对应文件变更”是可以被直接模式匹配的,不依赖自然语言解析,也不会遇到挑战一那类语义假阳性。IEG 用自然语言承诺做代理是合法的(意图文本同样不受解析失败影响),但它是同一缺口的一个更嘈杂的观测量。两个探针一起报还有一个额外收益:它们的相关性可以直接检验”意图文本是否真的追踪了被丢弃的调用”这一隐含假设。
第二步,跨来源测 IEG,做双因素分解。 在六个来源上分别估 ÎEG_u,把重建产出率 Y_u 对(任务类型代理,ÎEG_u)做回归,任务类型代理取轨迹中出现的不同文件路径数与命令事件占比。判据是 ÎEG 的系数在控制任务类型后是否仍显著。这一步不需要访问原始服务栈,公开轨迹就够。
⚠️ 第二步的统计功效撑不起它的判据,需要换主分析。 六个来源、两个预测变量,残差自由度只有 3;且各来源轨迹数相差 34 倍(SWE-Gym 4,152 条 vs LFM2-Terminal 139,841 条),等权 OLS 让最小来源的噪声与最大来源的信号同权。在这种设计下”系数显著”几乎达不到,而”系数塌到 0”会成为默认结局——无论核心主张是否成立,判据因此接近不可证伪。
替代设计(建议升为主分析):ÎEG 本来就是逐轨迹定义的,不必先聚合到来源。直接在轨迹粒度上估计——因变量取”该轨迹是否产出可重建环境”(二值,n = 359,593),自变量为该轨迹的 ÎEG,控制来源固定效应与任务类型代理,用混合效应逻辑回归。功效提升五个数量级,且来源固定效应已经吸收了第二步原本想控制的来源层混杂。来源级回归降级为描述性排序的呈现,不再承担显著性判据。
相应地,预期成果第二条的可证伪条件应改写为「轨迹粒度上 ÎEG 的偏回归系数置信区间是否覆盖 0」,而不是来源级系数的显著性;报告时需注明二值因变量的来源间基线差异极大(8.8%–32.9%),固定效应模型与随机效应模型的结论可能不同,两者都报。
第三步,每环境的 CD 与证书。 在重建流程插桩,分别记录回放阶段与补全阶段写入的文件数、字节数与代码行数,据此算 CD,产出每张环境的 (ÎEG, CD)。
对照实验设三臂。 A 臂原协议,不做完整性区分;B 臂按证书过滤,丢弃高 ÎEG 或高 CD 的环境;C 臂按 (1−ÎEG)^α 加权采样,α 取自 {0, 0.5, 1, 2}。α=0 时 C 臂严格退化为 A 臂,这条退化关系让「α=0 却测到增益」直接判为噪声或实现缺陷。评测沿用 Terminal-Bench 2.1 与 EvoCode-Bench v2 MT@4。
关键技术挑战。
挑战一是 IEG 的语义假阳性。模型说「我来检查测试文件」之后只做了一次读取,不算丢弃。缓解办法是只统计带明确写入语义的承诺,并用注入实验测得的假阳性率做校准,而不是追求零假阳性。
挑战二是来源与栈混淆。六个来源的轨迹由不同的模型与 harness 产生,ÎEG 的差异里混着措辞习惯的差异。缓解办法是做来源内对照——按 harness 版本或 toolkit 分组看组内是否仍有可解释的变异;跨源只报排序,不做因果归因。
挑战三是 CD 的内生性。CD 高的环境本就来自文件证据少的轨迹,补全得多是结果不是原因。CARE 不把 CD 当缺陷指标,只当权重项与抽检分层依据:在原有 30 条抽检之外,按 CD 分层再抽 60 条高 CD 环境,检验 8/30 的「引入无关内容」比例是否集中在高 CD 层。
预期成果
定量目标三条,每条都配了证伪条件。
一是在六个来源上给出 ÎEG 分布,检验它与产出率的排序是否一致。可证伪预测:LFM2-Terminal 的 ÎEG 低于 SWE-smith,两者之差的 bootstrap 置信区间不覆盖 0。若 ÎEG 在来源间持平而产出率仍差 3.7 倍,接口成分可忽略,本提案的核心主张不成立。
二是回归里 ÎEG 的系数在控制任务类型代理后仍显著。若系数塌到 0,说明缺口测到的只是任务类型,第一个量没有增量信息。
三是高 CD 层的「补全引入无关内容」比例显著高于低 CD 层。回放中位数 0 行代码意味着这块质量很大;若抽检显示无关内容在低 CD 层同样常见,CD 就不具备分层价值。
定性目标是把环境语料的规模指标从「环境个数」换成「完整性加权的有效环境数」。这个折扣与谱系冗余折扣正交,两者相乘才接近独立监督单元的真实数量。
影响分两层。近端是给轨迹反推环境这条范式补一把尺。这一范式正在扩散,Environment Evolution(arXiv:2609.04128)用 Evolution-Lineage 调度器按代际难度推进演化。这里需要精确一点:它的难度信号是从多轮学习目标推导的 off-policy 指标(场景新颖性、技能稀有度、执行长度),论文明确把「用一个模型跑 rollout、以 pass rate 作难度度量」列为它要替代的 on-policy 做法,因此审查不会通过演化难度指标这条路径混进来。真正的污染入口在另外两处:一是种子池筛选(候选环境须在 Claude Opus 5 下满足 pass rate ≤ 4/8 且平均 ≥ 30 轮),二是每个候选环境必须自带的、能通过验证器的 Oracle 解法——这两处都依赖真实执行,工具调用被审查会直接改变它们的通过与否。远端是把记录完整性确立为 agent 数据工程的一等字段,与标签正确性、谱系独立性并列。
局限性与失效模式
- IEG 是代理量,不是审查率的无偏估计。 它测的是”承诺与事件的不匹配”,不是”调用被丢弃”。命令密集型任务、多轮补救成功、以及”模型说了但后来改主意”都会抬高它。缓解只有注入实验标定一条路,且注入分布必须尽量贴近真实语料的措辞与栈,否则召回率的外推无效。
- 来源与栈的混淆无法在观测数据内解除。 挑战二已说明只报排序、不做因果归因。需把后果说透:即使 ÎEG 与产出率排序一致,也不能断言”是接口审查导致了产出率差异”——同样的排序也完全可能来自”某些 harness 的措辞习惯恰好与某些栈的解析器不匹配”。真正的因果证据需要受控重跑(同一批任务在不同 serving adapter 下重放),这超出本提案的范围,应写成后续工作而非隐含主张。
- CD 的内生性不可消除,且会与 IEG 相关。 挑战三把它降格为权重与分层依据是对的。但需额外注意:CD 高的环境本身也就是”重建质量最不确定”的环境,若把 (1−ÎEG)^α 与 CD 的折扣相乘,两个相关量的权重方差会被放大,α 网格需要重新检查其有效取值范围。
- 退化检验只有一个点。 现有设计只在 α=0 处有退化点(C 臂退化为 A 臂)。建议在 α<0 再取一两个点做反向对照:若给高 ÎEG 环境更高权重同样测到增益,说明证书并没有捕获到真实的质量差异,增益另有来源。
- 评测分辨率的天花板。 EvoCode-Bench v2 MT@4 的基线只有 6.3(Terminal-Universe 报 6.3 → 20.1,+13.8),低基线放大了相对变化;Terminal-Bench 2.1 的 +11.9 是在 Terminus2-XML scaffold 下测得的,同一模型在 Claude Code 下为 +10.4——增益口径上的 scaffold 差异达 1.5 分。三臂之间的差值若小于这个量级,结论不可靠。
- 证书只覆盖”记录不完整”,不覆盖”记录错误”。 一条被解析层改写而非丢弃的调用(例如参数被截断、路径被规范化错)会一并产生意图、发出调用与事件,IEG 与 EEG 都不升高,CD 也不升高。这类错误需要文件级校验和之类的独立机制,属另一把尺,不应指望 CARE 覆盖。
相关工作
-
Interface-Induced Trajectory Censoring(arXiv:2609.03966)。本提案的测量基础。把工具调用漏斗拆成意图、发出格式、服务端解析、实际执行、多轮补救五层,报告了 BFCL v4 的 0.00 对 0.96 / 0.19、τ-bench 的 0→636 与 0→103、verl AgentLoop 7B 上 45/115 次完整调用零次执行,并发布 98 行 preflight 脚本。它覆盖评测侧与训练环,没有进入离线语料重建。
-
Terminal-Universe: Turning Agent Trajectories into Scalable Terminal Environments(arXiv:2609.04148)。本提案的对象。359,593 条轨迹重建出 68,263 个候选环境、筛出 37,273 个,Qwen3.5-27B 在 Terminal-Bench 2.1 上 +11.9、EvoCode-Bench v2 MT@4 上 +13.8。附录已注意到来源间编码差异、内容截断与补全质量(30 条抽检里 8 条引入无关内容)。CARE 在这些观察之上加一把不依赖同一份记录的尺。
-
Environment Evolution for Terminal Agents(arXiv:2609.04128)。off-policy 环境演化,用 multi-agent harness 沿三个方向递增难度,Qwen3.6-27B +14.4、35B-A3B +18.0。其调度器依据代际难度采样,是与产出率同源的下游消费者,也是完整性证书的潜在受益方。
-
Spurious Advantage Hidden in GRPO(arXiv:2609.04063)。指出 GRPO 优势估计在三类情形下给出虚假高幅度:有界答案集、开放答案集中的有界子情形、预算打开多条路径的搜索型 agent。第三类与 CARE 直接相关——多路径结构让「调用是否进入记录」成为路径数的函数,审查率不再是来源常数。
-
SWE-Gate: Passing Functional Tests Is Not Enough for Software Engineering Agents(arXiv:2609.04167)。方法学上的对照:它为同一个补丁并行构造功能测试与评审约束测试,在 303 个仓库级实例上发现 644 个通过功能测试的修复中有 221 个不满足评审约束。CARE 的意图—事件探针走的是同一条路——给同一个产物配第二个独立视图。