怎么做注册账号的网站,创建网站的优势,网站_专题建设服务,参与网站网站建设1、项目简介
Chatgpt-Java是OpenAI官方Api的Java SDK#xff0c;可以快速接入项目使用。支持OpenAI官方全部接口。 目前收获将2500star#x1f31f;。
开源地址#xff1a;https://github.com/Grt1228/chatgpt-java官方文档#xff1a;https://chatgpt-java.unfbx.com/最…1、项目简介
Chatgpt-Java是OpenAI官方Api的Java SDK可以快速接入项目使用。支持OpenAI官方全部接口。 目前收获将2500star。
开源地址https://github.com/Grt1228/chatgpt-java官方文档https://chatgpt-java.unfbx.com/最新版本1.1.2-beta0
dependencygroupIdcom.unfbx/groupIdartifactIdchatgpt-java/artifactIdversion1.1.2-beta0/version
/dependency目前支持的功能
Dall-e-3FineTuneJobTTSChatCompletionWithPictureAI生成图片微调job文本转语音附加图片的ChatCompletion
TikTokenChatCompletionsImagesSpeech To Text余额查询Token计算GPT-3.5、4.0对话模型GPT-3.0对话图片模型语音转文字语音翻译余额查询
EmbeddingsFilesModerationsFine-tuneModels嵌入自定义训练模型文本审核敏感词鉴别微调模型检索相关
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;Beforepublic 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();ListContent 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();ListContent 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_objecttext
参考源码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-1106gpt-3.5-turbo-0613babbage-002gpt-4-0613davinci-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-javagithub地址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));//返回文件的idfile-6KaBdtVlaassk9Y2P5ZjTqICSystem.out.println(uploadFileResponse.getId());
}2.4.3、创建微调job
Test
public void fineTuneJob() {//file-KaNQn5V9YHlLqVQzo8CUMdIr是文件上传返回的文件idFineTuneJobResponse fineTuneJobResponse client.fineTuneJob(file-KaNQn5V9YHlLqVQzo8CUMdIr);//返回job id ftjob-5WQr0bZ7grvjnY3Or2sqiixlSystem.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 idFineTuneJobResponse fineTuneJobResponse client.retrieveFineTuneJob(ftjob-5WQr0bZ7grvjnY3Or2sqiixl);System.out.println(fineTuneJobResponse);
}2.4.4.2、job列表
支持分页查询
Test
public void retrieveFineTuneJob() {// FineTuneJobListResponseFineTuneJobResponse jobListResponse client.fineTuneJobs(ftjob-cG7zIraBhAkq5Ybs7311lH7t, 5);FineTuneJobListResponseFineTuneJobResponse jobListResponse client.fineTuneJobs(null, 20);System.out.println(jobListResponse);
}2.4.5、微调job执行进度查询
支持分页查询支持分页
Test
public void fineTuneJobEvents() {FineTuneJobListResponseFineTuneJobEvent listResponse client.fineTuneJobEvents(ftjob-5WQr0bZ7grvjnY3Or2sqiixl, null, 20);
// FineTuneJobListResponseFineTuneJobEvent listResponse client.fineTuneJobEvents(ftjob-5WQr0bZ7grvjnY3Or2sqiixl, ftevent-WwB8lpWxhjgUJX9DYdb47zJe, 20);listResponse.getData().forEach(e - System.out.println(e.getMessage()));
}输出信息输出信息会返回创建的模型id这个就是后续使用的模型id。 The job has successfully completedNew fine-tuned model created: ft:gpt-3.5-turbo-1106:personal::8K5KwJTUStep 91/100: training loss0.45Step 81/100: training loss0.00Step 71/100: training loss0.00Step 61/100: training loss0.94Step 51/100: training loss0.19Step 41/100: training loss0.06Step 31/100: training loss0.95Step 21/100: training loss1.99Step 11/100: training loss2.50Step 1/100: training loss5.42Fine-tuning job startedFiles validated, moving job to queued stateValidating training file: file-KaNQn5V9YHlLqVQzo8CUMdIrCreated fine-tuning job: ftjob-5WQr0bZ7grvjnY3Or2sqiixl2.4.6、微调模型使用 注意model参数为自定义的模型id。此id会在fineTuneJobEvents完成后返回。 此id的获取有几种方式
1、fineTuneJobEvents接口完成后返回。2、通过3.1章节查询job详细信息可以获取模型idfineTunedModel属性。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();ListMessage 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.com2.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 CallbackResponseBody() {SneakyThrowsOverridepublic void onResponse(CallResponseBody call, ResponseResponseBody 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();}}}Overridepublic void onFailure(CallResponseBody 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功能