小程序智能聊天机器人(一)
ChatGPT小程序实战
- 背景
- 准备工作
- 申请小程序并认证
- 申请聊天接口秘钥
- 申请微信支付商户号
- 编写代码
- 用户管理
- 小程序授权登录
- 获取用户信息
- 更新用户头像和昵称
- 结合第三方聊天平台API
- 调用聊天接口的api
- 会员支付
- 福利
背景
最近ChatGPT特别火,但是好多小伙伴不知道,到底怎样去利用去做一些对自己有益的事情,闲来无事,做了个小程序开发流程分享给大家。
准备工作
申请小程序并认证
必须申请认证小程序,不然后续无法进行支付等相关操作,认证具体流程自行参考:微信公众平台
申请聊天接口秘钥
可以接入图灵,等api,或者GPT都可以的,自己去申请
申请微信支付商户号
这一步也是自己去参考微信支付去申请,这一步我们需要拿到微信支付的商户号和秘钥。
编写代码
用户管理
小程序授权登录
这里我们参考开放平台的官方文档的小程序登录:
1.前端通过调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
2.服务端调用 auth.code2Session 接口,换取 用户唯一标识 OpenID,这里假设我们拿到code,后端代码如下:
@PostMapping("getWxAuthorization")public AjaxResult getWxAuthorization(String code){JSONObject object = WxLoginUtil.getAppId(code);if (object.containsKey("errcode") && object.getIntValue("errcode")!=0) {log.error("授权失败,错误信息:{}", object);return AjaxResult.error("授权失败!");}String openid = object.getString("openid");QueryWrapper<WxUser> queryWrapper = new QueryWrapper<>();queryWrapper.eq("open_id", openid);WxUser wxUser = wxUserService.getOne(queryWrapper);//为空时自动创建账户if (StringUtils.isNull(wxUser)){wxUser = new WxUser();wxUser.setUserType("0");wxUser.setLimitTimes(15l);//我们给用户限制下每日调用次数,方便我们引导用户开通会员,不然怎么盈利呢?wxUser.setOpenId(openid);wxUser.setRegisterDate(new Date());wxUser.setVipEffTime(new Date());wxUser.setVipExpTime(new Date());wxUserService.save(wxUser);}return AjaxResult.success("登录成功!", JwtTokenUtil.createToken(wxUser.getId()));}
获取用户信息
登录成功后,小程序端需要拿到我们在自己的后台创建的用户信息:
@PostMapping("/getUser")public AjaxResult getUser(){WxUser appUser = wxUserService.getById(JwtTokenUtil.getUserId);//每次获取的时候,我们判断下用户会员是否过期了,过期就更改下状态if(appUser.getUserType().equals("1") && appUser.getVipExpTime().before(new Date())){appUser.setUserType("2");wxUserService.updateById(appUser);}return AjaxResult.success(appUser);}
更新用户头像和昵称
为了方便用户改变在小程序内显示的头像和昵称,我们做如下处理:
@PostMapping("/updateUser")public AjaxResult updateUser(@RequestBody WxUser wxUser){WxUser appUser = wxUserService.getById(JwtTokenUtil.getUserId);if (StringUtils.isNotEmpty(wxUser.getAvatar())) {appUser.setAvatar(wxUser.getAvatar());}if (StringUtils.isNotEmpty(wxUser.getNickName())) {appUser.setNickName(wxUser.getNickName());}return AjaxResult.success("修改成功", appUser);}
到此为止,小程序端就可以登录,并且更新和获取用户信息了!接下来我们正式开始调用ChatGPT的api。
结合第三方聊天平台API
调用聊天接口的api
这里我们直接调用,我稍微加了功能敏感词过滤
@PostMapping("chatCompletion")public AjaxResult chatCompletion(@RequestBody CompletionRequest completionRequest){//TODO 敏感词,每日提问次数Long getUserId = JwtTokenUtil.getUserId;//封装方法,校验用户的可使用次数AjaxResult userUseTimes = getUserUseTimes(getUserId);if ((int)userUseTimes.get("code")!=200){return userUseTimes;}/*敏感词过滤*//*ArrayList<String> sensitiveWord = DFAUtils.getSensitiveWord(completionRequest.getPrompt());if (StringUtils.isNotEmpty(sensitiveWord)){log.error("检测到敏感词:{}", sensitiveWord);//TODO 敏感词记录return AjaxResult.error("您的问题含有敏感词,请重新提问!");}*/ChoiceMessage message = null;try {CompletionChatResponse completionChatResponse = ChatUtil.chatCompletion(completionRequest.getPrompt());message = completionChatResponse.getChoices().get(0).getMessage();List<Object> userCacheMessages = ChatUtil.getUserCacheMessages();userCacheMessages.add(message);ChatUtil.setUserCacheMessages(userCacheMessages);} catch (Exception e) {return AjaxResult.success("系统开了个小差,请稍后重试!");}return AjaxResult.success(message.getContent());}
封装的调用方法ChatUtil.chatCompletion(completionRequest.getPrompt());
public static CompletionChatResponse chatCompletion(String prompt){CompletionChatRequest completionChatRequest = new CompletionChatRequest();HttpRequest post = HttpUtil.createPost(chatCompletionUrl).timeout(300000);Map<String, String> headers = new HashMap<>();headers.put("Authorization", Authorization);//上面申请的apikeypost.addHeaders(headers);post.contentType("application/json;charset=UTF-8");completionChatRequest.setModel(model);ChoiceMessage message = new ChoiceMessage("user", prompt);//因为我们调用的3.5的模型,这里作了上下文关联List<Object> messages = getUserCacheMessages();int size = messages.size();if (size>19){messages.remove(0);}messages.add(message);setUserCacheMessages(messages);completionChatRequest.setMessages(messages);post.body(JSON.toJSONString(completionChatRequest));String body = post.execute().body();CompletionChatResponse completionChatResponse = JSON.parseObject(body, CompletionChatResponse.class);return completionChatResponse;}
现在我们已经基本实现了整个流程,可以看下效果:
会员支付
效果已经有了,那我们来接入会员系统,下期继续
福利
留言可以先给大家免费体验一波,下期我们继续接入会员功能!
小程序智能聊天机器人(一)相关推荐
- 小程序智能聊天机器人(二)
小程序实战之会员支付流程 背景 会员套餐设置 获取套餐 订单创建 支付订单申请 支付回调 更新用户权益 总结 背景 接上篇小程序智能聊天机器人(一), 无论何种程序,在我们没有其他收益来源时,用户付费 ...
- 智能聊天机器人小黄鸡及其制作方法
讲前先预热一下,如果有还不熟悉小黄鸡的亲~欢迎大家戳这里 http://mysimi.sinaapp.com/ 自制小黄鸡一枚,欢迎测试.. 暂且叫他小黄鸡2号~1号在后面哈 大家好,我是沐儿,今天很 ...
- 微信小程序语音聊天智能对话(demo)
项目中用到了 olami sdk把录音或者文字转化为用户可以理解的json字符串. 效果图 重要jS代码: //手指按下时 语音转文字voiceToChar:function(){var urls = ...
- 微信公众号最佳实践 ( 8.8)智能聊天机器人
智能聊天机器人 小i机器人,是上海至臻网络科技有限公司开发的智能机器人产品,是全球用户量最大的中文聊天机器人.该机器人,能查询新闻.地图.餐饮.机票等各类生活资讯. iBotCloud iBotClo ...
- Python--微信智能聊天机器人
微信智能聊天机器人 import requests import itchat import time from threading import Timer 图灵机器人编号 如果大家感兴趣的可以登图 ...
- 学习笔记TF059:自然语言处理、智能聊天机器人
自然语言处理,语音处理.文本处理.语音识别(speech recognition),让计算机能够"听懂"人类语音,语音的文字信息"提取". 日本富国生命保险公司 ...
- 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...
- 使用 Python 实现一个简单的智能聊天机器人
使用 Python 实现一个简单的智能聊天机器人 文章目录 使用 Python 实现一个简单的智能聊天机器人 简要说明 总体的思路 需要准备的环境 接收用户的语音输入, 并将其存为音频文件 调用百度A ...
- 好想学python机器人_【Python成长之路】从零学GUI -- 制作智能聊天机器人
[写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...
最新文章
- css删除线_前端删除文字贯穿线的方法有哪些
- 调研机构称明年全球数据中心基础设施支出将增长6%
- MathLab混合编程成功总结
- C语言跟随鼠标画方框,JS拖动鼠标画出方框实现鼠标选区的方法
- C++ Bayes‘ theorem贝叶斯定理的实现算法(附完整源码)
- AttributeError: 'Polar AxesSubplot' object has no attribute 'set_axis_bgcolor'
- 基于Linux命令行终端的ftp客户端程序
- Docker简单实践(一)
- 【渝粤教育】国家开放大学2019年春季 690化工原理及实验 参考试题
- 真正优秀的领导者,无非是做好这2件事
- (转)74系列芯片使用汇总
- [BScroll warn]: Can not resolve the wrapper DOM. 的解决
- html页面转excel文件,html格式文件转excel
- 重访命令征服泰伯利亚太阳
- 微信里iphone后退不刷新问题解决方案,真实有效
- Python实验报告 实验16 - Python计算生态
- 20189221 2018-2019-2 《密码与安全新技术专题》第三周作业
- js 获取汉字首字母和汉字转拼音
- Shiro 授权(权限)
- 关于正则表达式里含有空格的问题