Hermes Agent 接入 QQ Bot 的完整实战

Hermes Agent接入消息平台

Hermes Agent 是一个支持多平台交互的开源 AI Agent 系统。它通过统一的 Messaging Gateway 接入不同的消息平台,让用户能够在日常使用的聊天应用中与 Agent 交互,并复用 Hermes 的意图理解、工具调用、Skill 执行和记忆管理等能力。

目前,Hermes 官方文档列出了 27+ 个消息平台及相关集成渠道,主要包括:

  • 海外即时通信平台:Telegram、Discord、Slack、WhatsApp、Signal、Matrix、Mattermost、LINE、SimpleX。
  • 国内办公与社交平台:QQ Bot、飞书(Feishu/Lark)、钉钉(DingTalk)、企业微信(WeCom)、微信(Weixin)、腾讯元宝(Yuanbao)。
  • 企业协作平台:Microsoft Teams、Google Chat。
  • 其他消息与通知渠道:Email、SMS、ntfy、Home Assistant、BlueBubbles(iMessage)、Webhooks 等。
  • 其他集成入口:Microsoft Graph Webhook、Microsoft Teams Meetings、Open WebUI 等

本文以 QQ Bot 为例,介绍如何将 Hermes Agent 接入 QQ。整个过程并不是简单地把 QQ 消息转发给大模型,而是新增一条消息平台适配链路:QQ 负责消息入口和出口,Hermes Gateway 负责平台连接、事件分发与 Agent 调度,Agent 负责实际任务执行。

本文基于 Docker 部署的 Hermes Agent,结合实际操作和容器内源码,梳理 QQ Bot 的配置、适配器初始化、Token 认证、WebSocket 连接与故障排查流程。

整体架构:从 QQ 消息到 Agent 回复

Hermes 的 QQ 适配器使用官方 QQ Bot API v2。根据本次检查的源码,入站事件通过 WebSocket 接收,出站消息通过 REST API 发送。

里有三个需要重点理解的组件:

  • QQAdapter:负责 QQ 协议交互,包括获取 Token、建立 WebSocket 连接、处理入站事件和发送消息。
  • GatewayRunner:负责平台适配器的注册、生命周期管理,以及消息向 Agent 执行流程的分发。
  • Agent 执行循环:接收消息后,根据模型决策调用可用工具或 Skill,完成任务后返回结果。

因此,接入 QQ 不需要重写 Agent 核心逻辑。只要平台适配器能够将 QQ 消息转换为 Hermes 的统一消息事件,并将 Agent 回复发送回 QQ,就能复用现有的 Agent 能力。

通过 hermes gateway setup 配置 QQ Bot

完成 Hermes 的基础配置和模型验证后,就可以通过官方提供的交互式向导配置消息平台。

复制代码
hermes gateway setup

如果 Hermes 部署在 Docker 容器中,可以在宿主机执行:

复制代码
docker exec -it hermes-agent /opt/hermes/.venv/bin/hermes gateway setup

该命令用于配置消息平台,不是重新配置大模型,也不是安装 Skill。Hermes 会展示平台菜单、当前配置状态,并在配置结束后提示启动或重启 Gateway。

配置 QQ Bot

获取 AppID 和 AppSecret

首先在 QQ 开放平台 创建或进入机器人应用,获取对应的 AppID 和 AppSecret。

确认容器内的配置文件

本次部署中,Hermes 的数据目录是 /opt/data,凭证保存在:

复制代码
/opt/data/.env

需要注意,容器里的 .env 文件和 Docker 启动时注入的环境变量并不是一回事。Hermes 会在自身启动流程中加载 dotenv 文件;单独执行 docker exec ... python3 启动的进程,并不一定会自动加载该文件。

因此,检查独立进程的 os.environ,不能直接证明 Gateway 进程读取到的值是什么。

配置环境变量

在 /opt/data/.env 中配置:

复制代码
QQ_APP_ID=你的_APPID
QQ_CLIENT_SECRET=你的_APPSECRET

可以使用脚本修改文件,但要注意三个问题:

  1. 同一个变量只保留一条有效配置,避免重复项造成维护和排查困难。
  2. 修改前备份文件,并将权限限制为当前部署所需的最小范围。

