Hermes Agent 安装及配置
Hermes Agent 安装及配置
简介
Hermes Agent 是由 Nous Research 开发的自改进 AI Agent。它具有以下特点:
- 内置学习循环 — 从经验中创建技能,使用过程中不断改进
- 跨会话记忆 — 搜索历史对话,建立用户模型
- 多平台支持 — Telegram、Discord、Slack、WhatsApp、Signal 和 CLI
- 多模型支持 — 支持 Nous Portal、OpenRouter(200+ 模型)、OpenAI、Anthropic 等多种模型
- 灵活部署 — 可在 $5 VPS、GPU 集群或无服务器基础设施上运行
系统要求
- macOS 10.15 (Catalina) 或更高版本|WSL
- Python 3.11+
- 网络连接
安装步骤
方法一:一键安装(推荐)
打开终端,执行以下命令:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
安装完成后,重新加载 Shell 配置:
source ~/.zshrc # 如果使用 zsh(macOS 默认)
# 或
source ~/.bashrc # 如果使用 bash
方法二:手动安装
1. 安装依赖
确保已安装 Python 3.11+,可以使用 Homebrew 安装:
# 安装 Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装 Python
brew install python@3.11
2. 安装 uv(Python 包管理器)
curl -LsSf https://astral.sh/uv/install.sh | sh
3. 克隆仓库并安装
git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
# 创建虚拟环境
uv venv venv --python 3.11
source venv/bin/activate
# 安装 Hermes Agent
uv pip install -e ".[all]"
快速开始
启动 Agent
hermes
首次配置
运行设置向导,配置所有选项:
hermes setup
或使用单独的命令进行配置:
| 命令 | 说明 |
|------|------|
| hermes model | 选择 LLM 提供商和模型 |
| hermes tools | 配置启用的工具 |
| hermes config set | 设置单个配置值 |
| hermes gateway | 启动消息网关(Telegram、Discord 等) |
配置模型
支持的模型提供商
- Nous Portal
- OpenRouter(200+ 模型)
- z.ai/GLM
- Kimi/Moonshot
- MiniMax
- OpenAI
- Anthropic
- 自定义端点
切换模型
hermes model
或在对话中使用:
/model openrouter:anthropic/claude-3.5-sonnet
CLI 常用命令
对话管理
| 命令 | 说明 |
|------|------|
| /new 或 /reset | 开始新对话 |
| /model [provider:model] | 更换模型 |
| /personality [name] | 设置个性 |
| /retry | 重试上一轮 |
| /undo | 撤销上一轮 |
| /compress | 压缩上下文 |
| /usage | 查看使用情况 |
| /skills | 浏览技能 |
其他命令
| 命令 | 说明 |
|------|------|
| hermes update | 更新到最新版本 |
| hermes doctor | 诊断问题 |
消息网关配置
Hermes Gateway 是一个后台进程,连接所有配置的消息平台,处理会话、运行定时任务并传递语音消息。
网关命令
hermes gateway # 前台运行(显示实时日志)
hermes gateway setup # 交互式配置所有消息平台
hermes gateway install # 安装为系统服务(macOS: launchd)
hermes gateway start # 启动服务
hermes gateway stop # 停止服务
hermes gateway status # 查看服务状态
# 查看日志
tail -f ~/.hermes/logs/gateway.log # 实时查看网关日志
cat ~/.hermes/logs/gateway.log # 查看完整日志
# 调试模式(显示详细日志)
hermes chat --verbose
服务管理
hermes gateway install # 安装为 launchd 服务
hermes gateway start # 启动服务
hermes gateway stop # 停止服务
hermes gateway status # 查看状态
tail -f ~/.hermes/logs/gateway.log # 查看日志
服务文件位于 ~/Library/LaunchAgents/ai.hermes.gateway.plist。
聊天命令(在消息平台中使用)
| 命令 | 说明 |
|------|------|
| /new 或 /reset | 开始新对话 |
| /model [provider:model] | 更换模型 |
| /personality [name] | 设置个性 |
| /retry | 重试上一条消息 |
| /undo | 撤销上一轮对话 |
| /status | 显示会话信息 |
| /stop | 停止运行中的 agent |
| /approve | 批准待处理的危险命令 |
| /deny | 拒绝待处理的危险命令 |
| /sethome | 将此聊天设为主页频道 |
| /compress | 手动压缩对话上下文 |
| /title [name] | 设置或显示会话标题 |
| /resume [name] | 恢复之前命名的会话 |
| /usage | 查看此会话的 token 使用量 |
| /insights [days] | 显示使用分析和洞察 |
| /voice [on\|off\|tts] | 控制语音回复 |
| /background | 在后台会话中运行任务 |
| /reload-mcp | 重新加载 MCP 服务器 |
| /update | 更新 Hermes Agent |
| /help | 显示可用命令 |
| / | 调用任何已安装的技能 |
会话管理
会话持续性
会话在重置前会持续保留,agent 会记住对话上下文。
重置策略
| 策略 | 默认值 | 说明 |
|------|-------|------|
| 每日 | 4:00 AM | 每天特定时间重置 |
| 闲置 | 1440 分钟 | 闲置 N 分钟后重置 |
| 组合 | (综合) | 触发时更早的那个 |
可以在 ~/.hermes/gateway.json 中为每个平台配置覆盖:
{
"reset_by_platform": {
"telegram": {"mode": "idle", "idle_minutes": 240},
"discord": {"mode": "idle", "idle_minutes": 60}
}
}
后台会话
在独立的背景会话中运行任务,让 agent 独立工作而主聊天保持响应:
/background 检查集群中的所有服务器,报告任何宕机的服务器
Hermes 会立即确认:
🔄 Background task started: "检查集群中的所有服务器..."
Task ID: bg_143022_a1b2c3
后台任务完成时,结果会发送回同一聊天,前缀为 "✅ Background task complete"。
安全设置
默认情况下,网关拒绝所有不在白名单中或未通过 DM 配对的用户。 这是具有终端访问权限的机器人的安全默认设置。
用户白名单
# 限制特定用户(推荐):
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678
SIGNAL_ALLOWED_USERS=+155****4567,+155****6543
FEISHU_ALLOWED_USERS=ou_xxxxxxxx,ou_yyyyyyyy
# 或允许所有用户(不推荐):
GATEWAY_ALLOW_ALL_USERS=true
DM 配对(白名单的替代方案)
不需要手动配置用户 ID,未知用户在 DM 机器人时会收到一次性的配对码:
# 用户看到:"配对码: XKGH5N7P"
# 您批准他��:
hermes pairing approve telegram XKGH5N7P
# 其他配对命令:
hermes pairing list # 查看待批准 + 已批准用户
hermes pairing revoke telegram 123456789 # 移除访问权限
配对码 1 小时后过期,有速率限制,使用加密随机数。
消息平台支持
| 平台 | 语音 | 图片 | 文件 | 线程 | 表情 | 打字 | 流式 |
|------|------|------|------|------|------|------|------|
| Telegram | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ |
| Discord | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Slack | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| WhatsApp | — | ✅ | ✅ | — | — | ✅ | ✅ |
| Signal | — | ✅ | ✅ | — | — | ✅ | ✅ |
| 飞书/Lark | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 企业微信 | ✅ | ✅ | ✅ | — | — | ✅ | ✅ |
| 微信 | ✅ | ✅ | ✅ | — | — | ✅ | ✅ |
Web 界面
Hermes Agent 支持通过 Open WebUI 或 API Server 提供 Web 界面。
Open WebUI 集成
Open WebUI 是一个开源的 Web UI,可以连接到 Hermes 作为后端。
配置步骤:
- 首先在 Hermes 中配置 API 服务器
- 然后将 Open WebUI 连接到 Hermes
具体配置请参考官方文档:Open WebUI + API Server
API 服务器
Hermes 也提供 API 服务器模式,可以通过 HTTP API 访问。
Webhooks
Hermes 支持 Webhooks,可以接收外部 HTTP 请求触发。
具体配置请参考官方文档:Webhooks
---
飞书 / Lark 集成
Hermes Agent 可以作为飞书或 Lark 机器人进行集成,支持私聊和群聊、定时任务通知、文本/图片/音频/文件附件等。
连接模式
支持两种连接模式:
| 模式 | 说明 | 适用场景 |
|------|------|----------|
| websocket(推荐) | Hermes 主动建立出站连接,无需公网地址 | 笔记本、工作站、私有服务器 |
| webhook | 飞书推送事件到 Hermes 的 HTTP 端点 | 已有公网可访问的 HTTP 服务 |
步骤 1:创建飞书应用
方式一:扫码创建(推荐)
hermes gateway setup
选择 Feishu / Lark,使用飞书或 Lark 移动端应用扫描二维码。Hermes 会自动创建机器人应用并保存凭证。
方式二:手动创建
- 飞书:https://open.feishu.cn/
- Lark:https://open.larksuite.com/
- 打开飞书开发者控制台:
- 创建新应用
- 在 凭证与基础信息 中复制 App ID 和 App Secret
- 启用应用的 机器人 能力
- 运行
hermes gateway setup,选择 Feishu / Lark 并输入凭证
⚠️ 注意:请妥善保管 App Secret,拥有它的人可以冒充您的应用。
步骤 2:选择连接模式
WebSocket 模式(推荐)
当 Hermes 运行在笔记本、工作站或私有服务器时使用,无需公网 URL:
FEISHU_CONNECTION_MODE=websocket
要求:需要安装 websockets Python 包。SDK 会自动处理连接生命周期、心跳和自动重连。
Webhook 模式
仅当您已有可访问的 HTTP 端点时使用:
FEISHU_CONNECTION_MODE=webhook
在 webhook 模式下,Hermes 启动 HTTP 服务器(通过 aiohttp),端点路径为 /feishu/webhook。
可自定义 webhook 服务器配置:
FEISHU_WEBHOOK_HOST=127.0.0.1 # 默认:127.0.0.1
FEISHU_WEBHOOK_PORT=8765 # 默认:8765
FEISHU_WEBHOOK_PATH=/feishu/webhook # 默认:/feishu/webhook
步骤 3:配置 Hermes
方式一:交互式配置
hermes gateway setup
选择 Feishu / Lark 并按提示填写。
方式二:手动配置
在 ~/.hermes/.env 中添加:
FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=secret_xxx
FEISHU_DOMAIN=feishu
FEISHU_CONNECTION_MODE=websocket
# 可选但强烈推荐
FEISHU_ALLOWED_USERS=ou_xxx,ou_yyy
FEISHU_HOME_CHANNEL=oc_xxx
FEISHU_DOMAIN 取值:
feishu- 飞书(中国)lark- Lark(国际版)
步骤 4:启动网关
hermes gateway
然后从飞书/Lark 给机器人发送消息,确认连接正常。
行为说明
| 场景 | 行为 |
|------|------|
| 私聊 | Hermes 响应每条消息 |
| 群聊 | 仅当 @提及 机器人时响应 |
| 共享群聊 | 默认每个用户有独立的会话历史 |
共享群聊行为可通过 config.yaml 控制:
group_sessions_per_user: true
设为 false 则整个群聊共享一个对话。
安全设置
用户白名单
生产环境建议设置飞书 Open ID 白名单:
FEISHU_ALLOWED_USERS=ou_xxx,ou_yyy
如果白名单为空,任何能访问机器人的用户都可以使用它。
Webhook 加密密钥
在 webhook 模式下,设置加密密钥以启用签名验证:
FEISHU_ENCRYPT_KEY=your-encrypt-key
此密钥可在飞书应用配置的 事件订阅 部分找到。
验证令牌
额外的身份验证层:
FEISHU_VERIFICATION_TOKEN=your-verification-token
群消息策略
FEISHU_GROUP_POLICY 环境变量控制群聊响应行为:
| 值 | 行为 |
|------|------|
| open | 响应任何用户在任何群中的 @提及 |
| allowlist | 仅响应白名单用户的 @提及(默认) |
| disabled | 忽略所有群消息 |
Home Chat(主页聊天)
在飞书/Lark 聊天中使用 /set-home 将其标记为定时任务结果和跨平台通知的主页频道。
也可以预配置:
FEISHU_HOME_CHANNEL=oc_xxx
交互式卡片操作
当用户点击机器人发送的交互式卡片按钮时,适配器将其路由为 /card 命令事件。
必须的飞书应用配置(交互式卡片):
交互式卡片需要在飞书开发者控制台完成 三项 配置:
- 订阅卡片操作事件:在 事件订阅 中添加
card.action.trigger
- 启用交互式卡片能力:在 应用功能 > 机器人 中启用 消息卡片 开关
- 配置卡片请求 URL(仅 webhook 模式):在 应用功能 > 机器人 > 消息卡片请求 URL 设置与事件 webhook 相同的端点
⚠️ 警告:缺少任何配置都会导致点击卡片按钮时返回错误 200340。
媒体支持
接收媒体
| 类型 | 扩展名 | 处理方式 |
|------|--------|----------|
| 图片 | .jpg, .jpeg, .png, .gif, .webp, .bmp | 通过飞书 API 下载并缓存 |
| 音频 | .ogg, .mp3, .wav, .m4a, .aac, .flac, .opus, .webm | 下载并缓存 |
| 视频 | .mp4, .mov, .avi, .mkv, .webm, .m4v, .3gp | 作为文档下载缓存 |
| 文件 | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx 等 | 作为文档下载缓存 |
发送媒体
| 方法 | 发送内容 |
|------|----------|
| send | 文本或富文本消息 |
| send_image / send_image_file | 图片气泡(可选标题) |
| send_document | 文件附件 |
| send_voice | 音频文件附件 |
| send_video | 视频消息 |
Markdown 渲染
当输出文本包含 markdown 格式时,适配器会自动将其作为飞书 帖子 消息发送,支持富文本渲染。
如果飞书 API 拒绝帖子内容,会自动回退为纯文本发送。
ACK 表情反应
适配器收到消息后会立即添加 ✅ 表情反应,表示消息已接收并正在处理。
环境变量完整列表
| 变量 | 必需 | 默认值 | 说明 |
|------|------|--------|------|
| FEISHU_APP_ID | ✅ | — | 飞书/Lark App ID |
| FEISHU_APP_SECRET | ✅ | — | 飞书/Lark App Secret |
| FEISHU_DOMAIN | — | feishu | feishu(中国)或 lark(国际) |
| FEISHU_CONNECTION_MODE | — | websocket | websocket 或 webhook |
| FEISHU_ALLOWED_USERS | — | (空) | 用户白名单 Open ID,逗号分隔 |
| FEISHU_HOME_CHANNEL | — | — | 定时任务/通知输出的聊天 ID |
| FEISHU_ENCRYPT_KEY | — | (空) | Webhook 签名验证加密密钥 |
| FEISHU_VERIFICATION_TOKEN | — | (空) | Webhook 载荷验证令牌 |
| FEISHU_GROUP_POLICY | — | allowlist | 群消息策略:open、allowlist、disabled |
| FEISHU_BOT_OPEN_ID | — | (空) | 机器人的 open_id(用于 @提及 检测) |
| FEISHU_BOT_NAME | — | (空) | 机器人显示名称 |
| FEISHU_WEBHOOK_HOST | — | 127.0.0.1 | Webhook 服务器绑定地址 |
| FEISHU_WEBHOOK_PORT | — | 8765 | Webhook 服务器端口 |
| FEISHU_WEBHOOK_PATH | — | /feishu/webhook | Webhook 端点路径 |
故障排除
| 问题 | 解决方案 |
|------|----------|
| lark-oapi not installed | 安装 SDK:pip install lark-oapi |
| websockets not installed | 安装:pip install websockets |
| aiohttp not installed | 安装:pip install aiohttp |
| 机器人不在群聊中响应 | 确保机器人被 @提及,检查 FEISHU_GROUP_POLICY 和白名单 |
| Webhook rejected: invalid verification token | 确保 FEISHU_VERIFICATION_TOKEN 匹配飞书应用配置 |
| Webhook rejected: invalid signature | 确保 FEISHU_ENCRYPT_KEY 匹配飞书应用配置 |
| 图片/文件未被机器人接收 | 为飞书应用授予 im:message 和 im:resource 权限 |
| 错误 200340(点击按钮) | 启用交互式卡片能力并配置卡片请求 URL |
---
从 OpenClaw 迁移
如果您之前使用 OpenClaw,可以自动迁移设置:
# 交互式迁移
hermes claw migrate
# 预览迁移内容
hermes claw migrate --dry-run
# 仅迁移用户数据(不含密钥)
hermes claw migrate --preset user-data
# 覆盖已存在的内容
hermes claw migrate --overwrite
迁移内容包括:
- SOUL.md(个性文件)
- 记忆(MEMORY.md 和 USER.md)
- 技能
- 命令白名单
- 消息设置
- API 密钥
- TTS 资源
项目结构
~/.hermes/
├── config.yaml # 主配置文件
├── memories/ # 持久化记忆
├── skills/ # 用户技能
├── sessions/ # 会话历史
└── context/ # 上下文文件
故障排除
常见问题
- 命令未找到
source ~/.zshrc
# 或重新打开终端
- Python 版本问题
# 检查 Python 版本
python3 --version
# 使用指定版本
uv venv venv --python 3.11
- 权限问题
# 确保脚本有执行权限
chmod +x ~/.hermes/scripts/*
诊断工具
hermes doctor
相关链接
- 📚 官方文档
- 💬 Discord 社区
- 🐛 问题反馈
- 💡 讨论区
- 🔌 Skills Hub
- 📦 GitHub 仓库
许可证
MIT License — 详见 LICENSE。
本文链接:https://www.choudalao.com/article/355
转载请注明来源,感谢尊重原创内容。
留言评论
支持表情、回复和点赞。评论需要先登录。