SWE-smith 部署与问题解决技术报告
概述
本文记录了在部署和使用 SWE-smith(一个用于生成软件工程任务的工具)过程中遇到的各种技术问题及其解决方案。SWE-smith 是一个复杂的系统,涉及多个组件:bug生成、验证、收集、issue生成等。
遇到的问题与解决方案
1. Git推送权限问题
问题描述:
在执行 python -m swesmith.harness.gather 命令时,遇到以下错误:
subprocess.CalledProcessError: Command 'git push origin catchorg__Catch2.9b3f508a.func_pm_ctrl_invert_if__7p0kyikq' returned non-zero exit status 128.
ERROR: Permission to swesmith/catchorg__Catch2.9b3f508a.git denied to fredsun02.根本原因:
- 原始代码配置将镜像仓库创建在
swesmith组织下 - 当前用户的GitHub Token没有推送到该组织的权限
- 用户
fredsun02不在swesmith组织中
解决方案:
修改 swesmith/constants.py 文件中的组织配置:
# 原来
ORG_NAME_GH = "swesmith"
# 修改为
ORG_NAME_GH = "fredsun02"这样所有镜像仓库都会创建在用户的个人GitHub账户下,避免了组织权限问题。
2. 内存不足问题
问题描述:
在执行issue生成时,系统内存不足导致进程被杀死:
exit code 137 # 通常表示内存不足根本原因:
- 系统只有1.9GB内存
- 代码尝试加载大型数据集(
SWE-bench_Verified、SWE-bench/SWE-smith) - 本地模型加载需要大量内存
解决方案:
2.1 使用API替代本地模型
创建简化的配置文件 configs/issue_gen/ig_api.yaml:
model: anthropic/claude-3-5-sonnet-20241022
system: |-
You are a software engineer helping to create a realistic dataset of synthetic GitHub issues.
# ... 系统提示词
demonstration: "" # 不使用演示数据2.2 优化代码逻辑
修改 swesmith/issue_gen/generate.py:
- 延迟加载
SWE-bench_Verified数据集 - 只在需要时才加载大型数据集
- 对于本地数据集,跳过不必要的过滤
3. 包版本兼容性问题
问题描述:
ImportError: cannot import name 'ResponseTextConfig' from 'openai.types.responses.response'根本原因:litellm 和 openai 包版本不兼容
解决方案:
升级相关包到兼容版本:
pip install --upgrade openai litellm4. 代码导入错误
问题描述:
在运行静态issue生成时遇到导入错误:
ImportError: cannot import name 'PM_TECHNIQUES_CLASSES' from 'swesmith.bug_gen.procedural.generate'根本原因:
代码中引用了不存在的常量
解决方案:
修改 swesmith/issue_gen/get_static.py:
# 原来
from swesmith.bug_gen.procedural.generate import (
PM_TECHNIQUES_CLASSES,
PM_TECHNIQUES_FUNCS,
)
# 修改为
from swesmith.bug_gen.procedural import MAP_EXT_TO_MODIFIERS5. 函数参数错误
问题描述:
在运行F2P方法时遇到函数调用错误:
TypeError: run_command_in_container() missing 1 required positional argument: 'rp'解决方案:
修复 swesmith/issue_gen/get_from_tests.py 中的函数调用:
# 原来
test_output = run_command_in_container(instance, cmd)
# 修改为
test_output = run_command_in_container(instance, cmd, rp)最终工作流程
经过修复后,完整的SWE-smith工作流程如下:
Bug生成 ✅
python -m swesmith.bug_gen.procedural.generate --repo catchorg/Catch2 --n_instances 10验证 ✅
python -m swesmith.harness.validate --dataset_path logs/bug_gen/catchorg__Catch2.9b3f508a_all_patches.json收集补丁 ✅
python -m swesmith.harness.gather logs/run_validation/catchorg__Catch2.9b3f508a/ --debug_subprocessIssue生成 ✅
- API方法:
python -m swesmith.issue_gen.generate -d logs/task_insts/catchorg__Catch2.9b3f508a.json -c configs/issue_gen/ig_api.yaml -w 1 - 静态方法:
python -m swesmith.issue_gen.get_static logs/task_insts/catchorg__Catch2.9b3f508a.json - F2P方法:
python -m swesmith.issue_gen.get_from_tests logs/task_insts/catchorg__Catch2.9b3f508a.json
- API方法:
技术要点总结
1. 权限管理
- 在多人协作的项目中,确保GitHub Token有足够的权限
- 考虑使用个人账户而非组织账户来避免权限复杂性
2. 资源优化
- 对于内存受限的环境,优先使用API而非本地模型
- 实现延迟加载和按需加载来减少内存使用
3. 版本兼容性
- 定期更新依赖包以保持兼容性
- 在部署前测试所有依赖的版本组合
4. 代码维护
- 及时修复过时的导入和函数调用
- 保持文档与代码的同步
成本分析
使用API方法的成本:
- 处理9个实例
- 总成本:约$0.152
- 平均每个实例:约$0.017
结论
通过系统性的问题诊断和解决,我们成功部署了SWE-smith系统。主要挑战集中在权限管理、资源优化和代码兼容性方面。这些解决方案为类似项目的部署提供了有价值的参考。
最终,我们成功生成了:
- 10个bug分支并推送到GitHub
- 9个高质量的GitHub issue
- 完整的任务实例数据集
这个经验表明,在部署复杂的AI系统时,需要综合考虑技术、权限、资源和成本等多个方面。