开源精选 OpenHandsAI编程Agent代码生成开源

OpenHands深度解析:AI驱动的自主软件开发平台

“给我一个GitHub Issue,还你一个完整的Pull Request。“——这不是科幻,是OpenHands正在做的事情。

项目速览

维度详情
GitHubAll-Hands-AI/OpenHands
Stars~76K
语言Python
许可证MIT
定位AI驱动的自主软件开发平台

从OpenDevin到OpenHands

2024年3月以OpenDevin之名横空出世,2025年更名为OpenHands。项目愿景始终如一:让AI成为一个真正的”软件工程师”,而不仅仅是”代码补全工具”

与Copilot的本质区别

GitHub Copilot:帮你写下一行代码
  ↓  (AI是打字助手)

Cursor:帮你理解和修改文件
  ↓  (AI是编辑助手)

OpenHands:理解需求 → 设计方案 → 编写代码 → 测试 → 修Bug → 提交PR
  ↓  (AI是独立工程师)

核心架构

Agent + 沙箱 + 浏览器

┌─────────────────────────────────────────┐
│          OpenHands 平台                   │
│                                           │
│  ┌──────────────────────────────────┐    │
│  │         Agent(AI工程师)         │    │
│  │  理解需求 → 规划方案 → 执行编码    │    │
│  └──────────────┬───────────────────┘    │
│                 ↓                         │
│  ┌──────────────────────────────────┐    │
│  │         沙箱环境(Docker)        │    │
│  │  ┌────────┐ ┌────────┐         │    │
│  │  │ 终端   │ │编辑器   │         │    │
│  │  │(bash) │ │(VSCode)│         │    │
│  │  └────────┘ └────────┘         │    │
│  │  ┌────────┐ ┌────────┐         │    │
│  │  │浏览器  │ │文件系统 │         │    │
│  │  │(测试)  │ │(代码)   │         │    │
│  │  └────────┘ └────────┘         │    │
│  └──────────────────────────────────┘    │
│                                           │
│  ┌──────────────────────────────────┐    │
│  │         工具接口                    │    │
│  │  Git | Linter | 测试框架 | 包管理器 │    │
│  └──────────────────────────────────┘    │
└─────────────────────────────────────────┘

Agent的工作循环

# OpenHands Agent的核心循环(简化)
class OpenHandsAgent:
    def solve_task(self, task: str) -> dict:
        # 1. 理解任务
        plan = self.plan(task)
        # plan = {
        #     "files_to_create": ["app.py", "test_app.py"],
        #     "files_to_modify": [],
        #     "dependencies": ["flask", "pytest"],
        #     "steps": [...]
        # }

        # 2. 执行计划
        for step in plan["steps"]:
            action = self.decide_next_action(step, self.state)
            result = self.execute(action, sandbox)
            # execute可以是:
            # - 创建/编辑文件
            # - 运行shell命令
            # - 运行测试
            # - 浏览器测试(如果是Web应用)
            self.state.update(action, result)

            if result.has_error:
                self.debug_and_retry(action, result)

        # 3. 验证
        tests_passed = self.run_tests()
        if not tests_passed:
            self.fix_issues()

        # 4. 提交
        return self.create_pull_request(task, plan)

实战演示

从Issue到PR

# 启动OpenHands
docker run -d \
  -e OPENAI_API_KEY=$OPENAI_API_KEY \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -p 3000:3000 \
  ghcr.io/all-hands-ai/openhands:latest

然后通过Web UI或API提交任务:

from openhands import OpenHands

oh = OpenHands()

# 提交开发任务
task = oh.create_task(
    repository="https://github.com/myorg/myapp",
    description="""
    Fix bug #342: 用户上传大于10MB的图片时服务器返回500错误。

    要求:
    1. 找到根因
    2. 修复并添加文件大小限制
    3. 超过限制时返回友好的错误提示
    4. 添加单元测试
    5. 更新API文档
    """
)

# Agent自动完成:
# 1. Clone仓库
# 2. 分析代码库,定位Bug
# 3. 修复代码
# 4. 运行现有测试确保没有回归
# 5. 添加新的测试
# 6. 创建PR(含清晰的描述)

Agent的工作过程

Agent输出日志:

[思考] 收到任务:修复大文件上传Bug
[行动] 搜索代码库中"upload"相关代码
[观察] 发现3个文件:upload_handler.py, api.py, settings.py
[行动] 读取upload_handler.py
[观察] 第45行:没有检查content_length
[思考] 根因找到了:缺少上传前的文件大小验证
[行动] 创建修复计划
  - 在settings.py添加MAX_UPLOAD_SIZE常量
  - 在upload_handler.py添加大小检查
  - 返回413错误而非500
  - 更新API文档
[行动] 修改settings.py,添加MAX_UPLOAD_SIZE = 10 * 1024 * 1024
[行动] 修改upload_handler.py,添加文件大小验证
[行动] 运行现有测试套件:15 passed, 0 failed ✓
[行动] 编写新的测试用例test_upload_size_limit.py
[行动] 运行新测试:3 passed ✓
[行动] 创建PR
[完成] PR #567 created: "Fix: Add file size validation for upload endpoint"

与其他AI编码工具的对比

能力OpenHandsClineCursorCopilot
自主完成完整任务
理解大型代码库
运行终端命令
运行和调试测试
浏览器测试
创建PR
代码补全速度极快
日常编码体验不适用极好

最佳使用场景

✅ OpenHands最适合:
├── Bug修复(给出Issue链接让它修)
├── 小型功能开发(<500行代码)
├── 代码重构(如升级依赖、改API格式)
├── 文档生成(从代码自动生成文档)
├── 测试补充(给现有代码添加测试)
└── 代码审查辅助

❌ 不适合:
├── 实时代码补全(用Copilot/Cursor)
├── 复杂架构设计(仍需人类决策)
├── 前端UI微调(需要视觉判断)
└── 对安全性要求极高的代码修改

OpenHands试图回答一个核心问题:AI到底能不能像一个真正的软件工程师那样工作?答案是——在某些任务上,可以。Bug修复、小型功能、测试补充,这些”边界清晰”的任务,OpenHands的表现已经接近初级工程师。它不会替代你的开发团队,但可以成为团队中那个”不知疲倦的新人”。

GitHub: https://github.com/All-Hands-AI/OpenHands