微信接入 Hermes:别只会装包,关键是把 Agent 调到能用
你大概率也是这种路径:
- 看到“微信支持接入 Hermes 了”
- 心想:爽了,我也搞个聊天机器人
- 跑起来后发现:Agent 在微信群里像喝醉了一样,乱回、刷屏、答非所问 🙃
接入不难,难的是让它像个合格的群友。
下面按“能跑 → 能用 → 不惹人烦”的节奏来。
友情提醒:微信自动化/机器人可能涉及平台规则与风控,别拿主号硬刚。建议小号测试、控制频率、别做营销群发。
你需要准备什么
- 一台能常驻运行的机器(本地电脑也行,想稳定就上云服务器)
- Hermes(升级到最新版)
- 微信接入层(常见做法是基于 WeChaty 这类生态)
- 一个可用的模型 API(OpenAI/通义/智谱/本地模型都行)
Hermes 的“接入微信”通常长这样:
微信消息 → 连接器(适配微信协议)→ Hermes(Agent/工具调用/记忆)→ 回复回微信
Step 1:把 Hermes 升到最新版(别偷懒)
很多“接入失败”“插件加载不了”都不是你代码问题,纯粹版本太老。
如果你用的是 Node.js 生态(很多微信机器人绕不开):
# 升级 Hermes CLI(示例写法,按你实际安装方式调整)
npm i -g hermes@latest
# 验证版本
hermes --version
如果你用的是 Python 生态:
pip install -U hermes
hermes --version
你电脑里到底装的是哪个 Hermes 发行包,以你项目文档为准。别纠结,核心动作就一个:升级到最新,并确认版本输出。
Step 2:装“两个微信包”(常见就是这套)
你看到的“装两个包就可以”,一般指:
- 一个是 WeChaty(机器人框架)
- 一个是 Puppet(具体的微信适配器/驱动)
以 Node.js 为例(最常见):
# 项目目录
npm i wechaty
# puppet 根据你选的通道装一个(这里只示例常见命名)
npm i wechaty-puppet-wechat
然后再装 Hermes 的微信连接器(如果 Hermes 官方/社区提供了 adapter):
# 名字按你用的仓库为准,这里是示意
npm i hermes-adapter-wechat
装完后做一件事:把依赖锁住,别今天能跑明天炸。
npm ci
Step 3:写个“最小可跑”的微信 + Hermes Demo
别一上来就整什么多工具、多角色、多记忆。你先让它:
- 能扫码登录
- 能收到消息
- 能把消息丢给 Hermes
- 能把 Hermes 的回答发回去
下面给一个偏“骨架”的示例,方便你对照结构(你需要把其中 Hermes 调用部分替换成你实际项目的 SDK/HTTP 接口)。
目录建议
.
├── .env
├── bot.ts
└── package.json
.env(别把 key 写死在代码里)
MODEL_API_KEY=你的key
MODEL_BASE_URL=你的模型网关(可选)
HERMES_AGENT_ID=wechat-assistant
WECHAT_PUPPET=wechaty-puppet-wechat
bot.ts(关键逻辑:过滤 + 路由 + 限流)
import 'dotenv/config'
import { Wechaty } from 'wechaty'
// 这里用一个假函数表示 Hermes 调用
async function callHermes(input: string, ctx: { from: string; room?: string }) {
// 你可以换成:Hermes SDK / HTTP / WebSocket
// 建议传入:用户id、群id、会话id、消息文本、时间
return `(Hermes示例回复)你刚说的是:${input}`
}
function shouldReply(text: string) {
// 群里别当复读机:只有被@ 或者以特定指令开头才回
return text.startsWith('/ai') || text.includes('@你的机器人名')
}
// 简单限流:同一个人 3 秒内只回一次,避免风控也避免刷屏
const lastReplyAt = new Map<string, number>()
function rateLimit(key: string, ms: number) {
const now = Date.now()
const last = lastReplyAt.get(key) || 0
if (now - last < ms) return false
lastReplyAt.set(key, now)
return true
}
const bot = new Wechaty({
puppet: process.env.WECHAT_PUPPET,
})
bot.on('scan', (qrcode) => {
console.log('扫码登录:', qrcode)
})
bot.on('login', (user) => {
console.log('登录成功:', user.name())
})
bot.on('message', async (msg) => {
try {
const text = msg.text().trim()
const from = msg.talker()
const room = msg.room()
// 过滤自己发的
if (msg.self()) return
// 空消息别处理
if (!text) return
// 群聊策略:不被点名就装死
if (room) {
if (!shouldReply(text)) return
}
// 限流
const key = `${from.id}-${room?.id || 'dm'}`
if (!rateLimit(key, 3000)) return
// 清理指令前缀
const cleaned = text.replace(/^\/ai\s*/i, '').replace(/@你的机器人名/g, '').trim()
const reply = await callHermes(cleaned, {
from: from.id,
room: room?.id,
})
// 兜底:别发空
if (!reply?.trim()) return
await msg.say(reply)
} catch (e) {
console.error('处理消息失败:', e)
}
})
bot.start()
跑起来:
npx ts-node bot.ts
你如果不用 ts-node,就把它改成 JS 或者用构建工具编译。重点是逻辑,不是工具。
Step 4:把 Agent 调到“在微信里能活下去”
你会很快遇到一个现实:
在网页对话里看着还行的 Agent,丢进微信,体验直接崩。
原因也很简单:微信聊天更碎、更吵、上下文更乱。
1)群聊只在被点名时说话
不然它会变成“群里最吵的人”。
建议规则:
- 群聊:仅在被 @ 时回复
- 或者:只认
/ai、/问这种前缀 - 私聊:正常对话
2)回复要短,默认两三句话
微信不是写论文的地方。
建议在系统提示词里加这种约束:
- 默认不超过 120 字
- 需要列步骤就用 3~5 条
- 有不确定就直说,并给一个可验证的方法
3)给它“拒答边界”,别硬编
群友最烦两件事:
- 一本正经胡说八道
- 明明不知道还要装懂
给 Agent 加一句:
- 不确定就问一个澄清问题
- 没把握就说“我不确定”,并给查询建议
4)把记忆做成“轻量的”,别什么都存
微信里存全量聊天记录很危险:
- 隐私风险
- 成本爆炸
- 还容易越聊越跑偏
更稳的做法:
- 每个用户/每个群维护一段“短记忆摘要”(比如 500~1000 字)
- 只保存任务、偏好、正在进行的事项
Step 5:加 3 个“保命功能”,不然迟早翻车
1)风控友好:限频 + 随机延迟
- 同一个人 3~5 秒内最多回一次
- 群聊里加一点随机延迟(200~800ms),别像机器
2)敏感词与指令白名单
别让它变成“群里万能执行器”。
建议只开放:
/ai 问题/总结(总结最近 20 条)/待办(把聊天里提到的事情整理成待办)
涉及转账、链接、拉人、下载文件这类,一律拒。
3)失败兜底:模型挂了也要体面
模型超时/接口报错时:
- 回一句短的:“我这边卡住了,等会再问一次。”
- 同时把错误写日志,别在群里输出堆栈
常见翻车清单(真的很常见)
- 扫码能登,过一会掉线:心跳/重连没做,或者 puppet/协议不稳定。加重连策略,别指望永远不掉。
- 群里疯狂插话:没做“@ 才回”或“指令前缀”。这是新人必踩坑。
- 上下文混乱:把不同人的消息塞进同一个会话。按“群ID + 用户ID”切会话。
- 回复越来越长:没限制输出长度。给 prompt 加硬约束。
- 被风控:高频发消息、深夜群发、复制粘贴一模一样的话。限流+随机延迟+少说话。
- 以为接入了就能爽用:醒醒,Agent 在微信这种场景,本来就难。你得把它当产品打磨。
一个更接近“能用”的玩法:微信只做入口,重活交给工具层
别什么都在聊天框里解决。
更舒服的组合:
- 微信里:收集需求、给短答复、发链接
- Web/飞书文档里:长内容(报告、表格、方案)
- 后台工具层:RAG 检索、任务队列、日志、监控
这样你每天能少踩一堆坑,真的。
你可以直接照抄的“群聊提示词”模板
把它塞进 Hermes 的系统提示词或 agent 配置里(按你的 Hermes 配置方式落地):
你在微信群里提供帮助。
规则:
- 默认用中文,语气像正常群友,别端着。
- 回复尽量短:默认不超过120字,必要时用3-5条要点。
- 群聊只有在被@或收到以 /ai 开头的消息时才回应。
- 不确定就直接说不确定,并提出一个澄清问题或给出可验证方法。
- 不做任何拉人、推广、转账、外链诱导。
- 遇到争吵/情绪对立,优先降温,给出中立建议。
输出格式:
- 先给结论,再给操作步骤。
结语:能接入只是及格线,能“像人一样聊天”才算赢
“升级 Hermes + 装两个微信包”确实能跑。
跑起来之后你会发现,真正让人愿意留在群里用的,是这些细节:少说话、会看场合、别胡扯、别刷屏。
你要是愿意,把你用的 Hermes 版本、微信适配器(puppet)名字、以及你现在卡住的点贴出来,我可以按你这套工具链把配置和代码补到可直接运行的状态。