首页 > 其他分享 >SpringBoot接入Chat-GPT3

SpringBoot接入Chat-GPT3

时间:2023-06-28 09:02:15浏览次数:79  
标签:API SpringBoot GPT3 Worker 域名 api Chat Cloudflare com

创建一个API Key

API Key创建网址 : https://platform.openai.com/account/api-keys

先登录OpenAI账号

登陆后创建一个API Key

起一个名字

点击创建,生成一个API Key, 记录下这个API Key 后续会用。

可以在官网看到剩余容量,账号默认会送$18刀的容量,超过需要购买。

在SpringBoot项目中引入GPT

新建SpringBoot项目这里就略过了, 只要通过Maven新建一个SpringBoot项目即可

本项目SpringBoot版本: 2.3.0.RELEASE

官网community-libraries地址: https://platform.openai.com/docs/libraries/community-libraries

选择其中的openai-java地址: https://github.com/TheoKanning/openai-java

文档中有maven引入方式说明,在pom中加入引用,本次使用的是服务端:

  <dependency>
    <groupId>com.theokanning.openai-gpt3-java</groupId>
    <artifactId>{api|client|service}</artifactId>
    <version>version</version>       
  </dependency>

三种方式说明:

  • api(pojo) : request/response POJOs for the GPT APIs.(api的请求/响应POJO)
  • client(客户端) : a basic retrofit client for the GPT endpoints, includes the api module(GPT端点的基本改造客户端,包括api模块)
  • service(服务端) : A basic service class that creates and calls the client. This is the easiest way to get started.(一个创建和调用客户端的基本服务类。这是最简单的入门方法)

本项目中配置

<dependency>
    <groupId>com.theokanning.openai-gpt3-java</groupId>
    <artifactId>service</artifactId>
    <version>0.10.0</version>
</dependency>

版本说明: 这里的版本就是github上的版本号

编写业务类

正常直接调用:

public String chat(String prompt){

    //api key
    String token = "创建的 API Key";
    
    OpenAiService service = new OpenAiService(token);
    
    CompletionRequest completionRequest = CompletionRequest.builder()
            .model("text-davinci-003")
            .prompt(prompt)
            .temperature(0.5)
            .maxTokens(2048)
            .topP(1D)
            .frequencyPenalty(0D)
            .presencePenalty(0D)
            .build();
    List<CompletionChoice> compList = service.createCompletion(completionRequest).getChoices();
    compList.forEach(System.out::println);
    StringBuilder sb = new StringBuilder();
    for (CompletionChoice comp : compList) {
        sb.append(comp.getText());
    }
    return sb.toString();
}

由于某些网络问题,国内直接访问会超时,可以修改一下请求的地址

public String chat(String prompt){

    //api key
    String token = "创建的 API Key";
    
    ObjectMapper mapper = OpenAiService.defaultObjectMapper();
    OkHttpClient client = OpenAiService.defaultClient(token, Duration.ofSeconds(10L));
    
    //这里重新设置了一下请求地址,官方原地址:https://api.openai.com/
    Retrofit retrofit = OpenAiService.defaultRetrofit(client, mapper).newBuilder().baseUrl("请求的域名").build();
    
    OpenAiApi api = retrofit.create(OpenAiApi.class);
    OpenAiService service = new OpenAiService(api);

    CompletionRequest completionRequest = CompletionRequest.builder()
            .model("text-davinci-003")
            .prompt(prompt)
            .temperature(0.5)
            .maxTokens(2048)
            .topP(1D)
            .frequencyPenalty(0D)
            .presencePenalty(0D)
            .build();
    List<CompletionChoice> compList = service.createCompletion(completionRequest).getChoices();
    compList.forEach(System.out::println);
    StringBuilder sb = new StringBuilder();
    for (CompletionChoice comp : compList) {
        sb.append(comp.getText());
    }
    return sb.toString();
}

解决访问源官方Api URL超时问题

