OpenAI Java SDK——chatgpt-java-v1.0.3更新支持GPT-3.5-Turbo,支持语音 ...

打印 上一主题 下一主题

主题 1037|帖子 1037|积分 3111

简介

chatgpt-java是一个OpenAI的Java版SDK,支持开箱即用。目前以支持官网全部Api。支持最新版本GPT-3.5-Turbo模型以及whisper-1模型。增加chat聊天对话以及语音文件转文字,语音翻译。
开源地址:https://github.com/Grt1228/chatgpt-java
快速开始

导入pom依赖
  1. <dependency>
  2.     <groupId>com.unfbx</groupId>
  3.     <artifactId>chatgpt-java</artifactId>
  4.     <version>1.0.3</version>
  5. </dependency>
复制代码
  1. package com.unfbx.eventTest.test;
  2. import com.unfbx.chatgpt.OpenAiClient;
  3. import com.unfbx.chatgpt.entity.completions.CompletionResponse;
  4. import java.util.Arrays;
  5. public class TestB {
  6.     public static void main(String[] args) {
  7.         //代理可以为null
  8.         Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.1.111", 7890));
  9.         OpenAiClient openAiClient = OpenAiClient.builder()
  10.                 .apiKey("sk-**************")
  11.                 .proxy(proxy)
  12.                 .build();
  13.         //简单模型
  14.         //CompletionResponse completions = //openAiClient.completions("我想申请转专业,从计算机专业转到会计学专业,帮我完成一份两百字左右的申请书");
  15.         //最新GPT-3.5-Turbo模型
  16.         Message message = Message.builder().role(Message.Role.USER).content("你好啊我的伙伴!").build();
  17.         ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();
  18.         ChatCompletionResponse chatCompletionResponse = openAiClient.chatCompletion(chatCompletion);
  19.         chatCompletionResponse.getChoices().forEach(e -> {
  20.             System.out.println(e.getMessage());
  21.         });
  22.     }
  23. }
复制代码
支持流式输出

官方对于解决请求缓慢的情况推荐使用流式输出模式。
主要是基于SSE 实现的(可以百度下这个技术)。也是最近在了解到SSE。OpenAI官网在接受Completions接口的时候,有提到过这个技术。 Completion对象本身有一个stream属性,当stream为true时候Api的Response返回就会变成Http长链接。 具体可以看下文档:https://platform.openai.com/docs/api-reference/completions/create
  1. package com.unfbx.chatgpt;
  2. ********************
  3. /**
  4. * @author https:www.unfbx.com
  5. * 2023-02-28
  6. */
  7. public class OpenAiStreamClientTest {
  8.     private OpenAiStreamClient client;
  9.     @Before
  10.     public void before() {
  11.         //创建流式输出客户端
  12.         Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.1.111", 7890));
  13.         client = OpenAiStreamClient.builder()
  14.                 .connectTimeout(50)
  15.                 .readTimeout(50)
  16.                 .writeTimeout(50)
  17.                 .apiKey("sk-******************************")
  18.                 .proxy(proxy)
  19.                 .build();
  20.     }
  21.     //GPT-3.5-Turbo模型
  22.     @Test
  23.     public void chatCompletions() {
  24.         ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();
  25.         Message message = Message.builder().role(Message.Role.USER).content("你好啊我的伙伴!").build();
  26.         ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();
  27.         client.streamChatCompletion(chatCompletion, eventSourceListener);
  28.         CountDownLatch countDownLatch = new CountDownLatch(1);
  29.         try {
  30.             countDownLatch.await();
  31.         } catch (InterruptedException e) {
  32.             e.printStackTrace();
  33.         }
  34.     }
  35.     //常规对话模型
  36.     @Test
  37.     public void completions() {
  38.         ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();
  39.         Completion q = Completion.builder()
  40.                 .prompt("我想申请转专业,从计算机专业转到会计学专业,帮我完成一份两百字左右的申请书")
  41.                 .stream(true)
  42.                 .build();
  43.         client.streamCompletions(q, eventSourceListener);
  44.         CountDownLatch countDownLatch = new CountDownLatch(1);
  45.         try {
  46.             countDownLatch.await();
  47.         } catch (InterruptedException e) {
  48.             e.printStackTrace();
  49.         }
  50.     }
  51. }
复制代码
输出的是sse流式数据:
  1. 22:51:23.620 [OkHttp - OpenAI建立sse连接...
  2. 22:51:23.623 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"role":"assistant"},"index":0,"finish_reason":null}]}
  3. 22:51:23.625 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"你"},"index":0,"finish_reason":null}]}
  4. 22:51:23.636 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"好"},"index":0,"finish_reason":null}]}
  5. 22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"!"},"index":0,"finish_reason":null}]}
  6. 22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"有"},"index":0,"finish_reason":null}]}
  7. 22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"什"},"index":0,"finish_reason":null}]}
  8. 22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"么"},"index":0,"finish_reason":null}]}
  9. 22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"我"},"index":0,"finish_reason":null}]}
  10. 22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"可以"},"index":0,"finish_reason":null}]}
  11. 22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"帮"},"index":0,"finish_reason":null}]}
  12. 22:51:23.912 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"助"},"index":0,"finish_reason":null}]}
  13. 22:51:23.934 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"你"},"index":0,"finish_reason":null}]}
  14. 22:51:24.203 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"的"},"index":0,"finish_reason":null}]}
  15. 22:51:24.203 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"吗"},"index":0,"finish_reason":null}]}
  16. 22:51:24.203 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"?"},"index":0,"finish_reason":null}]}
  17. 22:51:24.276 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
  18. 22:51:24.276 [OkHttp - OpenAI返回数据:[DONE]
  19. 22:51:24.277 [OkHttp - OpenAI返回数据结束了
  20. 22:51:24.277 [OkHttp - OpenAI关闭sse连接...
复制代码
流式输出如何集成Spring Boot实现 api接口?

可以参考项目:https://github.com/Grt1228/chatgpt-steam-output
实现自定义的EventSourceListener,例如:OpenAIEventSourceListener并持有一个SseEmitter,通过SseEmitter进行数据的通信
postman测试

发送请求:Get http://localhost:8080/test/sse?uid=123
看下response (需要新版本postman)

重点关注下header:Content-Type:text/event-stream
如果想结合前端显示自行百度sse前端相关实现

说明

支持最新版的语音转文字,语音翻译api请参考测试代码:OpenAiClientTest.java

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

数据人与超自然意识

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