TraceForge 是一个用 PDB(Python Debugger)做运行时诊断的 Debug Agent。它在 SWE-bench Verified 100 个真实 GitHub issue 上达到 71% 解决率,诊断正确率达到 80%。
这个专题笔记记录了项目从 Agent 设计到训练优化的完整技术路径,展示了开发过程中的真实路径。
项目架构
TraceForge 的核心是两级 Agent 结构:
主 Agent 负责理解 issue、定位相关代码、提交 patch。它可以调用 debug_subagent 做运行时诊断。
Debug SubAgent 拿到 failing test 后,用三个 PDB 工具(run_to_breakpoint、execute_pdb_command、navigate_stack)在程序运行时检查变量、遍历调用栈、验证假设。诊断结论以结构化的 Question/Answer/Evidence/Locations 格式返回给主 Agent。
动态调用图 在 Agent 介入之前先跑一次 failing test,用 sys.settrace 采集函数级调用关系,经两层压缩后作为 Agent 的上下文输入。
评测 在 Docker 化的 SWE-bench 环境中进行:每个 instance 一个独立容器,10 个 worker 并发执行,100 步预算内产出 patch 并验证。
系列文章
第一篇:Agent 设计
为什么用 PDB 而不是 print/log?三个 PDB 工具怎么设计?两级 Agent 怎么协作?以及 Agent 在 PDB 会话中最容易犯的 5 类错误。
第二篇:评测基建
Docker 环境管理、并发 runner、调用图采集、诊断 + 修复两级评测、模型选择策略、结果归档体系。71/100 baseline 的完整评测数据。
第三篇:动态调用图
pytest hook 精准注入 sys.settrace,crash 邻域提取 + 模块级聚合两层压缩,4 个真实实例的效果对比,含交互式 demo。
第四篇:SFT 显存优化
QLoRA、Flash Attention 2、gradient checkpointing、gradient offload 各自解决什么问题。实测 Qwen3-8B 32K SFT 峰值 17.18 GiB。附 CUBLAS 半精度 bug 踩坑。
第五篇:偏好训练显存优化
偏好训练特有的两个显存问题:Agent 轨迹的 completion 边界在哪里(logits_to_keep),pair 结构怎么拆(Branch-Parallel SimPO)。含 CP vs Branch-Parallel 的量化分析。实测 80K 跑通,21.05 GiB/卡。
第六篇:代码实践
长上下文 SFT 与 SimPO 的双卡 Branch-Parallel 实现
完整代码带读:unsloth 模型加载、Agent 轨迹序列化、TRL SFTTrainer、CPOTrainer SimPO oracle、手写 Branch-Parallel 训练循环。标准框架代码 vs 修改代码的逐段对比。
第七篇:PPO 公式基础
从策略梯度定理、REINFORCE、baseline、advantage、GAE 一路推到 PPO,再把它映射到 InstructGPT 风格的四模型 RLHF 训练循环。重点讲清楚 clip 到底在限制什么。
第八篇:离线偏好优化
从 RLHF 的 KL 约束目标出发,四步推导出 DPO,再解释 SimPO 为什么能把 reference model 也拿掉。附 Qwen3-8B 的 loss 计算和 shape 拆解。
第九篇:在线强化学习
从 PPO 的 critic 问题切到 GRPO 的组相对优势,再拆 DAPO 的四项修正为什么能把 long-CoT RL 跑稳。附组采样、reward、advantage、clip 的完整训练流程。
关键数据
| 指标 | 值 |
|---|---|
| SWE-bench Verified 解决率 | 71/100 (71%) |
| 诊断正确率 | 80/100 (80%) |
| 提交 patch 率 | 86/100 |
| 最长可训练序列(RLHF) | 80K tokens(2×RTX 3090) |
| 最长可训练序列(SFT) | 32K tokens(1×RTX 3090) |
| 显存压缩(RLHF) | 理论 170+ GiB → 实测 21 GiB/卡 |
| 调用图压缩率 | 39%~49% |
代码
完整代码开源在 GitHub。