微信群 AI 助手搭建思路:群聊答疑、总结、图片生成
第十七篇 AI Agent 上手系列:梳理微信群 AI 助手的三种接入路线,设计群聊答疑、定时总结、图片生成、权限、日志和成本控制。

很多人想把 AI 放进微信群,第一反应是:“能不能像 Telegram Bot 一样,直接创建一个机器人,拉进群就能用?”
现实里,微信生态没有这么简单。普通微信群、企业微信群、公众号、企微应用、Webhook 机器人的能力边界都不一样。如果一开始没有分清入口,很容易写出一个看起来能跑、实际上不稳定、容易打扰群友、也有封号或合规风险的方案。
这篇文章不鼓励你做刷屏机器人,也不建议把个人微信号拿去做高频自动化。我们更现实地讨论:如果你确实想做一个微信群 AI 助手,应该如何设计入口、触发方式、上下文、群总结、图片生成、权限和成本控制。

先说结论:不要默认监听所有消息
微信群 AI 助手最容易失败的原因,不是模型不够聪明,而是“太吵”。
推荐默认策略:
- 群聊答疑:只在
@机器人、/ask、问一下等明确触发时响应; - 群总结:按时间窗口定时触发,比如每天 20:00,总结前一天或当天消息;
- 图片生成:必须用显式命令触发,比如
/draw 一只橘猫在写代码; - 管理命令:只有管理员能开关总结、设置白名单、调整预算;
- 日志:保存必要的消息片段和调用记录,但设置保留期限。
这套规则比“机器人很聪明”更重要。群聊环境是多人空间,AI 的第一目标应该是少打扰、可控制、可追溯。
三种接入路线
路线一:企业微信群机器人 Webhook
企业微信群机器人是官方文档里最清晰、最稳定的一类入口。企业微信开发者中心的“消息推送配置说明”文档写明:通过企业微信群机器人的 Webhook 地址发送 HTTP 请求,就可以向群里推送消息。
它支持的消息类型包括:
text文本;markdown;markdown_v2;image;news图文;file;voice;template_card模版卡片。
重要限制也要讲清楚:Webhook 机器人主要是“向群里推送消息”,不是一个完整的“读群消息 + 自动回复”的双向聊天机器人。如果你只需要每日总结推送、告警、任务提醒、生成图片后推送到群,这条路线很好;如果你要实时读取普通微信群聊天内容,就不是它的强项。
发送文本消息示例:
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=[REDACTED]' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "text",
"text": {
"content": "今晚 20:00 将自动发送群聊总结。"
}
}'
发送 Markdown:
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=[REDACTED]' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 今日群总结\n> 重点讨论:Agent 部署、模型成本、图片生成。"
}
}'
企业微信文档里还写到:text 内容最长不超过 2048 字节,markdown 内容最长不超过 4096 字节,内容必须是 UTF-8 编码。这意味着群总结不能无限长,应该做摘要压缩。
路线二:Wechaty / wxauto / itchat 等个人号自动化
如果你要“读取微信群消息并自动回复”,很多社区方案会提到 Wechaty、wxauto、itchat 等项目。
这类方案要特别谨慎:
- Wechaty 是开源 Conversational RPA SDK,通过 Puppet 抽象适配不同 IM 协议;
- wxauto 是 Windows 微信客户端自动化,README 明确写了用于 UIAutomation 技术交流学习,并提示不要用于实际生产项目或非法用途;
- itchat 是较早的 Python 微信个人号接口,但个人号 Web 微信能力、登录稳定性和账号风险都要自己承担。
所以我的建议是:
- 个人实验、内部低频工具:可以研究这些项目;
- 长期生产、客服、商业场景:优先使用官方能力、企微、公众号、客服系统或合规的消息入口;
- 不要做营销群发、骚扰、诱导关注、自动加人等高风险行为。
如果你仍然做实验,至少要做到:只监听白名单群、只响应明确触发、限频、可关闭、记录错误、不要保存敏感数据。
路线三:把微信当入口,AI 服务独立部署
最稳的工程思路是:微信层只负责收发消息,真正的 AI 能力放在独立服务里。
微信/企微入口
-> 消息适配器
-> FastAPI / Node.js 后端
-> 路由器:答疑 / 总结 / 生图 / 管理命令
-> Nbility OpenAI-compatible API
-> 返回文本、Markdown、CDN 图片或文件
这样做有几个好处:
- 将来可以同时接 QQ、Telegram、飞书、企业微信;
- 模型调用、日志、预算、用户权限可以统一管理;
- 如果微信入口不稳定,可以替换入口,不用重写 AI 逻辑;
- 方便把群总结、图片生成、知识库问答做成独立模块。
最小可用后端:FastAPI 版本
下面是一个最小服务示例。它不绑定具体微信 SDK,只提供一个 HTTP 接口,任何入口适配器都可以把群消息转发进来。
安装依赖:
python3 -m venv .venv
source .venv/bin/activate
pip install fastapi uvicorn openai pydantic
创建 app.py:
import os
import time
from typing import Literal
from fastapi import FastAPI
from pydantic import BaseModel
from openai import OpenAI
app = FastAPI()
client = OpenAI(
api_key=os.environ["NBILITY_API_KEY"],
base_url="https://api.nbility.dev/v1",
)
class IncomingMessage(BaseModel):
platform: str = "wechat"
group_id: str
user_id: str
user_name: str | None = None
text: str
message_id: str | None = None
timestamp: int | None = None
class BotResponse(BaseModel):
type: Literal["none", "text"]
content: str = ""
def should_reply(msg: IncomingMessage) -> bool:
text = msg.text.strip()
return text.startswith("/ask ") or "@AI助手" in text
@app.post("/wechat/message", response_model=BotResponse)
def handle_message(msg: IncomingMessage):
if not should_reply(msg):
return BotResponse(type="none")
question = msg.text.replace("@AI助手", "").replace("/ask", "", 1).strip()
if not question:
return BotResponse(type="text", content="请在 @AI助手 后面写上问题。")
resp = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是微信群里的 AI 助手。回答要简洁,遇到不确定信息要说明不确定,不要编造。"},
{"role": "user", "content": question},
],
temperature=0.3,
)
answer = resp.choices[0].message.content or "我暂时没有生成有效回复。"
return BotResponse(type="text", content=answer[:1200])
启动:
export NBILITY_API_KEY='[REDACTED]'
uvicorn app:app --host 0.0.0.0 --port 8787
这个后端使用 Nbility 的 OpenAI-compatible Chat Completions API:
Base URL: https://api.nbility.dev/v1
Authorization: Bearer [REDACTED]
Endpoint: POST /v1/chat/completions
它只解决“收到消息后如何判断是否回复、如何调用模型”的核心逻辑。接下来你可以用企业微信、Wechaty、wxauto 或你已有的桥接层把消息转发到 /wechat/message。
群聊答疑:只回答该回答的内容
群聊答疑建议用四层过滤:
- 群白名单:只有指定群启用;
- 触发器:必须 @、命令前缀或关键词;
- 频率限制:同一用户、同一群设置冷却时间;
- 内容边界:不回答隐私、账号、医疗、法律等高风险问题,或明确提示只供参考。
一个简单触发策略:
def route_message(text: str) -> str:
text = text.strip()
if text.startswith("/summary"):
return "summary"
if text.startswith("/draw"):
return "image"
if text.startswith("/ask") or "@AI助手" in text:
return "qa"
return "ignore"
上下文也不要无限保留。可以只取最近 20 条相关消息,并在送入模型前做脱敏:
def redact(text: str) -> str:
import re
text = re.sub(r"1[3-9]\d{9}", "[手机号]", text)
text = re.sub(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+", "[邮箱]", text)
return text
群聊总结:定时、窗口、结构化输出
群总结比实时答疑更适合微信群,因为它不打断聊天。推荐按时间窗口保存消息,比如最近 24 小时、当天 0 点到现在、或管理员手动触发后的一段时间。
总结 Prompt 示例:
你是群聊总结助手。请基于以下群聊记录生成总结,要求:
1. 不编造记录中没有出现的结论;
2. 按“主要话题、已形成共识、待办事项、需要跟进的问题、值得保存的链接”输出;
3. 如果聊天内容很少,输出“今天暂无有效总结”;
4. 不要暴露手机号、邮箱、token、个人隐私。
输出格式:
## 今日群总结
### 主要话题
-
### 已形成共识
-
### 待办事项
- 负责人:事项:截止时间:
### 需要跟进的问题
-
### 值得保存的链接
-
定时任务可以用 cron、systemd timer、APScheduler 或 Hermes/Agent 的调度能力来做。关键是:如果没有足够消息,就不要强行发一篇“废话总结”。
图片生成:命令触发、结果可回溯
图片生成很适合群聊,但也最容易失控。建议只接受显式命令:
/draw 一只黑猫程序员在月光下调试服务器,赛博朋克风格
处理流程:
识别 /draw
-> 安全检查和长度限制
-> 调用图片生成 API
-> 保存任务 ID、Prompt、用户、群、成本
-> 返回 CDN 链接或图片消息
注意事项:
- 不要让机器人自动把所有聊天内容都拿去生图;
- 对敏感、侵权、真人肖像、政治暴力等内容做拒绝或改写;
- 失败后最多自动重试一次;
- 如果微信原生图片发送不稳定,可以先返回 CDN 图片链接;
- 生图成本要单独限额,因为一次生图通常比一次短问答贵。
上线前检查清单
上线前至少确认:
- 是否只在白名单群启用;
- 是否默认不监听或不回复无关消息;
- 是否忽略机器人自己发的消息,避免循环;
- 是否设置每群每日预算;
- 是否限制每个用户的频率;
- 是否能一条命令关闭机器人;
- 是否对日志设置保留期限;
- 是否对图片生成、链接抓取、文件读取做权限隔离;
- 是否能查到失败原因和模型消耗;
- 是否明确告知群成员机器人能力和边界。
推荐的产品化模块
一个长期可维护的微信群 AI 助手,建议拆成这些模块:
adapter-wechat # 微信/企微入口适配
router # 命令和触发器
memory # 最近消息窗口、群配置、用户偏好
qa # 群聊答疑
summary # 定时总结
image # 图片生成
moderation # 安全策略与限流
billing # 每群预算和模型消耗
admin # 管理命令
observability # 日志、失败原因、重试记录
最开始不用一次做完,但“触发器、限流、预算、日志”要第一天就做。它们不是锦上添花,而是防止机器人变成噪音源的基础设施。
常见问题
1. 能不能直接做普通微信群机器人?
可以实验,但要谨慎。普通微信群没有像 Telegram Bot 那样稳定开放的官方 Bot API。社区方案大多依赖个人号、客户端自动化或协议适配,稳定性、合规和账号风险都需要自己承担。
2. 企业微信群机器人能读群消息吗?
企业微信群 Webhook 机器人主要用于向群里推送消息。它适合告警、日报、总结推送、生成图片结果通知;不等同于完整的双向聊天机器人。
3. 用 Nbility 放在哪一层?
放在模型调用层。微信入口负责收发消息,你的后端负责路由和风控,Nbility 提供 OpenAI-compatible API、模型调用、日志和成本观察入口。
4. 群总结要保存所有聊天记录吗?
不建议长期保存所有原文。可以按窗口短期保存必要消息,生成总结后只保留摘要、任务、链接和必要审计日志,并设置删除周期。
5. 生图结果应该直接发图片还是发链接?
看入口稳定性。企业微信 Webhook 支持图片消息,但需要 base64 和 md5;普通微信或桥接层有时原生媒体发送不稳定。工程上可以优先返回 CDN 链接,稳定后再加原生图片发送。
参考链接
- 企业微信消息推送配置说明:https://developer.work.weixin.qq.com/document/path/91770
- Wechaty 官网:https://wechaty.js.org
- Wechaty GitHub:https://github.com/wechaty/wechaty
- Wechaty Puppet 文档:https://wechaty.js.org/docs/specs/puppet
- wxauto GitHub:https://github.com/cluic/wxauto
- wxauto 文档:https://docs.wxauto.org
- itchat GitHub:https://github.com/littlecodersh/itchat
- Nbility API 概览:https://nbility.dev/docs/api
- Nbility Chat Completions API:https://nbility.dev/docs/api/chat/completions
小结
微信群 AI 助手不是简单地“接一个大模型”。真正难的是入口选择、触发规则、群聊礼貌、权限、日志、预算和失败兜底。
如果你只是做通知和总结推送,企业微信 Webhook 是更稳的起点;如果你要实时读普通微信群消息,必须认真评估社区方案的稳定性和账号风险;如果你想长期做成产品,就把微信入口和 AI 服务解耦,把 Nbility 这样的 OpenAI-compatible 模型入口放在统一后端里。

