十分钟搞定 SpringBoot 集成 ChatGPT,实战附源码!

a480a5b778e17aeeef8779979696f2e2.jpeg来源|https://levelup.gitconnected.com

👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战/ Java 学习路线 / 一对一提问 / 学习打卡/ 赠书福利

目前, 正在星球内部带小伙伴做第一个项目:全栈前后端分离博客,手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了156小节,累计24w+字,讲解图:1027张,还在持续爆肝中.. 后续还会上新更多项目,目标是将Java领域典型的项目都整一波,如秒杀系统, 在线商城, IM即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有510+小伙伴加入(早鸟价超低)

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

cf6b6146ff2cb8b54ff96ba205b54787.jpeg
图片

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

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

1什么是 ChatGPT?

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

14820490357d1e5572e83963b4a0ca22.jpeg
图片

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

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

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

2OpenAI 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?”

93be21d333fa2c605cb53d1786830cab.png
图片

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

4d71adf8f92a3172786f72a915343c2d.jpeg
图片

复制命令并导入到postman客户端中。

f599f7f9a9b5390762192e204e3f0d69.jpeg
图片

这是我们传递的请求,用于从 OpenAI 完成 API 获取响应。

检查 API 的基本请求参数:

  1. Model: 该参数指定请求将发送到的模型的版本。存在各种模型版本,为此,我们将使用 gpt-3.5-turbo 模型,这是最新的公开版本。

  2. Messages: 该参数作为模型的提示。每条消息都包含两个基本字段:“role”和“content”。“role”字段指定消息发送者,在请求中表示为“用户”,在响应中表示为“助理”。“content”字段包含实际的消息内容。

Model 和 Message 是 API 请求中必须包含的参数。

其他可选参数包括:

  1. n: 默认值为1,表示为每个输入消息生成的响应数。

  2. temperature: 默认值为1,范围为0到2。该参数调节响应的随机性。较高的值会增加随机性,而较低的值会增强焦点和确定性。

  3. max_tokens: 默认情况下没有限制,但该参数允许您指定在响应中生成的最大令牌数量。事实证明,它在管理非常大的响应和控制成本方面非常有用。

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

3创建 OpenAI API 密钥

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

ba325211625018b31bdf52a4fd05e1d3.jpeg
图片

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

项目结构如下:
2910d1fe7297d7ad73bcb81ae0a5dcc3.jpeg
图片

我们需要在 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
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身份验证。

4API控制器

现在,我们可以继续创建 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;
    }
}

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

3d5effdf74063cec8ec02c138168be64.jpeg
图片

使用 OpenAI ChatGPT Completion API 我们可以实现什么?

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

  • 自然语言生成: 您可以出于各种目的生成类似人类的文本,例如内容创建、创意写作等。

  • 文本摘要: 您可以使用该模型来总结长文本或文章,将信息压缩为更短、更容易理解的形式。

  • 语言翻译: 将文本从一种语言翻译成另一种语言。

  • 文本完成: 您可以使用 ChatGPT 来完成句子或段落,这对于填充文本的缺失部分非常有用。

  • 问答: 您可以向模型提出问题,它可以根据给出的上下文提供答案。

  • 对话代理: 开发聊天机器人、虚拟助理或其他对话式人工智能应用程序,以提供客户支持、信息检索或与用户互动。

  • 代码生成: 生成代码片段或通过提供代码示例、解释和解决方案来协助编程任务。

  • 数据输入和表格填写: 使用模型自动填写表格或完成数据输入任务。

  • 创意写作: 生成诗歌、故事或其他创意内容。

  • 语言理解: 分析和理解用户查询或消息中的意图和情绪。

  • 模拟角色: 在虚构角色之间创建对话和互动,以讲故事或开发游戏。

  • 教育援助: 为学生的问题提供解释和答案或帮助完成家庭作业。

  • 内容推荐: 根据用户的偏好和查询向他们推荐内容、产品或服务。

  • 起草电子邮件或文档: 协助撰写电子邮件、报告或其他书面文档。

  • 模拟用户行为: 生成用户评论、评论或反馈以用于测试和培训目的。

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

项目源码

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

👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战/ Java 学习路线 / 一对一提问 / 学习打卡/ 赠书福利

目前, 正在星球内部带小伙伴做第一个项目:全栈前后端分离博客,手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了156小节,累计24w+字,讲解图:1027张,还在持续爆肝中.. 后续还会上新更多项目,目标是将Java领域典型的项目都整一波,如秒杀系统, 在线商城, IM即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有510+小伙伴加入(早鸟价超低)

 
 

ccf909f9f7ce6c203686e9f40ab048a2.png

 
 
 
 
 
 
 
 
 
 

14d9f9132857113bae654fd92ffaf51c.gif

 
 
 
 
 
 

1. 我的私密学习小圈子~

2. 用好自定义参数解析器,帮你减少10%的代码!(Java小技巧)

3. SpringBoot 实现动态切换数据源,这样做才更优雅!

4. 不切换 Git 分支,却能同时在多个分支上工作,我是怎么做到的?

55cdde0f870a567945d081a83a689529.gif

最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
点“在看”支持小哈呀,谢谢啦
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值