完全指南 · AI-Driven Development

OpenHands

一套开源的 AI 软件开发智能体框架 —— 从一行命令的终端体验,到可编排上千个智能体的云端基础设施。

开源 · MIT License CLI Software Agent SDK Local GUI Cloud / Enterprise 前身 OpenDevin
01 / 概述

OpenHands 是什么

OpenHands(前身为 OpenDevin)是一个聚焦于「AI 驱动开发」的开源社区与软件框架。它的核心目标,是让一个 AI 智能体能够像人类工程师一样实际操作开发环境——执行 bash 命令、读写与编辑文件、浏览网页、调用工具,从而自主完成编程任务,而不只是停留在「聊天给建议」的层面。

与单纯的代码补全工具不同,OpenHands 提供的是一整套从研究原型到生产部署的连续光谱:你既可以在终端里像使用 Claude Code、Codex 那样直接对话编程,也可以用它的 Python SDK 在代码里定义智能体、扩展到云端并行运行成千上万个 agent。

所有核心代码都在 MIT 许可证下开放,仅 enterprise/ 目录采用商业许可。核心 openhandsagent-server 镜像同样完全 MIT 授权。

为什么值得关注

OpenHands 把「智能体能力」沉淀成了一个可组合的工程框架。SDK 是引擎,CLI / GUI / Cloud 都只是消费 SDK API 的不同界面——这意味着无论你从哪种形态入门,底层的智能体语义都是一致的。

02 / 产品矩阵

五种使用形态

OpenHands 不是单一产品,而是同一引擎的五层封装。理解这张图,就理解了整个项目的版图:

Software Agent SDK

可组合的 Python 库,封装了全部智能体技术。是驱动下面一切的「引擎」。在代码里定义 agent,本地运行或扩展到云端千级并发。

OpenHands CLI

最简单的上手方式。体验类似 Claude Code / Codex,可由 Claude、GPT 或任意 LLM 驱动。

Local GUI

在笔记本上跑智能体的本地图形界面,自带 REST API 与单页 React 应用。体验类似 Devin、Jules。

OpenHands Cloud

GUI 的托管商业部署。用 GitHub 账号登录即可免费试用,深度集成 GitHub/GitLab/Bitbucket 与 Slack/Jira/Linear。

Enterprise

在企业自有 VPC 内通过 Kubernetes 自托管 Cloud,source-available,超过一个月需购买许可,含扩展支持与研究团队访问。

如何选择

想零配置最快体验 → OpenHands Cloud(限时免费 MiniMax M2.5)。想本地自动化 / 脚本化 → CLI。想完全掌控环境 → Local GUI(自带 LLM 与密钥)。想在代码里编排智能体 → SDK。

03 / 词汇表

核心概念

在动手之前,先建立四个基础概念的心智模型。它们贯穿 CLI、SDK 与整个架构:

概念定义类比
Agent 智能体能进行推理、规划,并通过工具执行行动的 AI 实体。负责做决策的「大脑」
Tools 工具执行 bash 命令、编辑文件、浏览网页等具体能力。大脑能调用的「双手」
Workspace 工作区智能体实际运行的执行环境(本地 / Docker / 远程)。工作的「车间」
Conversation 会话管理你与智能体之间交互生命周期的容器。整场「对话记录」

// 基础工作流

无论用哪种形态,一次完整的智能体运行都遵循这条主线:

配置 LLM 选择模型 + 提供 API Key 创建 Agent 使用预设或自定义配置 添加 Tools 启用能力(bash、文件编辑……) 建立 Conversation 创建会话上下文 发送 Message 描述任务 运行 Agent 执行直到任务完成或停止 获取结果 审阅输出与行动记录
04 / 上手

CLI 安装与第一次对话

CLI 是门槛最低的入口。它需要 Python 3.12+,官方推荐用 uv 包管理器安装。

Windows 用户注意

