夜雨聆风学习资料网

ARTICLE · 1152925

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

每天一个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

相关学习资料