OpenHands(原名 OpenDevin)是一款开源的「自主软件工程师」平台:它不是给你做行级补全的助手,而是把一个完整任务(修一个 GitHub issue、搭一个全栈项目)交给它,由它自主完成规划、读代码、改文件、运行命令、看日志、迭代验证,甚至打开浏览器操作页面确认结果。核心架构是「事件驱动 + 沙箱运行时」:Agent 的每一个动作都记录为可审计的事件流,代码在 Docker 容器或 microVM 沙箱中执行,不直接接触宿主机。它支持 Claude、GPT、Gemini、DeepSeek、Qwen 等 100+ 模型接入,可通过 Docker、pip 自托管,或用官方云服务免运维。本篇按「工具速览 → 安装配置 → 快速上手 → 核心能力 → 生产部署 → 选型对比 → 误区与面试题」展开,读完即可把 OpenHands 跑起来并接入研发流程。
掌握 OpenHands,等于掌握一套可自托管的「AI 工程师」基础设施,能独立搭建自动修 bug、提 PR 的研发自动化流水线——这是 AI 工程化岗位的高价值技能。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 OpenHands:从「代码助手」到「自主代理」
传统 AI 编程工具的形态是「补全 + 对话」:Copilot 补全下一行,Cursor 改选中片段,每一处改动都要人逐行确认,测试要人跑、日志要人看、PR 要人手写。遇到跨文件的缺陷修复或新功能开发,往往要来回几十轮对话,上下文一长效果就明显衰减,最终「人肉搬砖」的比例仍然很高。
OpenHands 换了一种分工:把任务整体交给 Agent。它会在沙箱内自主完成「读代码 → 定位根因 → 修改文件 → 执行命令复现 → 观察输出 → 再修改」的闭环,直到自测通过。人可以只做两件事:开始时给清晰的任务描述,结束后审查改动。这种模式天然适合批量、无人值守的工程任务,比如仓库积压 issue 的自动修复。
与 Cline、Aider 这类「IDE 内助手」不同,OpenHands 的气质是独立 worker:它运行在隔离沙箱里,通过网页 UI、CLI 或 GitHub Action 与之交互,行为全程可审计、可续跑,定位上更接近 Devin 的开源自托管版本——你把「员工」而不是「插件」招进来。
安装与环境配置:3 步就绪
第一步:准备 Docker。 OpenHands 的沙箱运行时依赖 Docker 拉起隔离容器。Linux 装 Docker Engine,macOS/Windows 装 Docker Desktop,启动后确认 docker info 正常。
第二步:选择启动方式。 方式 A(推荐,完整 UI):拉取官方镜像并运行,注意 UI 镜像与沙箱运行时镜像的版本 tag 必须一致。方式 B:pip install openhands-ai 安装主程序,适合 CLI 调用与二次开发,执行代码仍需沙箱(本地默认走 Docker runtime,也可改用远程运行时)。
第三步:配置 LLM 并验证。 三种配置方式任选其一:① 打开 UI 后到 Settings 填写 LLM Provider、API Key 与模型名;② 设置环境变量 LLM_API_KEY、LLM_MODEL;③ 写配置文件 ~/.openhands/config.toml。验证方式:打开 http://localhost:3000,新建会话让 Agent 执行一个最小任务(如“创建一个打印当前日期的 Python 脚本并运行”),观察事件流中读文件、写文件、执行命令的完整记录。
# 方式 A:Docker 启动完整 UI(版本号需与 runtime 对齐)docker pull ghcr.io/all-hands-ai/openhands:0.24.0docker run -it --rm \ -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.24.0 \ -e LOG_ALL_EVENTS=true \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/.openhands-state:/.openhands-state \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ ghcr.io/all-hands-ai/openhands:0.24.0 # 方式 B:pip 安装主程序(CLI / 二次开发)python -m pip install openhands-ai
快速上手:10 分钟跑通第一个自主任务
最小可用流程的思路:不需要任何项目脚手架,直接给 Agent 一个「带验收标准」的任务,让它自己完成从写代码到跑测试的闭环。
1. 启动容器后访问 http://localhost:3000,首次使用在 Settings 中填入模型服务商、API Key 与模型名(如 Claude 系列,国内可选 DeepSeek/Qwen)。
2. 点击「新会话」(New Session),在输入框粘贴任务,例如:「创建一个 Python 项目:写一个斐波那契函数,配套 pytest 测试,然后运行 pytest 直到全部通过」。
3. 选择运行模式:默认非交互模式(Agent 直接开干);规划模式(先输出执行计划,你确认后再动手,适合复杂任务)。
4. 点击启动,右侧事件流会实时显示 Agent 的每个动作:读取文件、写入文件、执行 bash、查看输出;过程中可随时暂停并追加指令。
5. 任务结束后,审查文件改动与测试结果;不满意可继续对话要求修改,全部改动都发生在沙箱工作区内。
UI 之外,OpenHands 提供 CLI 非交互模式,适合无人值守与 CI 集成:把任务写进文本文件,用环境变量注入模型凭据后运行,Agent 执行完自动退出,事件流落盘到 ~/.openhands-state。
cat > task.txt <<'EOF'修复 tests/test_utils.py 中的失败用例:1. 运行 pytest 复现失败;2. 定位根因并修改 src/utils.py;3. 重跑 pytest 直到全部通过;4. 输出修改说明。EOF LLM_API_KEY="你的Key" LLM_MODEL="claude-sonnet-4-20250514" \ python -m openhands.core.main -f task.txt
核心能力详解:四大支柱
支柱一:自主 Agent 循环与事件流架构。 OpenHands 的 Agent 基于「规划 → 行动 → 观察」循环:每执行一步(改文件、跑命令、开网页)都会产生一条事件,全部事件按时间序持久化。这意味着任务可以被中途接管、断点续跑,也可以回放审计——企业落地时,这比「黑盒 Agent」多一道可追责的安全网。
支柱二:沙箱运行时(Runtime)。 Agent 的代码执行被限制在独立容器(本地 Docker)或 microVM(云上)里,网络、文件系统、进程都受控;官方还提供了 Chrome 扩展,让 Agent 在真实浏览器页面中操作。沙箱支持自定义基础镜像——需要特定 SDK、依赖或内网证书的团队可以预置进去。注意:UI 容器需要挂载 /var/run/docker.sock 才能拉起沙箱容器。
支柱三:多模型接入与工具集。 通过 LiteLLM 兼容层接入 100+ 模型服务商,含 OpenAI 兼容端点与本地 Ollama;内置 30+ 工具(文件编辑、bash 终端、网页访问、Git 操作、MCP 工具等),可按需启用或禁用。同一任务换不同模型,效果差异可能很大,建议用自有小任务集做对比。
支柱四:microagents 与 Resolver 自动化闭环。 microagents 是以 Markdown 写的「技能/角色」文件(如公司代码风格、发布流程、特定框架规范),会自动注入系统提示词,让 Agent 按团队规则行事。Resolver 则是 GitHub Action 形态的自动化修复器:把 issue 自动转成修复 PR,支持配置模型、并发数与触发规则,官方团队在 OpenHands 仓库自身用它解决 issue。
生产部署与监控:从上线到运维
单机 Docker Compose 上线(内网/边缘场景)。 生产环境不要用 docker run -it --rm 这种临时方式,改用 Compose 固定重启策略、资源上限和日志滚动;把 ~/.openhands-state 挂到持久盘,否则会话与事件流会随容器销毁丢失;工作区目录单独挂载并做备份。
云上托管与多机部署。 官方仓库 cloud/ 目录提供 AWS(CloudFormation)、Azure、GCP 的一键部署模板,适合把 OpenHands 作为团队服务架在反向代理/负载均衡后面,用 HTTPS 暴露;多用户、合规要求高的场景建议采购企业版(SSO、审计事件、团队空间),或直接用 OpenHands Cloud 托管版免运维。无论哪种方式,模型 API Key 一律走环境变量或密钥管理服务,禁止写进镜像。
可观测性。 在 ~/.openhands-state 做三件事:① 开启 LOG_ALL_EVENTS=true 让每个事件落盘,作为审计与排障依据;② 定期备份会话目录,升级前必须先备份;③ 用 docker stats 或云监控盯容器资源,沙箱 OOM 会被 kill,通过日志区分「任务失败」与「运行环境故障」。token 消耗只能在模型提供商控制台按 Key 维度观测,建议在生产 Key 上设置预算告警——一个长任务烧掉上百美元并非罕见。
<p class="para-label">避坑清单:</p>
<ul class="dash-list"><li>版本不匹配:UI 镜像、沙箱运行时镜像、pip 包三者版本必须对齐,混用会导致事件流协议不兼容、任务启动即报错;升级时三件套同步换。</li><li>忘记模型费用自担:开源版不自带模型,需要自己的 API Key,token 按量计费,务必在提供商侧设预算与用量告警。</li><li>Docker socket 缺失或权限不足:UI 容器必须挂载 /var/run/docker.sock 才能创建沙箱;Windows/macOS 还需检查 Docker Desktop 的磁盘挂载权限。</li><li>国内网络:拉取 ghcr.io 与 docker.all-hands.dev 镜像、访问海外模型 API 都可能超时,建议配置镜像加速器与 HTTPS_PROXY 代理环境变量。</li><li>自主模式不等于无人看守:Agent 行为不可 100% 预期,生产仓库务必用独立分支 + PR 审查 + 沙箱资源限制,不要直接把写权限交给 Agent。</li></ul>
| 维度 | OpenHands | Devin | Cline | Aider |
|---|---|---|---|---|
| 定位 | 开源自主软件工程师平台 | 闭源商业自主工程师 SaaS | IDE 内编码代理(VSCode 插件) | 终端结对编程 CLI |
| 编排范式 | 全自主循环 + 规划模式双模 | 全自主云端并行任务 | 人机协作,改动经用户确认 | 交互式对话,补丁自动应用 |
| 类型约束 | 无强制约束,行动自由 | 无强制约束 | 逐文件审批(可配置自动) | Git 可回滚,默认直接改盘 |
| 学习曲线 | 中等(需懂 Docker 与模型配置) | 低(SaaS 开箱即用) | 低(IDE 内安装即用) | 低-中(需命令行习惯) |
| 生态集成 | 100+ 模型、Docker、GitHub Action、MCP | 内置浏览器/终端,闭源生态 | VSCode/Cursor 插件、MCP | Git 原生,无需常驻服务 |
| 生产部署 | 自托管 Docker/云模板(AWS/Azure/GCP) | 仅 SaaS,不可自托管 | 本地编辑器扩展 | 本地 CLI/CI 脚本 |
| License | MIT | 商业闭源 | Apache 2.0 | Apache 2.0 |
| 适合谁 | 需要自托管 agent 的团队与研究者 | 预算充足、不想运维的工程团队 | VS Code 重度用户 | 命令行流开发者 |
选型建议:OpenHands 是四者中唯一把「自托管 + 全自主 + 全程可审计」结合的开源方案,适合要建研发自动化流水线的团队;预算充足、不想碰运维的团队直接用 Devin;只在编辑器里提速选 Cline;追求最轻量 CLI 流选 Aider。按「代码能否出内网、是否要无人值守、愿不愿意维护 Docker」三条标准即可决策。
版本迭代
OpenHands 源自 2024 年的 OpenDevin 项目,主线是从「可用的自主 Agent 原型」走向「产品化平台」:早期打磨事件流与会话架构,2024-12 更名并统一包名,2025 年起加速平台化——重构运行时、引入 microagents、推出企业能力与全新 UI,并围绕 Resolver 构建 issue 自动修复闭环。(截至训练数据,可能已有更新版本)
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| v0.9.0 | 2024-10 | 事件流与会话架构 | 确立 event stream 架构与持久化会话,Agent 可在 UI 中逐步执行与回溯 |
| v0.13.1 | 2024-12 | 项目更名 OpenHands | 因与商业产品 Devin 名称冲突,OpenDevin 更名 OpenHands,PyPI 包名转为 openhands-ai |
| v0.16.0 | 2025-01 | Runtime 架构重构 | 统一 Runtime 接口,支持 Docker 与 microVM 两类沙箱后端,提升隔离与部署灵活性 |
| v0.19.0 | 2025-03 | 微代理与自动化闭环 | 引入 microagents(SKILL/PERSONA 自动注入提示词),Resolver 能力增强,企业版追加 SSO 与审计 |
| v0.24.0 | 2025-05 | 全新首页与会话体系 | 新首页、收件箱与共享会话上线,形态从「单机工具」转向「AI 协作工作台」 |
OpenHands 未参与 MMLU 这类通用大模型榜单,效果以 SWE-bench 类真实工程任务与自建验收任务为准;同一任务换模型、换版本差异显著。选型时应以「隔离沙箱 + 可审计事件流 + 自托管能力」为评估重点:先跑通小任务验证模型适配,再逐步放大到 Resolver 自动化流程。
AI 应用场景
开源仓库 issue 自动修复(研发自动化流水线)
阶段:自主编码 / 自动化修复 / CI 集成
解决的问题:维护者人力有限,积压 issue 多,每条「triage → 定位 → 修复 → 提 PR」人工耗时 1-3 小时。OpenHands Resolver 把 issue 自动转成修复任务,在隔离沙箱中复现、定位、生成补丁并提交 PR。
具体案例:官方团队在 OpenHands 仓库自身使用 Resolver 处理 bug 类 issue,自动生成的修复 PR 经 maintainer 审查后合入;Resolver 支持按 label、模型、并发数配置,在 GitHub Actions 中定时或按需触发,把「提单 → 修复 → 开 PR」流程从小时级压缩到分钟级,且全程留痕可回滚。
从需求到全栈项目脚手架
阶段:文档智能 / 智能编程 / 需求实现
解决的问题:从零搭建「前端 + 后端 + Dockerfile + 测试」的项目,人工要数小时且容易漏配。让 Agent 在沙箱中直接生成并运行验证,比对话式助手更接近可用交付。
具体案例:给 Agent 一段自然语言需求(如「搭建 FastAPI + React 待办应用,带 pytest 测试与 Dockerfile」),OpenHands 自动完成建目录、写代码、启动服务自测、输出运行说明;测试失败会自动读日志、改代码、重试,直到验收标准通过。
企业内网的私有代码自动化
阶段:私有化部署 / 代码安全
解决的问题:代码不允许出内网,商业 agent 无法接入;OpenHands 是 MIT 开源、可完全自托管,事件流与代码数据留在自有基础设施。
具体案例:在 AWS/Azure 上用官方部署模板拉起 OpenHands,连接内网 GitLab 与私有模型网关(Ollama 或私有化部署模型),对授权仓库批量执行依赖升级、安全补丁类任务;所有会话事件记录归档,满足合规审计要求。
常见误区
误区装上 OpenHands 就像用 Copilot 一样,写代码时给我行级补全和划词解释。
正解OpenHands 是自主 Agent,典型用法是给它一个完整任务(修 issue、搭项目),它端到端跑完「规划 → 编码 → 执行 → 验证」循环。对话主要发生在任务开始前的需求澄清和结束后的结果审查,不适合当行级补全工具用。
为何常见:市面主流 AI 编程工具都是补全/对话形态,「自主执行、自己跑命令看输出」的模式要实际跑一次任务才能建立认知。
误区既然是开源免费软件,应该自带了模型,装好就能直接用。
正解OpenHands 本体 MIT 免费,但模型推理费用完全自理——需要你自己的 LLM API Key(Claude、GPT、DeepSeek 等),长任务 token 消耗可能很大,必须自己监控账单并设告警。
为何常见:「开源 = 免费」容易让人忽略大模型推理是云服务按量计费;官方 Cloud 托管版也是独立收费产品。
误区`pip install openhands-ai` 装完就能在本地跑全部功能,不需要 Docker。
正解pip 只装主程序,Agent 执行代码必须经过沙箱运行时。本地默认依赖 Docker 拉起沙箱容器;彻底不用 Docker 只能改用远程运行时(Cloud/microVM)方案。
为何常见:普通 Python 包「装完即用」的体验让人误以为 openhands-ai 也是全包含,忽略了其隔离执行架构的设计。
误区把复杂任务丢给自主模式,睡一觉回来代码就能合入。
正解Agent 仍会理解偏差、写出有缺陷的补丁,甚至执行破坏性命令;生产落地必须配独立分支、PR 审查、沙箱资源限制与权限收敛,人工 review 环节不能省。
为何常见:官方 demo 展示的是理想链路,真实代码库的边界情况(历史包袱、隐式依赖、权限模型)需要人工把关。
误区主程序用最新版,运行时镜像随手配个 tag 也能跑。
正解openhands-ai 包、UI 镜像、运行时镜像三者的版本必须匹配,混搭会导致事件流协议不兼容、任务启动即报错;升级时三件套要同步换,而不是只更新 UI 镜像。
为何常见:镜像 tag 繁多,用户习惯性拉 latest/最新版,忽略了 OpenHands 组件间版本强耦合的设计。
面试题
Q1. OpenHands 更名之前叫什么名字?
- A.OpenDevin← 正确答案
- B.AllHands
- C.DevinOS
- D.AgentCoder
答案:A。OpenHands 原名 OpenDevin,2024 年 12 月(v0.13 起)因与商业产品 Devin 名称冲突而更名;All Hands AI 是背后的公司名,不是产品名。
Q2. 运行 OpenHands 完整 UI 最稳妥的方式是哪一种?
- A.通过 Docker 启动 UI 容器和沙箱运行时← 正确答案
- B.直接双击源码包中的 HTML 文件打开
- C.用 npm 启动前端然后单独连数据库
- D.依赖手机浏览器访问第三方聚合站
答案:A。官方推荐 Docker 方式:UI 容器挂载 Docker socket 与 ~/.openhands-state,再通过 SANDBOX_RUNTIME_CONTAINER_IMAGE 指定沙箱运行时镜像。其余方式要么不完整,要么非官方支持。
Q3. OpenHands 的沙箱运行时(Runtime)主要用途是什么?
- A.隔离 Agent 执行的代码命令以保护宿主机← 正确答案
- B.通过并行推理提升大模型的生成速度
- C.集中保存用户的 API 密钥与敏感口令
- D.负责渲染 Web 界面中的图表组件
答案:A。沙箱运行时把 Agent 的文件操作、bash 命令、浏览器行为隔离在 Docker 容器或 microVM 内,防止破坏宿主机,是 OpenHands 安全模型的基石。密钥管理、推理加速、UI 渲染都不是其职责。
Q4. OpenHands 官方 Docker 镜像默认将 Web UI 暴露在哪个端口?
- A.8000(常见调试服务默认端口)
- B.3000(OpenHands UI 默认端口)← 正确答案
- C.8080(部分 Web 容器约定端口)
- D.5000(Flask 开发的经典端口)
答案:B。官方 docker run 命令使用 -p 3000:3000,容器内 UI 服务监听 3000 端口。若端口被占用需改宿主机侧映射,但容器内端口保持不变。
Q5. 以下哪些方式可以为 OpenHands 配置 LLM 凭据?
- A.在界面 Settings 中填写 API Key← 正确答案
- B.注入环境变量 LLM_API_KEY← 正确答案
- C.在 ~/.openhands/config.toml 中设置← 正确答案
- D.修改 Docker 镜像 tag 后缀
答案:ABC。OpenHands 支持三种主流配置途径:UI Settings、环境变量(LLM_API_KEY/LLM_MODEL)、config.toml 配置文件,环境变量优先。镜像 tag 只决定版本,与模型凭据无关。
Q6. OpenHands 支持接入哪些模型与服务?
- A.Anthropic Claude 与 OpenAI GPT 系← 正确答案
- B.Gemini、DeepSeek、Qwen 等 100+ 服务商← 正确答案
- C.本地 Ollama 部署的开源权重模型← 正确答案
- D.仅限官方私有不公开模型列表
答案:ABC。OpenHands 通过 LiteLLM 兼容层接入 100+ 模型提供商,包括主流闭源模型、OpenAI 兼容端点与本地 Ollama;不存在「官方私有模型」一说,模型能力完全取决于你接入的提供商。
Q7. OpenHands 中 microagents(微代理)的作用是什么?
- A.以技能/角色 Markdown 注入 Prompt 沉淀团队规范← 正确答案
- B.负责管理 Docker 容器的轻量级插件程序
- C.用于数据存储与检索的微型数据库组件
- D.自动抓取网页并解析内容的爬虫模块
答案:A。microagents 是 Markdown 格式的 SKILL(技能)与 PERSONA(角色)文件,自动注入 Agent 的系统提示词,让团队把代码风格、发布流程等规范沉淀为 Agent 可执行的规则。它不承担容器管理、数据存储或爬虫职责。
Q8. pip 装的 openhands-ai 主程序与沙箱运行时镜像版本不一致,最可能发生什么?
- A.主程序与运行时协议不兼容,任务启动即报错← 正确答案
- B.完全不影响,两个组件版本彼此独立
- C.仅导致界面样式出现细微的视觉差异
- D.模型输出会自动降级并发出警告提醒
答案:A。OpenHands 主程序与运行时通过版本化的事件流协议通信,版本错配会触发协议不兼容,典型表现是任务初始化失败或运行中断。升级必须三件套(pip 包、UI 镜像、runtime 镜像)同步对齐。
Q9. 关于 OpenHands Resolver(GitHub Action)的功能,下列说法正确的有?
- A.可为 issue 自动生成修复代码并提交 PR← 正确答案
- B.支持配置模型、并发数与触发规则← 正确答案
- C.依赖 GitHub Token,需按最小权限授权← 正确答案
- D.只能在本地终端以交互方式手动运行
答案:ABC。Resolver 正是为自动化而生:把 issue 转为修复任务、在沙箱中生成补丁并提交 PR,可在 GitHub Actions 中定时/按需/按 label 触发,需配置最小权限的 GitHub Token。它是 CI 形态,不需要本地交互终端。
Q10. 生产环境长期运行 OpenHands,以下哪项做法是必须的?
- A.持久化 ~/.openhands-state 并开启 LOG_ALL_EVENTS← 正确答案
- B.移除 Docker socket 并关闭模型用量告警
- C.固定使用与运行时版本错配的本地自建镜像
- D.跳过沙箱直接以 root 运行在宿主机上
答案:A。事件流落盘(LOG_ALL_EVENTS)与会话目录持久化是生产环境的审计、续跑与排障基础;同时应保留 Docker socket(沙箱依赖)、开启模型用量告警、保持版本对齐并坚持沙箱隔离,其余三项均违反这些生产原则。
参考来源
- doc官方文档 docs.all-hands.dev安装、CLI、配置与使用手册
- webpage官方网站 all-hands.dev产品介绍与 Cloud 入口