在 AICoder 上部署 Hermes Agent
本文基于 Hermes Agent v0.14.0 (2026.5.16) 编写;安装示例固定使用源码标签 v2026.5.16。
本文介绍如何在平台提供的免费 2C4G AICoder 开发实例上部署 Hermes Agent。完成配置后,您可以在 VS Code Remote SSH 终端中使用 Hermes CLI,也可以用 PM2 托管 Hermes Gateway 和 Hermes Dashboard;后续再接入 Telegram、Discord、Slack 等消息渠道。模型 API 调用仍由上游模型服务按用量计费。
本文不使用 systemd 管理 Gateway。AICoder 更接近容器化开发环境,适合用 PM2 托管 hermes gateway run 和 hermes dashboard 这样的前台进程。
信息
本文尽量使用可复制的 CLI 命令完成安装、模型配置、Gateway 启动和 Dashboard 启动。Hermes 的 setup 向导更适合交互式终端;在 AICoder 这种远程环境里,本文直接写入关键配置,减少中途等待和反复确认。
Step 0 开始前确认账号、密钥和模型
开始之前,先准备好这些内容。本文使用 Hermes 已有的模型适配,并把访问地址指向您的模型 API 服务。
| 项目 | 说明 |
|---|---|
| AICoder 实例 | 用于运行 Hermes CLI、Hermes Gateway 和 Hermes Dashboard。 |
| SSH 连接信息 | 用于通过 VS Code Remote SSH 连接 AICoder。 |
| 模型 API Key | Hermes 调用模型时使用。 |
| OpenAI-compatible Base URL | 模型 API 根地址,不要带 /chat/completions。 |
| 模型 ID | 本文使用 kimi-k2.6、glm-5.1、minimax-m2.7、deepseek-v4-pro 或 deepseek-v4-flash。 |
| 消息渠道 Token | 可选。只有接入 Telegram、Discord、Slack 等消息渠道时才需要。 |
信息
本文先完成 Hermes CLI、模型、Gateway 和 Dashboard 的基础部署。消息渠道的应用创建、权限配置、回调设置和配对方式差异较大,建议在基础能力验证通过后再接入。
确认 AICoder 的运行限制
AICoder 可以作为轻量开发实例使用,但它和完整云服务器不完全一样:
- AICoder 通常没有直接对公网暴露的 HTTP 入口。
- 容器内通常没有可用的
systemd --user。 - 免费实例更适合开发、验证和轻量长期任务;如果实例被重置,根文件系统里的安装和配置会丢失。
这些限制会影响操作方式:
- 不使用依赖
systemd或launchd的 Gateway 后台服务命令。 - 使用 PM2 管理 Hermes Gateway 和 Dashboard 进程。
- 通过 VS Code Remote SSH 进入实例终端,再执行后续命令。
- 通过 VS Code 端口转发访问 Dashboard。
Step 1 连接 AICoder 实例
先把本机 SSH 公钥加入平台,再用 VS Code Remote SSH 连接 AICoder。连接成功后,后续命令都在 AICoder 终端中执行。
添加 SSH 公钥
AICoder 使用 SSH 密钥连接。请先在智算云平台添加本机 SSH 公钥。
如果还没有 SSH 公钥,可以在本地终端生成:
ssh-keygen -t ed25519 -C "aicoder-hermes"然后将公钥内容添加到智算云平台:
cat ~/.ssh/id_ed25519.pub复制 AICoder SSH 连接信息
登录智算云平台。
打开 AICoder。
等待实例初始化完成。
复制平台提供的 SSH 连接信息,通常包含
Host、HostName、ProxyJump和User。
使用 VS Code Remote SSH 连接实例
打开 VS Code,确保已安装 Remote - SSH 扩展。如果您不熟悉 VS Code 远程开发流程,可以先参考下面的教程:
在本地 ~/.ssh/config 中添加平台提供的 SSH 配置。下面只是示例,请替换成您自己的实例信息:
Host aic-example
HostName aic-example
ProxyJump ssh-jumper.neogpu.com
User root
ExitOnForwardFailure yes
ServerAliveInterval 30
ServerAliveCountMax 3打开 VS Code,使用 Remote - SSH 连接这个 Host。
验证实例可以访问外网
在 AICoder 终端中执行:
curl -I https://github.com/
curl -I https://pypi.org/simple/
curl -I https://registry.npmjs.org/看到 HTTP/1.1 200 OK、HTTP/2 200 或重定向响应,都说明基础网络可用。
Step 2 安装运行环境
这一部分安装 Hermes Installer 和 PM2 需要的基础工具。AICoder 环境里下载 npm 包或 Python 包可能受网络波动影响,建议先写入镜像源,再开始安装。
安装基础命令和 Node.js
先安装 curl、git 和 Node.js 22。PM2 和 Dashboard 前端构建都需要 Node.js。
apt-get update
apt-get install -y curl ca-certificates git gnupg
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs确认 Node.js 和 npm 可用:
node --version
npm --version提前配置 npm 和 uv 镜像
Hermes 安装过程会下载 Python 依赖,PM2 和 Dashboard 构建会下载 npm 包。先写入镜像配置,可以减少安装卡住的概率。
npm config set registry https://registry.npmmirror.com
if ! grep -q 'UV_INDEX_URL' "$HOME/.bashrc" 2>/dev/null; then
cat >>"$HOME/.bashrc" <<'EOF'
export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"
EOF
fi
export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"安装 PM2
PM2 用来托管 Hermes Gateway 和 Dashboard 前台进程:
npm install -g pm2
pm2 --versionStep 3 安装 Hermes Agent
Hermes 官方安装脚本会准备 Python 运行环境、uv、依赖包和 hermes 命令。本文跳过交互式 setup 向导,并跳过 Playwright/Chromium 浏览器安装;这样可以先把 CLI、Gateway 和 Dashboard 跑起来。
export HERMES_VERSION="v2026.5.16"
curl -fsSL "https://raw.githubusercontent.com/NousResearch/hermes-agent/${HERMES_VERSION}/scripts/install.sh" | bash -s -- \
--branch "$HERMES_VERSION" \
--skip-setup \
--skip-browser信息
--skip-browser 跳过的是 Playwright/Chromium 浏览器安装。安装脚本仍可能尝试安装一部分浏览器工具相关的 npm 依赖;如果日志里出现 npm install failed (browser tools may not work),不代表 Hermes CLI、Gateway 或 Dashboard 一定不可用。本文不依赖浏览器自动化工具。
安装完成后,重新加载 Shell 配置:
source ~/.bashrc验证 Hermes 命令可用:
hermes version
hermes config path
hermes config env-path期望 hermes version 显示类似 Hermes Agent v0.14.0 (2026.5.16),并列出 Python 版本和 SDK 版本。如果命令不存在,先确认 /usr/local/bin 是否在 PATH 中:
command -v hermes
echo "$PATH"Step 4 配置模型
本文复用 Hermes 已支持的模型适配:kimi-coding、zai、minimax-cn 和 deepseek。您只需要把模型 API Key 和 Base URL 写入 ~/.hermes/.env,再选择默认模型。
写入 API Key 和 Base URL
把下面的 sk-your-model-api-key 和 https://api.example.com/v1 替换成您的模型 API Key 和 OpenAI-compatible Base URL:
export MODEL_API_KEY="sk-your-model-api-key"
export MODEL_OPENAI_BASE_URL="https://api.example.com/v1"把 API Key 和 Base URL 写入 ~/.hermes/.env:
mkdir -p "$HOME/.hermes"
touch "$HOME/.hermes/.env"
chmod 600 "$HOME/.hermes/.env"
upsert_env() {
key="$1"
value="$2"
file="$HOME/.hermes/.env"
if grep -q "^${key}=" "$file"; then
sed -i "s|^${key}=.*|${key}=${value}|" "$file"
else
printf '%s=%s\n' "$key" "$value" >> "$file"
fi
}
upsert_env KIMI_API_KEY "$MODEL_API_KEY"
upsert_env KIMI_BASE_URL "$MODEL_OPENAI_BASE_URL"
upsert_env GLM_API_KEY "$MODEL_API_KEY"
upsert_env GLM_BASE_URL "$MODEL_OPENAI_BASE_URL"
upsert_env MINIMAX_CN_API_KEY "$MODEL_API_KEY"
upsert_env MINIMAX_CN_BASE_URL "$MODEL_OPENAI_BASE_URL"
upsert_env DEEPSEEK_API_KEY "$MODEL_API_KEY"
upsert_env DEEPSEEK_BASE_URL "$MODEL_OPENAI_BASE_URL"警告
请把 KIMI_BASE_URL、GLM_BASE_URL、MINIMAX_CN_BASE_URL 和 DEEPSEEK_BASE_URL 写入 ~/.hermes/.env,不要用 hermes config set KIMI_BASE_URL ... 这类命令设置。Hermes 的这些模型适配会从环境变量读取 Base URL;如果 Base URL 被写到 config.yaml 的普通字段里,模型请求可能不会使用您填写的模型 API 地址。
选择默认模型
默认使用 Kimi K2.6:
hermes config set model.provider kimi-coding
hermes config set model.default kimi-k2.6
hermes config set model.api_mode chat_completions
hermes config set agent.reasoning_effort medium
hermes config set display.show_reasoning false如果要改用其他模型,只需要替换 model.provider 和 model.default:
Kimi K2.6: provider=kimi-coding, model=kimi-k2.6
GLM 5.1: provider=zai, model=glm-5.1
MiniMax M2.7: provider=minimax-cn, model=minimax-m2.7
DeepSeek V4 Pro: provider=deepseek, model=deepseek-v4-pro
DeepSeek V4 Flash: provider=deepseek, model=deepseek-v4-flash例如默认使用 DeepSeek V4 Pro:
hermes config set model.provider deepseek
hermes config set model.default deepseek-v4-pro
hermes config set model.api_mode chat_completions检查当前配置:
hermes config show
hermes config check如果 hermes config check 能看到 KIMI_API_KEY、GLM_API_KEY、MINIMAX_CN_API_KEY、DEEPSEEK_API_KEY 以及对应的 *_BASE_URL,说明 Hermes 已经能读取这些变量。
Step 5 验证 Hermes CLI 可用
先用 Hermes 自带命令检查配置和依赖,再用一次性命令测试模型。这样可以在启动 Gateway 前发现 API Key、Base URL 或模型 ID 问题。
hermes doctor
hermes status如果 hermes doctor 提示缺少可选工具、浏览器依赖或消息渠道 Token,可以先忽略。本文当前只要求模型对话、Gateway 和 Dashboard 可启动。
发送一次性测试消息
如果您只配置一个默认模型,可以先测试默认模型:
hermes -z "请仅回复:收到。" --ignore-rules如果您按 Step 4 写入了四类模型的环境变量,也可以逐个测试:
hermes -z "请仅回复:收到。" --provider kimi-coding -m kimi-k2.6 --ignore-rules
hermes -z "请仅回复:收到。" --provider zai -m glm-5.1 --ignore-rules
hermes -z "请仅回复:收到。" --provider minimax-cn -m minimax-m2.7 --ignore-rules
hermes -z "请仅回复:收到。" --provider deepseek -m deepseek-v4-pro --ignore-rules
hermes -z "请仅回复:收到。" --provider deepseek -m deepseek-v4-flash --ignore-rules看到模型回复 收到。 或等价短回复,即表示 Hermes CLI 已经能通过您的模型 API 服务调用模型。
Step 6 用 PM2 启动 Hermes Gateway
Hermes Gateway 负责把 Telegram、Discord、Slack 等消息渠道连接到 Hermes。AICoder 不适合使用依赖系统服务的 hermes gateway start,这里用 PM2 托管前台命令 hermes gateway run。
先删除可能存在的同名 PM2 进程,再启动 Gateway:
pm2 delete hermes-gateway 2>/dev/null || true
HERMES_BIN="$(command -v hermes)"
pm2 start bash --name hermes-gateway -- -lc "exec $HERMES_BIN gateway run --replace"
pm2 save查看进程状态和日志:
pm2 status
pm2 logs hermes-gateway --lines 80如果日志里没有持续重启、认证失败或缺少模型配置的错误,Gateway 进程已经由 PM2 托管。还没有配置 Telegram、Discord、Slack 等渠道时,看到 No messaging platforms enabled 一类提示是正常的。
Step 7 验证 Gateway 运行状态
Gateway 启动后,先用 Hermes 命令和 PM2 日志确认它在当前实例里正常运行。这样接入消息渠道时,问题范围会更清楚。
hermes gateway status
pm2 status hermes-gateway
pm2 logs hermes-gateway --lines 120如果 AICoder 实例重启后 PM2 进程没有自动恢复,可以手动执行:
pm2 resurrect如果 pm2 resurrect 没有恢复出 hermes-gateway,重新执行 Step 6 的启动命令。
Step 8 启动 Hermes Dashboard
Hermes Dashboard 是 Hermes 的 Web GUI。AICoder 通常不直接暴露公网端口,所以本文让 Dashboard 只监听远程实例本机的 127.0.0.1:9119,再通过 VS Code Remote SSH 做端口转发。
构建 Dashboard 前端
在 root 用户的新安装中,Hermes 源码默认位于 /usr/local/lib/hermes-agent。先构建 Dashboard 前端资源:
cd /usr/local/lib/hermes-agent/web
npm install --silent
npm run build如果您的 Hermes 安装目录不是 /usr/local/lib/hermes-agent,请把命令里的路径替换成实际安装目录。
用 PM2 启动 Dashboard
启动 Dashboard:
pm2 delete hermes-dashboard 2>/dev/null || true
HERMES_BIN="$(command -v hermes)"
pm2 start bash --name hermes-dashboard -- -lc "exec $HERMES_BIN dashboard --no-open --host 127.0.0.1 --port 9119 --skip-build --tui"
pm2 save查看状态和日志:
pm2 status hermes-dashboard
pm2 logs hermes-dashboard --lines 80从本地浏览器访问 Dashboard
在 VS Code Remote SSH 窗口中打开 Ports 面板,转发端口 9119。转发后,在本地浏览器打开:
http://127.0.0.1:9119警告
不建议把 Dashboard 绑定到 0.0.0.0,也不要轻易使用 --insecure。Dashboard 可以查看和修改 Hermes 配置,包含密钥相关信息;通过 VS Code 端口转发访问更安全。
Step 9 可选:接入消息渠道
基础 Gateway 跑通后,再接入具体消息渠道。不同平台的 Bot 创建、权限申请和回调方式不同,最省心的入口通常是 Hermes 自带的交互式 Gateway 配置命令:
hermes gateway setup如果某个渠道必须把请求回调到您的 Gateway,AICoder 还需要额外的公网入口或隧道。只需要 Gateway 主动连外的渠道,通常不受这个限制。
如果您已经准备好消息渠道 Token,也可以先用 CLI 写入密钥,再重启 Gateway。下面以 Telegram 和 Discord 为例:
hermes config set TELEGRAM_BOT_TOKEN "your-telegram-bot-token"
hermes config set DISCORD_BOT_TOKEN "your-discord-bot-token"
pm2 restart hermes-gateway
pm2 logs hermes-gateway --lines 120只配置您实际使用的渠道即可。没有接入某个渠道时,不需要写入对应 Token。
常见问题
为什么不直接运行 hermes setup --non-interactive?
Hermes 的 setup 向导主要面向交互式终端。源码里 setup --non-interactive 更像是给无头环境打印配置建议,不会替您完整写入模型、Gateway 和 Dashboard 运行方式。
因此本文把关键配置拆成明确的命令。这样每一步写入了什么、写到哪里、后续怎么检查,都更清楚。
什么时候才需要自定义 Provider?
本文验证的 Kimi、GLM、MiniMax 和 DeepSeek 模型,优先使用 Hermes 已有模型适配。这样配置更少,也能复用 Hermes 对这些模型家族的默认处理。
只有当前模型服务的协议、鉴权或 reasoning 行为和 Hermes 已有适配不匹配时,才建议补充专门的 Hermes provider 插件或自定义 Provider。普通接入 OpenAI-compatible 模型 API 时,不建议一开始就新建 providers: YAML。
Base URL 为什么一定要写到 .env?
本文使用的是 Hermes 已有模型适配。这些适配会从对应环境变量读取 Base URL,例如 KIMI_BASE_URL、GLM_BASE_URL、MINIMAX_CN_BASE_URL 和 DEEPSEEK_BASE_URL。
如果用 hermes config set KIMI_BASE_URL ... 这类命令,值可能被写到 config.yaml 的普通字段里,而不是写成模型适配会读取的环境变量。这样模型请求可能仍然访问默认官方地址,而不是您填写的模型 API 地址。
为什么安装时加 --skip-browser?
浏览器自动化依赖通常比较大,AICoder 免费实例上下载和安装会更慢。本文先部署 Hermes CLI、Gateway 和 Dashboard,所以安装时跳过 Playwright/Chromium 浏览器安装。
需要注意:--skip-browser 不等于跳过所有 npm 步骤。Hermes 安装脚本仍可能执行浏览器工具相关的 npm install。如果只是看到 npm install failed (browser tools may not work),可以继续后续步骤;如果您需要浏览器自动化工具,再在网络稳定时补装。
后续如果需要浏览器工具,可以在网络稳定时再补装:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash -s -- \
--ensure browser为什么不用 hermes gateway start?
hermes gateway start 面向已经安装后台服务的环境。在 AICoder 里,systemd --user 通常不可用,所以本文用 PM2 托管 hermes gateway run。
这个选择的效果是:Gateway 在当前 AICoder 实例里持续运行,PM2 负责重启和日志查看;如果实例被重置,需要重新安装和恢复配置。
Gateway 启动了,但消息渠道没有响应怎么办?
先按顺序检查三件事:
pm2 status hermes-gateway显示进程是否在线。pm2 logs hermes-gateway --lines 120里是否有 Token、权限、回调或网络错误。- 对应渠道的 Bot Token 是否已经用
hermes config set写入,或者是否已经通过hermes gateway setup完成配置。
如果 Hermes CLI 可以正常调用模型,但消息渠道没有响应,问题通常在渠道 Token、平台权限或 Gateway 配置上,不在模型配置上。
如何重启 Gateway 或 Dashboard?
配置模型、密钥或消息渠道后,可以用 PM2 重启对应进程:
pm2 restart hermes-gateway
pm2 restart hermes-dashboard查看日志:
pm2 logs hermes-gateway --lines 120
pm2 logs hermes-dashboard --lines 120AICoder 重置后配置丢失怎么办?
AICoder 免费实例更适合开发和验证。如果实例被重置,/root/.hermes、PM2 进程列表和系统安装的软件都可能丢失。
建议把下面这些内容保存在团队自己的安全位置:
- 模型 API Key 的来源和轮换方式。
- OpenAI-compatible Base URL。
- 当前默认模型的
model.provider和model.default。 - 消息渠道 Token 的申请位置。
- 本文中最终采用的模型配置和 PM2 启动命令。
恢复时,重新连接 AICoder,然后从 Step 2 开始执行即可。