小程序智能聊天机器人(一)

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://www.rhkb.cn/news/10524.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT版佛祖爆火出圈:施主,说出你的烦恼

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 来源丨量子位&#xff08;ID&#xff1a;QbitAI&#xff09; 白交 发自 凹非寺 https://mp.weixin.qq.com/s/xk-AnFOQeJtnJsSMaJcDdQ ChatGPT现在已经在为人类“佛系…

日本超高人气聊天软件LINE最全注册攻略来了

简介&#xff1a;Line是一款即时的通讯软件&#xff0c;全球注册用户超过4亿&#xff0c;在日本常用的聊天软件就是Line&#xff0c;Line的特点是能够让用户在有网络的情况下&#xff0c;随时随地免费和亲朋好友通话&#xff0c;同时也可以通过Line使用购物&#xff0c;行动支付…

适合程序员表白的情话【保你脱单】

写在前面&#xff1a; 我是 「扬帆向海」&#xff0c;这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录&#xff0c;如果您对 Java、算法 感兴趣&#xff0c;可以关注我的动态&am…

网页版女朋友表白告白代码,可轻松定制表白内容、认识时间等,html爱心表白代码

网页版女朋友表白告白代码&#xff0c;可轻松定制表白内容、认识时间等&#xff0c;html爱心表白代码 运行效果 这里&#xff0c;定制要修改的地方主要有&#xff1a; 1.时间&#xff1a;请修改love.html,第188行&#xff0c;setfullyear设置年月日&#xff0c;然后设置时&…

Python表白比心

本文介绍运用Python中的turtle库控制函数画比心图。    文章目录 一、效果展示二、代码详解1 导入库2 播放音乐3 画手4 定义画心的函数5 定义写名字的函数并实现动态画心 一、效果展示 在介绍代码之前&#xff0c;先来看下本文的实现效果。 可以参考Pinstaller(Python打包为e…

程序员表白代码大全,快来向你的ta表白吧___

❤ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套) 】 &#x1…

不知道怎么跟喜欢的人表白 用这些代码给她

1.一行代码画爱心 print(\n.join([.join([(Love[(x-y)%4]if((x*0.05)**2(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<0 else )for x in range(-30,30)])for y in range(15,-15,-1)])) 效果图 文字加爱心 import turtle import math turtle.pen() tturtle t.up() t.goto(0,150…

手机微信表白弹窗,用微信就能撩到小姐姐小哥哥!!!

最近表白弹窗的撩妹方法在抖音非常火爆&#xff0c;随便录制一条都分分钟上百万点赞。 ▼ 小编之前也给大家介绍过制作方法&#xff0c;点击回顾【抖音点赞200w的“表白”弹窗&#xff0c;超强技能来袭&#xff01;】 ▼ 但之前的教程只能在电脑使用&#xff0c;很多宝宝拍砖…

Python绘制表白爱心源码【女神看了绝对不会拒绝的你的表白嘿嘿】

一个人在沙漠里快要饿死了&#xff0c;这时他捡到了神灯。 神灯&#xff1a;“我只可以实现你一个愿望&#xff0c;快说吧&#xff0c;我赶时间。” 人&#xff1a;“我要老婆……” 神灯立刻变出一个美女&#xff0c;然后不屑的说&#xff1a;“都快饿死了还贪图美色&#xff…

用R给心仪的对象表白吧

简介 早上听完讲座才想起来&#xff0c;今天520了。那这样吧&#xff0c;小编给做了个小小的惊喜给读者们&#xff0c;年轻的盆友可以用这“小玩意”给自己心仪的对象表白了。 其实就是一个简单的ggplot绘制爱心&#xff0c;做一点细节处理&#xff0c;并加入相应文字啦&#…

【HTML超浪漫的表白网页代码】不会编程也能制作送给女朋友的表白网站

❤ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套) 】 &#x1…

520到了,用Python给女朋友比心表白

每到各种节日&#xff0c;不少小伙伴们都会遇到这样一个世纪问题——怎么给女朋友/老婆一个与众不同的节日惊喜。 这不又要到520了嘛&#xff0c;我们可以尝试用python给女朋友比心表白&#xff01;就像下面这样???? 下面快快就带大家来领略一下用Python表白的方式&#xf…

教你如何制作浪漫的表白网站

底部有彩蛋&#xff0c;不要错过(๑╹◡╹)&#xff89;""" #前言 前不久是情人节&#xff0c;一些小伙伴向我请求网页表白的教程&#xff0c;但因为比较忙&#xff0c;所以教程一直迟迟没有出来&#xff0c;趁着今天的闲暇时光&#xff0c;我把教程写出来。 虽…

【男生女生表白攻略】手把手教你制作有创意的表白软件

总有那么一个人让你脸红心跳&#xff0c;爱了却不敢说出来&#xff0c;真可惜。 那怎样才能向Ta表达自己真实的心情&#xff0c;怎样才能有机会追求自己所爱。必要的时候来学一些小技巧帮你爱情大作战。今天就跟大家介绍一个新颖有创意的表白方式&#xff0c;最适合不敢表白的人…

Python让女生无法拒绝的表白源代码

Python让女生无法拒绝的表白源代码&#xff0c;该程序在不接受表白时无法退出窗口&#xff0c;无法通过表白窗口的叉或程序内不接受按钮退出&#xff0c;需最大化表白窗口并点接受表白&#xff0c;方可退出。需要表白女生的图片可进行替换&#xff0c;图片也主程序放置在同一目…

明天就是5.20,这几个c语言表白代码发给你喜欢的女生,要是还没有女朋友直接来找我!!!

转眼间&#xff0c;今天好像已经2021年5月19日&#xff0c;明天好像是5月20号哎&#xff01;&#x1f614; 没想到吧&#xff01;一年一度的5.20它又来了。 又&#xff0c;又又又又又又来了&#xff01; 它踩着单生狗的身体&#xff0c;贱贱的向我们走来。&#x1f631; 是不…

520创意表白网站,让女友对你死心塌地。女神轻松领回家

可能很多女生都会觉得程序员都是直男&#xff0c;不懂浪漫。但是&#xff01;&#xff01;&#xff01;看完这个教程之后&#xff0c;让女友对你死心塌地。 这是一个基于js和html搭建的简单界面&#xff0c;你只需要把代码下载下来&#xff0c;然后再简单的改一下代码信息&…

HTML可用于情侣表白的爱心代码~,赶紧跟着操作,让她也拥有属于你的爱心吧。

文章目录 前言一、效果图二、操作步骤第一步第二步第三步第四步第五步第六步 源码 前言 最近随着电视剧《点燃我温暖你》的火热播出&#xff0c;剧中帅气学霸李洵的炫酷爱心代码也迅速火出了圈&#xff0c;爱心素材也异常火爆&#xff0c;我在这里整理了一份大家有需自取哦~ 可…

【七】springboot启动源码 - finishBeanFactoryInitialization

finishBeanFactoryInitialization 源码解析 Instantiate all remaining (non-lazy-init) singletons. 初始化剩下非懒加载的实例对象 finishBeanFactoryInitialization方法第918行&#xff0c;beanFactory.preInstantiateSingletons(); preInstantiateSingletons方法&#xff…

AI工程化实践-如何构造一个AI应用

最近大模型非常火爆&#xff0c;基于大模型的应用也层出不穷&#xff0c;比较火的比如AutoGPT&#xff0c;当然也有很多垂直领域的应用。那么如何基于大模型的能力快速的建设一个垂直领域的AI应用呢&#xff0c;这就涉及到了AI工程化建设。在整个AI工程化建设的过程中&#xff…