2.5k🌟的ChatGPT-Java版SDK升级1.1.2-beta0支持GPT-4V🔥、Dall-e-3模型、ToolCalls、微调Job、TTS...

这篇具有很好参考价值的文章主要介绍了2.5k🌟的ChatGPT-Java版SDK升级1.1.2-beta0支持GPT-4V🔥、Dall-e-3模型、ToolCalls、微调Job、TTS...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、项目简介

Chatgpt-Java是OpenAI官方Api的Java SDK,可以快速接入项目使用。支持OpenAI官方全部接口。
目前收获将2500+star🌟。

  • 开源地址:https://github.com/Grt1228/chatgpt-java
  • 官方文档:https://chatgpt-java.unfbx.com/
  • 最新版本:1.1.2-beta0
<dependency>
    <groupId>com.unfbx</groupId>
    <artifactId>chatgpt-java</artifactId>
    <version>1.1.2-beta0</version>
</dependency>

目前支持的功能:

Dall-e-3 FineTuneJob TTS ChatCompletionWithPicture
AI生成图片 微调job 文本转语音 附加图片的ChatCompletion
TikToken Chat Completions Images Speech To Text 余额查询
Token计算 GPT-3.5、4.0对话模型 GPT-3.0对话 图片模型 语音转文字,语音翻译 余额查询
Embeddings Files Moderations Fine-tune Models
嵌入 自定义训练模型 文本审核,敏感词鉴别 微调 模型检索相关

OpenAi在上周更新了新的版本,发布了很多新的功能,包括GPT-4V、附加图片的ChatCompletion、指定返回数据格式、Tool Call、Dall-e-3生成图片、FineTuneJob、文本转语音TTS等等功能。

本周Chatgpt-Java同步更新,支持最新的Api。

2、新版本更新

所以的新版本Api更新基于原有的OpenAiClient和OpenAiStreamClient,所以构建客户端的当时是没有变化的。

创建Client如下:

@Slf4j
public class OpenAiClientTest {

    private OpenAiClient client;
    private OpenAiStreamClient streamClient;
    
    @Before
    public void before() {
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());
        //!!!!千万别再生产或者测试环境打开BODY级别日志!!!!
        //!!!生产或者测试环境建议设置为这三种级别:NONE,BASIC,HEADERS,!!!
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
        OkHttpClient okHttpClient = new OkHttpClient
                .Builder()
                .addInterceptor(httpLoggingInterceptor)
                .addInterceptor(new OpenAiResponseInterceptor())
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .build();
        client = OpenAiClient.builder()
                .apiKey(Arrays.asList("*********************"))
                .okHttpClient(okHttpClient)
                //自己做了代理就传代理地址,没有可不不传,(关注公众号回复:openai ,获取免费的测试代理地址)
                .apiHost("https://*******/")
                .build();

        streamClient = OpenAiStreamClient.builder()
                //支持多key传入,请求时候随机选择
                .apiKey(Arrays.asList("*********************"))
                .okHttpClient(okHttpClient)
                //自己做了代理就传代理地址,没有可不不传,(关注公众号回复:openai ,获取免费的测试代理地址)
                .apiHost("https://*******/")
                .build();
    }
}

2.1、附加图片的chatCompletion示例

2.1.1、阻塞请求

/**
 * 聊天模型支持图片流式示例
 */
@Test
public void pictureChat() {
    Content textContent = Content.builder().text("What’s in this image?").type(Content.Type.TEXT.getName()).build();
    ImageUrl imageUrl = ImageUrl.builder().url("https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg").build();
    Content imageContent = Content.builder().imageUrl(imageUrl).type(Content.Type.IMAGE_URL.getName()).build();
    List<Content> contentList = new ArrayList<>();
    contentList.add(textContent);
    contentList.add(imageContent);
    MessagePicture message = MessagePicture.builder().role(Message.Role.USER).content(contentList).build();
    //#####请求参数使用ChatCompletionWithPicture类
    ChatCompletionWithPicture chatCompletion = ChatCompletionWithPicture
            .builder()
            .messages(Collections.singletonList(message))
            .model(ChatCompletion.Model.GPT_4_VISION_PREVIEW.getName())
            .build();
    ChatCompletionResponse chatCompletionResponse = client.chatCompletion(chatCompletion);
    chatCompletionResponse.getChoices().forEach(e -> System.out.println(e.getMessage()));
}

