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
    @NoArgsConstructor
    public 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/completions

openai.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;

    @Bean
    public 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 {

    @Autowired
    private 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UDS诊断服务

UDS诊断服务 什么是UDS&#xff1f; UDS – Unified diagnostic services (统一诊断服务) 俗称14229. 形象的说&#xff1a;就是使用一套仪器&#xff0c;对当前汽车出现的问题进行分析。而这套仪器与汽车交谈所使用的语言就是UDS&#xff08;不是唯一的方法&#xff09;。 …

【Linux系统化学习】揭秘 命令行参数 | 环境变量

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 代码仓库&#xff1a;Gitee 目录 命令行参数 环境变量 PATH 查看PATH $PWD 查看环境变量PWD $HOME 查看系统支持的环境变量 获取环境变量 命令行参数 在C/C编程语言中我们有一个…

domjudge题目配置和开比赛

系统使用的是7.3.3&#xff0c;domjudge配置的方法请参考前文 domjudge配置-CSDN博客 题目导入 传统比较 首先可以去domjudge中随便下载一个题目&#xff0c;下载下来的压缩包应该是这样的 │ domjudge-problem.ini │ problem.pdf │ problem.yaml │ └─data└─sec…

西南科技大学(数据结构A)期末自测练习五

一、选择题&#xff08;每空 1 分&#xff0c;共 5 分&#xff09; 1、下面关于图的叙述中&#xff0c;正确的是&#xff08; &#xff09;。 (1)&#xff0e;回路是简单路径 (2)&#xff0e;存稀疏矩阵&#xff0c;用邻接矩阵比邻接表更省空间 (3)&#xff0e;若有像图中存在…

网页开发 JS基础

目录 JS概述 基本语法 数据类型内置方法 DOM对象 查找标签 绑定事件 操作标签 jQuery 查找标签 绑定事件 操作标签 Ajax请求 数据接口 前后端分离 ajax的使用 JS概述 一门弱类型的编程语言,属于基于对象和基于原型的脚本语言. 1 直接编写<script>console…

numpy知识库:深入理解numpy的repeat函数和numpy数组的repeat方法

前言 numpy中的repeat函数顾名思义&#xff0c;可以将给定的数组沿着指定的轴重复多次&#xff0c;生成一个新的数组。但具体如何重复呢&#xff1f;本次博文就来探讨并试图回答这个问题&#xff0c;感兴趣的小伙伴可以继续阅读下去&#xff0c;希望对你有所启示~ numpy中的r…

Linux基本指令(后篇)

目录 14.时间指令date 15.Cal指令 16.find指令(非常重要) 17.grep指令 18.打包压缩指令zip和tar以及解压指令unzip和tar 14.时间指令date date(显示当前时间) 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记&#xff0c;其中…

企业存货库存综合分析全流程图

上期我们谈到了 诊断存货管理的4大维度&#xff0c;今天我们进一步全方位、全周期的分析企业内存货的问题。 企业存货是企业用于生产或销售的货品&#xff0c;是企业价值增值变现的载体&#xff0c;但是如果一旦没有产生交易&#xff0c;存货就很有可能带来损失。存货伴随着企业…

C#基础与进阶扩展合集-进阶篇(持续更新)

目录 本文分两篇&#xff0c;基础篇点击&#xff1a;C#基础与进阶扩展合集-基础篇 二、进阶扩展 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、Adapt适配器 5、值类型与引用类型 6、程序设置当前项目工作目录 7、获取App.config配置文件中的值 …

Mysql多表查询 子查询

目录 关联查询——cross join 概述&#xff1a; 关联查询 inner join 概述&#xff1a; 关联查询 outher join 概述&#xff1a; inner join 和outher join 的区别 子查询 IN 概述 IN 分析 子查询 exists exists 分析 SQL之母 - SQL自学网站SQL自学网站http://sqlmo…

冒个泡!OceanBase亮相 2023 新加坡金融科技节

近日&#xff0c;OceanBase 亮相 Singapore Fintech Festival 2023&#xff08;2023 新加坡金融科技节&#xff09;&#xff01;本届新加坡金融科技节于 2023 年 11 月 15 日至 17 日在新加坡博览展览中心举行&#xff0c;展会期间&#xff0c;OceanBase 得到了众多金融科技机构…

2023-12-01 AIGC-自动生成ppt的AI工具

摘要: 2023-12-01 AIGC-自动生成ppt-记录 自动生成ppt: BoardMix boardmix 一键生成ppt boardmix是一款基于云的ai设计软件&#xff0c;允许创建用于各种目的的自定义演示文稿、ai绘画&#xff0c;ai生成思维导图等。以下是它的一些功能&#xff1a; 可定制的模板 - 它有一个…

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv5开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的&#xff0c;随着现代技术科技手段的不断发展&#xff0c;基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段&#xff0c;本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…

从0开始学习JavaScript--JavaScript ES6 模块系统

JavaScript ES6&#xff08;ECMAScript 2015&#xff09;引入了官方支持的模块系统&#xff0c;使得前端开发更加现代化和模块化。本文将深入探讨 ES6 模块系统的各个方面&#xff0c;通过丰富的示例代码详细展示其核心概念和实际应用。 ES6 模块的基本概念 1 模块的导出 ES…

提高Idea编码速度和插件自用推荐

非常推荐 Easy Javadoc 一款注释生成器&#xff0c;很好使~免费&#xff0c;配合使用腾讯、百度之类的翻译免费额度完全够用了&#xff0c;印象中是50万字符每月。下图是使用快捷键生成的注释&#xff08;我采用鼠标侧面按键&#xff0c;随手一按很方便&#xff09; Chinese …

MySQL 基础、进阶、运维的学习笔记

1. MySQL 基础篇 1.1 MySQL 概述 1.1.1 数据库相关概念 数据库(Database, 简称 DB): 存储数据的仓库&#xff0c;数据是有组织的进行存储。 数据库管理系统(Database Management System, 简称 DBMS): 操作和管理数据库的大型软件。 SQL(Structured Query Language, 简称 S…

万界星空科技MES生产管理系统的主要功能

万界星空科技MES/云MES生产管理系统主要包括以下功能模块&#xff1a; 生产计划管理&#xff1a;根据订单和生产计划&#xff0c;制定详细的调度表和车间生产经营计划&#xff0c;将生产计划和客户订单转化为具体的生产经营计划&#xff0c;消除有效的日常运营&#xff0c;大大…

macOS本地调试k8s源码

目录 准备工作创建集群注意点1. kubeconfig未正常加载2. container runtime is not running3. The connection to the server 172.16.190.132:6443 was refused - did you specify the right host or port?4. 集群重置5.加入子节点 代码调试 准备工作 apple m1芯片 安装vmwa…

计算机毕业设计 基于SpringBoot的敬老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

熬夜会秃头——beta冲刺Day2

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