项目简介

OpenHands 是一个强大的 AI 驱动的软件开发平台,旨在通过智能代理自动化软件开发任务。它不仅能让 AI 代理修改代码、执行命令、浏览网页、调用 API,甚至能从 StackOverflow 复制代码片段。OpenHands 内部集成了 MCP 服务器,为 AI 代理提供标准化接口来访问其核心能力和托管的工具。

主要功能点

  • AI 代理驱动的开发: 自动化代码修改、命令执行和 Web 浏览等软件开发任务。
  • 工具集成: 支持 AI 代理通过标准协议调用多种内部托管和外部集成的工具及 API。
  • 多环境支持: 可以在本地、Docker 容器甚至云端运行,并与 GitHub、GitLab、Bitbucket 等代码平台集成。
  • 上下文管理: 为 LLM 提供结构化的上下文信息,例如代码仓库信息、运行时环境细节和会话历史。
  • 可插拔架构: 允许集成自定义的 AI 代理和微代理,扩展平台功能。
  • 安全分析: 集成安全分析器,评估 AI 代理操作的潜在风险。
  • 灵活的 Prompt 管理: 支持可定制的 Prompt 模板,优化与 LLM 的交互。

安装步骤

OpenHands 支持通过 CLI 启动器(推荐)或 Docker 进行本地部署。

推荐方式:CLI 启动器(使用 'uv')

  1. 安装 'uv': 请参照 uv 官方安装指南 安装最新版本的 'uv'。
  2. 启动 OpenHands 服务器: 打开终端,运行以下命令启动 OpenHands 服务器(GUI 模式):
    uvx --python 3.12 --from openhands-ai openhands serve
    服务器启动后,你可以在浏览器中访问 'http://localhost:3000' 使用 OpenHands。
  3. 或者启动 OpenHands CLI: 如果你希望通过命令行界面与 OpenHands 交互,运行:
    uvx --python 3.12 --from openhands-ai openhands

替代方式:Docker 如果你偏好使用 Docker,请运行以下命令:

docker pull docker.all-hands.dev/all-hands-ai/runtime:0.57-nikolaik

docker run -it --rm --pull=always \
    -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.57-nikolaik \
    -e LOG_ALL_EVENTS=true \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v ~/.openhands:/.openhands \
    -p 3000:3000 \
    --add-host host.docker.internal:host-gateway \
    --name openhands-app \
    docker.all-hands.dev/all-hands-ai/openhands:0.57

请注意:在公共网络上部署 Docker 时,务必参考 Hardened Docker Installation Guide 以增强安全性。

服务器配置

OpenHands 内部集成了 MCP 服务器,它负责托管和管理 AI 代理可调用的工具及上下文。如果你需要将 OpenHands 作为 MCP 服务器暴露给外部 MCP 客户端,你可以配置客户端以标准 Stdio、SSE 或 SHTTP 协议连接到 OpenHands 运行时。 以下是一个示例 JSON 配置,你可以根据实际部署情况调整。这些配置信息并非在 OpenHands 内部使用,而是供 外部 MCP 客户端 用于连接和调用 OpenHands 提供的服务:

{
  "stdio_servers": [
    {
      "name": "openhands-local-runtime",
      "type": "stdio",
      "description": "通过标准输入/输出 (Stdio) 协议连接到本地 OpenHands 运行时,提供代码执行、文件操作等工具。",
      "command": "openhands",
      "args": [
        "serve",
        "--runtime", "local",
        "--headless", "true"
      ],
      "env": {},
      "working_dir": "/path/to/openhands/workspace"
    }
  ],
  "sse_servers": [
    {
      "name": "openhands-sse-runtime",
      "type": "sse",
      "description": "通过 Server-Sent Events (SSE) 协议连接到 OpenHands Web 服务器的 MCP 端点,适用于 Web 客户端。",
      "url": "http://localhost:3000/mcp/sse",
      "api_key": "YOUR_API_KEY_IF_NEEDED"
    }
  ],
  "shttp_servers": [
    {
      "name": "openhands-shttp-runtime",
      "type": "shttp",
      "description": "通过 Streamable HTTP (SHTTP) 协议连接到 OpenHands Web 服务器的 MCP 端点,提供流式 HTTP 交互。",
      "url": "http://localhost:3000/mcp/shttp",
      "api_key": "YOUR_API_KEY_IF_NEEDED",
      "timeout": 60
    }
  ]
}

配置参数说明:

  • 'stdio_servers': 配置通过标准输入/输出 (Stdio) 协议连接的 MCP 服务器。
    • 'name': 服务器的名称,用于标识。
    • 'type': 协议类型,固定为 "stdio"。
    • 'description': 服务器功能描述。
    • 'command': 启动 MCP 服务器进程的命令(例如 'openhands')。
    • 'args': 传递给 'command' 的命令行参数(例如 'serve --runtime local --headless true')。
    • 'env': 进程的环境变量(可选)。
    • 'working_dir': 进程的工作目录(可选)。
  • 'sse_servers': 配置通过 Server-Sent Events (SSE) 协议连接的 MCP 服务器。
    • 'name': 服务器的名称。
    • 'type': 协议类型,固定为 "sse"。
    • 'description': 服务器功能描述。
    • 'url': SSE 服务器的端点 URL(例如 OpenHands GUI 服务器提供的 '/mcp/sse')。
    • 'api_key': 访问 SSE 服务器所需的 API 密钥(如果服务器要求)。
  • 'shttp_servers': 配置通过 Streamable HTTP (SHTTP) 协议连接的 MCP 服务器。
    • 'name': 服务器的名称。
    • 'type': 协议类型,固定为 "shttp"。
    • 'description': 服务器功能描述。
    • 'url': SHTTP 服务器的端点 URL(例如 OpenHands GUI 服务器提供的 '/mcp/shttp')。
    • 'api_key': 访问 SHTTP 服务器所需的 API 密钥。
    • 'timeout': 调用工具的超时时间(秒,可选)。

基本使用方法

  1. 启动 OpenHands: 按照上述安装步骤,选择 CLI 启动器或 Docker 方式启动 OpenHands 服务器。
  2. 访问 Web 界面: 如果以 GUI 模式启动,在浏览器中访问 'http://localhost:3000'。
  3. 配置 LLM: 首次使用时,系统会提示你选择一个 LLM 提供商并输入 API 密钥。OpenHands 支持多种 LLM,推荐使用 Anthropic 的 Claude Sonnet 4。
  4. 开始任务: 在界面中输入你的软件开发任务描述,OpenHands 的 AI 代理将开始尝试解决问题。
  5. 交互与指导: 代理会执行代码、运行命令、修改文件,并将结果反馈给你。你可以根据需要提供进一步的指示或确认代理的行动。

信息

分类

开发者工具