OpenHands:开源的 AI 软件工程师,一句话自动改代码
📖 简介
📝 详细介绍
OpenHands:一个能直接改代码的开源 AI 工程师
如果你维护过任何一个 GitHub 仓库,就必然经历过这种场景:凌晨两点,一个 issue 报了个简单的 bug,你不想开机改,但也不想让 issue 烂在那里。OpenHands 解决的就是这个具体问题——给它一个任务描述,它能自主地读代码、改代码、跑测试、提 PR。不是代码补全,不是聊天机器人,是一个真正干活的代理。
| 指标 | 数据 |
|---|---|
| Stars | 20,000+ |
| 主要语言 | Python (约 85%) |
| 协议 | MIT License |
| 最近更新 | 2024 年 12 月(持续高频迭代) |
项目背景
OpenHands 的前身是 OpenDevin,由 All-Hands-AI 团队开发,2024 年初开源。它的诞生直接对标 Cognizant 的 Devin——一个闭源的 AI 软件工程师产品。Devin 演示视频展示了一个 AI 能够端到端完成软件任务,但闭源且价格不透明。All-Hands-AI 的回应很直接:把同样的事情开源出来。
这个项目解决的痛点是三层式的:工具碎片化(AI 对话工具能聊天但不能动手)、上下文断裂(Copilot 能补全当前文件但看不到整个项目)、无人值守的空档(大量低优先级 issue 堆积没人处理)。OpenHands 的立场很明确:AI 的价值在于完成任务,不在于生成文本。
核心功能解析
1. 自主任务执行
OpenHands 的入口是一个任务描述,不是一句 prompt。它会用内置的 Agent 循环去理解代码库结构,定位相关文件,修改代码,然后执行测试验证结果。整个过程自动运行,每一步运行都发生在隔离的 Docker 沙箱里。
# 一个典型任务对话的示意
用户: 修复 utils/parser.py 中解析空字符串时报错的问题
OpenHands: [读取 utils/parser.py] → [定位到第 45 行的空字符串分支]
→ [修改代码] → [运行 pytest] → [全部通过] → [生成 diff]
2. 渐进式问题确认(Confirmation Modes)
不是所有操作都值得自动批准。OpenHands 提供了分级确认机制:普通文件读写、代码执行、网络请求分别对应不同的审批策略。你可以在 config.toml 中精确控制,而不是一刀切地「全自动」或「全手动」。
[agent]
confirmation_mode = "high" # 高风险操作才需要确认
browse_confirm_required = false # 网页浏览不需要确认
browse_network_required = true # 允许访问网络
3. 技能库(Skill Library)
OpenHands 支持一套技能系统——把常用的开发流程封装成可复用的「技能」。比如「检查 PR 并给出审查意见」或者「为仓库添加单元测试」都可以作为技能被调用,本质上是一个可扩展的 Agent 行为模板库。这套设计把 LLM 的泛化能力和工具链的确定性结合在了一起。
快速上手
安装只需要一个 Docker 依赖,然后一行命令就可以启动 Web 界面。
# 方式一:Docker 运行(推荐)
docker run -it --rm -p 3000:3000
-v /var/run/docker.sock:/var/run/docker.sock
ghcr.io/all-hands-ai/openhands:latest
# 方式二:pip 安装(仅限 Linux,且仍需 Docker 沙箱)
pip install openhands-ai
openhands
# 启动后访问 http://localhost:3000
# 在设置中填入你的 LLM API Key(支持 OpenAI、Anthropic、本地模型等)
启动后点击 New Session,输入类似 refactor the database connection logic in src/db.py to use connection pooling 这样的任务,剩下的交给它。
技术亮点:架构深度解析
Event Stream 架构:把 Agent 行为变成可追溯的数据流
OpenHands 最核心的架构决策是使用事件流(Event Stream)作为 Agent 与沙箱环境之间通信的骨干。每次动作——无论是 Agent 发出一个 shell 命令,还是沙箱返回一段输出——都是一个事件,被序列化并持久化存储。
这个设计的直接收益是完全的可重放性。你可以把一次完整的开发过程当作一段视频倒带重看,也可以在任何时间点「切入」手动干预,然后让 Agent 从干预后的状态继续工作。对比其他 Agent 框架那种「状态全丢了,只能重跑」的糟糕体验,Event Stream 本身的架构韧性非常明显。
另一个隐含的设计决策是Agent 与环境的彻底解耦。Agent 端不直接持有文件系统或终端,它只产生事件。这意味着你可以替换底层的执行环境(本地 Docker、远程沙箱、Kubernetes Pod),而不需要改 Agent 的逻辑。这也是一个成熟的 Agent 工程化架构该有的样子。
LLM 无关的设计
大多数同类项目跟单一模型绑定。OpenHands 的 LLM 层是抽象过的,你可以配置不同的模型用于不同角色——一个便宜的小模型做初步的代码分析筛选,一个昂贵的强模型做最终的代码生成。这种「模型路由」在真实工程场景里意味着直接的成本控制。
同类对比
| 项目 | 自动化程度 | 沙箱隔离 | 开源 | 自主性 |
|---|---|---|---|---|
| OpenHands | 端到端任务执行 | Docker 沙箱 | MIT | 高,支持多轮自反馈循环 |
| Devin (Cognizant) | 端到端任务执行 | 云端 VDI | 否 | 高,但不可自定义 |
| GitHub Copilot | 补全当前代码 | 无 | 否 | 低,依赖开发者决策 |
| SWE-agent | 针对 SWE-bench 优化 | 受限环境 | MIT | 中,主要用于 benchmark |
总结
OpenHands 是目前把「AI 自主写代码」这件事做的工程化程度最高的开源方案,如果你手上有大量低优先级 issue 需要清理,或者想测试你的 CI 流程对 AI 生成代码的容忍度,下周就值得花一个下午把它跑起来。
风险提示:即使是最乐观的估计,2024 年的 AI 软件工程师处理复杂遗留项目的成功率仍在 50% 以下。定位是「高级实习生」,不是「替代 Senior」。但话说回来——一个不需要睡觉、不会抱怨 legacy code 的实习生,还是没有太多理由拒绝的。
AI 项目推荐
智能体- 标签
- #AI编程 #智能体 #自动化 #开发者工具
- 浏览
- 👁️ 1
- 发布日期
- 2026-08-06