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;}

现在我们已经基本实现了整个流程,可以看下效果:

会员支付

效果已经有了,那我们来接入会员系统,下期继续

福利

留言可以先给大家免费体验一波,下期我们继续接入会员功能!

小程序智能聊天机器人(一)相关推荐

  1. 小程序智能聊天机器人(二)

    小程序实战之会员支付流程 背景 会员套餐设置 获取套餐 订单创建 支付订单申请 支付回调 更新用户权益 总结 背景 接上篇小程序智能聊天机器人(一), 无论何种程序,在我们没有其他收益来源时,用户付费 ...

  2. 智能聊天机器人小黄鸡及其制作方法

    讲前先预热一下,如果有还不熟悉小黄鸡的亲~欢迎大家戳这里 http://mysimi.sinaapp.com/ 自制小黄鸡一枚,欢迎测试.. 暂且叫他小黄鸡2号~1号在后面哈 大家好,我是沐儿,今天很 ...

  3. 微信小程序语音聊天智能对话(demo)

    项目中用到了 olami sdk把录音或者文字转化为用户可以理解的json字符串. 效果图 重要jS代码: //手指按下时 语音转文字voiceToChar:function(){var urls = ...

  4. 微信公众号最佳实践 ( 8.8)智能聊天机器人

    智能聊天机器人 小i机器人,是上海至臻网络科技有限公司开发的智能机器人产品,是全球用户量最大的中文聊天机器人.该机器人,能查询新闻.地图.餐饮.机票等各类生活资讯. iBotCloud iBotClo ...

  5. Python--微信智能聊天机器人

    微信智能聊天机器人 import requests import itchat import time from threading import Timer 图灵机器人编号 如果大家感兴趣的可以登图 ...

  6. 学习笔记TF059:自然语言处理、智能聊天机器人

    自然语言处理,语音处理.文本处理.语音识别(speech recognition),让计算机能够"听懂"人类语音,语音的文字信息"提取". 日本富国生命保险公司 ...

  7. 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)

    微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...

  8. 使用 Python 实现一个简单的智能聊天机器人

    使用 Python 实现一个简单的智能聊天机器人 文章目录 使用 Python 实现一个简单的智能聊天机器人 简要说明 总体的思路 需要准备的环境 接收用户的语音输入, 并将其存为音频文件 调用百度A ...

  9. 好想学python机器人_【Python成长之路】从零学GUI -- 制作智能聊天机器人

    [写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...

最新文章

  1. css删除线_前端删除文字贯穿线的方法有哪些
  2. 调研机构称明年全球数据中心基础设施支出将增长6%
  3. MathLab混合编程成功总结
  4. C语言跟随鼠标画方框,JS拖动鼠标画出方框实现鼠标选区的方法
  5. C++ Bayes‘ theorem贝叶斯定理的实现算法(附完整源码)
  6. AttributeError: 'Polar AxesSubplot' object has no attribute 'set_axis_bgcolor'
  7. 基于Linux命令行终端的ftp客户端程序
  8. Docker简单实践(一)
  9. 【渝粤教育】国家开放大学2019年春季 690化工原理及实验 参考试题
  10. 真正优秀的领导者,无非是做好这2件事
  11. (转)74系列芯片使用汇总
  12. [BScroll warn]: Can not resolve the wrapper DOM. 的解决
  13. html页面转excel文件,html格式文件转excel
  14. 重访命令征服泰伯利亚太阳
  15. 微信里iphone后退不刷新问题解决方案,真实有效
  16. Python实验报告 实验16 - Python计算生态
  17. 20189221 2018-2019-2 《密码与安全新技术专题》第三周作业
  18. js 获取汉字首字母和汉字转拼音
  19. Shiro 授权(权限)
  20. 关于正则表达式里含有空格的问题

热门文章

  1. 捷配PCB优品上线,到底有什么与众不同?
  2. 卸载BlackIce的过程
  3. c语言自动刷票代码,简单刷票系统 c语言实现(转)
  4. 基于朴素贝叶斯的垃圾邮件过滤实现
  5. andoid点击按钮(ImageButton)时改变按钮的背景图片 SelectorDemo
  6. fastjson2 介绍及使用
  7. 各种内部排序算法的比较和应用
  8. Echarts实现X轴拖动显示效果
  9. 音乐制作宿主软件-Cakewalk by BandLab v26.09.0.006 x64 WiN
  10. 【算术】 河内塔需要多少步