微信机器人接 AI 客服
微信机器人接 AI 客服GPT/Claude/DeepSeek 多模型切换实战很多团队的 AI 客服是这样长出来的立项时接了一个大模型业务代码里到处都是这家模型的请求格式。三个月后模型涨价了、或者出了个效果更好的新模型想换——发现要改十几个地方测试回归一圈最后不了了之。模型绑定是 AI 客服最常见的技术债。这篇给一个解法在微信通道和大模型之间加一个统一的 LLM 网关层换模型只改配置主模型挂了自动降级到备用模型。为什么需要网关层三个现实问题每个都值回这一层代码各家格式不统一:GPT 是choices[0].message.content,Claude 是content[0].text请求头、参数结构都不一样。没有网关层换模型就是改业务代码。单点故障任何一家模型都有抖动和宕机。绑死一家它挂你的客服就挂。成本分层简单问题“营业时间”和复杂问题“帮我对比三款产品”用同一个旗舰模型纯属烧钱。网关层设计统一入口配置驱动核心抽象就一句话messages 进文本出内部消化各家差异。# llm_gateway.pyimportrequests PROVIDERS{gpt:{url:https://api.openai.com/v1/chat/completions,key:OPENAI_KEY,model:gpt-4o-mini,format:openai,},claude:{url:https://api.anthropic.com/v1/messages,key:ANTHROPIC_KEY,model:claude-3-5-haiku-latest,format:anthropic,},deepseek:{url:https://api.deepseek.com/v1/chat/completions,key:DEEPSEEK_KEY,model:deepseek-chat,format:openai,# DeepSeek 兼容 OpenAI 格式},}defask(provider,messages,timeout15):统一调用入口:messages 进,文本出pPROVIDERS[provider]ifp[format]openai:rrequests.post(p[url],headers{Authorization:fBearer{p[key]}},json{model:p[model],messages:messages},timeouttimeout).json()returnr[choices][0][message][content]else:# anthropic 格式rrequests.post(p[url],headers{x-api-key:p[key],anthropic-version:2023-06-01,Content-Type:application/json},json{model:p[model],max_tokens:1024,messages:messages},timeouttimeout).json()returnr[content][0][text]新增一家模型往PROVIDERS里加一条配置就行。业务代码永远只调ask(provider, messages)。故障降级链主模型挂了客服不挂CHAIN[deepseek,gpt,claude]# 按你的成本/稳定性偏好排序defask_with_fallback(messages):forproviderinCHAIN:try:replyask(provider,messages)log_usage(provider,successTrue)# 记录谁答的,做观测returnreplyexceptExceptionase:log_usage(provider,successFalse,errstr(e))continuereturnNone# 三家全挂 → 走关键词兜底或转人工log_usage别省每个 provider 的成功率和耗时都要记跑两周你就知道该把谁排在链首——模型选型从拍脑袋变成看数据。成本路由简单问题别用大模型SIMPLE_KEYS[营业时间,地址,电话,价格表]defpick_model(content):按问题复杂度路由:简单走便宜模型,复杂走强模型iflen(content)20orany(kincontentforkinSIMPLE_KEYS):returndeepseek# 便宜够用returngpt# 复杂问题再上好模型实战经验客服场景 60% 以上是简单问题全走便宜模型token 成本能砍掉一大半。更省的一招超高频问题比如营业时间干脆别调模型关键词直回固定答案零成本毫秒级。接到微信上网关层插在中间和微信侧的对接反而简单前面文章讲过的结构原样保留只把调模型那一步换成网关微信消息 → WTAPI Webhook → 队列 → pick_model → ask_with_fallback ↓ WTAPI postText ← 生成回复(或兜底话术)WTAPI 负责收消息Webhook和回写postText网关层负责模型调度——两层各管各的模型侧的任何折腾都碰不到微信代码反过来微信侧换实例、换部署形态也碰不到模型代码。回调侧的两条老规矩不变3 秒内返回所以走队列异步、Appid NewMsgId去重。defhandle_text(session_id,from_wxid,content):providerpick_model(content)messagesbuild_messages(session_id,content)# 带会话上下文replyask_with_fallback(messages)ifreplyisNone:reply当前咨询较多,人工客服马上来~# 全挂时的兜底话术notify_human(session_id,content)send_text(from_wxid,reply)# WTAPI postText 回写微信侧的postText和 Webhook 配置想在线调一遍的WTAPI 开发文档weiti.apifox.cn支持在线调试——目前提供 7 天接口调用权限后台附带 Demo 示例可供本地调试。接口路径与字段以文档实时内容为准。上线前两个提醒回复内容要过审:AI 生成的话术可能蹦出敏感词或夸大承诺发送前过一道内容审核关键词过滤起步客服场景的说错话成本比不回复高。会话上下文要隔离多客户共用一个机器人上下文必须按会话 ID 分开存A 客户的对话历史绝不能串到 B 客户的 prompt 里——这既是体验问题也是数据安全问题。合规声明本文示例仅用于技术学习与合规私域自动化场景请使用注册 3 个月以上、已实名的合规账号遵守平台规范与各大模型服务商的使用条款自动回复内容应经审核不得用于骚扰、欺诈等违规场景。