2.1.2、流式请求

/**
 * 聊天模型支持图片流式示例
 */
@Test
public void pictureChatV2() {
    Content textContent = Content.builder().text("What’s in this image?").type(Content.Type.TEXT.getName()).build();
    ImageUrl imageUrl = ImageUrl.builder().url("https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg").build();
    Content imageContent = Content.builder().imageUrl(imageUrl).type(Content.Type.IMAGE_URL.getName()).build();
    List<Content> contentList = new ArrayList<>();
    contentList.add(textContent);
    contentList.add(imageContent);
    MessagePicture message = MessagePicture.builder().role(Message.Role.USER).content(contentList).build();
    ChatCompletionWithPicture chatCompletion = ChatCompletionWithPicture
            .builder()
            .messages(Collections.singletonList(message))
            .model(ChatCompletion.Model.GPT_4_VISION_PREVIEW.getName())
            .build();
    ChatCompletionResponse chatCompletionResponse = client.chatCompletion(chatCompletion);
    chatCompletionResponse.getChoices().forEach(e -> System.out.println(e.getMessage()));
}

2.1.3、注意事项

附加图片的chatCompletion暂时不支持以下简易接口请求

  • public void streamChatCompletion(List messages, EventSourceListener el)
  • public ChatCompletionResponse chatCompletion(List messages)

2.2、ChatGPT指定返回Json格式

最新版的OpenAi接口支持执行数据返回格式。以下仅举例阻塞输出的方案,流式输出一样的使用方法不再举例。

指定数据格式目前支持:

  • json_object
  • text

参考源码:com/unfbx/chatgpt/entity/chat/ResponseFormat.java

2.2.1、请求

/**
 * 自定义返回数据格式
 */
@Test
public void diyReturnDataModelChat() {
    Message message = Message.builder().role(Message.Role.USER).content("随机输出10个单词,使用json输出").build();
    ChatCompletion chatCompletion = ChatCompletion
        .builder()
        .messages(Collections.singletonList(message))
        .responseFormat(ResponseFormat.builder().type(ResponseFormat.Type.JSON_OBJECT.getName()).build())
        .model(ChatCompletion.Model.GPT_4_1106_PREVIEW.getName())
        .build();
    ChatCompletionResponse chatCompletionResponse = client.chatCompletion(chatCompletion);
    chatCompletionResponse.getChoices().forEach(e -> System.out.println(e.getMessage()));
}

{
  "words": [
    "aberration",
    "nostalgia",
    "quintessential",
    "harmony",
    "serendipity",
    "benevolent",
    "ephemeral",
    "labyrinth",
    "zenith",
    "vivacious"
  ]
}

2.3、Dall-e-3生成图片(AI绘画)

最新版的OpenAi接口支持Dall-e-3模型生成图片,功能更加强大。

2.3.1、请求

/**
 * 新版图片生成模型使用示例
 */
@Test
public void generateImageByDall_e_3() {
    Image image = Image.builder()
        .responseFormat(com.unfbx.chatgpt.entity.images.ResponseFormat.URL.getName())
        .model(Image.Model.DALL_E_3.getName())
        .prompt("一个咖啡杯,上面印刷Unfbx四个字母。")
        .n(1)
        .quality(Image.Quality.HD.getName())
        .size(SizeEnum.size_1024_1792.getName())
        .style(Image.Style.NATURAL.getName())
        .build();
    ImageResponse imageResponse = client.genImages(image);
//        ImageResponse imageResponse = client.genImages("一个咖啡杯,上面印刷Unfbx四个字母。");
    System.out.println(imageResponse.getData().get(0).getUrl());
    }

2.4、FineTuneJob微调job

OpenAi支持自定义训练专属模型,通过FineTuneJob进行模型微调训练。
FineTuneJob支持的模型有:

  • gpt-3.5-turbo-1106
  • gpt-3.5-turbo-0613
  • babbage-002
  • gpt-4-0613
  • davinci-002

更多详细参考源码:com/unfbx/chatgpt/entity/fineTune/job/FineTuneJob.java

