Skip to content
传衡博客
返回

【零】TraceForge 系列专题:用 PDB 给 Agent 装上调试器

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_breakpointexecute_pdb_commandnavigate_stack)在程序运行时检查变量、遍历调用栈、验证假设。诊断结论以结构化的 Question/Answer/Evidence/Locations 格式返回给主 Agent。

动态调用图 在 Agent 介入之前先跑一次 failing test,用 sys.settrace 采集函数级调用关系,经两层压缩后作为 Agent 的上下文输入。

评测 在 Docker 化的 SWE-bench 环境中进行:每个 instance 一个独立容器,10 个 worker 并发执行,100 步预算内产出 patch 并验证。

系列文章

第一篇:Agent 设计

用 PDB 给 LLM 装上调试器

为什么用 PDB 而不是 print/log?三个 PDB 工具怎么设计?两级 Agent 怎么协作?以及 Agent 在 PDB 会话中最容易犯的 5 类错误。

第二篇:评测基建

SWE-bench 评测管道与 Docker 踩坑

Docker 环境管理、并发 runner、调用图采集、诊断 + 修复两级评测、模型选择策略、结果归档体系。71/100 baseline 的完整评测数据。

第三篇:动态调用图

动态调用图压缩到 232 条边

pytest hook 精准注入 sys.settrace,crash 邻域提取 + 模块级聚合两层压缩,4 个真实实例的效果对比,含交互式 demo。

第四篇:SFT 显存优化

单卡 3090 32K SFT 的四层显存优化

QLoRA、Flash Attention 2、gradient checkpointing、gradient offload 各自解决什么问题。实测 Qwen3-8B 32K SFT 峰值 17.18 GiB。附 CUBLAS 半精度 bug 踩坑。

第五篇:偏好训练显存优化

SimPO 训练与 BranchParallel 策略实现

偏好训练特有的两个显存问题: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 公式基础

策略梯度定理到 PPO 的推导

从策略梯度定理、REINFORCE、baseline、advantage、GAE 一路推到 PPO,再把它映射到 InstructGPT 风格的四模型 RLHF 训练循环。重点讲清楚 clip 到底在限制什么。

第八篇:离线偏好优化

DPO 与 SimPO 的离线偏好优化推导

从 RLHF 的 KL 约束目标出发,四步推导出 DPO,再解释 SimPO 为什么能把 reference model 也拿掉。附 Qwen3-8B 的 loss 计算和 shape 拆解。

第九篇:在线强化学习

GRPO 与 DAPO 的在线 RL 推导

从 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



Previous Post
【一】Debug Agent 的设计与踩坑