CLI 需要在 WSL(Ubuntu)终端中运行,原生 Windows 不受官方支持。在 PowerShell 里用 wsl -d Ubuntu,或在开始菜单搜索 "Ubuntu" 进入终端。

// 方式一:uv(推荐)

# 安装
uv tool install openhands --python 3.12

# 运行
openhands

# 升级
uv tool upgrade openhands --python 3.12

// 方式二:可执行二进制

curl -fsSL https://install.openhands.dev/install.sh | sh
openhands

macOS 首次运行若提示「无法验证开发者」,到「系统设置 → 隐私与安全性 → 安全性」点击「仍要打开」即可。

// 方式三:Docker

docker run -it --pull=always \
    -e AGENT_SERVER_IMAGE_REPOSITORY=ghcr.io/openhands/agent-server \
    -e AGENT_SERVER_IMAGE_TAG=1.19.1-python \
    -e SANDBOX_USER_ID=$(id -u) \
    -e SANDBOX_VOLUMES=$SANDBOX_VOLUMES \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v ~/.openhands:/root/.openhands \
    --add-host host.docker.internal:host-gateway \
    python:3.12-slim \
    bash -c "pip install uv && uv tool install openhands --python 3.12 && openhands"

其中 SANDBOX_USER_ID=$(id -u) 让沙箱用户与宿主机权限对齐,避免智能体在挂载目录里创建 root 属主的文件。

// 第一次运行

首次运行时,CLI 会引导你配置 LLM。配置会保存在 ~/.openhands/settings.json,会话历史保存在 ~/.openhands/conversations

# 选项 A:登录 OpenHands Cloud(推荐,自动拉取设置)
openhands login

# 选项 B:手动配置 —— 首次运行时按提示填写 LLM 提供商与 API Key
openhands

进入交互界面后,输入一个任务即可,例如:

Create a Python script that prints "Hello, World!"

智能体会理解需求、探索项目、创建文件并展示结果。

// 交互快捷键

快捷键作用
Ctrl+P打开命令面板(进入设置、查看 MCP 状态)
Esc暂停正在运行的智能体
Ctrl+Q / /exit退出 CLI

// 带任务启动 & 恢复会话

# 直接带任务启动
openhands -t "Fix the bug in auth.py"
openhands -f task.txt          # 从文件读取任务

# 恢复历史会话
openhands --resume             # 列出最近会话并选择
openhands --resume --last      # 恢复最近一次
openhands --resume abc123def   # 按 ID 恢复
05 / CLI

CLI 的五种运行模式

同一个 openhands 命令通过不同子命令,可以化身为五种截然不同的工具:

模式命令最适合
Terminal(交互式)openhands日常交互开发
Headless(无界面)openhands --headless脚本与自动化、CI/CD
Web Interfaceopenhands web浏览器内的终端式 UI
GUI Serveropenhands serve完整的 Web 图形界面
IDE Integrationopenhands acpZed、VS Code、JetBrains

IDE 集成通过 ACP(Agent Client Protocol)实现,意味着你可以在自己喜欢的编辑器里直接调用 OpenHands 智能体,而 Headless 模式则让它能无缝嵌入流水线脚本。

06 / SDK

用 SDK 写第一个智能体

如果你想在代码里完全掌控智能体,SDK 才是核心。它是一个模块化、类型安全的框架,让 agent 能够操作代码、文件与系统命令。

// 前置条件与安装

# 1. 安装 uv 包管理器(0.8.13+)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. 安装 SDK + 内置工具(务必同一条命令,保证版本对齐)
pip install -U openhands-sdk openhands-tools

# 可选:沙箱工作区(Docker / 远程服务器)
pip install -U openhands-sdk openhands-tools openhands-workspace openhands-agent-server
版本对齐陷阱

