Spring Boot 项目中使用 OpenAI ChatGPT APIs

大家好,我是Yuan,这篇文章主要介绍如何在springboot项目中集成调用chatgpt的api功能。

1. 概述

在本教程中,我们将学习如何在 Spring Boot 中调用 OpenAI ChatGPT API。我们将创建一个 Spring Boot 应用程序,该应用程序将通过调用 OpenAI ChatGPT API 生成对提示的响应。

2.OpenAI ChatGPT API

在开始本教程之前,让我们先探讨一下我们将在本教程中使用的 OpenAI ChatGPT API。我们将调用创建聊天完成 API 来生成对提示的响应。

2.1. API参数与认证

我们看一下API的强制请求参数:

  • model – 这是我们将向其发送请求的模型的版本。该模型有 。我们将使用 gpt-3.5-turbo模型,这是该模型公开的最新版本
  • 消息——消息是对模型的提示。每条消息都需要两个字段: role 和 content。角色 字段指定消息的发送者。请求中它将是“用户” , 响应中将是“助手” 。内容 字段是实际的消息
    为了使用 API 进行身份验证,我们将生成一个OpenAI API 密钥(地址:https://platform.openai.com/account/api-keys)(访问需要魔法)。我们将在调用 API 时在Authorization标头中设置此密钥。

cURL 格式的示例请求如下所示:

$ curl https://api.openai.com/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "Hello!"}]}'

此外,API 接受许多可选参数来修改响应。

在以下部分中,我们将重点关注一个简​​单的请求,但让我们看一下一些有助于调整响应的可选参数:

n – 如果我们想增加 生成的响应数量,则可以指定。默认值为 1。
温度——控制 响应的随机性。默认值为 1(最随机)。
max_tokens – 用于 限制响应中令牌的最大数量。默认值是无穷大,这意味着响应将与模型可以生成的一样长。一般来说,最好将此值设置为合理的数字,以避免生成很长的响应并产生很高的成本。

2.2. API响应

API 响应将是一个带有一些元数据和 选择 字段的 JSON 对象。选择 字段 将是一个对象数组。每个对象都有一个 文本 字段,其中包含对提示的响应。

选择数组中的对象数量 将等于 请求中的可选n参数。如果 未指定 n参数,则选项 数组将包含单个对象。

这是一个示例响应:

{"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"choices": [{"index": 0,"message": {"role": "assistant","content": "\n\nHello there, how may I assist you today?"},"finish_reason": "stop"}],"usage": {"prompt_tokens": 9,"completion_tokens": 12,"total_tokens": 21}
}

响应中的使用字段 将包含提示和响应中使用的令牌数量。这用于计算 API 调用的成本。

3. 代码示例

我们将创建一个使用 OpenAI ChatGPT API 的 Spring Boot 应用程序。为此,我们将创建一个 Spring Boot Rest API,该 API 接受提示作为请求参数,将其传递给 OpenAI ChatGPT API,并将响应作为响应正文返回。

3.1. 依赖关系

首先,我们创建一个 Spring Boot 项目。我们需要该项目的Spring Boot Starter Web依赖项:

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

3.2. DTO

接下来,我们创建一个与 OpenAI ChatGPT API 的请求参数对应的DTO :

public class ChatRequest {private String model;private List<Message> messages;private int n;private double temperature;public ChatRequest(String model, String prompt) {this.model = model;this.messages = new ArrayList<>();this.messages.add(new Message("user", prompt));}// getters and setters
}

我们还定义Message类:

public class Message {private String role;private String content;// constructor, getters and setters
}

同样,让我们​​为响应创建一个 DTO:

public class ChatResponse {private List<Choice> choices;// constructors, getters and setterspublic static class Choice {private int index;private Message message;// constructors, getters and setters}
}

3.3. Controller

接下来,让我们创建一个Controller,它将接受提示作为请求参数并返回响应作为响应正文:

@RestController
public class ChatController {@Qualifier("openaiRestTemplate")@Autowiredprivate RestTemplate restTemplate;@Value("${openai.model}")private String model;@Value("${openai.api.url}")private String apiUrl;@GetMapping("/chat")public String chat(@RequestParam String prompt) {// create a requestChatRequest request = new ChatRequest(model, prompt);// call the APIChatResponse response = restTemplate.postForObject(apiUrl, request, ChatResponse.class);if (response == null || response.getChoices() == null || response.getChoices().isEmpty()) {return "No response";}// return the first responsereturn response.getChoices().get(0).getMessage().getContent();}
}

让我们看一下代码的一些重要部分:

我们使用@Qualifier 注释来注入 我们将在下一节中创建的RestTemplate bean
使用 RestTemplate bean,我们使用 postForObject () 方法调用 OpenAI ChatGPT API。postForObject ()方法将 URL、请求对象和响应类作为参数
最后,我们读取回复的选择列表并返回第一个回复

3.4. RestTemplate

接下来,我们定义一个自定义RestTemplate bean,它将使用 OpenAI API 密钥进行身份验证:

@Configuration
public class OpenAIRestTemplateConfig {@Value("${openai.api.key}")private String openaiApiKey;@Bean@Qualifier("openaiRestTemplate")public RestTemplate openaiRestTemplate() {RestTemplate restTemplate = new RestTemplate();restTemplate.getInterceptors().add((request, body, execution) -> {request.getHeaders().add("Authorization", "Bearer " + openaiApiKey);return execution.execute(request, body);});return restTemplate;}
}

在这里,我们向基本 RestTemplate 添加了一个拦截器,并添加了 Authorization标头。

3.5. 属性

最后,让我们在application.properties文件中提供 API 的属性:

openai.model=gpt-3.5-turbo
openai.api.url=https://api.openai.com/v1/chat/completions
openai.api.key=your-api-key

4. 运行应用程序

我们现在可以运行该应用程序并在浏览器中测试它:

在浏览器中调用 API 时聊天 GPT 响应

正如我们所看到的,应用程序生成了对提示的响应。请注意,响应可能会有所不同,因为它是由模型生成的。

5. 结论

在本教程中,我们探索了 OpenAI ChatGPT API 以生成对提示的响应。我们创建了一个 Spring Boot 应用程序,它调用 API 来生成对提示的响应。

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

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

相关文章

2021年茶艺师(中级)最新解析及茶艺师(中级)免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;最新解析考前必练&#xff01;安全生产模拟考试一点通每个月更新茶艺师&#xff08;中级&#xff09;免费试题题目及答案&#xff01;多做几遍…

2021年茶艺师(中级)最新解析及茶艺师(中级)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;最新解析是安全生产模拟考试一点通生成的&#xff0c;茶艺师&#xff08;中级&#xff09;证模拟考试题库是根据茶艺师&#xff08;中级&#…

2021年茶艺师(中级)考试题库及茶艺师(中级)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 茶艺师&#xff08;中级&#xff09;考试题库考前必练&#xff01;安全生产模拟考试一点通每个月更新茶艺师&#xff08;中级&#xff09;复审考试题目及答案&#xff01;多做几遍&#xff0c;其实通过茶艺师&#xf…

2021年茶艺师(中级)考试题及茶艺师(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;考试题根据新茶艺师&#xff08;中级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将茶艺师&#xff08;中级&#xff09;模拟…

2021年茶艺师(中级)考试内容及茶艺师(中级)最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 茶艺师&#xff08;中级&#xff09;考试内容是安全生产模拟考试一点通总题库中生成的一套茶艺师&#xff08;中级&#xff09;最新解析&#xff0c;安全生产模拟考试一点通上茶艺师&#xff08;中级&#xff09;作业…

2021年茶艺师(中级)考试及茶艺师(中级)考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;考试根据新茶艺师&#xff08;中级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将茶艺师&#xff08;中级&#xff09;模拟考…

2021年茶艺师(中级)免费试题及茶艺师(中级)试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;免费试题参考答案及茶艺师&#xff08;中级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及茶艺师&#xff08;中级&#xff09;…

2021年茶艺师(中级)考试题库及茶艺师(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;考试题库根据新茶艺师&#xff08;中级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将茶艺师&#xff08;中级&#xff09;模…

2021年茶艺师(中级)考试题及茶艺师(中级)考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;考试题参考答案及茶艺师&#xff08;中级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及茶艺师&#xff08;中级&#xff09;操…

2020年茶艺师(中级)考试题库及茶艺师(中级)模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2020年茶艺师&#xff08;中级&#xff09;考试题库及茶艺师&#xff08;中级&#xff09;模拟考试题&#xff0c;包含茶艺师&#xff08;中级&#xff09;考试题库答案和解析及茶艺师&#xff08;中级&#xff09;模…

你见过最难考的职业证书是什么?

目前就我自己考过的一建、法考、注会、税务师、软考、经济师等等十几个证书中&#xff0c;我觉得注会是最难考的&#xff0c;因为这些证书中只有注会专业阶段我考了三年才通过&#xff0c;其他考试都是一年一次性通过全科。 2017年了解到考证&#xff0c;考了软考初级程序员试水…

2021年茶艺师(中级)考试及茶艺师(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 茶艺师&#xff08;中级&#xff09;考试参考答案及茶艺师&#xff08;中级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及茶艺师&#xff08;中级&#xff09;操作证已考过的学员汇总&#xff0c;相对…

计算机审计初级难度,到现在你还不知道注会各科通过率 就真的out啦

其实注会备考到现在&#xff0c;有很多同学很好奇&#xff0c;为什么一开始注会报考时会有科目搭配这种说法&#xff0c;其中一种原因就是每一科的学习难度和备考思维不同&#xff0c;另一种原因则是来自注会各科目的通过率。一直以来&#xff0c;注会都是以通过率低而饱受诟病…

2021年茶艺师(中级)考试题库及茶艺师(中级)报名考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;考试题库参考答案及茶艺师&#xff08;中级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及茶艺师&#xff08;中级&#xff09;…

2021年茶艺师(中级)考试题及茶艺师(中级)最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 茶艺师&#xff08;中级&#xff09;考试题参考答案及茶艺师&#xff08;中级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及茶艺师&#xff08;中级&#xff09;操作证已考过的学员汇总&#xff0c;相…

刚拿到PMP证书, 想吐槽一下, PMP的考证真的值得考吗?

最近PMP考试成绩出来了. 考了4A的成绩(最高5A). 然而一查证书发现, 证书并不区分成绩高低. 只要过了, 不管你是几A, 拿到的证书都一个样. 据说在培训机构报考的通过率很高, 超过90%. 这样一想, 感觉含金量就不怎么样了. 最气人的是, 这个证的有效期只有3年. 培训费交了2…

【个人首测】百度文心一言 VS ChatGPT GPT-4

昨天我写了一篇文章GPT-4牛是牛&#xff0c;但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题&#xff0c;大家期待的图片输入也没有出现。 昨天下午百度发布了文心一言&#xff0c;对标ChatGPT&#xff0c;录屏无实机演示让百度股价暴跌。但是晚上百度就…

GitHub CEO 现场挑战 18 分钟写贪吃蛇游戏,差点翻车……

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 对于各位程序员而言&#xff0c;从头写一个像下面这样的贪吃蛇小游戏需要多长时间&#xff1f; 在本周三全球网络峰会&#xff08;Web Summit&#xff09;上&#xff0c;GitHub CEO 通过现场实操给出…

聚观早报|微软必应聊天在回复中加广告;周鸿祎现场演示360AI翻车

今日要闻&#xff1a;微软必应聊天在回复中加入广告&#xff1b;周鸿祎现场演示360 AI“翻车”&#xff1b;OpenAI 创始人宣布旅行计划&#xff1b;支付宝启动 7 年来最大高管轮岗&#xff1b;微软旗下GitHub启动裁员 微软必应聊天在回复中加入广告 微软正在尝试在 Bing Chat …

大话AIGC——GAN,Diffusion和存储要求

AIGC&#xff08;AI-Generated Content&#xff0c;AI生成内容&#xff09;是指基于GAN&#xff08;Generative Adversarial Network&#xff0c;生成对抗网络&#xff09;、大型预训练模型等人工智能技术的方法&#xff0c;通过对已有数据进行学习和模式识别&#xff0c;以适当…