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项目:

  1. 环境准备:确保你已经安装了Java开发环境和Maven构建工具。
  2. 创建Spring Boot项目:使用Spring Initializr创建一个新的Spring Boot项目,选择所需的依赖,如Web、OpenAI API等。
  3. 配置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的更多相关文章

  1. 实现springboot对接腾讯云短信

    1,导入pom依赖 <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>q ...

  2. 【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

    logo 避坑宝 v1.0.0 基于SpringBoot+uniapp企业黑红名单吐槽小程序 项目介绍 避坑宝 [避坑宝]企业黑红名单吐槽小程序是一个具有吐槽发布企业信息的一个平台,言论自由,评判自定 ...

  3. springboot集成支付宝的支付(easy版)

    SpringBoot对接支付宝 需要先注册账号 到支付宝开发者平台创建网页支付应用 启用公钥模式 需要使用到appId和下面的两个秘钥 写配置信息的代码 1.引入依赖 <dependency&g ...

  4. 【从零开始】Docker Desktop:听说你小子要玩我

    前言 缘由 捡起遗忘的Docker知识 由于本狗近期项目紧任务重,高强度的搬砖导致摸鱼时间下降.在上线项目时,看到运维大神一系列骚操作,docker+k8s的知识如过眼云烟,忘得干净的很.所以想重新恶 ...

  5. 【对比】文心一言对飚ChatGPT实操对比体验

    前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...

  6. 【有问必答】搭建uniapp项目流程手把手教学

    前言 缘由 博友有问,狗哥必答 前段时间,博友加本狗微信,询问uniapp的学习方法.本狗资历浅薄,没有专门学过uniapp,只能将自己日常开发uniapp的基本流程和步骤进行分享,希望可以略尽绵薄之 ...

  7. chatgpt接口开发笔记1:completions接口

    chatgpt接口开发笔记1:completions接口 个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.t ...

  8. springboot项目对接支付宝支付

    支付宝对接文档 一.准备工作 1. 首先要到 蚂蚁金服开发者中心 https://openhome.alipay.com/platform/home.htm 注册商家账户,并认证. 2.下载java版 ...

  9. 支付宝沙箱服务 (结合springboot实现,这里对接的是easy版本,工具用的是IDEA,WebStrom)

    一:打开支付宝开发平台,登录,然后点击控制台 https://open.alipay.com/ 二:滚动到底部,选着沙箱服务 三:获取到对接要用的appId和公钥私钥 四:打开IDEA导入所需的xml ...

  10. springBoot数据库jpa+对接mybatis

    1  spring Data jpa hibernate引领数据访问技术,使用orm对象关系映射来进行数据库访问,通过模型和数据库进行映射,通过操作对象实现对数据库操作,把数据库相关操作从代码中独立出 ...

随机推荐

  1. Rsync文件同步及备份

    Rsync文件同步及备份 目录 Rsync文件同步及备份 Rsync基本概述 远程文件传输 服务端口 Rsync的三种传输模式 本地方式(类似cp) 远程方式(类似scp) 守护进程(C/S结构) R ...

  2. 2022-06-17:给定一个数组arr,含有n个数字,可能有正、有负、有0, 给定一个正数k。 返回所有子序列中,累加和最大的前k个子序列累加和。 假设K不大,怎么算最快? 来自Amazon。

    2022-06-17:给定一个数组arr,含有n个数字,可能有正.有负.有0, 给定一个正数k. 返回所有子序列中,累加和最大的前k个子序列累加和. 假设K不大,怎么算最快? 来自Amazon. 答案 ...

  3. Maven安装、阿里云镜像配置、Idea中创建Maven项目、Tomcat的部署

    我为什么要学这个技术? 为了更快创建web开发项目和jar包 在javaweb开发中,需要使用大量的jar包,我们手动去导入: 如何能够让一个东西自动帮我导入和配置这个jar包 因此,Maven诞生了 ...

  4. springboot 项目国际化+登录拦截器

    项目页面国际化 1.语言配置文件 需要下载插件Resource Bundle Editor 新建国际目录i18n 在properties配置文件中自定义 2.前端index页面要设置语言参数传递给后端 ...

  5. Windows 安装ActiveMq5.16.6

    Windows 安装ActiveMq5.16.6 前言 最近因为需要在项目中使用MQ,所以就想在我的老Windows机器上装个ActiveMq. 1. 下载安装 先到Activemq官网下载安装需要版 ...

  6. 适合Windows桌面、Material Design设计风格、WPF美观控件库【强烈推荐】

    推荐一个在Github已start超过13.6K,非常流行.美观的WPF控件库. 项目简介 这是一个适用于Windows桌面,全面且易于使用的控件库,遵循Google推测的Material Desig ...

  7. CatBoost的分布式训练与调优:解决大规模数据集问题

    目录 <CatBoost 的分布式训练与调优:解决大规模数据集问题> 引言 随着深度学习的兴起,大规模数据集的存储和处理成为一个重要的技术挑战.由于数据集的规模巨大,传统的分布式训练方法已 ...

  8. Enhancingdecisiontreeswithtransferlearningforsentimenta

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...

  9. 怎么让英文大预言模型支持中文?(一)构建自己的tokenization

    代码地址:https://github.com/taishan1994/sentencepiece_chinese_bpe Part1前言 目前,大语言模型呈爆发式的增长,其中,基于llama家族的模 ...

  10. 知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等

    知识图谱之<海贼王-ONEPICE>领域图谱项目实战(含码源):数据采集.知识存储.知识抽取.知识计算.知识应用.图谱可视化.问答系统(KBQA)等 实体关系可视化页面可视化页面尝鲜 1. ...