当前位置:首页 > 科技  > 软件

使用 Spring Boot 创建自己的 ChatGPT 应用程序

来源: 责编: 时间:2024-01-18 17:40:35 306观看
导读在本篇文中,将解释如何与OpenAI聊天完成 API 集成以使用它们并创建自己的 ChatGPT 版本。将使用Spring Boot程序与ChatGPT的 开放API集成。我们将Spring Boot程序公开一个 REST 端点,它将以requestParam的形式发起请求,

is728资讯网——每日最新资讯28at.com

在本篇文中,将解释如何与OpenAI聊天完成 API 集成以使用它们并创建自己的 ChatGPT 版本。将使用Spring Boot程序与ChatGPT的 开放API集成。is728资讯网——每日最新资讯28at.com

我们将Spring Boot程序公开一个 REST 端点,它将以requestParam的形式发起请求,然后对其进行处理,并以可读的文本格式返回响应。is728资讯网——每日最新资讯28at.com

让我们按照以下步骤操作:is728资讯网——每日最新资讯28at.com

前提条件

我们将使用OpenAI的ChatGPT完成API在我们程序里的调用。is728资讯网——每日最新资讯28at.com

该API的各个重要参数描述如下:is728资讯网——每日最新资讯28at.com

模型: 我们将向“gpt-3.5-turbo”发送请求is728资讯网——每日最新资讯28at.com

GPT-3.5 Turbo是一种极其强大的人工智能驱动的语言模型。它拥有 8192 个处理器核心和多达 3000 亿个参数,是迄今为止最大的语言模型之一。在广泛的自然语言处理任务中表现优秀,可以用于生成文章、回答问题、对话、翻译和编程等多种应用场景。它的能力使得人们可以通过自然语言与计算机进行更加自然、灵活和高效的交互。is728资讯网——每日最新资讯28at.com

Messages 这表示发送到模型的实际请求类,以便模型可以解析消息并以人们可读的格式生成相应的响应。is728资讯网——每日最新资讯28at.com

包含两个子属性:is728资讯网——每日最新资讯28at.com

role 指定消息的发送者(请求时为“user”,响应时为“assistant”)。is728资讯网——每日最新资讯28at.com

content: 这才是真正的消息。is728资讯网——每日最新资讯28at.com

Message DTO 如下所示:is728资讯网——每日最新资讯28at.com

