基于SpringBoot实现ChatGPT-QQ机器人

news2024/11/15 19:32:28

概述

近期ChatGPT火爆全球,在其官方网站上也列举了非常全面的应用案例,仅仅上线两个月活跃用户数已经达到1亿,成为历史上用户数增长最快的面向消费者的应用

快速体验

OpenAI官网对外提供了标准的 API 接口,可以通过HTTP请求进行交互

curl https://api.openai.com/v1/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "model": "text-davinci-003",
  "prompt": "今天星期几?",
  "max_tokens": 7,
  "temperature": 0
}'

由于在使用过程中必须要登录授权账户且在网页中进行ChatGPT对话,为了简化体验过程,我们采用机器人(QQ、微信) + token 的方式对 ChatGPT底层调用 进行封装,只需要添加 机器人 为好友后进行对话就可以完成ChatGPT的对接体验了!

GitHub地址:https://github.com/flyfhj/showcase-chatgpt-robot.git

准备工作

基于ChatGPT实现的QQ/WeChat机器人,目前只支持QQ

项目依赖三方组件库

  • mirai 高效率 QQ 机器人支持库

  • openai-java 基于 OpenAI 的 GPT-3 api 的 Java 库

注册ChatGPT账号(略)

参考:https://www.bilibili.com/read/cv20802226/

项目中配置ChatGPT相关属性

application.properties

# chatgpt secret
chatgpt.apikey=sk-xxxxxxxxxxxxxxxxxxxxxxxx

#completion properties
chatgpt.completion.model=text-davinci-003
chatgpt.completion.max-tokens=2048

# mirai bot
chatgpt.mirai.protocol=IPAD
chatgpt.mirai.heartbeat-strategy=STAT_HB
chatgpt.mirai.device-file-name=derives.json
chatgpt.mirai.working-dir=D:/dist

# qq
chatgpt.qq.number=3234327546
chatgpt.qq.password=123456

1、chatgpt.apikey配置ChatGPT账号对应的secretKey

2、若应用部署在Linux系统,注意修改chatgpt.mirai.working-dir的目录位置

3、如果启动过程中提示QQ版本过低,请升级至最新版本后再登录,则可以尝试修改chatgpt.mirai.protocol为其它协议 <ANDROID_PHONE、ANDROID_PAD、ANDROID_WATCH、IPAD、MACOS>

4、通过修改chatgpt.completion.max-tokens来控制交互数据的字符数(问题和答案的总和)

Maven dependency

<properties>
    <!-- 重定义kotlinx-coroutines-bom中的依赖的版本 -->
    <kotlin-coroutines.version>1.6.4</kotlin-coroutines.version>
</properties>
<dependencies>
    <dependency>
        <groupId>com.theokanning.openai-gpt3-java</groupId>
        <artifactId>client</artifactId>
        <version>0.9.0</version>
    </dependency>
    <dependency>
        <groupId>net.mamoe</groupId>
        <artifactId>mirai-core-jvm</artifactId>
        <version>2.13.3</version>
    </dependency>
    ...
</dependencies>

注意:mirai的版本必须是2.13.3+,以前的版本是通过QQ扫码授权,但是启动过程中一直显示net.mamoe.mirai.internal.utils.crypto.DecryptionFailedException异常,从2.13.3+版本开始QQ授权调整为短信认证的方式

