thinkphp集成ai客服的核心是作为调度中枢,负责请求路由、上下文管理、状态控制与外部ai服务对接;真正语义理解与生成由coze/openai等外部模型完成。

ThinkPHP集成AI智能客服,核心不是让PHP去“思考”,而是用它当好调度员——管好请求、管好上下文、管好状态、管好对接。真正做理解与生成的,是外部AI服务;ThinkPHP负责把人话接进来、把上下文带过去、把回复稳稳送出去。
消息接收:统一入口 + 类型分流
企业微信或网页前端发来的消息,统一走一个API入口(如 /api/wechat/receive 或 /api/chat)。ThinkPHP路由将其导向指定控制器,再按 MsgType 或请求参数区分类型:
- 文本消息:清洗空格/特殊字符,过滤敏感词,存入Redis(key为用户唯一标识,如
session:wx_abc123),只保留最近5轮用于上下文拼接 - 图片/语音/视频:提取MediaID或临时链接,异步调用企业微信接口下载,再转给图像识别或ASR服务;原始文件不落地,只存处理结果摘要
- 事件消息(如关注、菜单点击):单独路由至事件处理器,触发欢迎语、菜单跳转或工单创建
自动回复:三级策略 + 精准兜底
回复不是靠“猜”,而是分层决策:
-
一级匹配:查本地知识库(MySQL FAQ表),字段含
question_hash(对问题做标准化哈希),支持毫秒级精确命中 - 二级匹配:用轻量语义模型(如Sentence-BERT微调版)计算用户输入与知识库问题的余弦相似度,取Top1且得分>0.85的回复
-
三级生成:前两级无结果时,组装
messages数组(含system提示词+精简上下文),调用Coze/OpenAI/Ollama等API;严格控制token长度,单次content截断≤200字,历史轮次≤5
上下文管理:Redis驱动 + 状态可控
多轮对话不靠AI记,靠你传。关键在两点:
- 每次请求前,从Redis读取该用户的
contextJSON字段(格式为[{"role":"user","content":"..."},{"role":"assistant","content":"..."}]),清洗HTML、截断超长内容后合并进本次请求 - 回复返回后,立即将新交互追加进Redis,并设置过期时间(如2小时),避免长期占用内存;若用户长时间无操作,自动清空该key
- 人工转接触发时(如连续2次低置信度回复),将当前context快照写入MySQL工单表,并标记
status=awaiting_agent
流式响应与体验优化
要实现“打字机效果”,不能靠flush()硬刷——Nginx+PHP-FPM默认会拦住:
- Nginx配置中必须开启:
proxy_buffering off;和chunked_transfer_encoding on; - PHP端用SSE协议:响应头设为
Content-Type: text/event-stream,每输出一段就写echo "data: ".json_encode(['text'=>$chunk])."\n\n"; ob_flush(); flush(); - 前端用
EventSource监听,失败时自动重连;SSE不支持POST,所以用户输入先用普通API存入session或Redis,再用GET拉取流式结果
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