public class Message {    private String role;    private String content;    // getters & setters}

话不多说,让我们开始与我们的 Spring Boot 应用程序集成。is728资讯网——每日最新资讯28at.com

创建一个基本的 Spring Boot 应用程序。为此,请前往start.spring.io并使用以下选择:
我们只需要 Spring Web 依赖项:
is728资讯网——每日最新资讯28at.com

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

创建一个Controller 代码:is728资讯网——每日最新资讯28at.com

package com.akash.mychatGPT.controller;import com.akash.mychatGPT.dtos.ChatRequest;import com.akash.mychatGPT.dtos.ChatResponse;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;@RestControllerpublic class ChatController {    @Qualifier("openaiRestTemplate")    @Autowired    private RestTemplate restTemplate;    @Value("${openai.model}")    private String model;    @Value("${openai.api.url}")    private String apiUrl;    @GetMapping("/chat")    public String chat(@RequestParam String prompt) {        // 创建请求        ChatRequest request = new ChatRequest(model, prompt, 1, 1.1);        // 调用API        ChatResponse response = restTemplate.postForObject(apiUrl, request, ChatResponse.class);        if (response == null || response.getChoices() == null || response.getChoices().isEmpty()) {            return "No response";        }        // 返回响应        return response.getChoices().get(0).getMessage().getContent();    }}

创建一个ChatRequest类:is728资讯网——每日最新资讯28at.com

package com.akash.mychatGPT.dtos;import java.util.ArrayList;import java.util.List;public class ChatRequest {    private String model;    private List<Message> messages;    private int n;// 如果我们想增加要生成的响应的数量,可以指定。默认值为1。    private double temperature;// 控制响应的随机性。默认值为1 (大多数随机)。         // 构造方法, Getters & setters}

在这里,我们使用以下属性,将其放入 application.properties 中:is728资讯网——每日最新资讯28at.com

openai.model=gpt-3.5-turboopenai.api.url=https://api.openai.com/v1/chat/completionsopenai.api.key=<generated_key_goes_here>

重要提示:关于 OpenAI API 密钥的说明:

OpenAI 允许生成唯一的 API 密钥来使用 OpenAI API。为此,请点击(
https://platform.openai.com/account/api-keys)。在这里,需要注册并创建 API 密钥(如下面的快照所示)。确保保证其安全,一定保存好!
is728资讯网——每日最新资讯28at.com

is728资讯网——每日最新资讯28at.com

单击“创建新密钥”并按照屏幕上的步骤操作。就可以拥有了自己的 OpenAI API 密钥。如果没有注册过,想体验一下的话,私信我发你体key。is728资讯网——每日最新资讯28at.com

接下来,我们用于RestTemplate调用 OpenAI API URL。因此,让我们添加一个拦截器,如下所示:is728资讯网——每日最新资讯28at.com

package com.akash.mychatGPT.config;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;@Configurationpublic 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;    }}

拦截器拦截请求并将 OpenAI API 密钥添加到请求标头中。is728资讯网——每日最新资讯28at.com

就是这样,现在我们可以简单地使用主类运行应用程序并开始调用 API。is728资讯网——每日最新资讯28at.com

package com.akash.mychatGPT;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class MyChatGptApplication {	public static void main(String[] args) {		SpringApplication.run(MyChatGptApplication.class, args);	}}

测试

本次使用Postman 进行演示。将想要问的问题传递给该模型。is728资讯网——每日最新资讯28at.com

例子#1

http://localhost:8080/chat?prompt=what are some good Spring Boot libraries。is728资讯网——每日最新资讯28at.com

is728资讯网——每日最新资讯28at.com

例子#2

is728资讯网——每日最新资讯28at.com

GPT 3.5 Turbo 模型足够先进,可以表现出高度真实的响应。(由于有数十亿行文本,该模型已经过训练)。is728资讯网——每日最新资讯28at.com

注意:对 OpenAI API curl 的实际调用如下所示:is728资讯网——每日最新资讯28at.com

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

注意事项

在开发应用程序时,以下是可能遇到的常见问题。is728资讯网——每日最新资讯28at.com

问题1:is728资讯网——每日最新资讯28at.com

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.akash.mychatGPT.Message` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 10, column: 9] (through reference chain: com.akash.mychatGPT.ChatResponse["choices"]->java.util.ArrayList[0]->com.akash.mychatGPT.ChatResponse$Choice["message"])

确保创建一个无参数构造函数,并为以下对象提供 getter 和 setter:is728资讯网——每日最新资讯28at.com

问题2:is728资讯网——每日最新资讯28at.com

org.springframework.web.client.HttpClientErrorException$TooManyRequests: 429 Too Many Requests: "{<EOL>    "error": {<EOL>        "message": "You exceeded your current quota, please check your plan and billing details.",<EOL>        "type": "insufficient_quota",<EOL>        "param": null,<EOL>        "code": null<EOL>    }<EOL>}<EOL>"

OpenAI 提供了基本配额。当前电子邮件 ID 的配额已用完,需要使用了新的电子邮件 ID。is728资讯网——每日最新资讯28at.com

问题3:is728资讯网——每日最新资讯28at.com

org.springframework.web.client.HttpClientErrorException$TooManyRequests: 429 Too Many Requests: "{<EOL>    "error": {<EOL>        "message": "Rate limit reached for default-gpt-3.5-turbo in organization org-V9XKg3mYkRRTJhHWq1lYjVtS on requests per min. Limit: 3 / min. Please try again in 20s. Contact us through our help center at help.openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.",<EOL>        "type": "requests",<EOL>        "param": null,<EOL>        "code": null<EOL>    }<EOL>}<EOL>"

一段时间后尝试调用 API。(为了安全起见,良好的工作时间是 30 分钟)。is728资讯网——每日最新资讯28at.com

总结

在这篇短文中,我们了解了 OpenAI 的 GPT 3.5 Turbo 模型。如何生成供个人使用的密钥。is728资讯网——每日最新资讯28at.com

然后,我们还研究了将常用的 Spring Boot 应用程序与 OpenAI 聊天完成 API 集成、对端点进行实际调用,并验证了响应。is728资讯网——每日最新资讯28at.com

注意事项

OpenAI 的 API 是受监管的资源。我们对 API 的调用量是有限的,可以在此处进行跟踪。is728资讯网——每日最新资讯28at.com

is728资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-64509-0.html使用 Spring Boot 创建自己的 ChatGPT 应用程序

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 深入探讨API网关APISIX中自定义Java插件在真实项目中的运用

下一篇: Swift 枚举类型,你知道几个?

标签:
  • 热门焦点
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新业务到 2022 年底还是 0,希望 2023 年出来一个 1。&rdquo;这是2022年底,李彦宏
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top