乐于分享
好东西不私藏

OpenClaw 与 Hermes 同机部署指南 – 开发者实战手记

OpenClaw 与 Hermes 同机部署指南 – 开发者实战手记

在上一篇博客[1]中,我在 Amazon EC2 上部署了 OpenClaw。这次更进一步:在同一台 EC2 上安装 Hermes Agent[2],让两个 AI Agent 同时运行,各自连接不同的微信账号,共享同一个 Amazon Bedrock[3] 后端。本文记录了完整过程,包括安装、配置微信、以及踩过的几个坑。

为什么要在一台机器上跑两个 Agent?

OpenClaw 和 Hermes Agent 是两个不同风格的开源 AI Agent 项目:

  • OpenClaw
    [4] —— Node.js 实现,20+ 消息平台支持,插件体系,侧重”私人助手”体验
  • Hermes Agent
    [2] —— Python 实现,由 Nous Research 开发,侧重 CLI 交互、技能系统和自主任务执行

两者都支持 Amazon Bedrock,都支持微信。我想在同一台 EC2 上同时跑起来,用不同的微信账号分别和它们对话,对比一下实际体验。

起点:已有的 OpenClaw 部署

上一篇博客的成果:

  • EC2 实例运行在 ap-southeast-2(悉尼)
  • OpenClaw Gateway 通过 systemd 用户服务运行
  • 微信已通过 openclaw-weixin 插件连通
  • 模型:au.anthropic.claude-opus-4-6-v1(Claude Opus 4.6 via Bedrock)

第一步:升级实例

原来的 t4g.large(2 vCPU, 8GB RAM)跑一个 Agent 没问题,但两个同时跑会比较紧张。我把实例升级到了 t4g.xlarge,EBS 也从 50GB 扩展到 100GB:

升级前后对比:

  • 实例类型:t4g.large (2 vCPU, 8GB) → t4g.xlarge (4 vCPU, 16GB)
  • EBS:50GB gp3 → 100GB gp3

升级方式:在 EC2 控制台停止实例 → Change Instance Type → 启动。EBS 扩展可以在线操作,无需停机。

第二步:安装 Hermes Agent

通过 SSM 连接到 EC2:

aws ssm start-session --target <instance-id> --region ap-southeast-2sudo su - ubuntu

克隆仓库并运行安装脚本:

mkdir -p ~/.hermescd ~/.hermesgit clone https://github.com/nousresearch/hermes-agent.gitcd hermes-agent./setup-hermes.sh

安装脚本会自动完成以下工作: – 安装 uv(Python 包管理器) – 创建 Python 3.11 虚拟环境 – 安装所有依赖(通过 uv.lock 锁文件验证) – 将 hermes 命令链接到 ~/.local/bin/ – 同步内置 skills 到 ~/.hermes/skills/

安装完成后重新加载 shell:

source ~/.bashrchermes --version# Hermes Agent v0.10.0 (2026.4.16)

第三步:配置 Bedrock 模型

编辑 ~/.hermes/config.yaml:

model:  default: "au.anthropic.claude-opus-4-6-v1"  provider: "bedrock"

Hermes 会使用 EC2 实例的 IAM Role 自动认证 Bedrock,不需要额外配置 API key。这和 OpenClaw 一样 —— 两个 Agent 共享同一个 IAM Role 和 Bedrock 访问权限。

第四步:安装并启动 Gateway

# 安装为 systemd 用户服务hermes gateway install# 启动hermes gateway start# 确认状态hermes gateway status

注意:必须先 install 再 start。如果直接 start 会报 Unit hermes-gateway.service not found。

第五步:配置微信

hermes gateway setup

向导会引导你完成配置:

  1. 选择平台
    :选 weixin
  2. 扫码配对
    :终端显示二维码,用微信扫码确认
  3. DM 授权
    :选 “Use DM pairing approval”(推荐)
  4. 群聊
    :选 “Disable group chats”(推荐)
  5. Home channel
    :确认使用你的微信用户 ID
  6. 重启 gateway
    :确认重启

配对成功后会看到:

微信连接成功,account_id=<your-account-id>@im.bot✓ Weixin configured!

踩坑:微信发消息没有回复

配置完成后我用微信给 Hermes 发了消息,没有回复。查看日志:

journalctl --user -u hermes-gateway -f

发现了问题:

WARNING gateway.run: Unauthorized user: <user-id>@im.wechat on weixin

原因是选了 DM pairing approval 模式,但我的微信用户还没被授权。解决方法:

echo 'WEIXIN_ALLOWED_USERS=<your-user-id>@im.wechat' >> ~/.hermes/.envhermes gateway restart

重启后,微信消息正常收发了。

经验:如果 Hermes 微信不回复,第一件事就是查 gateway 日志。大概率是用户授权问题。

最终效果

两个 Agent 同时运行,各自连接不同的微信账号:

确认运行状态:

# OpenClawsystemctl --user status openclaw-gateway# ● active (running)# Hermessystemctl --user status hermes-gateway# ● active (running)

两个 Agent 的对比

OpenClaw:– 运行时:Node.js (TypeScript) – 配置目录:~/.openclaw/ – 微信实现:插件 (openclaw-weixin) – 微信协议:iLink Bot API – Gateway 端口:18789 (HTTP) – 模型配置:openclaw.json – 内存占用:~682MB – 服务管理:systemd user service – 消息平台数:20+ – 特色功能:Canvas、插件体系