Hermes 如何加载并启用 QQ 平台

环境变量如何进入配置

相关文件:

复制代码
/opt/hermes/hermes_cli/env_loader.py
/opt/hermes/gateway/config_env.py
/opt/hermes/gateway/config.py

在 gateway/run.py 的启动流程中,Hermes 会调用 load_hermes_dotenv() 加载环境配置。env_loader.py 负责读取 .env 等配置来源;config_env.py 则负责将环境变量映射到 Gateway 的平台配置。

QQ 对应的映射定义位于 config_env.py 的 _ENV_STEPS 配置中,核心结构为:

复制代码
_Cred(
    Platform.QQBOT,
    (("QQ_APP_ID", "QQ_CLIENT_SECRET"),),
    optional=(
        ("app_id", "QQ_APP_ID"),
        ("client_secret", "QQ_CLIENT_SECRET"),
    ),
    then=_qq_home,
)

这里的 optional 表示把存在的环境变量映射到平台配置的 extra 字典中。_Cred 还会通过 _enable_from_env() 处理平台启用逻辑。

需要注意:这段定义中的凭证分组允许候选变量中的任意一个满足启用分支的条件,并不等于它已经验证了两个凭证都有效。真正建立 QQ 连接时,AppID 和 AppSecret 仍然都必须可用。

PlatformConfig 的 from_dict() 会将平台配置中的非固定字段归入 extra,而 QQ 适配器正是通过 config.extra 读取这些参数。

QQAdapter 如何被注册

核心文件:

复制代码
/opt/hermes/gateway/run.py

在 _BUILTIN_ADAPTERS 中,QQ 平台注册关系为:

复制代码
Platform.QQBOT: (
    "qqbot",
    "QQAdapter",
    "check_qq_requirements",
    "QQBot: aiohttp/httpx missing or QQ_APP_ID/QQ_CLIENT_SECRET not configured",
)

Gateway 通过这个注册表找到 QQ 适配器,并检查它所需的依赖。

QQ 适配器的实现文件是:

复制代码
/opt/hermes/gateway/platforms/qqbot/adapter.py

初始化时,适配器会优先读取平台配置中的 extra.app_id 和 extra.client_secret;如果对应值不存在,再通过 _resolve_qq_secret() 解析环境或当前 Profile 的密钥。

这意味着,排查凭证问题时不能只看 .env 文件,还要确认最终进入适配器的值来自哪里。

platform_toolsets 的作用

本次配置中已经存在:

复制代码
platform_toolsets:
  qqbot: [hermes-qqbot]

它控制的是 QQ 平台上 Agent 可以使用的工具集合,而不是 QQ 连接本身。

可以将这几个概念区分开:

  • 凭证配置:决定是否具备访问 QQ API 的必要信息。
  • 平台启用和适配器注册:决定 Gateway 是否尝试启动 QQ 通道。
  • platform_toolsets:决定 QQ 对话中的 Agent 可以使用哪些工具。

三者共同影响接入结果,但不能互相替代。

测试验证

相关推荐
supabc1232 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
热心网友俣先生2 小时前
2026年MathorCup大数据竞赛选题推荐
数学建模·1024程序员节
Zhu7582 小时前
供暖优化方案-济南市-2026
1024程序员节
abckingaa2 小时前
AI时代代码Review瓶颈分析
人工智能·ai编程·1024程序员节
活文字3 小时前
国家疾控局等部署2026—2027流感季:农村“一老一小”可免费接种
资讯·1024程序员节·商业·产业
Together_CZ3 小时前
Introducing Kimi K3.1 Pro——隆重推出 Kimi K3.1 Pro
llm·agent·强化学习·1024程序员节·kimi·kimi k3.1 pro·3t参数
acd120093 小时前
负载均衡的 “粘性会话”,什么时候不该开
1024程序员节
我喜欢就喜欢3 小时前
豆包赋能抖音内容创作与运营实战指南
人工智能·1024程序员节
奕鼎竜瑆3 小时前
「蚂蚁灵波具身大模型挑战赛」上篇 | 从零到 56.8%:一个人、一张卡、一场具身智能比赛的完整配置
1024程序员节