1. 为什么要在阿里云上跑 Hermes Agent 与 OpenClaw
如果你最近在折腾 AI Agent,大概率听过 Hermes Agent 和 OpenClaw 这两个名字。简单说,Hermes Agent 是一套偏任务编排的智能体框架,擅长把复杂指令拆成多步执行;OpenClaw(前身 Clawdbot/Moltbot)则是本地优先的 AI 助理框架,主打 7×24 小时在线、多任务自动化和跨平台协同。两者放在一起用,一个负责"想清楚怎么做",一个负责"真的去做",很适合个人办公和轻量团队协作。
那为什么要把它们放到阿里云 ECS 上?我自己的体会是三点。第一,本地电脑不可能一直开机,Agent 一旦断线,定时任务、消息响应全废;第二,阿里云 ECS 有稳定的公网 IP 和带宽,远程访问、Webhook 回调都方便;第三,配合 Coding Plan 这类按次计费的方案,长期跑 Agent 的成本比按 token 计费可控得多。
这篇内容面向的是已经有一台阿里云 ECS、想从零把 Hermes Agent 和 OpenClaw 跑起来的人。我会把部署链路拆成可复制的命令和配置片段,重点讲清楚 Coding Plan 环境初始化、依赖安装,以及怎么用 TaoToken 的统一 Key 把 API 通道接上。整套流程走完,你应该能从一台干净的云主机,跑到 Agent 服务正常响应请求。
需要提前说明的是,下面所有命令都在 Alibaba Cloud Linux 3 和 Ubuntu 22.04 上验证过,Node.js 版本要求 22.x 以上,内存至少 2GiB,低于这个数服务会直接起不来。存储建议用 ESSD,读写速度对 Agent 的响应体验影响挺明显。
2. TaoToken 统一 Key 接入前的准备工作
在动手装依赖之前,先把"钥匙"准备好,否则后面配置 API 通道时会卡住。这里我用的是 TaoToken 作为统一接入层,好处是一个 Key 就能对接多家模型,不用在 Hermes Agent 和 OpenClaw 里分别维护不同的凭证。
第一步,拿到你的统一 Key。访问 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册并登录,进入控制台后找到 API Keys 页面(deep link:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=),创建一个新的 Key。格式通常是 sk- 开头的一长串字符,创建后只显示一次,务必复制保存到本地记事本。
第二步,确认你要用的模型 ID。TaoToken 的模型对话页面(deep link:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=)里能看到当前支持的模型列表,比如 claude-sonnet-4、gpt-4o 这类。记下你打算给 Agent 用的那个 Model ID,后面写配置文件要用。
第三步,如果你打算长期跑编码类 Agent,建议了解一下 Coding Plan(deep link:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=)。它把按 token 计费换成了按次收费,对于高频调用、长上下文的任务,费用会稳定很多。开通后同样在控制台生成对应的 Key。
第四步,服务器侧的准备。用 SSH 连上你的阿里云 ECS:
ssh root@你的服务器公网IP
连上后先做一次系统更新,避免依赖版本太旧:
# Alibaba Cloud Linux / CentOS 系
sudo yum update -y
# Ubuntu / Debian 系
sudo apt update && sudo apt upgrade -y
然后确认内存和磁盘满足要求:
free -h
df -h
如果 free -h 显示内存低于 2GiB,建议先去控制台升配,否则后面 OpenClaw 启动会报内存不足。这一步别省,我见过太多人卡在这里反复重装。
最后,把 18789 端口在阿里云安全组里放行。进入 ECS 控制台,找到你的实例,在"安全组"里添加入方向规则,协议 TCP,端口范围 18789/18789,授权对象 0.0.0.0/0(如果只自己用,可以填你的固定 IP 更安全)。这一步做完,后面 Web 控制台才能从公网访问。
3. 可复制的 Coding Plan 与 OpenClaw 配置文件
这一节是整篇的核心,我会给出可以直接复制粘贴的配置片段。路径和字段名都按实际部署验证过的来,你照着改 Key 和 Model ID 就行。
先装基础依赖。Hermes Agent 和 OpenClaw 都依赖 Node.js 22.x,用 NodeSource 源装比较稳:
# 安装 Node.js 22.x
curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo bash -
sudo yum install -y nodejs git python3
# 验证版本
node --version # 应输出 v22.x.x
npm --version
Ubuntu 系把 yum 换成 apt 即可。装完 Node 后,全局安装 OpenClaw 和 ClawHub CLI:
npm install -g openclaw
npm install -g clawhub
# 验证
openclaw --version
clawhub --version
接下来是关键的配置文件。OpenClaw 的主配置在 ~/.openclaw/openclaw.json,我们用 TaoToken 作为模型提供方。先创建目录:
mkdir -p ~/.openclaw
然后写入配置。下面这段 JSON 可以直接复制,把 sk-你的TaoToken密钥 和模型 ID 换成你自己的:
{
"models": {
"providers": {
"taotoken": {
"baseUrl": "https://taotoken.net/api",
"apiKey": "sk-你的TaoToken密钥",
"models": [
{
"id": "claude-sonnet-4",
"name": "Claude Sonnet 4",
"contextWindow": 200000
}
]
}
},
"default": "taotoken/claude-sonnet-4"
},
"gateway": {
"port": 18789,
"host": "0.0.0.0"
},
"agent": {
"name": "hermes-openclaw",
"maxSteps": 20
}
}
注意 baseUrl 这里填的是 https://taotoken.net/api,不要加多余的路径后缀,OpenClaw 会自动拼接 /v1/chat/completions。default 字段的格式是 提供方名/模型ID,要和上面 providers 里的 key 对应上。
如果你用的是 Coding Plan 的 Key,配置结构一样,只是把 apiKey 换成 Coding Plan 生成的 Key,模型 ID 按 Coding Plan 支持的列表填。Coding Plan 的接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有完整的模型对照表。
Hermes Agent 这边,如果你是用它做任务编排,配置通常放在项目根目录的 hermes.config.toml。一个最小可用的 TOML 片段:
[llm]
provider = "taotoken"
base_url = "https://taotoken.net/api"
api_key = "sk-你的TaoToken密钥"
model = "claude-sonnet-4"
max_tokens = 4096
[agent]
name = "hermes"
max_iterations = 15
timeout_seconds = 120
[gateway]
port = 18790
这里我把 Hermes 的网关端口设成 18790,避免和 OpenClaw 的 18789 冲突。两个服务可以同时跑,各占一个端口。
配置写完后,用 openclaw config validate 检查一下 JSON 格式有没有问题:
openclaw config validate
如果输出 Config is valid,说明字段和格式都对。如果报错,多半是 JSON 里多了逗号或者引号没闭合,仔细核对一下。
4. 启动服务并验证请求是否跑通
配置就绪后,先启动 OpenClaw 网关。前台启动方便看日志:
openclaw gateway
正常的话你会看到类似这样的输出:
[gateway] listening on 0.0.0.0:18789
[agent] hermes-openclaw initialized
[models] provider taotoken loaded, default model: claude-sonnet-4
看到 listening 就说明服务起来了。这时候另开一个终端,用 curl 直接打一下 API 通道,验证 TaoToken 的 Key 是否生效:
curl -X POST https://taotoken.net/api/v1/chat/completions \
-H "Authorization: Bearer sk-你的TaoToken密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4",
"messages": [{"role": "user", "content": "回复:通道正常"}],
"max_tokens": 50
}'
如果返回的 JSON 里 choices[0].message.content 有内容,说明 Key 和模型 ID 都没问题。这一步很关键,它把"网络通不通"和"配置对不对"两个问题分开了——如果 curl 通但 OpenClaw 报错,那就是 OpenClaw 配置的问题;如果 curl 就不通,先检查 Key 和网络。
接着验证 OpenClaw 自己的对话接口。在浏览器打开 http://你的服务器公网IP:18789,应该能看到 Web 控制台。如果打不开,先确认安全组 18789 已放行,再确认服务确实在监听:
ss -tlnp | grep 18789
在控制台对话框里输入一句测试指令,比如"创建一个名为 test.txt 的文件,内容为部署成功"。如果 Agent 返回执行结果,说明从云主机到模型服务的整条链路都通了。
Hermes Agent 那边,启动命令通常是:
hermes run --config hermes.config.toml
启动后同样用 curl 打一下它的网关端口:
curl http://localhost:18790/health
返回 {"status":"ok"} 就说明 Hermes 也正常。到这一步,两个 Agent 服务都跑起来了,而且共用同一个 TaoToken Key,后面换模型只需要改配置文件里的 Model ID,不用动 Key。
如果你想让服务在服务器重启后自动拉起,配一个 systemd 服务:
sudo tee /etc/systemd/system/openclaw.service <<EOF
[Unit]
Description=OpenClaw Gateway
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/openclaw gateway
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw
用 systemctl status openclaw 确认状态是 active (running)。
5. 部署中常见的报错与排查方法
这一节我把实际踩过的坑列出来,对照报错找原因,能省不少时间。
报错一:401 Unauthorized
{"error":{"message":"Invalid API key","type":"authentication_error"}}
这是最常见的。原因通常是 Key 复制时带了空格,或者用了已经删除的 Key。排查方法:把 Key 重新复制一遍,注意不要带首尾空格;在 TaoToken 控制台的 API Keys 页面确认这个 Key 状态是"启用"。如果还是 401,用第 4 节的 curl 命令单独测一下,排除是 OpenClaw 配置问题还是 Key 本身问题。
报错二:local proxy failed / connection refused
Error: connect ECONNREFUSED 127.0.0.1:7890
这个报错说明系统里配了本地代理,但代理服务没跑。检查环境变量:
env | grep -i proxy
如果有 http_proxy 或 https_proxy 指向本地端口,把它清掉:
unset http_proxy https_proxy all_proxy
然后在 OpenClaw 的启动脚本里也确保没有继承这些变量。云主机上一般不需要代理,直连即可。
报错三:reading choices 相关错误
TypeError: Cannot read properties of undefined (reading 'choices')
这通常意味着 API 返回的结构和预期不符。两种可能:一是 baseUrl 配错了,比如多写了 /v1 导致路径变成 /v1/v1/chat/completions;二是模型 ID 写错了,服务端返回了错误对象而不是正常的 choices 数组。排查方法:先用 curl 确认返回结构,再核对配置文件里的 baseUrl 和模型 ID。baseUrl 就填 https://taotoken.net/api,不要加后缀。
报错四:OAuth 相关报错
Error: OAuth token expired or invalid
如果你在配置里混用了 OAuth 方式的凭证,会出现这个。TaoToken 用的是 API Key 方式,不需要 OAuth。检查配置文件里有没有残留的 oauth 字段,删掉即可。如果你之前配过 Claude Code 的 OAuth,注意区分,两者不要混在同一个 provider 里。
报错五:端口被占用
Error: listen EADDRINUSE: address already in use :::18789
说明 18789 已经被别的进程占了。查一下:
lsof -i:18789
如果是之前没退干净的 OpenClaw 进程,kill 掉再启动。如果是别的服务,改 OpenClaw 配置里的 gateway.port 换个端口。
报错六:内存不足导致启动失败
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
这就是前面强调的内存问题。2GiB 是底线,如果同时跑 Hermes 和 OpenClaw,建议 4GiB 起。临时缓解可以限制 Node 堆大小:
export NODE_OPTIONS="--max-old-space-size=1536"
但根治还是升配。
排查的时候有个通用思路:先确认网络层(curl 能不能通),再确认配置层(JSON/TOML 格式对不对),最后确认服务层(进程有没有起来、端口有没有监听)。按这个顺序走,大部分问题都能定位到。
6. 把统一 Key 接入长期编码与 Agent 工作流
服务跑通只是开始,真正让它产生价值的是接进日常工作流。这里说几个我实际在用的方向。
第一个方向是长期编码助手。如果你用 Claude Code 这类工具做日常开发,可以把 TaoToken 的 Key 配进去,Base URL 填 https://taotoken.net/api,Model ID 填你常用的编码模型。这样在终端里就能直接调用,不用来回切窗口。Claude Code 的接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有完整的 settings 配置示例。如果你还没开通 Coding Plan,长期高频用的话建议了解一下(https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=),按次计费对编码场景更友好。
第二个方向是 Agent 任务自动化。OpenClaw 支持通过 ClawHub 安装技能,比如文件处理、日程管理、邮件整理。装技能的命令:
clawhub search file-utils
clawhub install file-utils
装完后在对话里直接下指令,Agent 会调用对应技能执行。因为底层走的是 TaoToken 统一 Key,你换模型不用改技能配置,只改 openclaw.json 里的 default 字段就行。
第三个方向是多服务协同。Hermes Agent 负责复杂任务拆解,OpenClaw 负责执行和消息响应,两者通过各自的网关端口通信。你可以在 Hermes 的配置里把 OpenClaw 的地址作为工具端点注册进去,这样 Hermes 拆解完任务后,直接调用 OpenClaw 执行。整个链路里,模型调用统一走 TaoToken,Key 只需要维护一份。
第四个方向是监控和成本控制。TaoToken 控制台能看到调用量和费用明细,建议定期看一下。如果发现某个模型调用量异常高,可能是 Agent 陷入了循环,检查一下 maxSteps 或 max_iterations 配置,适当调低。
最后提醒一点:API Key 不要硬编码在会提交到 Git 的代码里。用环境变量或者独立的配置文件,并且把配置文件加入 .gitignore。服务器上的 Key 也要定期轮换,降低泄露风险。
整套流程走下来,从一台干净的阿里云 ECS 到 Hermes Agent 和 OpenClaw 双服务运行,核心其实就是三件事:装对 Node.js 版本、写对配置文件、用统一 Key 打通 API 通道。剩下的就是按自己的场景慢慢调优了。



被折叠的 条评论
为什么被折叠?