相关新闻

Kafka-King 开发与构建实战指南:Wails v2 + franz-go 跨平台 Kafka GUI 客户端的工程实践

Kafka-King 开发与构建实战指南:Wails v2 + franz-go 跨平台 Kafka GUI 客户端的工程实践

开发工具数据库客户端桌面应用 【免费下载链接】Kafka-King A modern and practical kafka GUI client 💕🎉Kafka-King 是一款现代化、实用的 Kafka GUI 客户端,旨在通过直观的桌面界面简化 Apache Kafka 管理。作为一款跨平台应用程序&#…

2026/10/15 3:49:43 阅读更多 →
微信小程序 TDesign Navbar 导航栏组件实战:从引入配置到源码级自适应原理(miniprogram-demo)

微信小程序 TDesign Navbar 导航栏组件实战:从引入配置到源码级自适应原理(miniprogram-demo)

示例工程小程序前端 【免费下载链接】miniprogram-demo 微信小程序组件 / API / 云开发示例 项目地址: https://gitcode.com/gh_mirrors/mi/miniprogram-demo 点击查看 免费下载 t-navbar 是 TDesign 小程序组件库中位于页面内容区上方、系统状态栏下方的导航栏组件…

2026/10/15 3:49:43 阅读更多 →
Git 常用操作文档

Git 常用操作文档

一、修改用户名 & 邮箱(全局 / 当前仓库) 修改后下一次 commit 生效,已经提交的历史记录不会自动改变,不需要提交代码就能查看配置。 1. 全局(所有 git 项目生效,推荐) git config --global user.name "xxxx" git config --global user.email "你的…

2026/10/15 3:49:43 阅读更多 →

最新新闻

模板代码生成工具:从元数据到可用接口的完整实现

模板代码生成工具:从元数据到可用接口的完整实现

1. 为什么需要模板代码生成工具:一大半重复代码其实不该手写做后端开发的朋友应该都有过这种体验:新项目启动,建表、写实体、写Mapper、写Service接口和实现、写Controller,然后前端再把列表页、表单页、弹窗、状态标签挨个撸一遍…

2026/10/15 4:45:53 阅读更多 →
桶排序全解析:原理、复杂度与工程实践

桶排序全解析:原理、复杂度与工程实践

1. 从"把数据扔进格子里"说起:桶排序的第一性原理如果你接触排序算法有一阵子,大概率听说过这句话:"桶排序在数据分布均匀的时候能做到接近O(n)"。但很多人学完快排、归并之后,对桶排序的印象只剩下一个模糊的…

2026/10/15 4:45:53 阅读更多 →
ET 200MP模拟量输出模块AQ 4xU/I ST选型接线调试指南

ET 200MP模拟量输出模块AQ 4xU/I ST选型接线调试指南

简介:西门子SIMATIC S7-1500/ET 200MP模拟量输出模块AQ 4xU/I ST设备手册,面向工业自动化领域的工程技术人员、系统集成商与运维人员。内容聚焦模拟量输出模块在制造、能源、交通等场景下的选型、接线、参数设置与调试问题,帮助用户实现精准的…

2026/10/15 4:45:53 阅读更多 →
Windows开机自启全攻略:启动文件夹、注册表、任务计划与服务详解

Windows开机自启全攻略:启动文件夹、注册表、任务计划与服务详解

1. 开机自启这件事,远不止把快捷方式拖进启动文件夹那么简单很多人第一次接触开机自启,都是因为某个小工具每次重启后都要手动打开,烦得不行。于是上网一搜,看到最多的答案就是“把快捷方式拖进启动文件夹”,照做之后确…

2026/10/15 4:45:53 阅读更多 →
基于地点相似度的POI推荐与路径重组MATLAB实现

基于地点相似度的POI推荐与路径重组MATLAB实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:45:53 阅读更多 →
延迟优化实战:从毫秒级到微秒级的系统性能提升路径

延迟优化实战:从毫秒级到微秒级的系统性能提升路径

1. 我为什么折腾到微秒级:被延迟拖垮的业务,往往都死得悄无声息很多人做性能优化,跑到“毫秒级”就收工了,觉得接口P99能压到5ms以内已经是了不起的成就。但如果你在真正的高并发业务链路里待过,就会明白:当…

2026/10/15 4:44:53 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →