在本文中,我们将探索在 Spring Boot 应用程序中调用 OpenAI ChatGPT API 的过程。我们的目标是开发一个 Spring Boot 应用程序,能够利用 OpenAI ChatGPT API 生成对给定提示的响应。
您可能熟悉 ChatGPT 中的术语“提示”。在 ChatGPT 或类似语言模型的上下文中,提示是指用户提供的用于生成响应的输入或初始文本。它是您输入到模型中以获得相关输出的文本或查询。
提示本质上是作为语言模型理解和生成连贯响应的指令或起点。提示的质量和清晰度会显著影响模型提供准确且相关的信息或响应的能力。
我向 ChatGPT 提出了这个问题,看看它会产生什么反应。
ChatGPT 是一种生成式人工智能,允许用户输入提示并接收类似人类的图像、文本或视频形式的输出,所有这些都是由人工智能生成的。
ChatGPT 目前使用 GPT-3.5 模型,通过微调过程改进算法。然而,增强版本 ChatGPT Plus 包含了 GPT-4 模型。此升级版本拥有更快的响应时间,支持互联网插件,并展示了处理图像描述、图像标题生成等复杂任务的改进功能。
OpenAI 将 GPT-4 描述为比其前身 GPT-3.5 先进十倍。这一进步使模型能够表现出更好的上下文理解和细微差别,从而导致更精确和连贯的响应。
我们将调用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 命令。”。
这是我们传递的请求,用于从 OpenAI 完成 API 获取响应。
检查 API 的基本请求参数:
Model 和 Message 是 API 请求中必须包含的参数。
其他可选参数包括:
在 Postman 中发出上述请求时,除非将 OpenAI API 密钥作为不记名令牌传递,否则将发生身份验证失败。必须包含 OpenAI API 密钥作为不记名令牌来验证 OpenAI ChatGPT 完成 API。
在此注册并创建您自己的 OpenAI API 密钥。
现在让我们设置 Spring Boot 应用程序…
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
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
在配置包下创建一个类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身份验证。
现在,我们可以继续创建 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 等模型可以实现的一些示例。这些模型的多功能性使其对于各个行业的广泛应用都很有价值,包括教育、医疗保健、客户服务、内容生成等。请记住,生成的文本的质量可能会根据特定用例和提供给模型的输入数据而有所不同。
https://github.com/363153421/chatgpt-springboot-integration