OpenAI Java SDK——chatgpt-java更新支持GPT-3.5-Turbo,支持语音转文字,语音翻译。

简介

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

快速开始

导入pom依赖

<dependency><groupId>com.unfbx</groupId><artifactId>chatgpt-java</artifactId><version>1.0.4</version>
</dependency>
package com.unfbx.eventTest.test;
import com.unfbx.chatgpt.OpenAiClient;
import com.unfbx.chatgpt.entity.completions.CompletionResponse;
import java.util.Arrays;public class TestB {public static void main(String[] args) {//代理可以为nullProxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.1.111", 7890));OpenAiClient openAiClient = OpenAiClient.builder().apiKey("sk-**************").proxy(proxy).build();//简单模型//CompletionResponse completions = //openAiClient.completions("我想申请转专业,从计算机专业转到会计学专业,帮我完成一份两百字左右的申请书");//最新GPT-3.5-Turbo模型Message message = Message.builder().role(Message.Role.USER).content("你好啊我的伙伴!").build();ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();ChatCompletionResponse chatCompletionResponse = openAiClient.chatCompletion(chatCompletion);chatCompletionResponse.getChoices().forEach(e -> {System.out.println(e.getMessage());});}
}

支持流式输出

官方对于解决请求缓慢的情况推荐使用流式输出模式。
主要是基于SSE 实现的(可以百度下这个技术)。也是最近在了解到SSE。OpenAI官网在接受Completions接口的时候,有提到过这个技术。 Completion对象本身有一个stream属性,当stream为true时候Api的Response返回就会变成Http长链接。 具体可以看下文档:https://platform.openai.com/docs/api-reference/completions/create

package com.unfbx.chatgpt;********************/*** @author https:www.unfbx.com* 2023-02-28*/
public class OpenAiStreamClientTest {private OpenAiStreamClient client;@Beforepublic void before() {//创建流式输出客户端Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.1.111", 7890));client = OpenAiStreamClient.builder().connectTimeout(50).readTimeout(50).writeTimeout(50).apiKey("sk-******************************").proxy(proxy).build();}//GPT-3.5-Turbo模型@Testpublic void chatCompletions() {ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();Message message = Message.builder().role(Message.Role.USER).content("你好啊我的伙伴!").build();ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();client.streamChatCompletion(chatCompletion, eventSourceListener);CountDownLatch countDownLatch = new CountDownLatch(1);try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}//常规对话模型@Testpublic void completions() {ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();Completion q = Completion.builder().prompt("我想申请转专业,从计算机专业转到会计学专业,帮我完成一份两百字左右的申请书").stream(true).build();client.streamCompletions(q, eventSourceListener);CountDownLatch countDownLatch = new CountDownLatch(1);try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}}

输出的是sse流式数据:


22:51:23.620 [OkHttp - OpenAI建立sse连接...
22:51:23.623 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"role":"assistant"},"index":0,"finish_reason":null}]}
22:51:23.625 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"你"},"index":0,"finish_reason":null}]}
22:51:23.636 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"好"},"index":0,"finish_reason":null}]}
22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"!"},"index":0,"finish_reason":null}]}
22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"有"},"index":0,"finish_reason":null}]}
22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"什"},"index":0,"finish_reason":null}]}
22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"么"},"index":0,"finish_reason":null}]}
22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"我"},"index":0,"finish_reason":null}]}
22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"可以"},"index":0,"finish_reason":null}]}
22:51:23.911 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"帮"},"index":0,"finish_reason":null}]}
22:51:23.912 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"助"},"index":0,"finish_reason":null}]}
22:51:23.934 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"你"},"index":0,"finish_reason":null}]}
22:51:24.203 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"的"},"index":0,"finish_reason":null}]}
22:51:24.203 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"吗"},"index":0,"finish_reason":null}]}
22:51:24.203 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"?"},"index":0,"finish_reason":null}]}
22:51:24.276 [OkHttp - OpenAI返回数据:{****省略无效数据******"model":"gpt-3.5-turbo-0301","choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
22:51:24.276 [OkHttp - OpenAI返回数据:[DONE]
22:51:24.277 [OkHttp - OpenAI返回数据结束了
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)
image

重点关注下header:Content-Type:text/event-stream

如果想结合前端显示自行百度sse前端相关实现

说明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5926.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT似乎有的时候并不能搞懂Java的动态分派,你懂了吗?

目录 碎碎念 ChatGPT 中出现的问题 那么正确答案应该是什么呢&#xff1f; 分派的相关知识点总结&#xff1a; 分派是什么&#xff1f; 静态分派与动态分派&#xff1a; Java语言是静态多分派&#xff0c;动态单分派的&#xff1b; 静态分派&#xff1a;静态重载多分派…

使用java对接chatgpt(含全部代码)

使用java对接chatgpt&#xff08;含全部代码&#xff09; 因为对vscode不熟悉&#xff0c;前段界面我也是在idea里写的&#xff0c;先看一下效果图是这样&#xff0c;比较简陋 我直接上代码&#xff0c;关于chatgpt前端的html&#xff0c;对了因为这个是我用之前写的匿名群聊改…

【开源免费】ChatGPT-Java版SDK重磅更新至1.0.10版,支持Tokens计算,快来一键接入!!!

简介 ChatGPT Java版SDK开源地址&#xff1a;github.com/Grt1228/cha… &#xff0c;目前收获将近1000个star。 有bug欢迎朋友们指出&#xff0c;互相学习&#xff0c;所有咨询全部免费。 最新版&#xff1a;1.0.10 <dependency><groupId>com.unfbx</groupId&…

面向Java开发者的ChatGPT提示词工程(1)

各位Java开发者们&#xff0c;欢迎来到万猫学社&#xff01;在这里&#xff0c;我将和大家分享ChatGPT提示词工程的系列文章&#xff0c;希望能够和大家一起学习和探讨提示词的最佳实践。 虽然互联网上已经有很多有关提示词的材料&#xff0c;比如那些“每个人都必须知道的30个…

JAVA 集成 chatGPT

1.文档地址&#xff1a; https://platform.openai.com/docs/introduction 下载demo&#xff1a;2. pom集成包 <dependency><groupId>com.theokanning.openai-gpt3-java</groupId><artifactId>client</artifactId><version>0.9.0</vers…

2023ChatGPT整理回答的Java高级工程师面试题

本文整理了一些 ChatGPT 回答的 java 面试题,希望能够帮助到更多的人! 死锁与活锁的区别,死锁与饥饿的区别? 死锁和活锁都是多线程并发编程中的问题,它们的区别主要在于线程是否能够继续执行。 死锁指的是两个或以上进程因竞争资源而造成的一种互相等待的现象。当多个线…

java集成chatGpt完整案例代码(效果和官网一样逐字输出)

要集成chatGpt参考我上一篇文章即可。但是&#xff0c;如果要实现官网一样的效果&#xff0c;逐字输出&#xff0c;难度就提升了不少了。经过在官网的研究发现它应该是采用了SSE技术&#xff0c;这是一种最新的HTTP交互技术。SSE(Server-Sent Events):通俗解释起来就是一种基于…

【程序源代码】ChatGPT Java Api

“ 关键字: “ChatGPT AI 人工智能" 01 ———— 【总体介绍】 ChatGPT Java Api 使用 maven <dependency><groupId>com.github.plexpt</groupId><artifactId>chatgpt</artifactId><version>1.1.2</version> </dependency…

体验使用 InsCode AI 创作助手 来帮我完成一篇博客

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 InsCode AI 创作助手 它来啦回答不满意可以要求重新生成在输入 prompt 时&#…

厉害了!北大3位硕博生搞出ChatGPT版Excel!动动嘴就能自动处理表格……免费用!...

来源&#xff1a;量子位 做Excel表&#xff0c;真就动动嘴就够了&#xff01; 看&#xff0c;输入想要干的事&#xff1a;给学生成绩排个名吧。 简单敲个回车&#xff0c;表格唰一下就列好了&#xff01; 检查一遍也没错。 还能跨表格处理。 比如标记出两张不同表格中排名都在前…

「原驼」炸场:跑分达ChatGPT的99%,人类难以分辨!

源 | 量子位 大家好&#xff0c;这里是 NewBeeNLP。羊驼家族又出新品&#xff0c;直接炸场&#xff01;自动测试分数达到ChatGPT的99.3%&#xff0c;人类难以分辨两者的回答…… 这是开源大模型最新成果&#xff0c;来自羊驼家族的又一重磅成员——华盛顿大学原驼&#xff08;G…

《用ChatGPT自学的正确打开方式》

丰色 发自 凹非寺量子位 | 公众号 QbitAI 这两天&#xff0c;一个用ChatGPT进行自学的免费工具火了&#xff1a; 它叫AIbus&#xff0c;主界面是一块白板&#xff0c;只需写下你想探索的任何主题&#xff0c;比如“傅立叶变换”&#xff0c;它就会在几秒之内给出n个建议。 然后…

「实战」将多种AI工具整合到游戏开发工作流;AI应用推荐writeout;ControlNet新手实操流程图;ChatGPT复现之路 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『Notion AI 这波大赚』一个月内&#xff0c; AI 为 Notion 带来至少1000万美金ARR 作为最早一批接入 ChatGPT 的产品&#xff0c;Not…

从ChatGPT到Auto-GPT,自主人工智能真的要来了吗?

随着ChatGPT的持续爆火&#xff0c;人们在使用ChatGPT的时也发现了它的局限性&#xff0c;就是需要使用者自己来给GPT提示&#xff08;prompt&#xff09;。 如果你想感受ChatGPT强大&#xff0c;又没有OpenAI账号&#xff0c;可以关注《可立AI科技》这个微信公众号&#xff0c…

编辑部已成羊村,这几天幸亏有ChatGPT(doge)

梦晨 羿阁 发自 凹非寺量子位 | 公众号 QbitAI 坏事了&#xff0c;AI真的来抢饭碗了。 还是我的饭碗&#xff01; 这两天你们看的推送&#xff0c;有些标题是AI帮忙取的&#xff0c;有些文章甚至由AI完成了主要工作。 我呢&#xff1f;我不过是打打下手&#xff0c;加些过渡句&…

我用 ChatGPT 学设计模式之访问者模式

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

Spring Cloud Gateway路由到Amazon S3签名失败处理

Spring Cloud Gateway路由到Amazon S3签名失败处理 背景 最近在预研统一存储网关&#xff0c;想到就是使用Spring Cloud Gateway作为网关的入口&#xff0c;再反向代理到S3对象存储服务器。 软件版本 网关&#xff1a;Spring Cloud Gateway 3.1.2 s3对象存储&#xff1a;m…

基于java(springboot)和go-cqhttp实现QQ机器人

目录 yh-qqrobot机器人简介go-cqhttp搭建1.下载应用2.生成bat文件3. 初始化项目4. 配置5. 运行项目 yh-qqrobot搭建搭建后端1. 导入sql文件2. 配置文件3. 导入到idea 搭建前端 yh-qqrobot机器人简介 yh-qqrobot是一个基于若依框和go-cqhttp集成的系统&#xff0c;一开始我只是揣…

【基于Flink的城市交通实时监控平台】需求一:卡口车辆超速情况检测

案例需求&#xff1a; 从kafka的topic-car中读取卡口数据&#xff0c;将超速车辆写入mysql的select * from t_speeding_info表&#xff0c;当通过卡口的车速超过60就认定为超速 卡口数据格式&#xff1a; action_time long --摄像头拍摄时间戳&#xff0c;精确到秒, monitor…

chatgpt赋能python:Python下载工具:提高工作效率的不二之选

Python下载工具&#xff1a;提高工作效率的不二之选 作为一名有10年Python编程经验的工程师&#xff0c;我深知一款好用的下载工具对于我们的工作效率有多么重要。因此&#xff0c;在众多Python工具中&#xff0c;我多次选用了一些好用的下载工具&#xff0c;并且对它们进行了…