java集成OpenAI的chatGpt功能

打印 上一主题 下一主题

主题 1891|帖子 1891|积分 5673

一、开通OpenAI账号

1.注册OpenAI账号

官网地址:https://openai.com/
注意:提前准备好国外手机号,没有的话用短信平台购买手机号接收短信
2.购买国外手机号

地址:https://tiger-sms.com/

 我用支付宝充值了30多元(起充要30,加上手续费30多有点坑啊),买了一个印度尼西亚的号,美国的号用不了,提示虚拟手机号不允许注册。
 
3.用买到的手机号注册并获取短信验证码


 
4.登录OpenAI选择第一个开始聊天


 

 
二、java集成OpenAI的api

1.设置token

登录OpenAI选择第三个进入

进入个人平台页面,右上角点击后选择View API keys

新增一个key,注意复制好key的内容(这就是token)

 
 2. 项目中引入OpenAI的第三方工具包

由于官方只提供NodeJs和Python版本的工具包,java版的只能用第三方的开源包,可靠性安全性没法保证,将就着用。

 点击openai-java进入这个开源网站

 代码写的挺不错的,可惜用的是gradle构建的,由于gradle本人几乎不会用,就没下载源码了。好在提供了maven依赖。

 在maven仓库中可以查询到最新的jar包,引入项目即可
  1. <dependency>
  2.     <groupId>com.theokanning.openai-gpt3-java</groupId>
  3.     <artifactId>service</artifactId>
  4.     <version>0.12.0</version>
  5. </dependency>
复制代码
3.拷贝例子代码进行测试


由于缺少类等原因跑不起来,引入相关包
  1.       
  2.         <dependency>
  3.             <groupId>com.fasterxml.jackson.core</groupId>
  4.             <artifactId>jackson-databind</artifactId>
  5.             <version>2.15.2</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>com.fasterxml.jackson.core</groupId>
  9.             <artifactId>jackson-annotations</artifactId>
  10.             <version>2.15.2</version>
  11.         </dependency>
复制代码
在国内无法直接调用OpenAI的接口,需要使用VPN代理访问。完整的代码测试代码如下:
  1. package org.example.chatgpt;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.theokanning.openai.OpenAiApi;
  5. import com.theokanning.openai.completion.CompletionChoice;
  6. import com.theokanning.openai.completion.CompletionRequest;
  7. import com.theokanning.openai.completion.chat.*;
  8. import com.theokanning.openai.image.CreateImageRequest;
  9. import com.theokanning.openai.service.OpenAiService;
  10. import okhttp3.OkHttpClient;
  11. import retrofit2.Retrofit;
  12. import java.net.InetSocketAddress;
  13. import java.net.Proxy;
  14. import java.time.Duration;
  15. import java.time.temporal.ChronoUnit;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.List;
  19. import java.util.function.Consumer;
  20. import static com.theokanning.openai.service.OpenAiService.*;
  21. /**
  22. * 时间: 2023/6/5 17:07
  23. */
  24. public class Main {
  25.     public static void main(String[] args) {
  26.         String token = "sk-XXXXXXXXXXXX";
  27.         String proxyHost = "127.0.0.1";
  28.         int proxyPort = 7890;
  29.         //构建HTTP代理
  30.         Proxy proxy = null;
  31.         if (StrUtil.isNotBlank(proxyHost)) {
  32.             proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
  33.         }
  34.         //构建HTTP客户端
  35.         OkHttpClient client = defaultClient(token, Duration.of(60, ChronoUnit.SECONDS))
  36.                 .newBuilder()
  37.                 .proxy(proxy)
  38.                 .build();
  39.         ObjectMapper mapper = defaultObjectMapper();
  40.         Retrofit retrofit = defaultRetrofit(client, mapper);
  41.         OpenAiApi api = retrofit.create(OpenAiApi.class);
  42.         OpenAiService service = new OpenAiService(api, client.dispatcher().executorService());
  43.         //文本补全
  44.         System.out.println("\nCreating completion...");
  45.         CompletionRequest completionRequest = CompletionRequest.builder()
  46.                 .model("ada")
  47.                 .prompt("你叫什么?")
  48.                 .echo(true)
  49.                 .user("testing")
  50.                 .n(3)
  51.                 .build();
  52.         service.createCompletion(completionRequest).getChoices().forEach(new Consumer<CompletionChoice>() {
  53.             @Override
  54.             public void accept(CompletionChoice completionChoice) {
  55.                 System.out.println(completionChoice.getText());
  56.             }
  57.         });
  58.         //图片生成
  59.         System.out.println("\nCreating Image...");
  60.         CreateImageRequest request = CreateImageRequest.builder()
  61.                 .prompt("小猫钓鱼漫画")
  62.                 .build();
  63.         System.out.println("\nImage is located at:");
  64.         System.out.println(service.createImage(request).getData().get(0).getUrl());
  65.         //对话
  66.         System.out.println("Creating chat completion...");
  67.         final List<ChatMessage> messages = new ArrayList<>();
  68.         final ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), "你叫什么?");
  69.         messages.add(systemMessage);
  70.         ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
  71.                 .builder()
  72.                 .model("gpt-3.5-turbo")
  73.                 .messages(messages)
  74.                 .n(1)
  75.                 .maxTokens(500)
  76.                 .logitBias(new HashMap<>())
  77.                 .build();
  78.         //完整对话
  79.         service.createChatCompletion(chatCompletionRequest)
  80.                 .getChoices().forEach(new Consumer<ChatCompletionChoice>() {
  81.                     @Override
  82.                     public void accept(ChatCompletionChoice chatCompletionChoice) {
  83.                         System.out.println(chatCompletionChoice.getMessage());
  84.                     }
  85.                 });
  86.         //流式对话(逐Token返回)
  87. //        service.streamChatCompletion(chatCompletionRequest)
  88. //                .doOnError(Throwable::printStackTrace)
  89. //                .blockingForEach(System.out::println);
  90.         //立即释放连接
  91.         service.shutdownExecutor();
  92.     }
  93. }
复制代码
上述代码测试了:文本补全、绘图、聊天三个功能。
 
注意事项:

1.由于网络的原因,很多国外网站无法访问,需要先开通VPN,访问国外网站
2.国外手机号购买无法注册,多换几个号码试试
3.代码中需要设置HTTP代理,代理的地址就是VPN的本地地址
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表