IDEA应用启动成功
2023-02-08 15:53:57 I/Net 3234327546: Successfully loaded friendGroup list: 4 in total
2023-02-08 15:53:57 I/Net 3234327546: Successfully loaded group list: 0 in total.
2023-02-08 15:53:57 I/Net 3234327546: Scheduled refresh login session in 19d 23h 55min 0.0s.
2023-02-08 15:53:57 I/Net 3234327546: Scheduled key refresh in 23h 55min 0.0s.
2023-02-08 15:53:57 V/Bot 3234327546: Event: BotOnlineEvent(bot=Bot(3234327546))
2023-02-08 15:53:57 I/Bot 3234327546: Bot login successful.
2023-02-08 15:53:58.570  INFO 28376 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-02-08 15:53:58.586  INFO 28376 --- [           main] c.s.chatgpt.ChatGPTMainApplication       : Started ChatGPTMainApplication in 11.933 seconds (JVM running for 15.679)
2023-02-08 15:54:00 V/Net 3234327546: Saving bdh session to cache
2023-02-08 15:54:00 V/Net 3234327546: Send: ConfigPushSvc.PushResp(ConfigPushSvc.PushResp)
2023-02-08 15:54:00 V/Net 3234327546: Recv: ConfigPushSvc.PushReq
效果图

添加QQ机器人为好友,然后就可以对话了!
image

(ChatGPT集成微信待续)

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

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

相关文章

SignalR注册成Windows后台服务,并实现web前端断线重连

注意下文里面的 SignalR 不是 Core 版本&#xff0c;而是 Framework 下的 本文使用的方式是把 SignalR 写在控制台项目里&#xff0c;再用 Topshelf 注册成 Windows 服务 这样做有两点好处 传统 Window 服务项目调试时需要“附加到进程”&#xff0c;开发体验比较差&#xf…

RibbitMQ 入门到应用 ( 二 ) 安装

3.安装基本操作 3.1.下载安装 3.1.1.官网 下载地址 https://rabbitmq.com/download.html 与Erlang语言对应版本 https://rabbitmq.com/which-erlang.html 3.1.2.安装 Erlang 在确定了RabbitMQ版本号后&#xff0c;先下载安装Erlang环境 Erlang下载链接 https://packa…

vue通用后台管理系统

用到的js库 遇到的问题 vuex和 localStorage区别 vuex在内存中&#xff0c;localStorage存在本地localStorage只能存储字符串类型数据&#xff0c;存储对象需要JSON.stringify() 和 parse()…读取内存比读取硬盘速度要快刷新页面vuex数据丢失&#xff0c;localStorage不会vuex…

图的基本介绍和表示方式

图的基本介绍 为什么要有图这个基本数据结构? 我们还学习过线性表&#xff08;数组、队列、链表和栈&#xff09;和树&#xff0c;但是我们可以发现&#xff0c;线性表局限于一个直接前驱&#xff08;就是只能有唯一一个前面的结点&#xff09;和一个直接后继的&#xff08;…

Python+dilb 简单实现人脸检测(附代码)

如果dilb和face_recognition第三方包安装失败&#xff0c;请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客 目录 一、环境配置 二、前期知识 1 读取图片 2 灰度转换 解决报错cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\o…

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…

【Spark分布式内存计算框架——Spark Core】9. Spark 内核调度(上)

第八章 Spark 内核调度 Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据RDD的依赖关系构建DAG&#xff0c;基于DAG划分Stag…

PVE虚拟机篇-PVE虚拟机安装

安装包下载 前往Proxmox Virtual Environment下载ISO镜像文件&#xff0c;可以直接选择最新版本。 但是如果没有海外线路一般下载十分缓慢&#xff0c;甚至下不动&#xff0c;所以可以去中科大镜像源&#xff1a;中科大Proxmox Virtual Environment 制作U盘启动盘 可以使用…

SpringMVC:拦截器(12)

拦截器1. 拦截器概念2. 拦截器入门案例2.1 环境准备2.2 拦截器开发步骤1: 创建拦截器类步骤2: 配置拦截器类步骤3: SpringMVC添加SpringMvcSupport包扫描和interceptor包扫描步骤4: 简化SpringMvcSupport的编写5 测试3. 拦截器参数解析&#xff08;了解&#xff09;3.1 前置处理…

字节一面:在浏览器地址栏输入一个 URL 后回车,背后发生了什么?

