news 2026/9/30 12:54:17

个人微信API二次开发:大模型 RAG 与 Agent 智能助手落地架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
个人微信API二次开发:大模型 RAG 与 Agent 智能助手落地架构

官方文档:GeWe API - GeWe API|微信 API 开发文档


一、业务痛点与技术背景

私域场景要的不是「能聊天的 Bot」,而是可控、可审计、可降级的 AI 助手:

  • 会话粘性映射

  • 故障转移与健康摘除

  • 容量规划与演练剧本

  • 多账号舰队调度

GeWe 提供稳定的消息入出站;AI 层负责理解与决策。二者通过「异步 Agent Runtime」解耦。


二、核心架构设计与数据流转

Webhook → MQ → Dialog Orchestrator │ ┌───────────┼────────────┐ ▼ ▼ ▼ Intent Router RAG Retriever Tool Registry │ │ │(查单/建群/打标) └───────────┼────────────┘ ▼ LLM Planner (Function Call) │ ┌──────────┼──────────┐ ▼ ▼ ▼ 直接回复 调 GeWe API 转人工工单 │ │ └──── Outbound Sender(限速/风控)

关键约束:

  • Orchestrator 消费 MQ,永不在 Webhook 内调模型。

  • RAG 只检索已审批知识库;工具调用走白名单。

  • 对用户最终回复必须过「策略引擎」(敏感词、承诺词、夜间模式)。


三、关键代码与配置示例

3.1 会话记忆(Redis + 摘要)

import json, redis, time from openai import OpenAI r = redis.Redis.from_url(os.environ["REDIS_URL"]) llm = OpenAI() def session_key(appid: str, peer_id: str) -> str: return f"gewe:sess:{appid}:{peer_id}" def append_turn(appid, peer_id, role, content, max_turns=12): k = session_key(appid, peer_id) r.rpush(k, json.dumps({"role": role, "content": content, "ts": time.time()})) r.ltrim(k, -max_turns, -1) r.expire(k, 7 * 86400) def build_messages(appid, peer_id, system: str, user_text: str): history = [json.loads(x) for x in r.lrange(session_key(appid, peer_id), 0, -1)] msgs = [{"role": "system", "content": system}] + history + [ {"role": "user", "content": user_text} ] return msgs

3.2 RAG 检索 + 带工具的 Agent

TOOLS = [ { "type": "function", "function": { "name": "query_order", "description": "按订单号查询物流状态", "parameters": { "type": "object", "properties": {"order_id": {"type": "string"}}, "required": ["order_id"], }, }, }, { "type": "function", "function": { "name": "tag_friend", "description": "给微信好友打业务标签", "parameters": { "type": "object", "properties": { "wxid": {"type": "string"}, "tag": {"type": "string"}, }, "required": ["wxid", "tag"], }, }, }, ] def retrieve(kb: str, query: str, top_k=4) -> str: # 伪代码:向量库检索 docs = vector_search(kb, query, top_k) return "\n---\n".join(d["text"] for d in docs) def run_agent(appid, peer_id, user_text: str) -> str: knowledge = retrieve("after_sales_kb", user_text) system = f"""你是企业售后助手。仅依据知识库与工具结果回答。 禁止编造物流与价格。不确定时回复将转人工。 知识库片段:\n{knowledge}""" messages = build_messages(appid, peer_id, system, user_text) resp = llm.chat.completions.create( model="gpt-4.1-mini", messages=messages, tools=TOOLS, temperature=0.2, timeout=25, ) msg = resp.choices[0].message if msg.tool_calls: for call in msg.tool_calls: result = dispatch_tool(call.function.name, call.function.arguments) messages.append(msg) messages.append({ "role": "tool", "tool_call_id": call.id, "content": result, }) resp = llm.chat.completions.create(model="gpt-4.1-mini", messages=messages, temperature=0.2) msg = resp.choices[0].message answer = policy_filter(msg.content or "") append_turn(appid, peer_id, "user", user_text) append_turn(appid, peer_id, "assistant", answer) return answer def dispatch_tool(name: str, args_json: str) -> str: args = json.loads(args_json) if name == "query_order": return json.dumps(order_service.get(args["order_id"]), ensure_ascii=False) if name == "tag_friend": # 调用 GeWe 标签能力(字段以文档为准) return json.dumps(gewe.tag_friend(args["wxid"], args["tag"])) return json.dumps({"error": "tool_not_allowed"})

3.3 回复出站与人工接管

