Hermes Agent 完全指南:Architecture, QQ Bot, Skills & More
一、引言
在 AI Agent 工具百花齐放的 2025–2026 年,开发者面临着一个新的问题:哪个 Agent 框架真正能干活?
Claude Code 强在代码理解、Codex 强在 IDE 集成,但它们都有一个共同的局限——只能活在终端里。而实际工作中,消息通知、定时任务、团队协作、跨平台响应……这些场景需要一个能「无处不在」的 Agent。
Hermes Agent 正是为此而生。它不是另一个聊天机器人,而是一个多网关、可扩展、自学习的 AI Agent 运行时——同一个 Agent 实例,可以同时运行在 Telegram、QQ、Discord、Slack、终端、Web API 等十余个平台上,共享配置、记忆和技能。
本文将从架构设计出发,深入 Hermes Agent 的核心机制,并给出完整的 QQ Bot 配置实战。
二、架构概览:Hermes 是如何运行的?
2.1 核心循环(Agent Loop)
Hermes 的核心是一个同步循环(run_agent.py → AIAgent.run_conversation()),逻辑非常清晰:
1 | while 迭代次数 < max_turns: |
这个设计的精妙之处在于纯同步、无事件循环——它不需要 asyncio,不需要消息队列,所有工具调用都是顺序执行的。这让调试和追踪变得极其简单。
2.2 工具注册机制
每个工具都是一个独立文件(tools/*.py),在模块导入时调用 registry.register() 注册自身:
1 | from tools.registry import registry |
工具默认自动发现——tools/ 目录下任何包含 registry.register() 的 .py 文件都会被自动导入。这意味着添加一个新工具只需要创建 一个文件,不需要修改任何注册表。
2.3 提示缓存(Prompt Caching)
Hermes 对 Anthropic 的 prompt caching 有深度集成。关键规则:
- 会话中不变更 system prompt 和 tools——这确保缓存可以被复用
- 不插入两段连续的 assistant 或 user 消息(OpenAI 格式要求交替)
- 上下文压缩在后台自动触发,降低 token 消耗
2.4 上下文压缩
当上下文使用率超过 compression.threshold(默认 50%)时,会自动触发压缩:
- 将早期对话用 LLM 摘要替换
- 保护最近 N 条消息不被压缩(
protect_last_n: 20) - 压缩后目标比例
target_ratio: 0.20(20%)
三、安装与配置
3.1 快速安装
1 | # 一键安装(推荐) |
3.2 初始化设置
安装后,运行交互式设置向导:
1 | hermes setup |
这会引导你完成:
- 模型提供商选择——OpenRouter、Anthropic、OpenAI、DeepSeek 等
- API Key 配置——写入
~/.hermes/.env - 工具集启用——终端、浏览器、文件系统等
- 平台网关设置——Telegram、QQ、Discord 等
也可以单独配置特定组件:
1 | hermes setup model # 只配置模型 |
3.3 手动配置
配置文件位于 ~/.hermes/config.yaml,核心结构:
1 | model: |
API Key 存储在 ~/.hermes/.env(不提交到 Git):
1 | OPENROUTER_API_KEY=sk-or-v1-... |
3.4 模型提供商支持
Hermes 支持 20+ 个模型提供商,可通过 hermes model 随时切换:
| 提供商 | 认证方式 | 环境变量 |
|---|---|---|
| OpenRouter | API Key | OPENROUTER_API_KEY |
| Anthropic | API Key | ANTHROPIC_API_KEY |
| OpenAI Codex | OAuth | hermes auth |
| DeepSeek | API Key | DEEPSEEK_API_KEY |
| Google Gemini | API Key | GOOGLE_API_KEY |
| GitHub Copilot | OAuth 设备流 | hermes model 中交互式登录 |
| 智谱 GLM (Z.AI) | API Key | ZAI_API_KEY |
| MiniMax | API Key | MINIMAX_API_KEY |
| Kimi / Moonshot | API Key | KIMI_API_KEY |
| 阿里 DashScope | API Key | DASHSCOPE_API_KEY |
| 小米 MiMo | API Key | XIAOMI_API_KEY |
| Hugging Face | Token | HF_TOKEN |
| 自定义端点 | Config | 在 config.yaml 中设置 base_url + api_key |
切换模型非常简单:
1 | hermes model # 交互式选择 |
四、QQ Bot 配置实战
这是最具实用价值的功能——将 Hermes Agent 接入 QQ,让它能在 QQ 群和私聊中直接响应。
4.1 前置准备
1. 注册 QQ 机器人
前往 q.qq.com 创建应用:
- 登记 App ID 和 App Secret(AppSecret)
- 开启必要的 Intents:C2C 消息、群 @消息
- 开发模式下只能在沙箱频道测试,发布后才能在生产环境使用
2. 安装依赖
1 | pip install aiohttp httpx |
aiohttp 用于 WebSocket 长连接(接收消息),httpx 用于 REST API 调用(发送消息)。
4.2 配置方法
方式一:交互式配置(推荐)
1 | hermes setup gateway |
选择 QQ Bot,按提示输入 App ID 和 App Secret 即可。
方式二:手动配置环境变量
编辑 ~/.hermes/.env:
1 | QQ_APP_ID=1903937598 |
方式三:手动配置 config.yaml
编辑 ~/.hermes/config.yaml,添加:
1 | platforms: |
同时新增 platform_toolsets 条目:
1 | platform_toolsets: |
4.3 环境变量参考
| 变量 | 说明 | 默认值 |
|---|---|---|
QQ_APP_ID |
QQ Bot App ID(必填) | — |
QQ_CLIENT_SECRET |
QQ Bot App Secret(必填) | — |
QQBOT_HOME_CHANNEL |
定时任务/通知的默认 OpenID | — |
QQ_ALLOWED_USERS |
允许私聊的用户 OpenID(逗号分隔) | open |
QQ_ALLOW_ALL_USERS |
是否允许所有用户私聊 | false |
QQ_MARKDOWN_SUPPORT |
启用 Markdown 消息格式 | true |
QQ_STT_API_KEY |
语音转文字 API Key | — |
QQ_STT_MODEL |
语音识别模型 | glm-asr |
4.4 启动网关
1 | # 前台运行(调试用) |
服务启动后,你的 QQ Bot 就能在群里被 @ 时或私聊中自动响应了。
4.5 语音消息支持
QQ Bot 适配器支持两级语音转文字:
- QQ 内置 ASR(免费,优先使用)——QQ 会在语音消息附件中附带
asr_refer_text字段 - 配置的 STT 提供商(备选)——如果 QQ 内置 ASR 没返回文字,会调用 OpenAI 兼容接口:
1 | platforms: |
也可以通过环境变量配置:
1 | QQ_STT_API_KEY=your-key |
4.6 常见问题
Q: Bot 连上就断开?
A: 检查 App ID 和 Secret 是否正确,以及 Intents 是否已开启。
Q: 消息收不到?
A: 群消息需要 @Bot 才能触发响应;沙箱模式下只能接收沙箱频道消息。
Q: 如何重置连接?
A: 在 QQ 聊天中发送 /restart 重启网关。
Q: 查看日志
A: tail -f ~/.hermes/logs/gateway.log | grep qq
五、技能系统(Skills):让 Agent 自我进化
5.1 什么是技能?
技能是可复用的过程性知识。当 Hermes 完成一个复杂任务、解决一个棘手 Bug、或者你纠正了它的某个做法时,它可以把这些经验保存为技能。下次遇到类似任务时,技能会自动加载。
技能本质上是 Markdown 文件(SKILL.md),存储在 ~/.hermes/skills/:
1 | --- |
5.2 技能管理命令
1 | hermes skills list # 列出已安装技能 |
5.3 技能自动加载
Hermes 在执行任何任务前,会扫描所有技能描述,如果发现与当前任务相关的技能,会自动加载其内容。这意味着:
- 技能越多,Hermes 在你特定领域的表现就越好
- 常犯的错误只需要纠正一次,技能就会记住
- 团队内可以共享技能库
5.4 实际技能示例
以我们实际配置的 QQ Bot 为例,以下是 Hermes 记住的关键技能:
| 技能 | 用途 |
|---|---|
test-driven-development |
测试驱动开发流程 |
systematic-debugging |
系统化调试方法 |
hexo-blog-management |
Hexo 博客管理和部署 |
github-pr-workflow |
GitHub PR 全流程 |
px4-drone-simulation-v1-16-0 |
PX4 无人机仿真环境搭建 |
writing-plans |
复杂任务的前期规划 |
六、跨平台网关详解
6.1 支持的平台
Hermes 的网关架构使其能在同一实例上同时接入多个平台:
| 平台 | 状态 | 工具集 |
|---|---|---|
| 终端 (CLI) | ✅ 内置 | hermes-cli |
| Telegram | ✅ 完整支持 | hermes-telegram |
| QQ Bot | ✅ 完整支持 | hermes-qqbot |
| Discord | ✅ 完整支持 | hermes-discord |
| Slack | ✅ 完整支持 | hermes-slack |
| ✅ 完整支持 | hermes-whatsapp |
|
| Signal | ✅ 完整支持 | hermes-signal |
| Email (IMAP/SMTP) | ✅ 完整支持 | — |
| SMS | ✅ 完整支持 | — |
| Matrix | ✅ 完整支持 | — |
| Mattermost | ✅ 完整支持 | — |
| Home Assistant | ✅ 智能家居 | hermes-homeassistant |
| 飞书 / 钉钉 / 企业微信 | ✅ 支持 | — |
| Web API Server | ✅ RESTful | — |
| Webhooks | ✅ 事件驱动 | — |
6.2 平台工具集隔离
不同平台可以有不同的可用工具集。例如:
1 | platform_toolsets: |
6.3 网关常用命令
在任意平台聊天中发送:
1 | /platforms # 查看所有平台连接状态 |
七、其他核心功能
7.1 持久记忆系统
Hermes 具有跨会话的持久记忆,分为两个存储:
- memory(个人笔记)——环境信息、工具偏见、项目约定
- user(用户画像)——姓名、偏好、编码风格、沟通习惯
每次对话开始时,记忆自动注入 system prompt。这意味着 Hermes 会用你特有的偏好和方式工作,即使跨越多天。
支持多种记忆后端:
- 内置(默认)
- Honcho 记忆服务器
- Mem0
- 自定义后端(通过插件)
7.2 定时任务(Cron)
1 | # 创建定时任务 |
定时任务支持完整的工具访问——你可以让 Hermes 每天自动备份数据库、每周生成项目周报、或者定时检查网站健康状态。
7.3 Webhooks
1 | hermes webhook subscribe myhook # 创建 /webhooks/myhook 端点 |
Webhook 端点接收 POST 请求后会自动启动一个 Hermes 会话处理,适合 CI/CD 触发、GitHub Webhook 集成等场景。
7.4 委派任务(Delegation)
对于需要独立上下文的复杂子任务,Hermes 可以委派子 Agent处理:
1 | # 内部机制——用户可以自然语言触发 |
每个子 Agent 获得独立的会话和工具环境,互不干扰。支持配置独立的模型和提供商:
1 | delegation: |
7.5 配置文件(Profiles)
通过 Profiles 可以运行多个完全隔离的 Hermes 实例:
1 | hermes profile create work --clone # 从当前配置克隆 |
每个 Profile 有独立的 config.yaml、.env、skills/、sessions/。适合区分工作/个人用途。
八、语音功能
8.1 语音合成(TTS)
| 提供商 | 免费? | 环境变量 |
|---|---|---|
| Edge TTS | ✅ 免费(默认) | 无 |
| ElevenLabs | 有免费额度 | ELEVENLABS_API_KEY |
| OpenAI TTS | 付费 | VOICE_TOOLS_OPENAI_KEY |
| MiniMax | 付费 | MINIMAX_API_KEY |
| NeuTTS(本地) | ✅ 免费 | 需安装 pip install neutts[all] |
8.2 语音识别(STT)
| 提供商 | 免费? | 环境变量 |
|---|---|---|
| Local faster-whisper | ✅ 免费 | pip install faster-whisper |
| Groq Whisper | 有免费额度 | GROQ_API_KEY |
| OpenAI Whisper | 付费 | VOICE_TOOLS_OPENAI_KEY |
| GLM-ASR(智谱) | — | QQ_STT_API_KEY(QQ Bot 专用) |
九、真实部署经验
9.1 在 WSL2 上部署的注意事项
部署在 WSL2 Ubuntu 22.04 环境,以下经验可供参考:
- Systemd 支持——确保
/etc/wsl.conf包含systemd=true,否则网关服务无法持久运行 - WSL2 会话关闭——关闭 WSL2 终端会导致 gateway 进程被杀死,可通过
sudo loginctl enable-linger $USER启用 linger - Windows 编码问题——Windows 编辑的
config.yaml可能带 BOM 头,导致 HTTP 400 “No models provided” 错误。确保保存为 UTF-8 without BOM
9.2 Gateway 日志分析
1 | # 查看最近错误 |
9.3 安全机制
- 命令审批——危险操作(删除文件、系统配置修改)需要用户确认
- Tirith 策略引擎——可配置安全策略,自动阻止特定操作
- 平台隔离——不同平台的工具集可独立配置,Telegram 和 QQ 可以有不同权限
十、总结
Hermes Agent 区别于其他 AI Agent 的关键在于:
- 多网关架构——同一个 Agent 同时在终端、QQ、Telegram、Discord 等平台运行
- 自学习能力——通过 Skills 系统积累经验,越用越好用
- Provider 无关——随时切换模型提供商,不被任何一家锁定
- 持久记忆——跨会话记住用户偏好和环境信息
- 企业级功能——Cron 定时任务、Webhook 事件驱动、Profile 多环境隔离
从实际使用体验来看,Hermes Agent 最实用的场景是:
- 日常开发——通过 QQ/Telegram 随时发起任务,无需打开终端
- 运维监控——结合 Cron + QQ Bot,自动巡检并推送告警
- 团队协作——在群聊中被 @ 即可执行任务,结果直接回复到群里
附录:相关资源
- GitHub 仓库:https://github.com/NousResearch/hermes-agent
- 官方文档:https://hermes-agent.nousresearch.com/docs/
- QQ Bot 平台:https://q.qq.com
- QQ Bot API 文档:https://bot.q.qq.com/wiki/develop/api-v2/
- 技能中心:
hermes skills browse
本文 Hermes Agent 部分基于 v2.0 版本编写,实际功能以最新版本为准。QQ Bot 配置部分基于实际部署经验。