数字助手
数字助手(AgentHub)基于 Cube Sandbox 创建和管理 OpenClaw 助手,支持助手实例、存档、回档、创建分身、发布助手模板和操作流水。
预览版
当前数字助手能力是 Preview 版本,主要用于演示和早期试用。API、数据库 schema、部署参数和交互细节仍可能在后续版本中调整,生产环境使用前建议先在测试环境验证。
数字助手模板
AgentHub 会基于 CubeSandbox 模板创建数字助手。部署前需要先制作数字助手模板(见下方命令),然后把它注册到 AgentHub。只制作模板是不够的:AgentHub 只会从已注册的模板里挑选。详见未指定模板时如何选择。
TIP
本文早期版本要求把模板 ID 以 AGENTHUB_DS_OPENCLAW_TEMPLATE 写入 .env。代码中没有任何地方读取这个变量,设置它不会生效,请改为注册模板。
自定义模板必须使用和 wecom-ds-openclaw 相同的数字助手 / OpenClaw 镜像构建。该镜像需要包含 OpenClaw 运行时、supervisorctl 服务配置,以及 AgentHub 使用的端口:
- OpenClaw Gateway UI:
18789 - 助手环境 UI:
8080
默认模板基于 all-in-one OpenClaw 镜像制作,镜像体积较大。首次制作或重建模板时,需要预留充足的下载、解压、快照和分发空间;在常见演示环境中,模板制作时间约为 15 分钟,具体耗时取决于镜像缓存、磁盘性能和节点数量。部署前建议确认宿主机和 Cubelet 数据盘有足够可用空间,避免模板构建中途因为磁盘不足失败。
磁盘空间可以按以下方式粗略估算:
- 单模板约
3 GB(rootfs1G+ memory2G)。 - 单 snapshot 约
2~3 GB(memory 必定2G+ rootfs 增量)。 - 单运行实例主要是 reflink 增量,通常约几十 MB。
- Docker 基础设施约
3.2 GB,属于固定开销。
因此,如果只保留 1 个模板、2 个 snapshot 和几个运行实例,建议至少预留约 12~15 GB 可用磁盘空间。
可以使用 cubemastercli tpl create-from-image 基于相同镜像构建或重建模板:
OPENCLAW_IMAGE=cube-sandbox-image.tencentcloudcr.com/demo/aio-sandbox-envd-openclaw:latest
cubemastercli tpl create-from-image \
--image "${OPENCLAW_IMAGE}" \
--writable-layer-size 20Gi \
--expose-port 18789 \
--expose-port 8080 \
--probe 18789 \
--probe-path /如果明确需要 DeepSeek 预置版本,可以在确认 tag digest 符合预期后使用 cube-sandbox-image.tencentcloudcr.com/demo/aio-sandbox-envd-openclaw-deepseek:latest。
该命令会输出构建任务和 template_id;需要等待模板构建完成后再使用 AgentHub。如果集群需要分发到指定节点,可以重复传入 --node <node-id-or-ip>,或在初始构建后执行已有的模板 redo 流程。
从模板创建 sandbox 后,可以在 sandbox 内验证镜像布局:
supervisorctl status openclaw
curl -fsS http://127.0.0.1:18789/ >/dev/null如果模板不存在、使用了不同镜像,或没有包含 OpenClaw 服务布局,创建数字助手时可能在 setup、restart、读取 token 或生成 gateway URL 阶段失败。
未指定模板时如何选择
创建请求既没有 templateId 也没有快照时,AgentHub 按以下顺序选择模板:
- 在 AgentHub 页面被标记为推荐的模板(模板上的标记推荐操作)。有多个时取其中最近注册的一个。
- 否则取最近注册的模板。
- 否则使用内置标识
wecom-ds-openclaw,由 CubeMaster 按模板别名解析。只有在某个模板带有该别名的环境里才能解析成功,标准安装不会创建这个别名。
因此注册模板会改变默认选择:只要注册了任何模板,就会优先使用它,而不再使用 wecom-ds-openclaw 别名。
"no agent template is registered"
如果没有注册任何模板,内置标识也无法解析,创建会返回 HTTP 400:
no agent template is registered: register one from the template market (POST /api/v1/agenthub/templates/market) or publish one from a running agent (POST /api/v1/agenthub/instances/{agentID}/publish-template), or pass templateId explicitly任选以下一种方式即可解决:
模板市场(WebUI)。 在已安装的 OpenClaw 模板上点击启用到数字助手,或用安装并启用到数字助手一步完成制作与注册。安装弹窗要等模板制作完成后才会注册:如果在镜像仍在下载时关闭弹窗,模板会在 CubeSandbox 中就绪,但没有注册到 AgentHub。此时重新打开模板市场,在该模板上点击启用到数字助手即可。
API。 用
POST /api/v1/agenthub/templates/market注册已有模板,只有templateId是必填,例如{"templateId": "<tpl-id>", "name": "OpenClaw"}。该接口不会检查模板是否真的存在于 CubeSandbox,填错的 ID 也会被接受,并且作为最新注册的模板成为默认模板。注册被删除过的模板 ID 目前无法再次注册,无论通过该接口还是启用到数字助手:被删除的注册仍占用该 ID,请求会返回 HTTP
500,报唯一键冲突。请改为注册其他模板,或从助手发布一个。从助手发布。 在已有助手上使用发布助手模板,把它的某个存档发布为模板(
POST /api/v1/agenthub/instances/{agentID}/publish-template)。按请求指定。 显式传入
templateId,此时不会查询已注册模板。
从模板市场注册不会把模板标记为推荐。如果希望某个模板在之后注册了更新的模板时仍保持为默认,请对它使用标记推荐。
"the agent template selected by default could not be resolved"
如果模板已注册,但 CubeMaster 已无法解析它——模板已从 CubeSandbox 删除、注册时填写的模板 ID 并不存在,或已发布模板背后的存档已不存在——创建会返回 HTTP 409。重试无效:在已注册模板发生变化之前,每次都会选中同一个模板。出问题的就是上文所说的默认模板——被标记为推荐的那个;没有推荐时是最近注册的那个——在 AgentHub 页面或 GET /api/v1/agenthub/templates 中都能看到是哪一个。请把一个可用的模板标记为推荐,或显式传入 templateId。也可以删除这条失效的注册(DELETE /api/v1/agenthub/templates/{templateID}),但删除后该模板 ID 就无法再次注册(见上文)。CubeOps 会在日志中记录它发出的标识以及 CubeMaster 的原始错误(后者不一定包含该标识)。
只有"找不到"这一类失败会被这样改写。选中的模板无法使用的其他情况——例如模板存在,但在健康节点上没有就绪副本——会以 HTTP 502 返回 CubeMaster 的原始信息,其中带有 AgentHub 选中的模板 ID。请在 CubeSandbox 中检查该模板,或显式传入 templateId。
环境变量
AgentHub 数据库
CubeOps 使用 MySQL 保存数字助手的元数据,包括助手实例、存档、模板和操作流水。配置方式如下:
DATABASE_URL=mysql://cube:cube_pass@127.0.0.1:3306/cube_mvp在 one-click 部署中,如果没有显式设置 DATABASE_URL,启动脚本会直接导出 CUBE_SANDBOX_MYSQL_* 字段,由 CubeOps 直接映射为数据库配置。
LLM API Key
创建数字助手前,请在 WebUI 的 AgentHub 设置 中填写 LLM API Key(以及 provider、Base URL、模型)。
未配置时无法创建或重新配置助手,页面会提示先完成设置。
配置完成后,CubeAPI 会自动把 key 注入 sandbox 内的 OpenClaw,并写入相关配置文件(如 auth-profiles.json),用于连接 LLM 服务。
凭证交付方式与模型命名空间
凭证交付支持两种方式:
- 凭证托管(推荐):托管的只是 API Key。出站请求由 CubeEgress 仅对配置的 LLM Base URL 注入
Authorization头,真实 Key 不进入沙箱,OpenClaw 配置里只保存一个占位 Key。 - 环境变量注入(兼容旧版):把真实 API Key 直接写入 OpenClaw 环境与配置,仅建议在未启用 CubeEgress 的环境使用。
无论哪种方式,模型 ID 注入 OpenClaw 时都会归一化为 {Provider}/{模型ID} 的命名空间:{Provider} 取自 AgentHub 设置中的 Provider,斜杠后的部分作为真实模型名发往上游。使用自定义上游时,请确保 Provider 与模型 ID 与上游一致,否则 OpenClaw 可能报 Unknown model。例如 Provider 为 openai-compatible、模型为 deepseek-v4-flash 时,OpenClaw 内部解析为 openai-compatible/deepseek-v4-flash,上游收到的模型名为 deepseek-v4-flash。
模板快路径
如果从已发布的助手模板创建新助手,并且不需要重新绑定企业微信,CubeAPI 会使用模板快路径:新 sandbox 直接沿用模板快照里已有的 OpenClaw 配置,不会重新注入 LLM API Key。
安全建议
- 请妥善保管 LLM API Key,不要提交到 Git 仓库。
- 请妥善保护数据库备份与访问权限(Key 保存在数据库中)。