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

这篇具有很好参考价值的文章主要介绍了【开源免费】ChatGPT-Java版SDK更新至1.0.10版,支持Tokens计算,快来一键接入。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

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

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

最新版:1.0.10

<dependency>
    <groupId>com.unfbx</groupId>
    <artifactId>chatgpt-java</artifactId>
    <version>1.0.10</version>
</dependency>

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

开发思路可以参考:https://github.com/Grt1228/chatgpt-steam-output

流式输出实现方式 小程序 安卓 ios H5
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:https://github.com/Grt1228/chatgpt-java/issues/79 ,Image SDK枚举值bug:https://github.com/Grt1228/chatgpt-java/issues/76 ,感谢两位朋友指出:@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.5
        List<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;

    @Before
    public 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聊天模型接口计算推荐这种方法
     */
    @Test
    public void chatCompletionTokensTest() {
        
        ChatCompletion completion = ChatCompletion.builder().messages(messages).build();
        long tokens = completion.tokens();
        log.info("Message集合文本:【{}】", messages, tokens);
        log.info("总tokens数{}", tokens);
    }

    /**
     * Completion 接口计算推荐使用这种方法
     */
    @Test
    public void completionTokensTest() {
        Completion completion = Completion.builder().prompt(text).build();
        long tokens = completion.tokens();
        log.info("单句文本:【{}】", text);
        log.info("总tokens数{}", tokens);
    }

    /**
     * 通过模型模型名称计算
     */
    @Test
    public 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计算
     */
    @Test
    public 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计算
     */
    @Test
    public 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 的开源计算算法。文章来源地址https://www.toymoban.com/news/detail-409922.html

到了这里,关于【开源免费】ChatGPT-Java版SDK更新至1.0.10版,支持Tokens计算,快来一键接入。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 让你的ChatGPT更加强大——200+小白用来解锁ChatGPT高级功能的提示(Prompts)——即开即用-开源纯免费-实时更新

    随着 ChatGPT 受到越来越多的关注,大多数人只是将其视为一种猎奇的聊天机器人,以测试其人工智能的答案。但是,ChatGPT 不仅仅是一款娱乐工具,未来它也可能成为必要的生产手段。它之类的 AI 工具可以利用其巨大的语言知识库,为我们创造出更大的价值。 提示词(即 P

    2024年02月04日
    浏览(131)
  • 2023最新AI创作系统/ChatGPT商业运营版网站程序源码+支持GPT4+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

    1、提问:程序已经支持GPT3.5、GPT4.0接口 2、支持三种Ai绘画模型(官方Midjourney模型、GPT3.5KEY绘画、国内其他绘画模型) 3、中英文实时语音识别输入,文章资讯发布功能,菜单工具栏功能,邮箱验证和手机短信验证注册登录,邀请返佣功能。 4、新增Prompt面具角色扮演功能 5、

    2024年02月11日
    浏览(85)
  • 千帆SDK开源到GitHub,开发者可免费下载使用!

    目录 一、SDK的优势 二、千帆SDK:快速落地LLM应用 三、如何快速上手千帆SDK 1、SDK快速启动 快速安装 平台鉴权 如何获取AK/SK 以“Chat 对话”为调用示例 2. SDK进阶指引 3. 通过Langchain接入千帆SDK 为什么选择Langchain 开源社区 千帆社区 好消息,好消息,百度千帆SDK开源啦!!!

    2024年02月05日
    浏览(43)
  • 已经开源的中文大模型对比,支持更新

    大模型对比网站:大模型综合评测对比 | 当前主流大模型在各评测数据集上的表现总榜单 | 数据学习 (DataLearner) 大模型下载:互链高科 ClueAI/PromptCLUE-base-v1-5 at main (huggingface.co) 支持多任务生成,支持中文,不支持多轮对话,体验:ClueAI (cluebenchmarks.com) 基于promptclue-base进一步训

    2024年02月12日
    浏览(56)
  • 免费的ChatGPT网站(10个)

    引言: 本篇博客将介绍几个常见的AI工具网站:如文心一言、通义千问、POE,分别来自国内和国外。我们将探索它们的特点、用途和提供的服务,同时提供相关网址和简介。希望帮助到各位同学!  对于用户体验,根据用途不同,仁者见仁智者见智吧,都是国内挺不错的AI工

    2024年04月22日
    浏览(153)
  • 分享一个国内免费的ChatGPT网站,手机电脑通用,免费无限制,支持AI绘画

    背景 AIGC作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾🌋。 作为一个AI爱好者,翻遍了各大AIGC的网站,终于找到一个免费!手机电脑通用!可直接对话的AIGC,也有各种提供工作效率的工具供大家使用。 产品名称 百晓生 网站地址 https://ai.hxkj.vip 画图

    2024年02月07日
    浏览(98)
  • 最新ChatGPT网站源码+支持GPT4+支持ai绘画(Midjourney)+一键在线更新版本+永久更新!

    最新ChatGPT网站源码+支持GPT4+支持ai绘画(Midjourney)+一键在线更新版本+永久更新! 支持手机电脑不同布局页面自适应 ChatGPT网站系统商用运营版: 如果后续程序有新版,直接在后台一键更新即可! 程序完美运行无BUG,独家开发,支持6种会员开通模式,有:\\\"购买提问次数\\\"或者\\\"开

    2024年02月09日
    浏览(71)
  • 开源日报 0830 | 免费计算机科学自学路径:系统化教育与全球支持

    Stars: 141.9k License: MIT 这个开源项目是一个自学计算机科学的免费路径。它提供了一套完整的在线教育材料,旨在为那些希望获得全面、扎实基础和良好习惯的人们提供支持。该课程按照本科计算机专业要求设计,并且选取了来自哈佛大学、普林斯顿大学、麻省理工等高校最优

    2024年02月09日
    浏览(36)
  • 10大最佳免费/开源产品开发进度管理系统

    开源或免费的进度管理软件一定程度能够帮助企业提升管理效率,节省购买成本。本文将整理出国内外10大最佳开源或者提供免费版本的进度管理工具,比如:1.免费产品研发进度管理工具- PingCode ;2.免费项目进度管理平台- Worktile ;3.开源进度管理工具-OpenProj等等。 团队在选

    2024年02月05日
    浏览(59)
  • ChatGPT网站源码V4.7.9+支持Ai绘画+支持用户套餐+好友邀请功能+管理后台+一键在线更新+永久更新!

    ChatGPT网站源码V4.7.9+支持Ai绘画+支持用户套餐+好友邀请功能+管理后台+一键在线更新+永久更新! 程序完美运行无BUG,独家开发,支持6种会员开通模式,有:”购买提问次数”或者”开通月付会员”套餐等等 套餐次数和价格可以自定义在后台进行修改 支付直接对接易支付或码

    2024年02月09日
    浏览(99)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包