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;
    }
}

总之,此配置设置一个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 等模型可以实现的一些功能

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

5 项目源码

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

原文地址:https://blog.csdn.net/qq_37284798/article/details/134729071

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47950.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注