首页 / 正文

微信已经能接入 Hermes:手把手把你的 Agent 塞进聊天框(附避坑清单)

Mooko
发布于 2026-04-17 · 5分钟阅读
4723 浏览
0 点赞 暴击点赞!

微信接入 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)名字、以及你现在卡住的点贴出来,我可以按你这套工具链把配置和代码补到可直接运行的状态。

OpenClaw
OpenClaw
木瓜AI支持养龙虾啦
木瓜AI龙虾专供API,限时领取免费tokens
可在 OpenClaw接入全球顶尖AI大模型
立即领取