2.4.1、创建训练数据文件

创建文件格式为json1下面是一个示例文件:fine_tune_test_file.json1
文件在github源码根目录,文件内容;

{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "chagpt-java好用么?"}, {"role": "assistant", "content": "还行吧。"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "chagpt-java最新版本是什么?"}, {"role": "assistant", "content": "1.1.2版本"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "chagpt-java支持流式输出么?"}, {"role": "assistant", "content": "最新版支持流式输出"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "chagpt-java的作者是谁?"}, {"role": "assistant", "content": "作者是Unfbx,个人网站:https://www.unfbx.com"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "Unfbx是chagpt-java的作者,微信公众号是什么?"}, {"role": "assistant", "content": "程序员的黑洞。"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "Unfbx是chagpt-java的作者,个人博客地址是什么?"}, {"role": "assistant", "content": "https://www.unfbx.com"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "Unfbx是chagpt-java的作者,chagpt-java官方地址是什么?"}, {"role": "assistant", "content": "https://chatgpt-java.unfbx.com"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "Unfbx是chagpt-java的作者,chagpt-java的github地址是什么?"}, {"role": "assistant", "content": "https://github.com/Grt1228/chatgpt-java"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "Unfbx是chagpt-java的作者,chagpt-java的简单介绍。"}, {"role": "assistant", "content": "OpenAI官方Api的Java SDK,可以快速接入项目使用。目前支持OpenAI官方全部接口,**同时支持Tokens计算。参考文档:[Tokens_README.md](https://github.com/Grt1228/chatgpt-java/blob/main/Tokens_README.md)**"}]}
{"messages": [{"role": "system", "content": "OnBot是一个聊天机器人。"}, {"role": "user", "content": "OpenAi的官方Java Sdk 是什么?"}, {"role": "assistant", "content": "chagpt-java,github地址:https://github.com/Grt1228/chatgpt-java"}]}

2.4.2、上传文件

/**
 * fineTuneJob使用示例
 */
@Test
public void uploadFile() {
    UploadFileResponse uploadFileResponse = client.uploadFile(new java.io.File("fine_tune_test_file.json1"));
    //返回文件的id:file-6KaBdtVlaassk9Y2P5ZjTqIC
    System.out.println(uploadFileResponse.getId());
}

2.4.3、创建微调job

@Test
public void fineTuneJob() {
    //file-KaNQn5V9YHlLqVQzo8CUMdIr是文件上传返回的文件id
    FineTuneJobResponse fineTuneJobResponse = client.fineTuneJob("file-KaNQn5V9YHlLqVQzo8CUMdIr");
    //返回job id = ftjob-5WQr0bZ7grvjnY3Or2sqiixl
    System.out.println(fineTuneJobResponse.toString());
}

2.4.4、查看微调job

2.4.4.1、详细信息

  • FineTuneJobResponse的fineTunedModel属性就是微调的模型id,也是后续使用的模型id

需要主义只有FineTuneJob执行完成fineTunedModel属性才会有值,job失败或者未执行完成此属性为null。

结合第4.0章节可以看到job的执行信息。

@Test
public void retrieveFineTuneJob() {
    //传入job id
    FineTuneJobResponse fineTuneJobResponse = client.retrieveFineTuneJob("ftjob-5WQr0bZ7grvjnY3Or2sqiixl");
    System.out.println(fineTuneJobResponse);
}

2.4.4.2、job列表

支持分页查询

@Test
public void retrieveFineTuneJob() {

//        FineTuneJobListResponse<FineTuneJobResponse> jobListResponse = client.fineTuneJobs("ftjob-cG7zIraBhAkq5Ybs7311lH7t", 5);
    FineTuneJobListResponse<FineTuneJobResponse> jobListResponse = client.fineTuneJobs(null, 20);
    System.out.println(jobListResponse);
}

2.4.5、微调job执行进度查询

支持分页查询,支持分页

