自动修 Bug 的智能体:难点不在修,在于不让它顺手重构
一个判断先放在前面:自动修 Bug 的智能体失败,多数时候不是模型修不对那一行代码,而是它改了不该改的地方——顺手重构、改掉已有测试来自证正确、失败后反复重试把工作区搅乱。所以这类系统的设计重心在护栏,不在提示词。
学术原型:FixAgent 的三个专家加一个测试生成器
针对软件调试(故障定位 + 修复生成)这条链路,作者提出多 Agent 协作的集成自动化调试框架 FixAgent,由三个 Agent 专家组成:错误定位、补丁生成、修复后 review。另有一个 Agent Crafter 负责生成超出人工测试集范畴的测试,用来解决过拟合。补丁不可行时,把失败信息作为反馈重新修复。
设计参考的是"橡皮鸭调试法",落成三种机制:代理专业化与协同、关键变量追踪、程序上下文理解(功能描述、输入输出示例、变量作用域)。
数据上:QuixBugs 的 80 个漏洞修复了 79 个,其中 9 个此前未被修复;CodeFlaws 上即使不给漏洞位置信息、采样次数低于 0.6%,修复数量仍比最佳修复工具多 1.9 倍,正确率 97.26%;与不同 LLM 基础模型相比,合理与正确修复平均提升约 20%。结论是不需要训练或微调的非侵入式方案,用来增强 LLM 的 debug 能力。
开源实现:Fix Agent 的三子代理闭环
项目地址:github.com/3uyuan1ee/Fix_agent(README 亦见 TKOTKCh/Fix_agent)。基于 LangChain 1.0 与 DeepAgents,实现 问题检测 → 自动修复 → 效果验证 的闭环。运行环境 Python 3.11+,macOS/Linux,MPL-2.0 许可。
三个子代理分工明确:
- 缺陷分析代理 defect-analyzer:语法/类型/导入错误、逻辑漏洞与边界条件、性能瓶颈与资源泄漏、SQL 注入 / XSS / 权限绕过等安全漏洞。
- 代码修复代理 code-fixer:基于分析报告生成修复代码,多方案择优,保证不引入新问题。
- 修复验证代理 fix-validator:跑单元测试与集成测试、静态分析、安全扫描。
工具链集成 pylint、flake8、mypy、bandit、black、eslint,配套做语义相似度缺陷聚类、项目结构探索,以及自动生成并执行验证测试。
安装:
git clone https://github.com/3uyuan1ee/Fix_agent.git
pip install -r requirements.txt
pip install -e .
# 或直接安装
pip install Fix-agent
配置:
export OPENAI_API_KEY=...
# 国内模型需指定 base
export OPENAI_API_BASE=https://open.bigmodel.cn/api/paas/v4/
# 需要联网搜索时
export TAVILY_API_KEY=...
Tavily 的 key 在 tavily.com 申请。
启动:fixagent、fixagent help、fixagent list,CLI 与 Web 双模式。记忆系统用 /memory edit|view|search|clear 管理,学习历史修复模式、记住编码风格偏好。
安全防护由三个中间件承担:文件安全(防路径遍历)、命令安全(限制 Shell 范围与目录权限)、内容安全(防敏感信息与 API 泄露)。架构上是 asyncio 异步、流式输出、插件化工具与中间件。
AutoForge:置信度门控和每天 5 美元的成本熔断
同类项目 github.com/qjx181/AutoForge,Apache-2.0,定位是自进化代码质量引擎,流程为 扫描 → 修复 → 门控 → 验证 → 学习。扫描侧有 9 个维度:安全、性能、异步化、代码质量、测试覆盖、架构、文档、配置、死代码;修复侧覆盖 6 类问题:异常吞没、裸 except、print 滥用、资源泄漏缺 with、缺 timeout、缺返回类型。
真正值得看的是门控:
- 置信度 ≥ 0.8 自动应用,0.5~0.8 进审批队列,< 0.5 直接拒绝;
- 置信度动态校准:
calibrated = original × √(success_rate); - 成本熔断 5 美元/天,超限降级,超过 2 倍紧急刹车;
- 审计日志写入
logs/audit.jsonl,安全锁 Deny-by-default,删除文件、git push需二次确认; - 增量扫描基于 git diff / mtime;同一修复模式成功 3 次以上,自动建议创建可复用 Skill。
常用命令:
python moreagent.py scan /path/to/project
# setup + cron on,每 2 小时自动扫描
python moreagent.py setup
python moreagent.py cron on
python moreagent.py status # 也可用 cost / history
python moreagent.py init-ci # 生成 CI 配置
工程化落地:受控流水线与工具白名单
把这套东西放进真实仓库时,拆成受控流水线是通用做法:缺陷输入 → 复现 → 定位 → 提交最小补丁 → 验证 → 生成变更说明 → 人工审核。
任务需要结构化描述,字段包括 issue_id、title、expected / actual、reproduce、allowed_paths(如 src/auth/**)、forbidden_paths(.github/**、deploy/**、secrets/**)、success_command。
几个约束值得抄走:第一步不是改代码而是复现,新增测试必须稳定失败才进入 REPRODUCED 状态,否则停下报告缺信息;定位阶段只读不改,允许搜索、查调用关系、看日志;补丁尽量小,禁止顺手重构;不允许通过修改已有测试来"证明自己正确";失败后最多再尝试一次并恢复工作区,超限交给人。
gemini-cli 仓库 tools/caretaker-agent 的 pr-generator 提示词 bug_fixer_prompt.md 走的是另一条路:强制文件编辑(用 replace_file_content / multi_replace_file_content / write_file 修改 files_to_modify 中的文件,并向 test_file 加断言),禁止"看完即止",要求立即应用编辑后再 run_command 验证。无头沙箱靠工具白名单 pre_tool_call_decide 放行,白名单外一律 REJECT。
GitHub Copilot 的自定义代理 bug-fix-teammate(.github/agents/*.agent.md)思路接近:优先扫描现有 bug issue 与失败测试,按 critical > major > minor 排序,做最小可测试改动、修根因、补测试防回归。
Tags: Fixer Agent, 自动修 Bug, 缺陷定位, 多 Agent, 代码修复, AutoForge, LangChain, 工程化护栏
Keywords: Fixer Agent, 自动修复, 智能体, 受控流水线, 置信度门控, 成本熔断, 工具白名单