近段时间&#xff0c;有小伙伴面试字节&#xff0c;说遇到一个面试题&#xff1a; 在浏览器地址栏输入一个 URL 后回车&#xff0c;背后发生了什么&#xff1f; 这里尼恩给大家做一下系统化、体系化的梳理&#xff0c;使得大家可以充分展示一下大家雄厚的 “技术肌肉”&#xf…

c# 自定义隐式转换与运算符重载

用户定义的显式和隐式转换运算符 参考代码 用户定义的显式和隐式转换运算符 - 提供对不同类型的转换 | Microsoft Learn 代码例程 using System;public readonly struct Digit {private readonly byte digit;public Digit(byte digit){if (digit > 9){throw new Argumen…

电子科技大学操作系统期末复习笔记(一):操作系统概述

目录 前言 操作系统概述 操作系统的目标与功能 操作系统的定义 目标 功能 操作系统的历史 单用户系统 简单批处理系统 多道批处理系统 分时系统 个人电脑 → 分布式系统 → 互联网时代 → 移动计算时代 → ...... 实时系统 操作系统的基本特征 并发 共享 虚拟…

第一章 PDF语法

第一章 PDF语法PDF ObjectsNull ObjectsBoolean ObjectsNumeric ObjectsName ObjectsString ObjectsArray ObjectsDictionary ObjectsName treesNumber treesStream ObjectsDirect versus Indirect ObjectsFile StructureWhite-SpaceThe Four Sections of a PDFHeaderTrailerBo…

Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)

文章目录1. Sa-Token 介绍2. 登录认证2.1 登录与注销2.2 会话查询2.3 Token 查询3. 权限认证3.1 获取当前账号权限码集合3.2 权限校验3.3 角色校验4. 前后台分离&#xff08;无Cookie模式&#xff09;5. Sa-Token 集成 Redis6. SpringBoot 集成 Sa-Token6.1 创建项目6.2 添加依…

Python 高级编程之网络编程 Socket(六)

文章目录一、概述二、Python socket 模块1&#xff09;Socket 类型1、创建 TCP Socket2、创建 UDP Socket2&#xff09;Socket 函数1、服务端socket函数2、客户端socket函数3、公共socket函数三、单工&#xff0c;半双工以及全双工通信方式的区别四、单工&#xff0c;半双工以及…

MWORKS--MoHub介绍

MWORKS--MoHub介绍1 介绍1.1 简介1.2 功能特征2 快速上手2.1 进入工作台2.2 新建仓库并进入建模空间2.3 建模进入建模工作空间加载模型库新建模型2.4 仿真2.5 后处理曲线、动画2.6 查看模型信息3 使用手册参考1 介绍 1.1 简介 MWORKS.MoHub 支持工业知识、经验、数据的模型化…

电子技术——BJT差分输入对

电子技术——BJT差分输入对 本节我们来讨论BJT差分输入对。 共模输入 下图是BJT差分输入对的基本原理图&#xff1a; 首先我们考虑两端输入共模信号 VCMV_{CM}VCM​ &#xff1a; 此时 vB1vB2VCMv_{B1} v_{B2} V_{CM}vB1​vB2​VCM​ 因为电路的对称结构&#xff0c;所以 i…

LeetCode 热题 C++ 114. 二叉树展开为链表

给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&#xf…

详细解读503服务不可用的错误以及如何解决503服务不可用

文章目录1. 问题引言2. 什么是503服务不可用错误3 尝试解决问题3.1 重新加载页面3.2 检查该站点是否为其他人关闭3.3 重新启动设备3.3 联系网站4. 其他解决问的方法1. 问题引言 你以前遇到过错误503吗&#xff1f; 例如&#xff0c;您可能会收到消息&#xff0c;如503服务不可…

ccc-Logistic Regression-李宏毅(5)

文章目录Step 1: Function SetStep 2: Goodness of a FunctionStep 3: Find the best functionWhy not Logistic Regression Square ErrorDiscriminative v.s. GenerativeMulti-class Classification(3 Class)Limitation of Logistic RegressionCascading logistic regression…