@Test
public void fineTuneJobEvents() {
    FineTuneJobListResponse<FineTuneJobEvent> listResponse = client.fineTuneJobEvents("ftjob-5WQr0bZ7grvjnY3Or2sqiixl", null, 20);
//        FineTuneJobListResponse<FineTuneJobEvent> listResponse = client.fineTuneJobEvents("ftjob-5WQr0bZ7grvjnY3Or2sqiixl", "ftevent-WwB8lpWxhjgUJX9DYdb47zJe", 20);
    listResponse.getData().forEach(e -> System.out.println(e.getMessage()));
}

输出信息,输出信息会返回创建的模型id,这个就是后续使用的模型id。

    The job has successfully completed
    New fine-tuned model created: ft:gpt-3.5-turbo-1106:personal::8K5KwJTU
    Step 91/100: training loss=0.45
    Step 81/100: training loss=0.00
    Step 71/100: training loss=0.00
    Step 61/100: training loss=0.94
    Step 51/100: training loss=0.19
    Step 41/100: training loss=0.06
    Step 31/100: training loss=0.95
    Step 21/100: training loss=1.99
    Step 11/100: training loss=2.50
    Step 1/100: training loss=5.42
    Fine-tuning job started
    Files validated, moving job to queued state
    Validating training file: file-KaNQn5V9YHlLqVQzo8CUMdIr
    Created fine-tuning job: ftjob-5WQr0bZ7grvjnY3Or2sqiixl

2.4.6、微调模型使用

注意model参数为自定义的模型id。此id会在fineTuneJobEvents完成后返回。

此id的获取有几种方式:

  • 1、fineTuneJobEvents接口完成后返回。
  • 2、通过3.1章节查询job详细信息可以获取模型id:fineTunedModel属性。
  • 3、models接口返回,参考第5章
@Test
public void fineTuneJobModelChat() {
    Message message1 = Message.builder().role(Message.Role.SYSTEM).content("OnBot是一个聊天机器人。").build();
    Message message2 = Message.builder().role(Message.Role.USER).content("OnBot请问:Chatgpt-java的作者是谁?").build();
    List<Message> messages = new ArrayList<>(2);
    messages.add(message1);
    messages.add(message2);
    ChatCompletion chatCompletion = ChatCompletion
            .builder()
            .messages(messages)
            .model("ft:gpt-3.5-turbo-1106:personal::8K5KwJTU")
            .build();
    ChatCompletionResponse chatCompletionResponse = client.chatCompletion(chatCompletion);
    chatCompletionResponse.getChoices().forEach(e -> {
        System.out.println(e.getMessage());
    });
}

输出信息

作者是Unfbx,个人网站:https://www.unfbx.com

2.5、文本转语音TTS

OpenAi最新接口支持TTS,支持高清语音,支持六种人声。

2.5.1、文本转语音

/**
 * tts使用示例
 */
