ARTICLE · 1152925
每天一个AI项目之OpenHands — 开源自主AI软件工程师平台

一、项目概述
OpenHands(前身 OpenDevin)是一个开源的自主 AI 软件工程师平台。它运行在沙箱容器中,拥有完整的开发环境——能写代码、运行命令、浏览网页、调试错误、提交 PR,端到端完成真实的工程任务。在 SWE-bench Verified 评测中表现优异,是最受欢迎的开源 AI 编码 Agent。
项目由 All Hands AI 团队维护,GitHub 上拥有 89,000+ Stars、7,000+ Forks、565+ 贡献者,累计下载量超过 300 万次。AMD、Apple、Google、Amazon、Netflix 等公司的工程师都在使用 OpenHands。2026 年完成 Series A 融资。
OpenHands 的核心理念是:AI 不应只建议代码,而应在真实开发环境中自主执行工程任务。 它将 Agent、沙箱、工具调用和可观测性整合在一个开源平台中。
项目实况截图:



二、项目架构
OpenHands 采用分层架构,从上到下分为用户接入层、Agent 核心层、沙箱环境层和部署集成层。Agent 核心包含规划器、代码执行器、浏览器工具和记忆管理。

技术栈说明
- 后端:Python 3.11+、FastAPI
- 前端:React、TypeScript、Vite
- 沙箱:Docker / Modal
- Agent:自定义 Agent 循环 + MCP 工具协议
- 协议:MIT 开源协议
三、核心功能
3.1 自主代码执行
- 沙箱容器:每个任务运行在隔离的 Docker 容器中
- 全工具链:Bash、Python、Git、文件系统、包管理器
- 自动调试:运行失败后自动分析错误并修复
3.2 规划与反思
- 任务分解:将复杂需求分解为可执行步骤
- 自我反思:每步执行后反思是否正确,必要时调整
- 迭代改进:持续改进直到任务完成
3.3 浏览器与工具
- 网页浏览:搜索文档、读取 API 文档
- MCP 协议:接入外部工具和服务
- 文件操作:读取、编辑、创建文件
3.4 可观测性
- 步骤追踪:完整记录 Agent 的每一步操作
- 会话回放:可回放整个 Agent 执行过程
- 日志导出:导出执行日志用于分析
四、应用场景
4.1 自动修复 Bug
给 OpenHands 一个 GitHub Issue,它自动克隆仓库、复现 Bug、编写修复代码、运行测试、提交 PR。
4.2 新功能开发
描述功能需求,OpenHands 规划实现方案、编写代码、创建测试、验证功能。
4.3 代码迁移与升级
自动完成依赖升级、框架迁移、API 版本更新等跨文件大型变更。
4.4 适用人群
- 开发团队:自动化 Bug 修复和代码维护
- 开源维护者:自动处理 Issue 和 PR
- AI 研究者:研究自主 Agent 的执行策略
五、项目价值
5.1 解决了什么问题
AI 编码助手通常停留在"建议代码"层面——生成代码片段但不执行。真实软件开发需要运行、调试、测试、提交。OpenHands 将完整的开发环境交给 Agent,让它端到端完成工程任务,而不是只生成代码片段。
5.2 核心优势
- 完全自主:从规划到执行全自动化
- 沙箱安全:隔离环境,不影响生产
- 模型无关:支持任何 LLM 提供商
- 完全开源:MIT 协议,可自托管可审计
- SWE-bench 领先:开源编码 Agent 中评测领先
- 多种接口:Web UI、CLI、SDK、API
六、入门使用教程
6.1 环境要求
- Docker(必需,用于沙箱)
- Python 3.11+
- LLM API Key
6.2 Docker 一键启动
docker run -it --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 3000:3000 \ -e LLM_API_KEY="sk-..." \ -e LLM_MODEL="gpt-4o" \ ghcr.io/all-hands-ai/openhands:latest访问 http://localhost:3000 即可使用 Web 界面。
6.3 第一个任务
在 Web 界面中创建新任务,描述:"帮我在这个 Python 项目中添加一个 /health 健康检查接口",OpenHands 会自动在沙箱中完成开发。
七、典型 DEMO 开发示例
DEMO 1:自动修复 GitHub Issue 中的 Bug
目标:让 OpenHands 自动复现并修复一个 Bug。
步骤 1:配置任务
Repository: https://github.com/yourname/my-python-appIssue: #123 - "用户登录时返回 500 错误"Task Description:请复现 Issue #123 中描述的 Bug:1. 克隆仓库并安装依赖2. 运行测试,确认 Bug 存在3. 定位并修复问题4. 添加回归测试5. 确保所有测试通过6. 提交修复步骤 2:Agent 执行过程
[Step 1] 克隆仓库... ✓[Step 2] 安装依赖: pip install -r requirements.txt... ✓[Step 3] 运行测试: pytest tests/ → FAILED: test_login_returns_500 → 错误: AttributeError: 'NoneType' object has no attribute 'get'[Step 4] 分析错误... → 文件: routes/auth.py 第 45 行 → 原因: request.json 为 None 时未检查[Step 5] 修复代码: - 添加 request.is_json 检查 - 添加错误处理返回 400[Step 6] 添加测试: test_login_invalid_json_returns_400[Step 7] 运行测试... ✓ 所有测试通过[Step 8] 提交: git commit -m "fix: 修复无效JSON时的500错误"预期结果
OpenHands 自动完成 Bug 复现、定位、修复和测试添加,整个过程无需人工干预。
DEMO 2:使用 Python SDK 编程调用 OpenHands
目标:通过 SDK 批量处理代码库中的 TODO 注释。
步骤 1:编写调用代码
from openhands.sdk import OpenHandsClient# 初始化客户端client = OpenHandsClient( base_url="http://localhost:3000", api_key="your-api-key")# 定义任务task = client.create_task( repo="https://github.com/yourname/legacy-app", description=""" 扫描代码库中所有 TODO 注释,将它们整理成一个 TODO.md 文件。 格式: ## [文件名] - [行号] TODO 内容 - [行号] TODO 内容 按文件路径排序,排除 node_modules 和 venv 目录。 """, model="gpt-4o")# 等待完成result = task.wait(timeout=300)print(f"任务状态: {result.status}")print(f"执行步骤数: {len(result.steps)}")# 获取生成的 TODO.mdtodo_content = client.get_file(task.id, "TODO.md")print("\n生成的 TODO.md:")print(todo_content[:500])# 如果满意,创建 PRif result.status == "completed": pr = client.create_pull_request( task_id=task.id, title="docs: 添加 TODO 清单", body="自动生成的 TODO 文档" )print(f"\nPR 已创建: {pr.url}")预期输出
任务状态: completed执行步骤数: 12生成的 TODO.md:## routes/auth.py- [45] TODO: 添加 JWT 刷新逻辑- [78] TODO: 实现记住我功能## models/user.py- [23] TODO: 邮箱验证- [89] TODO: 密码强度检查PR 已创建: https://github.com/yourname/legacy-app/pull/456