openhands-sdkopenhands-tools 是配套发布的——它们在同一版本号下构建测试,且 tools 直接引用 sdk 内部实现。必须在同一条 pip 命令里安装/升级,否则可能出现新版 tools 配旧版 sdk,导入时报 ModuleNotFoundError。需固定版本时两者用同一号:pip install "openhands-sdk==1.22.1" "openhands-tools==1.22.1"

// 配置 API Key

SDK 通过 LiteLLM 支持数十家提供商。三种取得 Key 的途径:

export LLM_API_KEY="your-api-key-here"
export LLM_MODEL="openhands/claude-sonnet-4-5-20250929"   # 若用云端

// Hello World:完整示例

import os
from openhands.sdk import LLM, Agent, Conversation, Tool
from openhands.tools.file_editor import FileEditorTool
from openhands.tools.task_tracker import TaskTrackerTool
from openhands.tools.terminal import TerminalTool

# 1) 配置 LLM
llm = LLM(
    model=os.getenv("LLM_MODEL", "anthropic/claude-sonnet-4-5-20250929"),
    api_key=os.getenv("LLM_API_KEY"),
    base_url=os.getenv("LLM_BASE_URL", None),
)

# 2) 创建 Agent,并挂载三个工具
agent = Agent(
    llm=llm,
    tools=[
        Tool(name=TerminalTool.name),
        Tool(name=FileEditorTool.name),
        Tool(name=TaskTrackerTool.name),
    ],
)

# 3) 建立会话,工作区设为当前目录
cwd = os.getcwd()
conversation = Conversation(agent=agent, workspace=cwd)

# 4) 发送任务并运行
conversation.send_message("Write 3 facts about the current project into FACTS.txt.")
conversation.run()
print("All done!")
# 运行
uv run python examples/01_standalone_sdk/01_hello_world.py

你会看到智能体理解请求、探索项目、并创建出包含项目事实的文件。官方仓库还附带 24+ 个示例(自定义工具、激活技能、异步会话等),位于 examples/01_standalone_sdk/

07 / 架构

SDK 架构剖析

设计哲学:无状态(statelessness)、可组合(composability)、研究与部署之间边界清晰。

SDK 是 OpenHands 中「智能体的唯一真理来源」。GUI、CLI、Cloud 都只是消费 SDK API 的界面——它们从持久化的设置中「水合」出 SDK 组件,再通过 SDK 接口编排执行。这保证了所有形态下配置与默认值的一致性。

┌─────────────── OpenHands Interfaces ───────────────┐ GUI (React) CLI (命令行) 你的自定义客户端 └──────┬───────────────┬───────────────┬─────────────┘ └───────────────┼───────────────┘ ┌─────────── Software Agent SDK ───────────┐ openhands.sdk + tools + workspace Agent · LLM · Conversation · Events Tools · Workspace · Skill · Security └──────┬─────────────────────────┬──────────┘ LLM Providers Runtime Services OpenAI/Anthropic… Docker/Remote API…

// 四包架构

agent-sdk 被拆分为四个独立的 Python 包:

职责何时需要
openhands.sdk核心智能体框架 + 基础工作区类始终需要
openhands.tools预置工具(bash、文件编辑……)可选,提供常用工具
openhands.workspace扩展工作区实现(Docker、远程)可选,扩展 SDK 基础类
openhands.agent_server多用户 API 服务器可选,被 workspace 实现使用

// 核心组件

组件作用
Agent实现推理-行动循环
Conversation管理会话状态与生命周期
LLM提供商无关的语言模型接口,内置重试与遥测
Tool SystemAction / Observation / Tool / Executor 的类型化基类,含 MCP 集成
Events类型化事件框架(action、observation、用户消息、状态更新等)
Workspace基础类:Workspace / LocalWorkspace / RemoteWorkspace
Skill可复用的用户自定义提示,支持触发式激活
Condenser压缩会话历史以管理 token
Security执行前对行动进行风险评估与校验

所有组件均为无状态、不可变,基于类型安全的 Pydantic 模型。

