微信小程序_调用openAi搭建虚拟伙伴聊天

news2024/11/16 1:24:48

微信小程序_调用openAi搭建虚拟伙伴聊天

  • 背景
  • 效果
    • 关于账号注册
    • 接口实现
      • 8行python搞定
    • 小程序实现
    • 页面结构
    • 数据逻辑
    • 结速

背景

从2022年的年底,网上都是chagpt的传说,个人理解这个chatgpt是模型优化训练,我们在用chatgpt的时候就在优化这个模型,这个是付费的,换言之,我们都是chagpt的韭菜,OpenAI 是一个研究组织,chagpt是他们的一个产品工具。
带着好奇心做了个小程序的聊天页面。

效果

像个机器人聊天
在这里插入图片描述

关于账号注册

由于国内电话不支持绑定openAi的邮箱,需要虚拟号码激活具体步骤网上都有教程

接口实现

8行python搞定

install openai,获取apiKey,调用即可向openai发送请求

def getOpenAiText(request):
    if request.method == 'GET':
        text = request.GET.get('text', default='')
        responseText = openai.Completion.create(
            model="text-davinci-003",
            prompt=text,
            max_tokens=100,
            temperature=0
        )
        return JsonResponse({"data": responseText, "code": 200,"msg":'success'})
    return JsonResponse({"data": {}, "code": 0,"msg":'not allowed'})

小程序实现

设计思路:灵感来源微信对话框模式一对一
只需要设计数据结构为
[{
question:‘’,
answer:‘’,
isEdit:false
}]
可以显示问答的状态
在添加一个currentIndex标识编辑的状态,遍历数字显示,加上时间绑定即可实现,
缓存采用storage。

页面结构

<view class="container-future">
  <view class="form-container-api">
    <view>
      <button style="width: 100%;" type="primary" formType="submit">openai调用</button>
    </view>
    <view class="chat-container">
      <view wx:for="{{ chatObjConfig.option }}" wx:for-index="index" wx:for-item="item" wx:key="index">
        <view class="form-request">
          <view wx:if="{{item.isEdit}}">问:$ <input bindinput="bindKeyInput" placeholder="输入关键词" data-column-index="{{index}}" disabled="{{isLoading}}" /></view> 
          <view wx:else class='questioned'>
          <view>
            问:$ {{item.question}}
          </view>
          </view>
        </view>
        <view class="form-response">
          
          <view class='questioned'>openai回答:$ {{item.answer}}</view>
        </view>
      </view>
    </view>
    <view class="form-submit">
      <button style="width: 100%;" type="primary" bindtap="search" loading="{{isLoading}}" disabled="{{isLoading}}">发送</button>
    </view>
  </view>
  <view class="loading" wx:if="{{isLoading}}">
    <view class="loader-child" />
    <view class="loader-child" />
    <view class="loader-child" />
  </view>
</view>

数据逻辑