由于某些网络问题,国内直接访问Api URL会超时, 这里的解决方法是使用Cloudflare 的 Workers 来代理 OpenAI 的 API 地址,配合自己的域名即可在境内实现访问。因为 Cloudflare Workers 有每天免费 10 万次的请求额度,也有可以免费注册的域名,所以几乎可以说是零经济成本。技术成本请自己学习。

具体方法参考了烟斗汪game的回答: https://www.zhihu.com/question/587397900/answer/2989043787

具体本项目是在腾讯云购买了一个域名

然后使用Cloudflare进行了代理

以下引用

作者:烟斗汪game
链接:https://www.zhihu.com/question/587397900/answer/2989043787
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用这个方案需要你有以下东西:一个国内可访问的域名(没有请自己购买)一个 Cloudflare 账号(免费注册)步骤大纲新建一个 Cloudflare Worker将反代代码粘贴到 Worker 中并部署给 Worker 绑定一个国内可访问的域名使用自己的域名代替 api.openai.com使用自己的域名在各种chatgpt项目中填上去,即可实现国内直接访问具体步骤一、将域名 NS 转到 Cloudflare没有域名的请自己购买一个,腾讯云阿里云都能买,基本教程官方也都有,如果这都不会,建议别折腾了···如果域名已经托管在 Cloudflare ,忽略这一步即可。没有 Cloudflare 账号的话可以注册一个,具体注册细节就不多说了。注册或登录到 Cloudflare 的管理界面后,点击侧边栏的 “Websites” ,然后点击 “Add a Site” 按钮准备将域名转到 Cloudflare:在 “Enter your site (http://example.com)” 处输入要转入的域名后,点击 “Add Site”:根据 Cloudflare 的提示,在域名注册商处将 NS 修改到 Cloudflare 指定的地址,等待域名解析成功后,即可进行后续操作。创建一个 Cloudflare Worker登录到 Cloudflare 的管理界面后,点击侧边栏的 “Workers” 选项,然后点击 “Create a Service” 创建一个 Worker。然后在创建界面中输入 “Service name” 后点击 “Create Service” 按钮新建 Worker。“Select a starter” 项先不用管。至此 Cloudflare 的 Worker 便创建好了,下面开始修改 Worker 的代码,使其能代理 OpenAI 的 API。修改 Cloudflare Worker 的代码在 Worker 的管理界面,点击右上角的 “Quick Edit” 按钮编辑代码 Worker 的代码。在左侧的代码编辑器中,删除现有的所有代码,然后复制粘贴以下内容到代码编辑器:

const TELEGRAPH_URL = 'https://api.openai.com';

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url);
  url.host = TELEGRAPH_URL.replace(/^https?:\/\//, '');

  const modifiedRequest = new Request(url.toString(), {
    headers: request.headers,
    method: request.method,
    body: request.body,
    redirect: 'follow'
  });

  const response = await fetch(modifiedRequest);
  const modifiedResponse = new Response(response.body, response);

  // 添加允许跨域访问的响应头
  modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');

  return modifiedResponse;
}

最后点击编辑器右下角的 “Save and deploy” 按钮部署该代码,在弹出的对话框中继续选择 “Save and deploy” 确认部署。至此,便可以使用该 worker 的地址来代替 OpenAI 的 API 地址了。比如想要请求 ChatGPT 的 API 时,把官方文档中的 https://api.openai.com/v1/chat/completions 替换成 https://你自己的地址.workers.dev 即可但是你可能会发现,这样做了依然还是没有解决问题,因为 Cloudflare Workers 的 workers.dev 域名是无法在国内直接访问的。所以我们需要给 Worker 绑定一个自己的域名。绑定域名在 Cloudflare Workers 的管理界面中,点击 “Triggers” 选项卡,然后点击 “Custom Domians” 中的 “Add Custom Domain” 按钮以绑定域名。输入域名后点击 “Add Custom Domain”, 添加你之前绑定在cloudflare上的域名。随后,就可以通过你自己的域名来代替 OpenAI 的 API 地址了,你就可以在国内直接使用了。比如在本文的例子中,想要请求 ChatGPT 的 API ,即是把官方 API 地址 https://api.openai.com 换为你自己的域名 https://openai.nooc.ink 即可。由于 Cloudflare 有每天免费 10 万次的请求额度,所以个人使用基本是零成本的,如果要商用,这点额度是不够的。

