SpringBoot 集成 ChatGPT,实战附源码

1 前言

在本文中,我们将探索在 Spring Boot 应用程序中调用 OpenAI ChatGPT API 的过程。我们的目标是开发一个 Spring Boot 应用程序,能够利用 OpenAI ChatGPT API 生成对给定提示的响应。

您可能熟悉 ChatGPT 中的术语“提示”。在 ChatGPT 或类似语言模型的上下文中,提示是指用户提供的用于生成响应的输入或初始文本。它是您输入到模型中以获得相关输出的文本或查询。

提示本质上是作为语言模型理解和生成连贯响应的指令或起点。提示的质量和清晰度会显著影响模型提供准确且相关的信息或响应的能力。

2 什么是 ChatGPT?

我向 ChatGPT 提出了这个问题,看看它会产生什么反应。

在这里插入图片描述

ChatGPT 是一种生成式人工智能,允许用户输入提示并接收类似人类的图像、文本或视频形式的输出,所有这些都是由人工智能生成的。

ChatGPT 目前使用 GPT-3.5 模型,通过微调过程改进算法。然而,增强版本 ChatGPT Plus 包含了 GPT-4 模型。此升级版本拥有更快的响应时间,支持互联网插件,并展示了处理图像描述、图像标题生成等复杂任务的改进功能。

OpenAI 将 GPT-4 描述为比其前身 GPT-3.5 先进十倍。这一进步使模型能够表现出更好的上下文理解和细微差别,从而导致更精确和连贯的响应。

3 OpenAI ChatGPT API