08 / 核心机制

推理-行动循环

Agent 的灵魂是 reasoning-action loop(推理-行动循环)。它采用单步执行模型:每次 step() 调用只处理一个推理周期,每一步都是原子的、可暂停可恢复的。

// 一次 step() 的内部流程

step() 被调用 ├─ 有待确认的 pending 行动? ──是─→ 执行并返回 ├─ 有 Condenser? ──是─→ condenser.condense() 返回 View → 用压缩后的事件继续 返回 Condensation → 发事件并返回 ├─ 查询 LLM(基于事件历史的消息) 超出上下文窗口? ──是─→ 发 CondensationRequest 返回 ├─ 解析响应: 工具调用 → 创建 ActionEvent(s) 文本消息 → 创建 MessageEvent 返回 ├─ 需要用户确认? ──是─→ 状态置 WAITING_FOR_CONFIRMATION 返回 └─ 执行工具 → 创建 ObservationEvent(s) → 返回

这个循环的三个关键特征:

// 工具的行动-观察模式

所有工具都遵循严格的 Action → Observation 模式。LLM 生成 tool_call,被转换为 ActionEvent;根据是否处于确认模式,要么立即执行、要么暂存为 pending;执行成功产生带结果的 ObservationEvent,失败则产生带错误的 ObservationEvent。

执行模式行为适用场景
Direct 直接立即执行开发、可信环境
Confirmation 确认暂存为 pending,等待用户批准高风险行动、生产环境

// 安全分析器的风险分级

执行前,Security Analyzer 会评估每个行动的风险等级:

// Agent Context:技能与提示

Agent 会应用 AgentContext 来塑造 LLM 行为,其中包含两类技能:

技能类型激活方式用途
repo始终包含项目特定上下文、代码约定
knowledge触发词 / 模式匹配领域知识、特殊行为
09 / 运行时

沙箱:代码在哪里执行

沙箱(Sandbox)是 OpenHands 运行命令、编辑文件、启动服务的环境。在 V1 中,这一概念统一称为 sandbox(旧版 V0 称 runtime)。

沙箱类型说明权衡
Docker 推荐在 Docker 容器内运行 agent server与宿主机良好隔离
Process作为宿主机普通进程运行不安全但快,无容器隔离
Remote在远程环境运行用于托管部署与部分云端方案

在某些部署中,沙箱选择仍由历史遗留的 RUNTIME 环境变量控制:

RUNTIME=docker    # 默认
RUNTIME=process   # 旧称 RUNTIME=local
RUNTIME=remote
术语提示

V1 的用户层术语是 sandbox,但配置开关在迁移过程中可能仍叫 RUNTIME。看到旧文档里的 "runtime" 时,把它理解为 sandbox 即可。

10 / 部署

三种部署模式

SDK 最优雅的设计之一:同一份智能体代码,只需替换 workspace 类型,就能在三种环境间切换——LocalWorkspaceDockerWorkspaceRemoteAPIWorkspace

模式一 · 本地开发

只装 openhands-sdk + openhands-toolsLocalWorkspace 已内置无需额外安装,一切在单进程内运行。适合原型与简单用例,无需 Docker,启动飞快。

模式二 · 生产 / 沙箱化

安装全部 4 个包。RemoteWorkspace 会在容器中自动拉起 agent-server,提供沙箱化执行、多用户部署与分布式(如 Kubernetes)支持。

DockerWorkspace extends RemoteWorkspace ─spawns─→ agent_server (容器内) RemoteAPIWorkspace extends RemoteWorkspace ─HTTP──→ agent_server (远程) └─runs─→ Agent → Tools
关键点

Agent Server 是基于 FastAPI + WebSocket 的 HTTP 服务器,提供会话、bash、文件、事件、桌面、VSCode 等 REST/WS 端点,带按用户隔离的会话管理与 API Key 认证。它既可在容器内运行(DockerWorkspace),也可作为独立进程被 RemoteWorkspace 连接。

