开源精选 OpenHandsAI编程Agent代码生成开源
云
云铭
进化之路 · 扫码阅读
微信 · 浏览器扫码
在手机上获得更好的阅读体验
OpenHands深度解析:AI驱动的自主软件开发平台
“给我一个GitHub Issue,还你一个完整的Pull Request。“——这不是科幻,是OpenHands正在做的事情。
项目速览
| 维度 | 详情 |
|---|---|
| GitHub | All-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编码工具的对比
| 能力 | OpenHands | Cline | Cursor | Copilot |
|---|---|---|---|---|
| 自主完成完整任务 | ✅ | ✅ | ❌ | ❌ |
| 理解大型代码库 | ✅ | ✅ | ✅ | ❌ |
| 运行终端命令 | ✅ | ✅ | ❌ | ❌ |
| 运行和调试测试 | ✅ | ✅ | ❌ | ❌ |
| 浏览器测试 | ✅ | ❌ | ❌ | ❌ |
| 创建PR | ✅ | ❌ | ❌ | ❌ |
| 代码补全速度 | 慢 | 中 | 快 | 极快 |
| 日常编码体验 | 不适用 | 好 | 极好 | 好 |
最佳使用场景
✅ OpenHands最适合:
├── Bug修复(给出Issue链接让它修)
├── 小型功能开发(<500行代码)
├── 代码重构(如升级依赖、改API格式)
├── 文档生成(从代码自动生成文档)
├── 测试补充(给现有代码添加测试)
└── 代码审查辅助
❌ 不适合:
├── 实时代码补全(用Copilot/Cursor)
├── 复杂架构设计(仍需人类决策)
├── 前端UI微调(需要视觉判断)
└── 对安全性要求极高的代码修改
OpenHands试图回答一个核心问题:AI到底能不能像一个真正的软件工程师那样工作?答案是——在某些任务上,可以。Bug修复、小型功能、测试补充,这些”边界清晰”的任务,OpenHands的表现已经接近初级工程师。它不会替代你的开发团队,但可以成为团队中那个”不知疲倦的新人”。