
历时一周,我用微信小程序+ThinkPHP打造了一款全能AI问答助手,部署即用
支持多模型、打字机效果、深度思考,完全开源
大家好,今天想跟大家分享一个我最近做的小东西——一款基于微信小程序的AI大模型问答应用。

先说说为什么要做这个。市面上的AI问答工具不少,但要么收费不菲,要么功能单一,要么交互体验差强人意。我一直想要一个能同时满足以下需求的产品:
支持多家大模型接口,不被单一厂商绑定
对话要有“打字机效果”,看着AI一个字一个字地输出
能记住上下文,进行多轮对话
界面简洁干净,看着舒服
支持智能搜索和深度思考等高级设置
找了一圈,没找到完全满意的。那就自己动手吧。
前端用微信小程序原生框架开发,后端用ThinkPHP 6。选择ThinkPHP主要因为它的ORM链式操作非常顺手,而且在国内生态成熟,部署方便。

目前已经接入了OpenAI GPT系列、百度文心一言、阿里通义千问、讯飞星火等主流模型。通过后端统一封装,前端只需要切换一个参数就能更换模型。
实现原理其实不复杂:后端定义统一的请求和响应格式,为每个模型写一个适配器。需要新增模型时,只要按照规范实现适配器即可。

这是用户反馈最满意的功能之一。AI回复不再是等待几秒钟后一次性出现,而是像人打字一样逐字逐句地显示出来。
小程序端使用WebSocket接收后端的流式数据,每收到一个字就追加到页面上。配合一个闪烁的光标动画,体验非常自然。

每次对话都会自动保存历史记录,后端将历史消息拼接后发送给大模型,实现上下文理解。用户可以随时新建对话、删除历史、继续之前的对话。
对话列表采用左滑删除的交互方式,符合微信用户的使用习惯。
下拉加载历史对话
设计上参考了iOS原生风格的毛玻璃效果,主色调选了柔和的蓝灰色,长时间使用不刺眼。
对话气泡做了圆角阴影处理,用户消息靠右、AI消息靠左,符合日常聊天习惯。底部输入框自动跟随键盘上推,体验流畅。
这两个功能是我个人最得意的地方。
智能搜索:开启后,AI会先判断是否需要联网搜索最新信息,然后结合搜索结果给出回答。解决了大模型知识截止日期的问题。
深度思考:开启后,AI会先展示自己的推理过程,再给出最终答案。这对于复杂问题非常有帮助,用户可以看到AI是如何一步步得出结论的。
后端主要做了这几件事:
统一API入口:所有模型调用通过统一的接口,前端不用关心每个模型的具体调用方式
流式响应处理:使用ThinkPHP的Response对象配合ob_flush实现流式输出
对话历史管理:用户对话记录存储在MySQL中,支持分页查询
API密钥安全存储:各模型的API Key加密存储在服务端,不暴露给前端
请求限流:防止恶意调用,每个用户每分钟限制请求次数
小程序WebSocket限制:微信小程序对WebSocket的连接数有限制,高峰期需要做好连接复用
流式输出的超时问题:PHP默认执行时间较短,长文本生成时需要设置set_time_limit(0)
不同模型的Prompt差异:各家模型的指令格式不统一,需要做适配层转换
多轮对话的Token消耗:历史消息越长,消耗Token越多,需要做自动截断策略
支持更多国产模型(智谱、MiniMax等)
增加语音输入功能
支持对话导出为图片或PDF
推出Web版和桌面客户端
这个项目断断续续做了一周多,代码已经整理好放在Gitee上,完全开源。如果你也想搭建自己的AI问答应用,或者对实现细节感兴趣,欢迎去点个Star。
Gitee地址:https://gitee.com/ITHOME-ZHENGBINGDONG/wechat-ai-qa
做这个项目纯粹是兴趣驱动,希望能帮到同样有需求的朋友。如果你觉得有用,欢迎分享给更多人。