工具运行在 workspace 所配置的环境里(本地/容器/远程),它们与 agent 并肩运行,而非「穿过」workspace API——这是理解隔离边界的要点。

11 / 扩展

技能 · 自定义工具 · MCP

OpenHands 的可扩展性主要通过三条路径展开:

Skills 技能

技能是特化的提示词,为智能体注入领域知识、专家指导与自动化任务处理能力。分层体系包括:

也可用 File-Based Agents——以带 YAML frontmatter 的 Markdown 文件定义子智能体,无需写 Python。

Custom Tools 自定义工具

工具定义了智能体「能做什么」。SDK 内置常用工具,也支持为特化需求创建自定义工具。所有工具遵循统一的 Action / Observation / Executor 模式,内建校验、错误处理与安全机制。

MCP(Model Context Protocol)

MCP 让智能体能动态集成来自外部服务器的工具——agent 可自动发现并使用 MCP 提供的工具。在 CLI 里可用命令面板查看 MCP 状态并管理 MCP 服务器;在 SDK 里通过配置接入。这是把 OpenHands 接入 Asana、Gmail、Salesforce 等外部生态的标准方式。

Sub-Agent Delegation 子智能体委派

通过把工作委派给多个独立运行的子智能体来实现并行任务执行,再汇总结果返回父智能体。配合 Task Tool Set,可把复杂工作分解给同步运行的特化子智能体。这对多智能体编排尤为关键。

12 / 场景

典型应用场景

OpenHands 官方梳理了一批适合智能体接管的工程任务类型:

自动化 PR 评审

用智能体生成有意义的 Pull Request 评审意见,自动分配 reviewer。

依赖升级

自动化依赖更新与版本升级,处理破坏性变更。

🛡

漏洞修复

识别并修复代码库中的安全漏洞。

🔥

事故排查

调查与解决生产环境事故。

📜

COBOL 现代化

将遗留 COBOL 系统迁移现代化。

Spark 迁移

迁移 Apache Spark 应用。

此外还可通过 GitHub Action 把 OpenHands 嵌入 CI,或用 Automations 创建定时 / 事件触发(GitHub 事件或自定义 webhook)的自动化任务。

何时该用 OpenHands

它最擅长定义清晰、可验证、范围可控的工程任务——修 bug、写测试、重构、升级依赖。对于高度模糊、需要大量产品判断或跨团队沟通的工作,仍需人类主导,把它当作放大器而非替代品。

13 / 实践

提示词最佳实践

智能体的产出质量,极大程度取决于你给出的指令质量。官方「好指令 vs 坏指令」的核心原则可以浓缩为:

维度❌ 坏指令✅ 好指令
具体性"修一下登录""修复 auth.py 中 token 过期后未刷新导致 401 的问题"
可验证"让它更快""为 parse() 添加单测,并确保 pytest 全绿"
范围"重构整个项目""仅重构 utils/ 目录,保持公共 API 不变"
上下文(无背景)"项目用 FastAPI + SQLAlchemy,遵循现有目录约定"
14 / 收尾

总结与资源

把这篇教程压缩成一句话:OpenHands 是一个以无状态、事件驱动的推理-行动循环为核心的开源智能体框架,SDK 是唯一真理来源,CLI / GUI / Cloud / Enterprise 是它的不同消费界面,沙箱决定代码在哪里安全执行。

// 学习路径建议

入门 Cloud 试用 或 openhands CLI → 跑通第一个任务 理解 SDK Hello World → 弄清 Agent/Tool/Workspace/Conversation 深入 读架构文档 → 推理-行动循环 + 四包架构 + 沙箱 扩展 自定义工具 / 技能 / MCP → 子智能体委派 生产 切换 DockerWorkspace / RemoteWorkspace → 多智能体编排

// 官方资源