标签:API,SpringBoot,GPT3,Worker,域名,api,Chat,Cloudflare,com
From: https://www.cnblogs.com/zwbsoft/p/17510436.html

相关文章

  • SpringBoot自定义starter
    1、先来一个简单的案例非常简单的工程结构controllerpackagecom.ly.demo.controller;importcom.ly.demo.service.MyStarterService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;import......
  • 如何让ChatGPT高效的理解你的Prompt
    1.概述ChatGPT是由OpenAI开发的一种强大的语言模型,它在许多自然语言处理任务中展现出了惊人的能力。而其中一个关键的技术概念就是"Prompt"。本文将深入探讨Prompt的概念、作用和应用,以及如何在与ChatGPT进行交互时充分利用Prompt的能力。2.内容ChatGPT 是一种基于深......
  • SpringBoot项目中功能集成的方式
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址SpringBoot项目中功能集成的方式接口集成基于HTTP协议的集成方式协议和通信HTTP是一种基于客户端-服务器模型的协议。确定使用的HTTP版本(如HTTP/1.1或HTTP/2)以及通信过程中使用的其他协议和规范。在协议和通信阶段,需......
  • 基于MySQL+SpringBoot+IDEA开放的绩效评估系统
    基于MySQL+SpringBoot+IDEA开放的绩效评估系统项目介绍......
  • springboot配置
    复习:配置SSMMAVEN==》依赖(一堆的)web.xml(servlet,filter,listener...)spring-mvc.xmlspring-mybatis.xmlmapper....缺点:忒麻烦(配置文件多)容易出错花费得时间长如果从0开始配置一个helloworld(url)ssm项目一,springboot最重要得2个特点1,自动配置spring自动管理......
  • 基于vue +Java+springboot+element-ui开发的智慧班牌系统源码
    电子班牌系统又称之为智慧班牌,是当前校园数字化信息化建设、文化建设的主流,是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流、家校互通的重要应用载体。在每个班级门口安装一台电子班牌终端,实现学校日常管理、校园信息化建设数据对接,为学生提供一个德智教育文化环境......
  • ChatGPT 指令知识要点
     ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视化图表制作全面AI时代就在转角道路已经铺好了“局外人”or“先行者”就在此刻等你决定。。。。。还有更多。。。。,联系我,一起学起来,行动起来吧ChatGPT指令知识要点指令越精确,ChatGPT回答会越到位。我们介绍11类......
  • ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视
    课程名称适应人群ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视全面AI时代就在转角,道路已经铺好了“局外人”or“先行者”就在此刻等你决定1、对ChatGPT感兴趣并希望有人手把手教学的新手2、希望了解GPT各类应用抓住未来风口3、希望提升竞争能力,不被AI淘汰的职场人......
  • springboot 通过SchedulingConfigurer实现多定时任务注册及动态修改执行周期
    Spring中定时任务有两种实现方式:1.@Scheduled(cron表达式)2.基于SchedulingConfigurer注册定时任务这两者的区别主要有1.@Scheduled不支持动态修改定时周期,只能停止服务器,修改cron表达式,再启动服务器;SchedulingConfigurer可以动态修改2.@Scheduled只能是单线程,而SchedulingConfi......
  • 【Springboot】- 指定端口和配置文件
    Springboot服务jar的外部指定端口和文件方式springboot指定端口的三种方式第一配置文件中添加server.port=9090第二在命令行中指定启动端口,比如传入参数java-jarbootsample.jar--server.port=9000第三传入虚拟机系统属性java-Dserver.port=9000-jarbootsample.j......