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

简介

ChatGPT Java版SDK开源地址:github.com/Grt1228/cha… ,目前收获将近1000个star。

有bug欢迎朋友们指出,互相学习,所有咨询全部免费。

最新版:1.0.10

<dependency><groupId>com.unfbx</groupId><artifactId>chatgpt-java</artifactId><version>1.0.10</version>
</dependency>
复制代码

整合web示例,支持流式返回:

开发思路可以参考:github.com/Grt1228/cha…

流式输出实现方式小程序安卓iosH5
SSE参考:OpenAISSEEventSourceListener不支持支持支持支持
WebSocket参考:OpenAIWebSocketEventSourceListener支持支持支持支持

更新日志

  •  1.0.10 支持tokens计算:TikTokensTest ,更多详细的资料参考文档:Tokens_README.md
  •  1.0.9 支持自定义key使用策略参考:OpenAiClientTest 和OpenAiStreamClientTest ,弃用ChatGPTClient,优化Moderation接口
  •  1.0.8 修改OpenAiClient和OpenAiStreamClient的自定义相关实现,超时设置,代理设置,自定义拦截器设置改为通过自定义OkHttpClient实现,将OkHttpClient交由用户自定义控制更加合理,可以实现更多的参数自定义。支持多Api Keys配置。
  •  1.0.7 修复反序列化报错Bug:github.com/Grt1228/cha… ,Image SDK枚举值bug:github.com/Grt1228/cha… ,感谢两位朋友指出:@CCc3120 、@seven-cm
  •  1.0.6 支持余额查询参考:OpenAiClientTest 和OpenAiStreamClientTest creditGrants方法,支持最新GPT-4模型,参考:ChatCompletion.Model构建消息体传入模型即可。感谢群友提供的余额接口地址以及@PlexPt 提供的模型参数
  •  1.0.5 支持自定义Api Host,使用Builder构建。参考下面的快速开始部分代码。
  •  1.0.4 官方最新的ChatGPT Stream模式下的Api返回值改动。
  •  1.0.3 支持最新的GPT-3.5-Turbo模型和Whisper-1模型,支持语音功能转文字,语音翻译。OpenAiClient和OpenAiStreamClient支持Builder构造,支持代理。
  •  1.0.2 支持Stream流式输出,参考:OpenAiStreamClient
  •  1.0.1 支持自定义超时时间,自定义OkHttpClient拦截器,参考:OpenAiClient构造函数
  •  1.0.0 支持所有的OpenAI官方接口

最新版支持tokens计算

tokens计算说明

openai 的tokens计算规则适合模型先关的,不同的模型计算方法是不一样的。大致的表格如下:

关于流式返回

流式返回的数据,返回行数-2=返回tokens

[DONE]这一行不参与tokens计算,没有content属性的不参与token计算。 所以tokens数量是4,["Ser","end","ip","ity"],总返回行数6 - 无效行数2 = 4个tokens