// pages/future/future.js
const app = getApp();
const baseUrl = app.remoteConfig.baseUrl;
Component({

  /**
  * 继承父级样式
  */
  options: {
    addGlobalClass: true,
  },
  /**
   *组件的初始数据
   */
  data: {
    searchOpenAiText:'',
    responseText:'',
    // questions,answer,index
    chatObjConfig:{
      option:[{
        question:'',
        answer:'',
        isEdit:true
      }],
      currentIndex:0
    }
  },
  lifetimes: {
    // 生命周期函数,可以为函数,或一个在 methods 段中定义的方法名
    attached: function () {
      if(wx.getStorageSync('openAiOptions')){
        this.setData(
          {
            chatObjConfig:wx.getStorageSync('openAiOptions')
          }
        )
      }
    },
    moved: function () { },
    detached: function () {
      wx.setStorageSync('openAiOptions', this.data.chatObjConfig)
    },
  },

  methods: {
    bindKeyInput(e) {
      const {columnIndex}=e.currentTarget.dataset
      console.log('this.data.chatObjConfig',this.data.chatObjConfig)
      const option=this.data.chatObjConfig.option
      option.some((item,index)=>{
        if(columnIndex===index){
          item.question=e.detail.value
          item.isEdit=true
          return true
        }
        return false
      })
      this.setData({
        searchOpenAiText:e.detail.value,
        chatObjConfig:{
          option:option,
          currentIndex:columnIndex
        }
      })
    },
    search(e){
      console.log(this.data.searchOpenAiText)
      if(!this.data.searchOpenAiText){
        wx.showModal({
          cancelColor: 'cancelColor',
          title:'请输入!'
        })
      }
      wx.showLoading({
        title: '加载中',
      })
      this.setData({
        isLoading: true
      })
      console.log(e)
      const path = '/common-api/searchOpenAiText/'
      const headers = { 'Content-Type': 'application/json;charset=UTF-8' }
      const params={
        "text":this.data.searchOpenAiText
      }
      const thisBack=this
      return new Promise((resolve, reject) => {
        wx.request({
          url: baseUrl + path,
          headers: headers,
          data:params,
          method: 'GET',
          success: (res) => {
            console.log(res,'res')
            const data=res.data.data
            const option=thisBack.data.chatObjConfig.option
            const currentIndex=thisBack.data.chatObjConfig.currentIndex
            const choices=data.choices
            console.log('choices',choices)
            option.some((item,index)=>{
              if(currentIndex===index){
                item.answer=choices?choices.map(choicesItem=>{return choicesItem.text}).join('\n'):'。。。未知'
                item.isEdit=false
                return true
              }
              return false
            })
            const chatObjConfig={
              option:option,
              currentIndex:currentIndex+1
            }
            option.push({
              question:'',
              answer:'',
              isEdit:true
            })
            thisBack.setData(
              {
                isLoading: false,
                chatObjConfig:chatObjConfig
              }
            )
            setTimeout(function () {
              wx.hideLoading()
            }, 2000)
            resolve(res)
          },
          fail: error => {
            thisBack.setData({
              isLoading: false
            })
            setTimeout(function () {
              wx.hideLoading()
            }, 2000)
            reject(error)
          }
        });
      })
    }
  }
})

结速

最后我的小程序:yma16
欢迎大家访问!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九龙证券|连续13周净流入!北向资金爆买“中字头”股票

Wind数据显现&#xff0c;本周北向资金净流入A股达29.33亿元&#xff0c;其间周四净流入121亿元&#xff0c;其他四个交易日均为净流出状况。尽管本周北向资金流入A股力度放缓&#xff0c;可是仍然保持着周度接连净流入态势。 接连第13周净流入 Wind数据显现&#xff0c;从202…

Redis核心知识点

Redis核心知识点Redis核心知识点大全五种数据类型redis整合SpringBoot序列化问题渐进式扫描慢查询缓存相关问题数据库和缓存谁先更新缓存穿透缓存雪崩缓存击穿实际应用超卖问题分布式锁全局唯一ID充当消息队列Feed流附近商户签到HyperLogLog实现UV统计持久化RDBAOF持久化小结事…

整型提升+算术转换——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容是之前操作符那篇博客中没有讲完的内容&#xff0c;整型提升这个小知识点也非常重要&#xff0c;那现在&#xff0c;就让我们进入操作符的世界吧 隐式类型转换 算术转换 操作符的属性 隐式类型转换 表达式求值的顺序一部…

opencv显示图像

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

带头节点的单链表的就地逆置

目录 1.题目背景 2.思路方法分析 2.1采用循环实现的就地逆置法 2.2 递归方式实现的逆置 3.金句省身 1.题目背景 本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数。L是一个带头结点的单链表&#xff0c;函数ListReverse_L(LinkList &L)要求在不新开辟节点的…

使用自己的数据集,测试mmrotate新网络rotated_rtmdet,旋转目标检测

1.安装 &#xff01;&#xff01;&#xff01;&#xff01;一定不要安装mmrotate 1.版本需求 mmcv 2.0.0rc2 mmdet 3.0.0rc5 mmengine 0.5.0 不用安装mmcv-full 下载mmrotate 1.x 源码 &#xff08;不要下载默认的master&#xff0c;因为新的网络只在1.x版本中&#xff09; …

【前端】Vue项目:旅游App-(23)detail:房东介绍、热门评论、预定须知组件

文章目录目标过程与代码房东介绍landlord热门评论HotComment预定须知Book效果总代码修改或添加的文件detail.vuedetail-book.vuedetail-hotComment.vuedetail-landlord.vue参考本项目博客总结&#xff1a;【前端】Vue项目&#xff1a;旅游App-博客总结 目标 根据detail页面获…

我用python/C++调用ChatGPT自制了一个聊天问答机器人

目录1 ChatGPT完整版2 Python/C调用ChatGPT2.1 获取API秘钥2.2 测试API功能2.3 设计简单UI3 聊天问答1 ChatGPT完整版 2015年&#xff0c;OpenAI由马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始人彼得蒂尔等硅谷科技大亨创立&#xff0c;公…