我们将调用create chat completion API (POST https://api.openai.com/v1/chat/completions )来生成对提示的响应。让我们探索一下 OpenAI ChatGTP API。

我们需要发送什么请求来调用 OpenAI API?

访问“create chat completion API ” 链接后,可以看到有关端点、请求和响应的以下信息。

端点:POST https://api.openai.com/v1/chat/completions

转到 Playgroud 并输入任何消息,例如“什么是 Spring Boot?”

在这里插入图片描述

现在点击“查看代码”。您将看到提示符“ What is spring boot?”的 curl 命令。”。

在这里插入图片描述
复制命令并导入到postman客户端中。

在这里插入图片描述
这是我们传递的请求,用于从 OpenAI 完成 API 获取响应。

检查 API 的基本请求参数:

  1. Model: 该参数指定请求将发送到的模型的版本。存在各种模型版本,为此,我们将使用 gpt-3.5-turbo 模型,这是最新的公开版本。
  2. Messages: 该参数作为模型的提示。每条消息都包含两个基本字段:“role”和“content”。“role”字段指定消息发送者,在请求中表示为“用户”,在响应中表示为“助理”。“content”字段包含实际的消息内容。

ModelMessage 是 API 请求中必须包含的参数。

其他可选参数包括:

  1. n: 默认值为1,表示为每个输入消息生成的响应数。
  2. temperature: 默认值为1,范围为0到2。该参数调节响应的随机性。较高的值会增加随机性,而较低的值会增强焦点和确定性。
  3. max_tokens: 默认情况下没有限制,但该参数允许您指定在响应中生成的最大令牌数量。事实证明,它在管理非常大的响应和控制成本方面非常有用。

在 Postman 中发出上述请求时,除非将 OpenAI API 密钥作为不记名令牌传递,否则将发生身份验证失败。必须包含 OpenAI API 密钥作为不记名令牌来验证 OpenAI ChatGPT 完成 API。

4 创建 OpenAI API 密钥

在此注册并创建您自己的 OpenAI API 密钥。

在这里插入图片描述

4.1 设置 Spring Boot 应用

现在让我们设置 Spring Boot 应用程序…

在这里插入图片描述
我们需要在 pom.xml 中添加以下依赖项

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

在 dtos 包下创建 ChatBotRequest、ChatBotResponse 和 Message DTO:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatBotRequest {private String model;private List<Message> messages;private int n;private double temperature;private int max_tokens;
}--------------------@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChatBotResponse {private List<Choice> choices;@Data@AllArgsConstructor@NoArgsConstructorpublic static class Choice {private int index;private Message message;}
}--------------------@Data
@NoArgsConstructor
@AllArgsConstructor
public class Message {private String role;private String content;}

在application.properties文件中添加以下配置:

openai.chatgtp.model=gpt-3.5-turbo
openai.chatgtp.api.key=REPLACE_WITH_YOUR_API_KEY
openai.chatgtp.api.url=https://api.openai.com/v1/chat/completionsopenai.chatgtp.max-completions=1
openai.chatgtp.temperature=0
openai.chatgtp.max_tokens=100

4.2 RestTemplate配置

在配置包下创建一个类OpenAIChatGtpConfig:

@Configuration
public class OpenAIChatGtpConfig {@Value("${openai.chatgtp.api.key}")private String openaiApiKey;@Beanpublic RestTemplate restTemplate() {RestTemplate restTemplate = new RestTemplate();restTemplate.getInterceptors().add((request, body, execution) -> {request.getHeaders().add("Authorization", "Bearer " + openaiApiKey);return execution.execute(request, body);});return restTemplate;}
}
  • @Value(“${openai.chatgtp.api.key}”):此注释用于从应用程序的属性文件注入值。在本例中,它从属性文件中检索 OpenAI 的 API 密钥。
  • restTemplate.getInterceptors().add(…):配置拦截器RestTemplate。该拦截器被添加到拦截器列表中,负责在发送 HTTP 请求之前对其进行修改。
  • 拦截器 ( (request, body, execution) -> { … }) 将“Authorization”标头添加到 HTTP 请求中。标头包含格式为“Bearer {apiKey}”的 OpenAI API 密钥。

总之,此配置类设置了一个RestTemplate带有拦截器的 bean,该拦截器将 OpenAI API 密钥添加到“Authorization”标头,确保由此发出的后续 HTTP 请求经过RestTemplate身份验证。

4.3 API控制器

现在,我们可以继续创建 REST 控制器,负责利用之前配置的RestTemplate来发出 API 请求并处理相应的 API 响应。

在controllers包下创建一个类ChatBotController:

@RestController
public class ChatBotController {@Autowiredprivate RestTemplate restTemplate;@Value("${openai.chatgtp.model}")private String model;@Value("${openai.chatgtp.max-completions}")private int maxCompletions;@Value("${openai.chatgtp.temperature}")private double temperature;@Value("${openai.chatgtp.max_tokens}")private int maxTokens;@Value("${openai.chatgtp.api.url}")private String apiUrl;@PostMapping("/chat")public BotResponse chat(@RequestParam("prompt") String prompt) {BotRequest request = new BotRequest(model,List.of(new Message("user", prompt)),maxCompletions,temperature,maxTokens);BotResponse response = restTemplate.postForObject(apiUrl, request, BotResponse.class);return response;}
}

现在我们已经完成了编码。让我们测试一下应用程序…

在这里插入图片描述
使用 OpenAI ChatGPT Completion API 我们可以实现什么?

以下是使用 OpenAI Completion API 和 ChatGPT 等模型可以实现的一些功能:

  • 自然语言生成: 您可以出于各种目的生成类似人类的文本,例如内容创建、创意写作等。
  • 文本摘要: 您可以使用该模型来总结长文本或文章,将信息压缩为更短、更容易理解的形式。
  • 语言翻译: 将文本从一种语言翻译成另一种语言。
  • 文本完成: 您可以使用 ChatGPT 来完成句子或段落,这对于填充文本的缺失部分非常有用。
  • 问答: 您可以向模型提出问题,它可以根据给出的上下文提供答案。
  • 对话代理: 开发聊天机器人、虚拟助理或其他对话式人工智能应用程序,以提供客户支持、信息检索或与用户互动。
  • 代码生成: 生成代码片段或通过提供代码示例、解释和解决方案来协助编程任务。
  • 数据输入和表格填写: 使用模型自动填写表格或完成数据输入任务。
  • 创意写作: 生成诗歌、故事或其他创意内容。
  • 语言理解: 分析和理解用户查询或消息中的意图和情绪。
  • 模拟角色: 在虚构角色之间创建对话和互动,以讲故事或开发游戏。
  • 教育援助: 为学生的问题提供解释和答案或帮助完成家庭作业。
  • 内容推荐: 根据用户的偏好和查询向他们推荐内容、产品或服务。
  • 起草电子邮件或文档: 协助撰写电子邮件、报告或其他书面文档。
  • 模拟用户行为: 生成用户评论、评论或反馈以用于测试和培训目的。

这些只是使用 OpenAI Completion API 和 ChatGPT 等模型可以实现的一些示例。这些模型的多功能性使其对于各个行业的广泛应用都很有价值,包括教育、医疗保健、客户服务、内容生成等。请记住,生成的文本的质量可能会根据特定用例和提供给模型的输入数据而有所不同。

5 项目源码

https://github.com/363153421/chatgpt-springboot-integration

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

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

相关文章

股票要怎么买入卖出?

股票账户终于开好了&#xff01;恭喜你马上就可以开启刺激的炒股之旅了&#xff01;不过第一次买股票的你是不是还不知道怎么个买法呢&#xff1f;别担心~贴心的汇小鲸带着教程来了&#xff0c;咱们一起看看吧&#xff01; 首先一点&#xff0c;大家得知道&#xff1a;开好户还…

【开源】基于Vue和SpringBoot的快递管理系统

项目编号&#xff1a; S 007 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S007&#xff0c;文末获取源码。} 项目编号&#xff1a;S007&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快…

vscode如何在没有网络的情况下安装插件

vscode如何在没有网络的情况下安装插件 start 遇到没有网络的电脑&#xff0c;无法直接从插件市场安装vscode的插件。写一下 vscode 插件离线安装的方法. 解决方案 目标电脑没有可以安装插件的网络&#xff0c;那我们只能在有网络的环境下载好我们的插件。然后拷贝软件到无…

16、什么是损失函数

上一节介绍了训练的过程,一个模型在训练的过程中,每一轮训练数据计算到到最后一层时,都会输出本轮的预测值,那么如何将本轮的预测值与标签中的真实值进行对比呢? 这就要用到损失函数(Loss function)。 什么是损失函数 损失函数是用来衡量模型预测结果与真实标签(grou…

基于Intel Ai Analytics Toolkit 及边缘计算的溶氧预测水产养殖监测方案

基于AI的淡水养殖水质溯源、优化系统方案 前言一、关键需求及方案概述二、方案设计预测机制LSTM 模型基于intel AI 的时序水质分析模型与分类模型优化 三、实战分析1、方案简述2、数据分析预处理特征类型处理特征分布分析 3、特征构造4、特征选择过滤法重要性排序 5.构建LSTM模…

逆变器、转换器、DCDC、继电器等器件的原理和作用

一、逆变器 1&#xff09;作用 逆变器是一种将直流电转换为交流电的器件。 2&#xff09;逆变器的原理 a&#xff09;首先当蓝色开关闭合&#xff0c;红色开关断开时&#xff0c;电流流过负载的方向刚好是相反的 b&#xff09;当控制一定的频率控制蓝色开关和红色开关的打开和…

熬夜会秃头——beta冲刺Day2

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day2团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、团队成员会议总结 1、成员…

Nacos 架构原理

基本架构及概念​ 服务 (Service)​ 服务是指一个或一组软件功能&#xff08;例如特定信息的检索或一组操作的执行&#xff09;&#xff0c;其目的是不同的客户端可以为不同的目的重用&#xff08;例如通过跨进程的网络调用&#xff09;。Nacos 支持主流的服务生态&#xff0c…

算法通关村第十四关-青铜挑战认识堆

大家好我是苏麟 , 今天带大家认识认识堆 . 堆 堆是将一组数据按照完全二叉树的存储顺序&#xff0c;将数据存储在一个一维数组中的结构。 堆有两种结构&#xff0c;一种称为大顶堆&#xff0c;一种称为小顶堆 : 大顶堆 大顶堆的任何一个父节点的值&#xff0c;都大于或等于…

HarmonyOS——解决本地模拟器无法选择设备的问题

在使用deveco studio进行鸿蒙开发的时候&#xff0c;可能会遇到本地模拟器已经启动了&#xff0c;但是仍然无法选择本地模拟器中的设备&#xff0c;尤其在MAC环境中尤为常见。 解决办法&#xff1a; 先打开IDE启动本地模拟器&#xff0c;等模拟器启动后&#xff0c;退出IDE重新…

Ubuntu 2204 安装libimobiledevice

libimobiledevice是一个开源的软件&#xff0c;它可以直接使用系统原生协议和IOS设备进行通信&#xff0c;类似iMazing&#xff0c;iTunes&#xff0c;libimobiledevice不依赖IOS的私有库&#xff0c;并且连接IOS设备时用的都是原生协议&#xff0c;IOS无需越狱就能实现设备信息…

zabbix6.4.0配置邮件及企微机器人群聊告警

一、邮件告警 根据公司邮箱自行配置&#xff0c;电子邮件、用户账号密码填自己的邮箱账号密码 动作本次使用的默认的&#xff0c;如果为了更加美观可自行修改。 二、企业微信机器人告警 首先在企微上创建群聊&#xff0c;之后添加群聊机器人 将地址复制&#xff0c;后面用 …