[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI建立sse连接...
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据:{"choices":[{"delta":{"role":"assistant"},"index":0,"finish_reason":null}]}
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据:{"choices":[{"delta":{"content":"Ser"},"index":0,"finish_reason":null}]}
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据:{"choices":[{"delta":{"content":"end"},"index":0,"finish_reason":null}]}
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据:{"choices":[{"delta":{"content":"ip"},"index":0,"finish_reason":null}]}
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据:{"choices":[{"delta":{"content":"ity"},"index":0,"finish_reason":null}]}
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据:{"choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据:[DONE]
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI返回数据结束了
[OkHttp 省略 INFO com.unfbx.chatgpt.*****istener - OpenAI关闭sse连接...
复制代码

tokens计算使用示例

完整使用示例请参考:TikTokensTest

结合chat模型使用示例: 完整示例参考:OpenAiClientTest

    public void chatTokensTest() {//聊天模型:gpt-3.5List<Message> messages = new ArrayList<>(2);messages.add(Message.builder().role(Message.Role.USER).content("关注微信公众号:程序员的黑洞。").build());messages.add(Message.builder().role(Message.Role.USER).content("进入chatgpt-java交流群获取最新版本更新通知。").build());ChatCompletion chatCompletion = ChatCompletion.builder().messages(messages).build();ChatCompletionResponse chatCompletionResponse = v2.chatCompletion(chatCompletion);//获取请求的tokens数量long tokens = chatCompletion.tokens();//这种方式也可以
//        long tokens = TikTokensUtil.tokens(chatCompletion.getModel(),messages);log.info("Message集合文本:【{}】", messages, tokens);log.info("本地计算的请求的tokens数{}", tokens);log.info("本地计算的返回的tokens数{}", TikTokensUtil.tokens(chatCompletion.getModel(),chatCompletionResponse.getChoices().get(0).getMessage().getContent()));log.info("---------------------------------------------------");log.info("Open AI 官方计算的总的tokens数{}", chatCompletionResponse.getUsage().getTotalTokens());log.info("Open AI 官方计算的请求的tokens数{}", chatCompletionResponse.getUsage().getPromptTokens());log.info("Open AI 官方计算的返回的tokens数{}", chatCompletionResponse.getUsage().getCompletionTokens());}
复制代码

单独使用示例:

public class TikTokensTest {String text;List<Message> messages;@Beforepublic void prepareData() {text = "关注微信公众号:程序员的黑洞。进入chatgpt-java交流群获取最新版本更新通知。";messages = new ArrayList<>(2);messages.add(Message.builder().role(Message.Role.USER).content("关注微信公众号:程序员的黑洞。").build());messages.add(Message.builder().role(Message.Role.USER).content("进入chatgpt-java交流群获取最新版本更新通知。").build());}/*** gpt-3.5和gpt4.0聊天模型接口计算推荐这种方法*/@Testpublic void chatCompletionTokensTest() {ChatCompletion completion = ChatCompletion.builder().messages(messages).build();long tokens = completion.tokens();log.info("Message集合文本:【{}】", messages, tokens);log.info("总tokens数{}", tokens);}/*** Completion 接口计算推荐使用这种方法*/@Testpublic void completionTokensTest() {Completion completion = Completion.builder().prompt(text).build();long tokens = completion.tokens();log.info("单句文本:【{}】", text);log.info("总tokens数{}", tokens);}/*** 通过模型模型名称计算*/@Testpublic void byModelNameTest() {String modelName = ChatCompletion.Model.GPT_4.getName();
//        String modelName = ChatCompletion.Model.GPT_3_5_TURBO.getName();List<Integer> encode = TikTokensUtil.encode(modelName, text);log.info(encode.toString());long tokens = TikTokensUtil.tokens(modelName, text);log.info("单句文本:【{}】", text);log.info("总tokens数{}", tokens);log.info("--------------------------------------------------------------");tokens = TikTokensUtil.tokens(modelName, messages);log.info("Message集合文本:【{}】", messages, tokens);log.info("总tokens数{}", tokens);}/*** 通过Encoding计算*/@Testpublic void byEncodingTest() {EncodingRegistry registry = Encodings.newDefaultEncodingRegistry();Encoding enc = registry.getEncoding(EncodingType.P50K_BASE);List<Integer> encode = TikTokensUtil.encode(enc, text);log.info(encode.toString());long tokens = TikTokensUtil.tokens(enc, text);log.info("单句文本:【{}】", text);log.info("总tokens数{}", tokens);}/*** 通过EncodingType计算*/@Testpublic void byEncodingTypeTest() {List<Integer> encode = TikTokensUtil.encode(EncodingType.CL100K_BASE, text);log.info(encode.toString());long tokens = TikTokensUtil.tokens(EncodingType.CL100K_BASE, text);log.info("单句文本:【{}】", text);log.info("总tokens数{}", tokens);}}
复制代码

站在巨人的肩膀

感谢大佬:knuddelsgmbh 的jtokkit 的开源计算算法。

 

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

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

相关文章

面向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;并且对它们进行了…

将 ChatGLM2-6B 部署成 OpenAI API 服务

将 ChatGLM2-6B 部署成 OpenAI API 服务 0. 背景1. FastChat 部署使用 ChatGLM2-6B1-1. 创建虚拟环境1-2. 克隆代码1-3. 安装依赖库1-4. 使用 UI 进行推理1-5. 使用 OpenAI API 方式进行推理 0. 背景 最近一直在使用 OpenAI 的 API 做一些学习和调研。使用 OpenAI 的 API&…

chatgpt赋能Python-python_downloader

优秀Python下载器的重要性 在今天的数字化世界中&#xff0c;下载器是一个极其重要的工具。随着互联网速度的不断提升和存储设备的容量的增加&#xff0c;大量的数据和文件需要及时下载到本地计算机或存储设备中。许多编程语言都提供了相应的下载库&#xff0c;但Python是其中…

免费使用GPT-4的N种方法

很多朋友因为各种限制无法开通#ChatGPT Plus,而申请OpenAI的GPT-4 API也要慢慢排队(我的也还没下来)。于是在这里我搜集了X个可以免费使用的方法。 注:哪有什么真正免费,只不过有人在替你付钱。因此下述的方法都有限制,也有些可能会很快失效。新方法随时更新。 方法一: …