Hermes Agent:– 运行时:Python 3.11 – 配置目录:~/.hermes/ – 微信实现:原生适配器 (weixin.py) – 微信协议:iLink Bot API(相同) – Gateway 端口:无监听端口(长轮询) – 模型配置:config.yaml + .env – 内存占用:~123MB – 服务管理:systemd user service – 消息平台数:15+ – 特色功能:CLI 交互、技能系统、持久记忆

两者都使用腾讯 iLink Bot API 连接微信,协议完全相同,但实现方式不同:OpenClaw 通过插件扩展,Hermes 原生内置。

常见问题

微信对话中出现 “No auxiliary LLM provider configured” 警告

现象:在微信上和 Hermes 对话时,收到提示:

No auxiliary LLM provider configured — context compression will drop middleturns without a summary. Run `hermes setup` or set OPENROUTER_API_KEY.

原因:Hermes 的上下文压缩和记忆功能需要一个辅助模型(默认使用 OpenRouter 的 Gemini Flash)。当只配置了 Bedrock 时,Hermes 的辅助模型系统无法使用 Bedrock 的亚马逊云科技 SDK 认证方式,导致压缩功能退化为直接丢弃中间对话轮次。

解决:在 OpenRouter[5] 获取一个 API key(有免费额度),然后配置:

echo 'OPENROUTER_API_KEY=your-key-here' >> ~/.hermes/.envhermes gateway restart

配置后,Hermes 会使用 Gemini Flash 作为辅助模型来生成对话摘要,长对话的上下文压缩会更智能,不再简单丢弃中间内容。

OpenRouter 的免费额度对辅助模型调用来说绰绰有余,Gemini Flash 的价格也很低,日常使用几乎没有额外成本。

微信回复被截断(Response truncated due to output length limit)

现象:Hermes 在微信或 CLI 上执行复杂任务(如生成 PPT、写长代码文件)时,显示 “Response truncated due to output length limit”。

原因:Hermes 在 Bedrock 模式下,runagent.py 中硬编码了 maxtokens=4096 作为默认值,而且 config.yaml 中的 max_tokens 设置没有被正确传递到 Agent。当模型需要在一次工具调用中生成大量内容时,4096 tokens 不够用,导致输出被截断。

解决:修改 Hermes 源码中的默认值。编辑 ~/.hermes/hermes-agent/run_agent.py,找到 Bedrock converse 调用处(约第 6686 行):

# 修改前max_tokens=self.max_tokens or 4096,# 修改后max_tokens=self.max_tokens or 16384,

然后重启 gateway:

hermes gateway restart

此外,对于生成 PPT 这类需要大量代码输出的任务,建议在提示中引导模型分段写文件(如每 3 个 slide 一个文件),避免单次工具调用输出过长。

注意:max_tokens 设得太大(如 65536)可能导致 Bedrock API 超时(Read timed out),因为生成时间过长。16384 是一个较好的平衡点。

成本变化

成本对比:

  • EC2:t4g.large (~$49) → t4g.xlarge (~$98),月费 +$49($0.1344/小时 × 730 小时)
  • EBS:50GB gp3 (~$4) → 100GB gp3 (~$8),月费 +$4($0.08/GB-月 × 100GB)
  • VPC 端点:×4 (~$29) → ×4 (~$29),不变
  • 合计(不含 API):~$82 → ~$135,月费 +$53

定价参考(us-east-1 区域):AWS EC2 T4g 实例[6]

注:实际价格可能因区域和时间而异,请以亚马逊云科技官方定价页面为准。

总结

在同一台 EC2 上同时运行 OpenClaw 和 Hermes Agent 是完全可行的。两者使用不同的运行时(Node.js vs Python)、不同的配置目录、不同的 systemd 服务,互不干扰。微信连接方面,两者都使用 iLink Bot API,可以各自绑定不同的微信账号。

整个过程中最容易踩的坑是 Hermes 的用户授权 —— 配对完微信后还需要手动将用户 ID 添加到 .env 的允许列表中,否则消息会被静默丢弃。

如果你已经在亚马逊云科技上跑了 OpenClaw,加装 Hermes Agent 大约需要 20 分钟。值得一试。

本文由人类与 Kiro[7] 协作完成。

相关资源:– 📦 OpenClaw GitHub[4] – 📦 Hermes Agent GitHub[2] – 📦 部署模板(GitHub)[8]

Happy Deploying! 🦞⚕

脚注链接:

[1] 上一篇博客:https://mp.weixin.qq.com/s/Vos2z44bmLvPOb19c0ujYw 

[2] Hermes Agent:https://github.com/nousresearch/hermes-agent 

[3] Amazon Bedrock:https://aws.amazon.com/bedrock/ 

[4] OpenClaw:https://github.com/openclaw/openclaw 

[5] OpenRouter:https://openrouter.ai/keys 

[6] AWS EC2 T4g 实例定价:https://aws.amazon.com/ec2/instance-types/t4/ 

[7] Kiro:https://kiro.dev/ 

[8] 部署模板:https://github.com/hanyun2019/openclaw-on-aws/blob/main/openclaw-deployment.yaml 

[9] Hermes Agent 文档:https://github.com/nousresearch/hermes-agent/blob/main/README.md 

[10] AWS Bedrock 推理配置文件:https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html