从噪声轨迹到根因:面向智能体优化的结构化轨迹分析与因果抽取 From Noisy Traces to Root Causes: Structural Trajectory Analysis and Causal Extraction for Agent Optimization
用结构化依赖图做反向因果切片,把执行轨迹蒸馏为高信噪比的优化证据
前置知识
反思式提示优化(Reflexive Prompt Optimization)
指 Reflexion、TextGrad、GEPA、DSPy 这一类范式:让一个 LLM 充当元优化器,根据 agent 历史执行轨迹诊断失败,再迭代修改 agent 的提示或策略。它把 prompt 当作可搜索的自然语言参数空间,用奖励/反馈信号做梯度或进化式搜索。
STRACE 直接定位在这类范式下游——它不替代反思式优化,而是为反思式优化器提供更干净的优化上下文,理解这一点才能看出它的贡献边界。
长程智能体与执行轨迹(Long-horizon Agent & Trajectory)
指 Computer Use、SWE-bench、VeruSAGE 这类多步骤、多工具调用的 agent 系统,其执行日志(trajectory/trace)包含推理链、代码执行环境、状态转移等复杂 artifact,长度动辄上百步、上万 token。
长程性正是噪声与因果错位的根源——Step 5 的错误可能延迟到 Step 50 才爆发,理解这一点才能体会 STRACE 解决的难题。
结构信用分配(Structural Credit Assignment)
强化学习中 credit assignment 问题(CAP)的特例:在模块化 agent 系统里,把最终任务成败归因到具体决策模块。已有方法用 RUDDER 类时序奖励重分配、min-form bottleneck 或生成式 critique。
STRACE 把这个问题转换成确定性的文本化因果归因,与 RL 范式形成对比,这是它与 TextGrad/CAPO 本质不同的地方。
形式化验证与 Verus(VeruSAGE-Bench)
Verus 是 Rust 的实用化形式化验证基础,VeruSAGE-Bench 含 5 个真实 Rust 项目(IronKV、Memory Allocator、Node Replication、NRKernel、Storage,平均 947 行),通过验证-修复循环让 agent 自动修补验证失败。
这是论文最难的评测场景,也是 STRACE 提升最显著的场景(+16.0% SR),理解它能看懂方法在长程、域密集型任务上的真实威力。
研究动机
现有长程智能体优化普遍依赖反思式机制(Reflexion、TextGrad、GEPA 等),由 LLM 充当优化器根据历史轨迹诊断失败并迭代修改策略,但在真实部署中会遇到两层数据噪声。批次层:批量轨迹存在严重异构性,不同失败的频率、严重度、根因各不相同(Cemri et al., 2026; Barke et al., 2026),对每条失败都优化在计算上不可行,且易过拟合到低价值失败,产出脆弱策略。单条轨迹层:论文图 1 刻画了 context-noise trade-off——把完整轨迹塞给优化器会引入大量无关成功步骤,稀释推理信号、诱发 spurious correlation 甚至 hallucinated prompt patch;而粗暴截断或滑动窗口把局部邻近性误当因果相关性,可能切断 Step 5 与 Step 50 的长程因果链。更根本的是,agent 中错误显现节点往往不是错误起源节点——Code Interpreter 在第 50 步崩溃可能是第 5 步 Planner 生成错误参数的延迟后果。这种症状与根因的时间错位使优化器倾向修症状而非根因。
本文的目标是本文目标是设计一个端到端框架,让 LLM 优化器在面对海量、异构、超长的 agent 执行轨迹时,能构造出高信噪比的优化上下文,做出既精确又稳定的策略改进。具体希望同时解决两层噪声:批量层把上百条轨迹压缩成覆盖主要失败模式的最小代表性集合;单条轨迹层通过依赖引导的因果分析剥离无关成功步骤,并显式定位到错误真正的逻辑起源(根因节点 $v_r$)而非它最终爆发的下游症状(显现节点 $v_m$)。最终目标是把两层精炼后的因果切片作为优化证据,引导优化器合成可泛化、可持久注入的可重用启发式规则,仅注入到对应根因模块的提示中,实现持续、安全且成本可控的智能体优化。作者也希望验证这套机制能跨越推理(HotpotQA)、网页交互(WebArena)和域密集型形式化验证(VeruSAGE-Bench)三类异构场景。
与已有工作不同的是,已有方法的本质缺口在于它们都把执行日志当成无结构的线性文本而非因果图。TextGrad 类梯度式方法把完整轨迹送进优化器,对噪声毫无防御;GEPA、DSPy 等进化式方法依赖标量奖励或截断摘要来塞进上下文窗口,长程任务中模糊了深层结构依赖;BM25 RAG 类方法按语义相似度检索,但症状节点附近文本恰好与失败最相关,于是检索往往把优化器引向症状而非根因。Reflexion、Hermes Agent Self-Evolution 等反思式系统依赖轨迹级非结构化反馈决定改什么,缺少结构化失败定位。与强化学习里的信用分配(CAP/SCA)相比,STRACE 把依赖图当作可解释结构先验做显式、文本化的因果归因,而非依赖学习到的稀疏奖励重分配。这种先做依赖引导诊断、再做优化的解耦设计是已有 prompt optimization 与 harness evolution 工作所没有的,也正是它能跳出症状-根因错位陷阱的关键。
核心方法
STRACE 的核心直觉是:与其让优化器在原始线性轨迹上做语义故障定位,不如先把工作流结构信息抽取出来当先验,再做拓扑层面的反向追踪。它运行在 Claude Agent SDK 上分四阶段。Phase 1 由 LLM 阅读 agent 源代码,推断文本化的执行依赖图 $G=(V,E)$,$V$ 是原子功能模块,$E$ 记录 data dependency(B 消费 A 产生的 artifact)与 control dependency(A 决定 B 是否被调用)。Phase 2 动态生成 Python 解析器提取全局结局 $y$ 与节点状态,再从统计严重度 $P(\text{Task Fail}\mid v_i\text{ Fail})$ 与结构路径模式(self-loop、dead-end)两维度聚合,按严重度+结构模式聚类做多样性采样。Phase 3 区分显现节点 $v_m$ 与根因节点 $v_r$,沿 EDG 反向切片得因果切片 $C_{\text{slice}}$ 并定位真正逻辑起源。Phase 4 把按 $v_r$ 分组的切片做归纳抽象合成可重用规则,仅注入根因模块提示中。
最核心的洞见是把错误显现节点 $v_m$ 和错误起源节点 $v_r$ 在算法上显式区分,并用结构依赖图桥接它们之间的时间/调用跨度。其他方法要么不分(直接在 $v_m$ 处优化等于修症状),要么隐式假设邻近即因果(截断式方法)。STRACE 则构造 $v_m$ 在 EDG 上的依赖闭包 $\to^*$,反向追溯被污染上下文的数据流与控制流,剥离所有无法到达 $v_m$ 的纯时间前置步骤。第二个关键创新是批量层与单条层的解耦:先在批量层用统计严重度和结构路径模式做多样性聚类压缩,把上百条轨迹降到 $k=5$ 个严重瓶颈模块、每个 $s=5$ 条代表性轨迹;再在单条层做因果切片。这种双层级联设计使即便轨迹体量放大到 453 条上下文成本也不会爆炸,同时保留根因证据。第三个关键创新是用 inductive abstraction 而非 instance-specific 失败记录驱动 prompt 更新,避免过拟合、产出可迁移到不同证明状态或任务实例的可重用启发式。
方法步骤详情
Phase 1:LLM 检查 agent 源代码(README、配置、agent 定义、源码),识别主动模块、被动共享状态模块及关键 artifact,输出文本化边表 $G$,每条边含两组件、依赖类型与 artifact 证据。Phase 2:先用单条 pilot 轨迹推断 trace schema(识别 Action:、Observation: 分隔符),动态编译解析脚本遍历全批提取 $y$ 与节点状态;再聚合诊断(统计严重度+结构路径),按严重度×结构模式聚类,每簇选 $s=5$ 条代表;失败静默时降级为按全局结局+结构路径聚类。Phase 3:输入代表轨迹与 $v_m$,用 EDG 从 $v_m$ 反向沿 data/control 边递归遍历,只保留能通过依赖闭包 $\to^*$ 到达 $v_m$ 的步骤,剪掉纯时序前置,对并行无关分支用回溯机制旁路得 $C_{\text{slice}}$;再语义推理定位污染源头指定 $v_r$。Phase 4:按 $v_r$ 分组因果切片,优化器归纳抽象合成可重用高层规则,注入 $v_r$ 提示策略完成优化。
技术新颖性
技术新颖性有三方面。第一,STRACE 把依赖图实现成文本边表而非可学习图对象或静态程序分析图,既框架无关(agent 可用任意框架/编码风格实现),又可被 LLM 直接消费作结构先验;表 3 显示五种不同 backbone(Claude Sonnet 4.5、Haiku 4.5、GPT-5.1 Codex Mini、DeepSeek-V3.1、MiniMax-M2.5)构造的图都能恢复核心依赖结构,最弱也只引入约 10% 噪声边。第二,反向切片算法用回溯机制处理多分支并行探索——发散推理路径彼此数据独立,一个分支的错误对其他分支没有因果链路,因此算法能旁路平行无关探索避免噪声混入 $C_{\text{slice}}$。第三,与 RL 信用分配(RUDDER、min-form bottleneck、CAPO)相比,STRACE 不依赖学习信号,而用显式可解释的结构先验做归因,把长程信用分配问题转换成确定性反向依赖追踪。表 4 扰动实验证明该先验鲁棒:删 25% 边 SR 仅从 56% 降到 54%。
实验结果
主实验(表 1)覆盖三类异构任务。HotpotQA(EM):STRACE 68.5%,高于 Base 37.0%、TextGrad 62.0%、GEPA 64.4%。WebArena(SR):STRACE 23.7%(+12.9%),远超 Base 10.8%、TextGrad 17.3%、GEPA 16.5%;其中 Reddit 从 4.5% 跃升到 36.4%、GitLab 从 7.3% 到 17.1%。VeruSAGE-Bench(SR):STRACE 58.5%,比 Base 42.5% 高 +16.0%、比最强基线 GEPA 47.2% 高 +11.3%;五项目中 Node Replication 80%→100%、Memory Allocator 66.7%→88.9%、Storage 46.2%→61.5%。图 3 显示从 1 到 453 条训练轨迹 STRACE 始终保持最优 cost–performance;表 6 显示平均修复轮数下降;表 7 显示用 o4-mini 增强的 STRACE 超过 hands-off GPT-5、逼近 Claude Sonnet 4。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| HotpotQA 多跳推理 | Exact Match (EM) | STRACE 68.5% | Base Agent 37.0%;TextGrad 62.0%;GEPA 64.4%;Summary-based Selection 64.3% | 比 Base Agent 绝对 +31.5%;比最强基线 GEPA +4.1% |
| WebArena 网页交互(整体) | Success Rate (SR) | STRACE 23.7% (+12.9%) | Base Agent 10.8%;TextGrad 17.3%;GEPA 16.5% | 比 Base 绝对 +12.9%;比最强基线 TextGrad +6.4%;Reddit 子任务从 4.5%→36.4% |
| VeruSAGE-Bench Rust 形式化验证(整体) | Success Rate (SR) | STRACE 58.5% (+16.0%) | Base Agent 42.5%;GEPA 47.2% | 比 Base 绝对 +16.0%;比最强基线 GEPA +11.3%;Memory Allocator 66.7%→88.9%,Node Replication 80%→100% |
| VeruSAGE-Bench(与 hands-off 前沿模型对比) | Success Rate (SR) | STRACE-增强 o4-mini 58.5% | hands-off GPT-5 50.0%;hands-off Claude Sonnet 4 59.4% | 用更小的 o4-mini 整体超过 GPT-5,接近 Claude Sonnet 4 |
局限与改进
作者明确承认的首要局限是 STRACE 需要对目标 agent 系统有足够可见性:依赖先验必须从代码层或 harness 层 artifact(agent 定义、工具接口、配置、prompt、skill、执行日志)中构造,因此对完全黑盒、组件和控制流不可见的 agent 不直接适用。注意这不要求模型权重访问,但需要足够的系统级可见度;扩展到纯 trace-only 或 black-box 设定被列为未来工作。我自己观察到的额外局限包括:(1) 表 4 中删/加 10% 边时 SR 不降反升(加 10% 边从 56% 升到 62%),这种反常现象强烈暗示单次优化运行存在评估噪声,且缺少多 seed 重复与置信区间报告;(2) 强依赖单一优化器 Claude Sonnet 4.5,跨优化器泛化只在 Phase 1 评估过(表 3),整个四阶段流水线端到端跨模型稳健性未被验证;(3) Phase 4 归纳抽象是 STRACE 主要成本来源(占 61.1% 总成本),但合成的可重用启发式从未被人类标注者验证是否正确、是否过度泛化或引入幻觉,存在污染目标模块 prompt 的风险。
独立分析的弱点
第一个弱点是结构可见性假设过强——现实里很多商业 agent(闭源 Claude Agent、SaaS 产品)只暴露 API 调用日志,没有源码或 harness 访问,STRACE 在这些场景失效。改进方向:结合 AgenTracer 这类轨迹-only 故障归因从纯执行序列推断隐式依赖图,用程序分析或动态插桩做回退。第二个弱点是单次评估不稳定——表 4 中加 10% 边反而 SR 更高(62% > 56%)与直觉相悖,强烈暗示单 seed 评估噪声大;改进方向是引入多 seed 重复与置信区间,并固定代表轨迹采样使评估可复现。第三个弱点是 Phase 4 合成规则缺人工质量审计——表 5 显示 Phase 4 占 61.1% 总成本是最大开销,但合成的可重用启发式从未被人类标注者验证;改进方向是引入规则验证器、对抗性测试或形式化校验。第四个弱点是尚未把因果切片扩展到代码层进化——结论提到可迁移到 skill、tool-use policy,但实验只验证了 prompt 注入。第五个弱点是回退机制(静默失败时只按全局结局聚类)丢失节点级信号,论文未单独评估该分支效果。
未来方向
作者明确指出的未来方向是把 STRACE 迁移到纯 trace-only 或黑盒 agent 设定,去掉对源码可见性的依赖。基于本工作可延伸的方向有:(1) 把因果切片从 prompt 优化推广到 harness engineering,与 Hermes Agent Self-Evolution、AgentEvolver 结合让局部化诊断驱动架构层进化;(2) 把 EDG 从静态文本边表升级为可学习/可校准的概率图,结合运行时插桩持续精修依赖关系;(3) 探索与 RL 信用分配的混合范式,把结构先验作为 RUDDER 类奖励重分配的初始化,或与 min-form bottleneck、CAPO 联合训练;(4) 把 Phase 4 归纳抽象从纯文本规则扩展为带形式化验证的策略补丁(尤其在 VeruSAGE 场景,可让合成启发式本身通过 Verus 校验);(5) 跨优化器端到端稳健性研究;(6) 为 Phase 4 合成规则引入自动化对抗性/形式化质量审计防幻觉。
复现评估
复现性总体较好。代码已开源在 https://github.com/moomight/STRACE ,含完整四阶段 instruction 模板(附录 B.4)及 skill 化版本。数据集公开:HotpotQA、WebArena、VeruSAGE-Bench 按原协议使用(HotpotQA 150/300、WebArena 四领域、VeruSAGE 80/20 划分)。超参清楚:优化器统一用 Claude Sonnet 4.5 (temp=1.0),瓶颈阈值 $k=5$、代表轨迹数 $s=5$;被优化 agent 分别是 DSPy 4 阶段(GPT-4o)、CoT WebArena(GPT-4o)、VeruSAGE 16 模块框架(o4-mini)。单次优化约 $2.96–$8.45,主要成本在 Phase 4。复现坑:依赖图由 LLM 构造、不同 backbone 输出有差异(表 3);Phase 2 采样未明确随机种子;单次评估缺 seed/置信区间,方差可能较高;TextGrad 在 VeruSAGE 因 >100k token 成本被排除。不需训练,单次优化几十美元跑完。
论文图表
对比三种构造优化上下文的策略:(a) Full Trajectory 把完整轨迹喂给优化器,引入噪声导致 spurious correlation;(b) Short Truncation 截断近期窗口,丢失长程因果依赖(无法把 Step 1 链接到 Step 48);(c) STRACE 做因果上下文蒸馏,抽取出紧凑因果切片作为高 SNR 优化上下文。
这张图用一个简洁的三分对比直观刻画了整篇论文要解决的核心矛盾——context-noise trade-off,是理解 STRACE 动机的最直接入口,所有后续设计都是为打破这个权衡。
Phase 2 在 IronKV 项目优化时产生的失败总结图:把原始轨迹解析为结构化执行记录(全局结局、局部节点状态、模块调用序列),再从统计严重度 $P(\text{Task Fail}\mid v_i\text{ Fail})$ 与结构路径模式(self-loop、oscillation、dead-end)两个维度聚合,作为高价值轨迹选择的定量基础。
这张图展示了批量层诊断的具体形态,帮助读者理解 STRACE 如何把异构海量轨迹压缩成可操作的失败模式,是理解 Phase 2 工作机制的关键示例。