【脚本开发】运维人员必备技能图谱

脚本&#xff08;Script&#xff09;语言是一种动态的、解释性的语言&#xff0c;依据一定的格式编写的可执行文件&#xff0c;又称作宏或批处理文件。脚本语言具有小巧便捷、快速开发的特点&#xff1b;常见的脚本语言有Windows批处理脚本bat、Linux脚本语言shell以及python、…

Spring缓存Demo

Spring中的缓存用法:有说错请指正 启动类加EnableCache 注解很多,这里举例几个实用的 第一组 value和key都没什么特别的含义,随你自己取,注意key里面是包了一层的 Cacheable(value"user",key "findUsers") 第一次查询的时候,会查数据库,然后将返回结果…

【GlobalMapper精品教程】045:空间分析工具(2)——相交

GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述相交工具的使用。 文章目录 一、实验数据二、符号化设置三、相交运算四、结果展示五、心灵感悟一、实验数据 加载配套实验数据(…

Hadoop安装 --- 简易安装Hadoop

目录 1、使用xftp工具 在opt目录下创建install和soft文件 2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 刷新资源 运行文件 格式化 启动所有进程 Ha…

ChatGPT到底有多牛?博主带你亲测

文章目录论文项目代码算法学习情感职业回答知乎ChatGpt网页版与客户端版个人评价论文 问他毕设框架&#xff1a; 让他帮我写一段毕设背景部分&#xff1a; 项目代码 我让他帮我用Django写一个demo网站&#xff1a; 算法 matlab写遗传算法&#xff1a; 问一个数据结构&…

Java是如何创建线程的(二)从glibc到kernel thread

Java是如何创建线程的&#xff08;二&#xff09;从glibc到kernel thread 背景 上一节我们讨论了java线程是如何创建的&#xff0c;看了看从java代码层面到jvm层面的源码里都干了什么。 整个流程还是比较复杂的&#xff0c;我将上一节总结的调用时序图贴在下面&#xff0c;方…

Flutter Widget - Container 容器

Container 属性 child 容器包含的子组件color 容器背景色padding 内边距margin 外边距decoration 定义容器形状、颜色alignment 子组件在容器内的对齐方式constraints 定义宽高width 宽(可选)height 高(可选)transform 变换transformAlignment 变换原点的相对位置foregroundDe…

【Unity3D 常用插件】Haste插件

一&#xff0c;Haste介绍 Haste插件是一款针对 Unity 3D 的 Everthing软件&#xff0c;可以实现基于名称快速定位对象的功能。Unity 3D 编辑器也自带了搜索功能&#xff0c;但是在 project视图 和 Hierarchy视图 中的对象需要分别查找&#xff0c;不支持模糊匹配。Haste插件就…

MySQL-InnoDB数据页结构浅析

在MySQL-InnoDB行格式浅析中&#xff0c;们简单提了一下 页 的概念&#xff0c;它是 InnoDB 管理存储空间的基本单位&#xff0c;一个页的大小一般是 16KB 。 InnoDB 为了不同的目的而设计了许多种不同类型的 页&#xff1a; 存放表空间头部信息的页存放 Insert Buffer信息的…

Maven专题总结

1. 什么是Maven Maven 是一个项目管理工具&#xff0c;它包含了一个项目对象模型 (POM&#xff1a; Project Object Model)&#xff0c;一组标准集合&#xff0c;一个项目生命周期(Project Lifecycle)&#xff0c;一个依赖管理系统(Dependency Management System)&#xff0c;和…

3分钟,学会了一个调试CSS的小妙招

Ⅰ. 作用 用于调试CSS , 比控制台添更加方便&#xff0c;不需要寻找 &#xff1b;边添加样式&#xff0c;边可以查看效果&#xff0c;适合初学者对CSS 的理解和学习&#xff1b; Ⅱ. 快速实现&#xff08;两边&#xff09; ① 显示这个样式眶 给 head 和 style 标签添加一个…

Power BI 筛选器函数---Window实例详解

一、Window函数 语法&#xff1a; Window ( <起始位置>,<起始位置类型>,<结束位置>,<结束位置类型>, [<关系>], [<OrderBy>],[空白],[PartitionBy] ) 含义&#xff1a; 对指定分区&#xff08;PartitioinBy)中的行&#xff08;关系表&…