> For the complete documentation index, see [llms.txt](https://tinyhumans.gitbook.io/openhuman/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tinyhumans.gitbook.io/openhuman/zh/kai-fa/agentbox-deployment.md).

# AgentBox 市场部署（历史）

已移除的 AgentBox 容器表面，保留给任何调试旧版本的人使用。

OpenHuman 曾为 GMI Cloud 的 AgentBox 市场交付过一个容器端面。它已从 `openhuman-core`中移除。一个回归测试， `agentbox_run_and_jobs_paths_are_no_longer_public` 在 `crates/openhuman-rpc/src/server/auth_tests.rs`，检查 `/run` 和 `/jobs/{job_id}` 已不再存在。

`OPENHUMAN_AGENTBOX_MODE` 在 `crates/openhuman-core/src`中已没有读取方。Dockerfile 和 `.env.example` 仍然提到了它，而这些提法已经过时。如果你今天需要在 AgentBox 上运行 OpenHuman，请询问负责 GMI Cloud 部署的团队，那个端面现在位于何处。

本页其余部分描述的是旧端面的工作方式。仅当你在调试仍保留它的较旧构建时才阅读。

## 容器契约

使用 `OPENHUMAN_AGENTBOX_MODE=1`时，核心 HTTP 服务器公开了三个路由：

* `POST /run` 接受任务并返回 `202 { "job_id": "<uuid>" }`。正文为 `{ "payload": { "message": "<string>", "thread_id": "<optional string>" } }`.
* `GET /jobs/{job_id}` 返回 `{ "status": "pending|running|completed|failed", "result": ..., "error": ... }`.
* `GET /health` 是一个存活检查。

`/run` 和 `/jobs/*` 在容器边界处是未认证的。AgentBox 的边缘层在流量到达容器之前处理了认证。

## 在 AgentBox 控制台中注册

该控制台有一个四步向导。

1. **基本信息。** 将其命名为 `OpenHuman` 并添加描述。
2. **基础设施。** 选择 Docker 镜像来源、计算规格和区域。打开“GMI MaaS”开关，以便平台注入 `GMI_MAAS_BASE_URL` 和 `GMI_MAAS_API_KEY` ，在运行时。
3. **环境变量。** 设置这些：
   * `OPENHUMAN_AGENTBOX_MODE=1`
   * `OPENHUMAN_AGENTBOX_JOB_TIMEOUT_SECS` （可选，默认 600）
   * `GMI_MODELS`，市场已批准的模型 ID，例如 `deepseek-ai/DeepSeek-V4-Pro`
   * `OPENHUMAN_WORKSPACE`，一个可写的容器路径，例如 `/home/openhuman/.openhuman`
   * `RUST_LOG=info` （首次部署时使用 `debug` ）
4. **审查并注册。** 确认，然后从控制台面板进行测试。

平台 API 密钥只会显示一次，在注册确认页面上。请立即将其保存到你的密钥管理器中。控制台无法再次显示它。

## 推送镜像

从 `main` 构建，使用现有的 `Dockerfile` 并推送到你的镜像仓库：

```bash
docker build -t <registry>/openhuman-core:<tag> .
docker push <registry>/openhuman-core:<tag>
```

首次部署需要 10 到 25 分钟才能到达 `运行中`。后续部署会更快。

## 长时间运行的请求

AgentBox 将超过 2 分钟的请求视为长时间运行，因此 OpenHuman 使用轮询。代理在一个工作任务内运行，由 `OPENHUMAN_AGENTBOX_JOB_TIMEOUT_SECS` （默认 10 分钟）限制。没有流式传输。

轮询客户端应：

1. 发送 `POST /run` 并保持 `job_id`.
2. 调用 `GET /jobs/{job_id}` 每 1 到 3 秒一次。
3. 当 `状态` 是 `已完成` 或 `失败`.

完成的作业会保留一小时，然后被垃圾回收。轮询与读取之间的长时间暂停可能会返回 `404`.

## 本地冒烟测试

```bash
OPENHUMAN_AGENTBOX_MODE=1 \\
GMI_MAAS_BASE_URL=https://api.gmi-serving.com \\
GMI_MAAS_API_KEY=sk-... \\
GMI_MODELS=deepseek-ai/DeepSeek-V4-Pro \\
./target/debug/openhuman-core serve &

curl -X POST http://127.0.0.1:7788/run \\
  -H 'content-type: application/json' \\
  -d '{"payload":{"message":"hello"}}'

# 然后轮询返回的 job_id：
curl http://127.0.0.1:7788/jobs/<job_id>
```

## 故障排查

* `404 作业未找到` 在成功提交后：一小时保留窗口已过，或者容器已重启。作业存储仅在内存中。
* `status: "failed"` 替换为 `error: "agentbox: agent runtime bridge not wired"`：你使用的是在运行时桥接接入之前的构建版本。请从当前版本重新构建 `main`.
* `status: "failed"` 替换为 `error: "job timeout after Ns"`：代理运行时间超过了 `OPENHUMAN_AGENTBOX_JOB_TIMEOUT_SECS`。请在下次部署时提高它。
* `[agentbox::gmi] not registering GMI MaaS provider: missing/blank: GMI_MAAS_API_KEY`：平台没有注入密钥。请检查向导第 2 步中的 MaaS 开关。
* `[agentbox::gmi] current-thread runtime detected, skipping provider registration`：核心是在单线程 tokio 运行时中启动的。请使用标准的 `serve` 子命令，它会启动多线程运行时。
