京东开源的基于大语言模型(LLM)的端到端仓库级代码修复流水线,针对SWE-bench基准实现智能Patch生成与测试协同验证,在SWE-bench Verified数据集上达到74.6%解决率,资源消耗相比顶级竞争对手降低30-50%。
JoyCode Agent(全称 JoyCode SWE-bench Agent Pipeline)是由京东开源社区(JD OpenSource)推出的自动化代码修复系统。其核心目标是将软件缺陷修复流程自动化——从理解 Issue 描述、定位代码问题、生成修复补丁,到创建验证测试用例并执行闭环验证,形成完整的"问题→修复→验证"自动化链路。
- 在 SWE-bench Verified 数据集上达到 74.6% 解决率(373/500)
- 相比顶级竞争对手资源消耗降低 30-50%
- 智能测试生成:自动创建 Fail2Pass 和 Pass2Pass 测试,含预验证
- 协作验证:Patch与测试协同生成,实现全面验证
- 闭环迭代:"Generate → Validate → Refine" 循环,替代单次生成模式
- 根因分析:精确区分 Patch 问题 vs 测试问题
- 针对性重试:基于失败分析的经验驱动重试策略
- CSR 驱动学习:历史成功模式检索优化
- 专用代理:Testing Agent、Patch Agent、CSR Agent、Decision Agent
- 基于 React 的 "Observe-Think-Act" 循环
- LLM 驱动的 Patch 投票选择机制
- 容器化执行:基于 SWE-bench Docker 镜像的隔离环境
- 仓库级理解:多文件协调与跨模块推理
- 完整日志记录:全轨迹记录,可选压缩
- 多 LLM 支持:支持不同流水线阶段的灵活模型配置
| 能力项 | 描述 | 技术特点 |
|---|
| 仓库级 Patch 生成 | 理解 Issue 描述并生成多文件协调的修复补丁 | 支持跨模块推理、多文件编辑 |
| 智能定位 | 自动识别需要修改的代码位置 | LLM 驱动的代码理解 |
| Patch 投票系统 | 多候选 Patch 竞争选择最优解 | LLM 评估 + 代码质量指标 |
| 上下文感知 | 理解代码库结构、依赖关系、编码风格 | 仓库级语义建模 |
| 能力项 | 描述 | 输出类型 |
|---|
| Fail2Pass 测试 | 在原始代码上失败、修复后通过的验证测试 | 回归测试用例 |
| Pass2Pass 测试 | 修复前后都应通过的功能保持测试 | 行为一致性验证 |
| 测试预验证 | 生成的测试用例经过有效性检查 | 确保测试可执行且有意义 |
| 协作验证 | Patch 与测试协同生成,互相验证 | 双向质量保障 |
| Agent 角色 | 职责 | 工作模式 |
|---|
| Testing Agent | 测试用例生成与验证 | ReAct 循环:Observe-Think-Act |
| Patch Agent | 代码补丁生成与优化 | LLM 驱动 + 代码分析 |
| CSR Agent | Case-Specific Retrieval,历史成功模式检索 | 经验驱动学习 |
| Decision Agent | 失败归因与策略决策 | 根因分析 + 智能重试 |
- 容器设置:拉取并启动 SWE-bench Docker 镜像
- 测试生成(可选):在原始代码上创建并验证测试
- Agent 执行:通过
cli.py 使用 LLM Agent 生成 Patch
- 验证:运行测试并评估 Patch 质量
- 后处理(可选):轨迹压缩、相似性匹配、智能重试
joycode/
├── run_patch_pipeline.py # 主入口
├── cli.py # 核心 Agent CLI
├── test_case_generator/ # 测试生成逻辑
├── test/ # 测试执行与验证
├── utils/docker_utils.py # 容器管理
├── llm_server/ # LLM 集成层
├── princeton-nlp___swe-bench_verified/ # 本地 SWE-bench 数据集
└── vote.py # Patch 投票系统
output_files/
├── <instance_id>/
│ ├── predictions.json # 生成的 Patch 与元数据
│ ├── agent_logs.txt # 主要 Agent 执行日志
│ ├── test_generation_result.json # 测试生成结果
│ └── compressed_trajectory.txt # 压缩执行轨迹
├── successful_cases.txt # 成功实例汇总
├── failed_cases.txt # 失败实例汇总
└── similar_case_matches_summary.json # 相似案例分析
- Python 3.11+
- Docker(需可访问
docker.1ms.run)
- LLM API 密钥(OpenAI、Anthropic 等)
git clone https://github.com/jd-opensource/joycode-agent.git
cd joycode
conda create -n joycode python=3.11
conda activate joycode
pip install -r requirements.txt
# 使用默认配置运行
python run_patch_pipeline.py --num-processes 1 --enable-post-processing
# 单实例处理
python run_patch_pipeline.py --problem-id django__django-11099 --num-processes 1
# 批量处理
python run_patch_pipeline.py --num-examples 10 --num-processes 4
在 SWE-bench Verified 数据集上的表现:
| 仓库 | 解决率 |
|---|
| pytest-dev/pytest | 17/19 (89.47%) |
| scikit-learn/scikit-learn | 28/32 (87.5%) |
| pydata/xarray | 19/22 (86.36%) |
| django/django | 178/231 (77.06%) |
| sympy/sympy | 57/75 (76.0%) |
| sphinx-doc/sphinx | 29/44 (65.91%) |
| matplotlib/matplotlib | 25/34 (73.53%) |
| astropy/astropy | 13/22 (59.09%) |
| 总计 | 373/500 (74.6%) |
- 自动修复开源项目 Issue
- 生成验证测试用例
- 仓库级代码补丁生成与验证
- 代码修复自动化流水线构建
- 企业内部 Bug 修复流水线集成到 CI/CD
- AI 编程研究与 SWE-bench 基线对比