概述

本文记录了在部署和使用 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_VerifiedSWE-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'

根本原因:
litellmopenai 包版本不兼容

解决方案:
升级相关包到兼容版本:

pip install --upgrade openai litellm

4. 代码导入错误

问题描述:
在运行静态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_MODIFIERS

5. 函数参数错误

问题描述:
在运行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工作流程如下:

  1. Bug生成

    python -m swesmith.bug_gen.procedural.generate --repo catchorg/Catch2 --n_instances 10
  2. 验证

    python -m swesmith.harness.validate --dataset_path logs/bug_gen/catchorg__Catch2.9b3f508a_all_patches.json
  3. 收集补丁

    python -m swesmith.harness.gather logs/run_validation/catchorg__Catch2.9b3f508a/ --debug_subprocess
  4. Issue生成

    • 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

技术要点总结

1. 权限管理

  • 在多人协作的项目中,确保GitHub Token有足够的权限
  • 考虑使用个人账户而非组织账户来避免权限复杂性

2. 资源优化

  • 对于内存受限的环境,优先使用API而非本地模型
  • 实现延迟加载和按需加载来减少内存使用

3. 版本兼容性

  • 定期更新依赖包以保持兼容性
  • 在部署前测试所有依赖的版本组合

4. 代码维护

  • 及时修复过时的导入和函数调用
  • 保持文档与代码的同步

成本分析

使用API方法的成本:

  • 处理9个实例
  • 总成本:约$0.152
  • 平均每个实例:约$0.017

结论

通过系统性的问题诊断和解决,我们成功部署了SWE-smith系统。主要挑战集中在权限管理、资源优化和代码兼容性方面。这些解决方案为类似项目的部署提供了有价值的参考。

最终,我们成功生成了:

  • 10个bug分支并推送到GitHub
  • 9个高质量的GitHub issue
  • 完整的任务实例数据集

这个经验表明,在部署复杂的AI系统时,需要综合考虑技术、权限、资源和成本等多个方面。

标签: none

添加新评论