async function replyOrEscalate(ctx: Ctx, answer: string, confidence: number) { if (confidence < 0.55 || /转人工|人工客服/.test(answer)) { await ticketService.create({ peerId: ctx.peerId, reason: "low_confidence" }); await gewe.sendText(ctx.appid, ctx.peerId, "已为您转接人工,请稍候。"); return; } await rateLimiter.take(ctx.appid); // 与风控策略联动 await gewe.sendText(ctx.appid, ctx.peerId, answer); }

3.4 延迟与降级

agent: llm_timeout_ms: 25000 fallback_reply: "正在为您查询,请稍等片刻~" max_tool_rounds: 3 night_mode: enabled: true only_faq: true

超时先发fallback_reply,后台继续跑完再补一条(注意防双发,用 client_msg_id)。


四、生产环境避坑与安全风控

  1. 提示词注入:用户可能要求「忽略上述指令」;系统提示固定不可被用户覆盖,工具白名单强制。

  2. PII:订单号、手机号进日志脱敏;不把完整聊天记录明文长期扔第三方。

  3. 幻觉:涉及金额、发货、退款必须 Tool 实查,禁止模型直接承诺。

  4. 环路:isSelf、机器人互加好友场景要熔断。

  5. 成本:短问答走小模型;复杂走大模型;RAG 命中率监控。

  6. 合规:AI 自动加好友/群发仍受微信规范约束,能力边界以官方文档为准。


五、本篇交付清单

  • Agent 与 GeWe 异步解耦架构

  • Session + RAG + Tool Calling 示例

  • 置信度转人工与限速出站

  • 注入攻击与幻觉防控要点

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 12:53:39

OpenHarmony LLVM工具链自编译与io failure排错

1. 从一个构建中断报错说起&#xff1a;为什么要自己动手编 OpenHarmony 的 LLVM 工具链第一次接触 OpenHarmony 的 LLVM 交叉编译工具链&#xff0c;多半不是因为你想研究编译器&#xff0c;而是因为你被某个东西卡住了。我最常遇到的一类现场是这样的&#xff1a;拉下代码&am…

作者头像 李华
网站建设 2026/9/30 12:52:42

配电网三相不平衡潮流计算:前推回代法Matlab实现详解

三相不平衡潮流计算&#xff0c;在配电系统里是个绕不开的老话题。发输电网的潮流通常是三相平衡的&#xff0c;算单相就行&#xff0c;可配电网络不一样——大量单相负荷、单相光伏、不均衡的台区布局&#xff0c;导致三相电流根本不对称。这时候如果把三相当成平衡系统去算&a…

作者头像 李华
网站建设 2026/9/30 12:51:32

Ubuntu Server 22.04 LTS 安装图解与初始化配置指南

1. 装之前先算清楚&#xff1a;ubuntu server 2204 到底该不该现在上先交代背景。ubuntu server 2204 说的是 Ubuntu Server 22.04 LTS&#xff08;代号 Jammy Jellyfish&#xff09;&#xff0c;LTS 这几个字母是长期支持的意思&#xff0c;标准维护周期五年&#xff0c;配合扩…

作者头像 李华
网站建设 2026/9/30 12:51:28

最大矩形与单调栈:LeetCode 85 二维矩阵降维解法全解析

1. 题目拆解&#xff1a;最大矩形到底在考什么1.1 题意速览与输入输出先花三十秒把题看清楚。LeetCode 85题"最大矩形"给的是一张二维的二进制矩阵&#xff0c;里面每个格子要么是0要么是1&#xff0c;要求在这个矩阵里找出一个“只包含1”的矩形区域&#xff0c;让它…

作者头像 李华
网站建设 2026/9/30 12:51:03

HCNA-VC实操能力:视讯系统端到端交付的最小能力基线

简介&#xff1a;本资源是面向华为HCNA-VC&#xff08;H11-851&#xff09;视讯工程师认证考生的专项备考资料&#xff0c;聚焦视讯系统基础原理、协议规范、设备配置与运维要点&#xff0c;适用于通信、音视频工程及ICT集成方向的技术人员夯实核心能力。文档为单个70KB的Word文…

作者头像 李华
网站建设 2026/9/30 12:50:44

云计算系统运维高技能人才缺口、能力标准与考核指标解析

简介&#xff1a;这份调研报告聚焦云计算系统运维高技能人才的市场现状与需求&#xff0c;面向企业技术管理者、人力资源从业者、职业院校师生以及云计算运维工程师&#xff0c;适用于人才盘点、招聘标准制定、课程设计和职业规划。报告基于调研指出运维人才供不应求&#xff0…

作者头像 李华