@Test
public void textToSpeed() {
    TextToSpeech textToSpeech = TextToSpeech.builder()
            .model(TextToSpeech.Model.TTS_1_HD.getName())
            .input("OpenAI官方Api的Java SDK,可以快速接入项目使用。目前支持OpenAI官方全部接口,同时支持Tokens计算。官方github地址:https://github.com/Grt1228/chatgpt-java。欢迎star。")
            .voice(TtsVoice.NOVA.getName())
            .responseFormat(TtsFormat.MP3.getName())
            .build();
    File file = new File("C:\\Users\\***\\Desktop\\test.mp3");
    client.textToSpeech(textToSpeech, new Callback<ResponseBody>() {
        @SneakyThrows
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            InputStream inputStream = response.body().byteStream();
            //创建文件
            if (!file.exists()) {
                if (!file.getParentFile().exists())
                    file.getParentFile().mkdir();
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                    log.error("createNewFile IOException");
                }
            }

            OutputStream os = null;
            try {
                os = new BufferedOutputStream(new FileOutputStream(file));
                byte data[] = new byte[8192];
                int len;
                while ((len = inputStream.read(data, 0, 8192)) != -1) {
                    os.write(data, 0, len);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if (os != null) {
                        os.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {

        }
    });
    CountDownLatch countDownLatch = new CountDownLatch(1);
    try {
        countDownLatch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

3、更多

访问项目开源地址:https://github.com/Grt1228/chatgpt-java
点一点免费的star
获取更多SDK功能文章来源地址https://www.toymoban.com/news/detail-750021.html

到了这里,关于2.5k🌟的ChatGPT-Java版SDK升级1.1.2-beta0支持GPT-4V🔥、Dall-e-3模型、ToolCalls、微调Job、TTS...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 openai-java-sdk 整合 ChatGPT

    推荐一套基于 SpringBoot 开发的全平台数据 (数据库管理工具) 功能比较完善,建议下载使用: github.com/EdurtIO/datacap 目前已经支持 40+ 多种数据源。国内首个应用 ChatGPT 到数据管理系统中项目。 github 地址:https://github.com/devlive-community/openai-java-sdk 本文我们主要讲述通过 openai-java

    2024年02月13日
    浏览(44)
  • ESXi 6.7添加螃蟹2.5g网卡支持

    安装了ESXi 6.7,结果机器两块网卡只能识别一块,然后想着不能让另一块浪费啊,开始折腾,看着网上都是找的驱动然后封装进iso,可是我已经装完了,怎么办,然后找到了下面解决方法 1.找驱动 下载RTL8125驱动 2.上传到ESXi机器里面 首先内网机器scp远程上传文件到ESXi里面 运

    2024年02月10日
    浏览(95)
  • 免费升级到 iOS 17 Developer Beta:官方Apple Store升级方案与爱思助手方法比较

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(46)
  • ChatGPT重磅升级!集简云支持GPT4 Turbo Vision, GPT4 Turbo, Dall.E 3,Whisper等最新模型

    功能亮点 在此次模型升级中,带有视觉能力的 GPT-4 Turbo也备受瞩目,GPT-4-vision-preview已突破文本限制,可以直接在聊天框中分析图像照片,提供详细分析和读图功能。 可以预见的是,开放GPT-4图像输入能力,意味着AI向新领域的进军,也势必会引发业务模式与应用使用的巨大

    2024年02月04日
    浏览(49)
  • 升级至iOS17公测版系统后如何降级?iOS 17 Beta降级详细教程

    苹果最近发布iOS 17首个公测版,许多果粉都迫不及待地进行了更新。但是不少小伙伴升级iOS 17后iPhone遇到了一些问题,例如APP闪退、吃内存、耗电快等。Bug太多导致体验很差,想要降级到iOS 16系统。 升级iOS 17beta后悔了?其实只要苹果没有关闭iOS 16系统正式版的验证通道,已

    2024年02月13日
    浏览(57)
  • 期待已久:K8S终于迎来交换内存Beta支持!

    关注 【云原生百宝箱】 公众号,获取更多云原生消息 Kubernetes 1.22 版本开始支持在 Linux 节点上使用交换内存的 Alpha 特性,而在 1.28 版本中升级为 Beta 版本并进行了许多改进。之前版本的 Kubernetes 不支持 Linux 系统上的交换内存,但随着 Alpha 版本和后续的改进,Kubernetes 项目团

    2024年02月05日
    浏览(40)
  • PS beta 25.1教程(Win+Mac), 支持生/创成式填充+神经网络滤镜

    Photoshop Beta 应用程序发布了生成式AI绘图,此版本已支持中文提示词,支持生成式(创成式)填充,同时还附带了最新神经滤镜,还没升级的抓紧升级体验—— 安装过程不多说了,正常下载完安装包,正常解压按照教程安装即可,PS 25.1版本,Windows和MAC版本都有,全界面中文、支

    2024年02月08日
    浏览(43)
  • FPGA基于AXI 1G/2.5G Ethernet Subsystem实现千兆UDP通信 提供工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代

    2024年02月09日
    浏览(41)
  • FPGA基于AXI 1G/2.5G Ethernet Subsystem实现UDP通信DMA传输 提供工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代

    2024年02月10日
    浏览(44)
  • OpenHarmony SDK 升级助手使用教程【坚果派-坚果】

    作者:坚果 团队:坚果派 公众号:“大前端之旅” 团队介绍:坚果派由坚果创建,团队拥有8个华为HDE,3个HSD,以及若干其他领域的三十余位万粉博主运营。 本人为华为HDE、中国计算机学会CCF专业会员、OpenHarmony布道师、开发者联盟优秀讲师、2023年开源之夏导师、2023年Op

    2024年01月20日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包