SpringBoot对接OpenAI
SpringBoot对接OpenAI
随着人工智能技术的飞速发展,越来越多的开发者希望将智能功能集成到自己的应用中,以提升用户体验和应用的功能。OpenAI作为一家领先的人工智能公司,提供了许多先进的自然语言处理和语言生成模型,其中包括深受欢迎的GPT-3.5模型。本文将介绍如何利用Spring Boot框架与OpenAI进行对接,为你的应用增加强大的智能能力。
1、OpenAI概述:
OpenAI是一家人工智能研究实验室,致力于构建人类水平通用人工智能。他们的GPT-3.5模型是目前最先进的自然语言处理模型之一,能够理解和生成自然语言文本。通过与OpenAI对接,你可以将这一强大的模型嵌入到你的应用中,实现自动化文本生成、智能问答、机器翻译等功能。
2、Spring Boot 简介:
Spring Boot是一个用于构建独立的、基于生产级别的Java应用程序的框架。它简化了Spring应用的开发过程,提供了一系列的工具和插件,帮助开发者快速搭建稳健的应用。通过Spring Boot,你可以轻松创建RESTful API,处理HTTP请求,以及管理应用的依赖等。
3、搭建Spring Boot项目:
- 环境准备:确保你已经安装了Java开发环境和Maven构建工具。
- 创建Spring Boot项目:使用Spring Initializr创建一个新的Spring Boot项目,选择所需的依赖,如Web、OpenAI API等。
- 配置OpenAI API密钥:在application.properties或application.yml文件中,设置OpenAI API的访问密钥,确保可以在项目中调用OpenAI的服务。
3.1、环境准备
这里就不多说了,直接使用maven搭建一个SpringBoot项目
3.2、引入依赖
本次案例比较简单,就是一个干净的SpringBoot项目,再引入Hutool工具包即可,下面是全部的pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.pp.chat</groupId>
<artifactId>chatgpt-api-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- Fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<!-- HuTool工具包 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<!-- knife4j生成接口文档 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok简化实体构造方法 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
3.3、配置文件
knife4j:
enable: true
ChatGPT:
connect-timeout: 60000 # HTTP请求连接超时时间
read-timeout: 60000 # HTTP请求读取超时时间
variables: # 自定义变量:
apiKey: xxx # 你的 OpenAI 的 API KEY
model: gpt-3.5-turbo # ChartGPT 的模型
maxTokens: 500 # 最大 Token 数
temperature: 1 # 该值越大每次返回的结果越随机,即相似度越小
4、核心代码
4.1、项目结构
4.2、实体类
1、GPTChoice
package com.pp.chat.entity;
import lombok.Data;
/**
* TODO 文本模型返回内容
*
* @author ss_419
* @version 1.0
* @date 2023/8/5 15:47
*/
@Data
public class GPTChoice {
private String text;
private Integer index;
private Message message;
}
2、GPTData
package com.pp.chat.entity;
import lombok.Data;
/**
* TODO 图形模型返回内容
*
* @author ss_419
* @version 1.0
* @date 2023/8/5 11:37
*/
@Data
public class GPTData {
private String url;
}
3、GPTRequest
package com.pp.chat.entity;
import lombok.Data;
import java.util.List;
/**
* TODO 问题请求体
*
* @author ss_419
* @version 1.0
* @date 2023/8/5 15:47
*/
@Data
public class GPTRequest {
/*** 问题*/
private String askStr;
/*** 文本回答*/
private String replyStr;
/*** 图形回答*/
private List<GPTData> replyImg;
}
4、GPTResponse
package com.pp.chat.entity;
import lombok.Data;
import java.util.List;
/**
* TODO 文本模型返回响应体
*
* @author ss_419
* @version 1.0
* @date 2023/8/5 15:47
*/
@Data
public class GPTResponse {
private String id;
private String object;
private String created;
private String model;
private List<GPTChoice> choices;
}
5、GPTImageResponse
package com.pp.chat.entity;
import lombok.Data;
import java.util.List;
/**
* TODO 图形模型返回响应体
*
* @author ss_419
* @version 1.0
* @date 2023/8/5 15:47
*/
@Data
public class GPTImageResponse {
private String created;
private List<GPTData> data;
}
6、Message
package com.pp.chat.entity;
import lombok.Data;
/**
* TODO 文本模型消息体
*
* @author ss_419
* @version 1.0
* @date 2023/8/5 10:30
*/
@Data
public class Message {
private String role;
private String content;
}
4.3、业务类
ChartGPTService
package com.pp.chat.service;
import com.pp.chat.entity.GPTData;
import java.util.List;
public interface ChartGPTService {
/**
* 调用文本模型ai
* @param prompt
* @return
*/
String send(String prompt);
/**
* 调用图片模型ai
* @param prompt
* @return
*/
List<GPTData> sendImg(String prompt);
}
ChartGPTServiceImpl
package com.pp.chat.service.impl;
import cn.hutool.http.Header;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.pp.chat.entity.*;
import com.pp.chat.service.ChartGPTService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service("chartGPTService")
public class ChartGPTServiceImpl implements ChartGPTService {
@Value("${ChatGPT.variables.apiKey}")
private String apiKey;
@Value("${ChatGPT.variables.maxTokens}")
private String maxTokens;
@Value("${ChatGPT.variables.model}")
private String model;
@Value("${ChatGPT.variables.temperature}")
private String temperature;
@Override
public String send(String prompt) {
JSONObject bodyJson = new JSONObject();
Message message = new Message();
message.setContent(prompt);
message.setRole("system");
ArrayList<Message> messages = new ArrayList<>();
messages.add(message);
bodyJson.put("messages", messages);
bodyJson.put("model", model);
bodyJson.put("max_tokens", Integer.parseInt(maxTokens));
bodyJson.put("temperature", Double.parseDouble(temperature));
Map<String, Object> headMap = new HashMap<>();
// headMap.put("Authorization", "Bearer " + apiKey);
HttpResponse httpResponse =
// 官网请求,没梯子不能访问
// HttpUtil.createPost("https://api.openai.com/v1/chat/completions")
// 使用代理地址 https://api.openai-proxy.com/
HttpUtil.createPost("https://api.openai-proxy.com/v1/chat/completions")
.header(Header.AUTHORIZATION, "Bearer " + apiKey)
.header(Header.CONTENT_TYPE, "application/json")
.body(JSONUtil.toJsonStr(bodyJson)).execute();
String resStr = httpResponse.body();
GPTResponse gptResponse = JSONUtil.toBean(resStr, GPTResponse.class);
return gptResponse.getChoices().get(0).getMessage().getContent().replaceAll("\\n", "");
}
@Override
public List<GPTData> sendImg(String prompt) {
JSONObject bodyJson = new JSONObject();
bodyJson.put("prompt", prompt);
bodyJson.put("n", 2);
bodyJson.put("size", "1024x1024");
Map<String, Object> headMap = new HashMap<>();
headMap.put("Authorization", "Bearer " + apiKey);
HttpResponse httpResponse =
// 官网请求,没梯子不能访问
// HttpUtil.createPost("https://api.openai.com/v1/chat/completions")
// 使用代理地址 https://api.openai-proxy.com/
HttpUtil.createPost("https://api.openai-proxy.com/v1/images/generations")
.header(Header.AUTHORIZATION, "Bearer " + apiKey)
.header(Header.CONTENT_TYPE, "application/json")
.body(JSONUtil.toJsonStr(bodyJson)).execute();
String resStr = httpResponse.body();
GPTImageResponse gptResponse = JSONUtil.toBean(resStr, GPTImageResponse.class);
List<GPTData> data = gptResponse.getData();
return data;
}
}
4.4、Boot启动类
Main
package com.pp.chat;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author ss_419
*/
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class,args);
System.out.println("Hello world!");
}
}
5、测试
启动项目,使用knife4j进行接口测试
接口文档默认地址:http://localhost:8080/doc.html
5.1、测试文本模型
5.2、测试图片模型
gpt生成的图片在链接中
6、总结
通过Spring Boot与OpenAI的对接,我们可以轻松将强大的自然语言处理功能集成到我们的应用中,为用户提供更智能、更便捷的服务。同时,结合Spring Boot强大的开发能力,我们可以快速搭建出高效稳定的智能应用,满足不断变化的市场需求。未来,随着OpenAI技术的不断演进,我们将能够构建更多创新的智能应用,为用户带来更加令人惊喜的体验
SpringBoot对接OpenAI的更多相关文章
- 实现springboot对接腾讯云短信
1,导入pom依赖 <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>q ...
- 【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
logo 避坑宝 v1.0.0 基于SpringBoot+uniapp企业黑红名单吐槽小程序 项目介绍 避坑宝 [避坑宝]企业黑红名单吐槽小程序是一个具有吐槽发布企业信息的一个平台,言论自由,评判自定 ...
- springboot集成支付宝的支付(easy版)
SpringBoot对接支付宝 需要先注册账号 到支付宝开发者平台创建网页支付应用 启用公钥模式 需要使用到appId和下面的两个秘钥 写配置信息的代码 1.引入依赖 <dependency&g ...
- 【从零开始】Docker Desktop:听说你小子要玩我
前言 缘由 捡起遗忘的Docker知识 由于本狗近期项目紧任务重,高强度的搬砖导致摸鱼时间下降.在上线项目时,看到运维大神一系列骚操作,docker+k8s的知识如过眼云烟,忘得干净的很.所以想重新恶 ...
- 【对比】文心一言对飚ChatGPT实操对比体验
前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...
- 【有问必答】搭建uniapp项目流程手把手教学
前言 缘由 博友有问,狗哥必答 前段时间,博友加本狗微信,询问uniapp的学习方法.本狗资历浅薄,没有专门学过uniapp,只能将自己日常开发uniapp的基本流程和步骤进行分享,希望可以略尽绵薄之 ...
- chatgpt接口开发笔记1:completions接口
chatgpt接口开发笔记1:completions接口 个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.t ...
- springboot项目对接支付宝支付
支付宝对接文档 一.准备工作 1. 首先要到 蚂蚁金服开发者中心 https://openhome.alipay.com/platform/home.htm 注册商家账户,并认证. 2.下载java版 ...
- 支付宝沙箱服务 (结合springboot实现,这里对接的是easy版本,工具用的是IDEA,WebStrom)
一:打开支付宝开发平台,登录,然后点击控制台 https://open.alipay.com/ 二:滚动到底部,选着沙箱服务 三:获取到对接要用的appId和公钥私钥 四:打开IDEA导入所需的xml ...
- springBoot数据库jpa+对接mybatis
1 spring Data jpa hibernate引领数据访问技术,使用orm对象关系映射来进行数据库访问,通过模型和数据库进行映射,通过操作对象实现对数据库操作,把数据库相关操作从代码中独立出 ...
随机推荐
- Rsync文件同步及备份
Rsync文件同步及备份 目录 Rsync文件同步及备份 Rsync基本概述 远程文件传输 服务端口 Rsync的三种传输模式 本地方式(类似cp) 远程方式(类似scp) 守护进程(C/S结构) R ...
- 2022-06-17:给定一个数组arr,含有n个数字,可能有正、有负、有0, 给定一个正数k。 返回所有子序列中,累加和最大的前k个子序列累加和。 假设K不大,怎么算最快? 来自Amazon。
2022-06-17:给定一个数组arr,含有n个数字,可能有正.有负.有0, 给定一个正数k. 返回所有子序列中,累加和最大的前k个子序列累加和. 假设K不大,怎么算最快? 来自Amazon. 答案 ...
- Maven安装、阿里云镜像配置、Idea中创建Maven项目、Tomcat的部署
我为什么要学这个技术? 为了更快创建web开发项目和jar包 在javaweb开发中,需要使用大量的jar包,我们手动去导入: 如何能够让一个东西自动帮我导入和配置这个jar包 因此,Maven诞生了 ...
- springboot 项目国际化+登录拦截器
项目页面国际化 1.语言配置文件 需要下载插件Resource Bundle Editor 新建国际目录i18n 在properties配置文件中自定义 2.前端index页面要设置语言参数传递给后端 ...
- Windows 安装ActiveMq5.16.6
Windows 安装ActiveMq5.16.6 前言 最近因为需要在项目中使用MQ,所以就想在我的老Windows机器上装个ActiveMq. 1. 下载安装 先到Activemq官网下载安装需要版 ...
- 适合Windows桌面、Material Design设计风格、WPF美观控件库【强烈推荐】
推荐一个在Github已start超过13.6K,非常流行.美观的WPF控件库. 项目简介 这是一个适用于Windows桌面,全面且易于使用的控件库,遵循Google推测的Material Desig ...
- CatBoost的分布式训练与调优:解决大规模数据集问题
目录 <CatBoost 的分布式训练与调优:解决大规模数据集问题> 引言 随着深度学习的兴起,大规模数据集的存储和处理成为一个重要的技术挑战.由于数据集的规模巨大,传统的分布式训练方法已 ...
- Enhancingdecisiontreeswithtransferlearningforsentimenta
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...
- 怎么让英文大预言模型支持中文?(一)构建自己的tokenization
代码地址:https://github.com/taishan1994/sentencepiece_chinese_bpe Part1前言 目前,大语言模型呈爆发式的增长,其中,基于llama家族的模 ...
- 知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等
知识图谱之<海贼王-ONEPICE>领域图谱项目实战(含码源):数据采集.知识存储.知识抽取.知识计算.知识应用.图谱可视化.问答系统(KBQA)等 实体关系可视化页面可视化页面尝鲜 1. ...