[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-Grt1228--chatgpt-java":3,"tool-Grt1228--chatgpt-java":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":10,"last_commit_at":50,"category_tags":51,"status":17},4292,"Deep-Live-Cam","hacksider\u002FDeep-Live-Cam","Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具，用户仅需一张静态照片，即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点，让高质量的数字内容创作变得触手可及。\n\n这款工具不仅适合开发者和技术研究人员探索算法边界，更因其极简的操作逻辑（仅需三步：选脸、选摄像头、启动），广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换，还是制作趣味短视频和直播互动，Deep-Live-Cam 都能提供流畅的支持。\n\n其核心技术亮点在于强大的实时处理能力，支持口型遮罩（Mouth Mask）以保留使用者原始的嘴部动作，确保表情自然精准；同时具备“人脸映射”功能，可同时对画面中的多个主体应用不同面孔。此外，项目内置了严格的内容安全过滤机制，自动拦截涉及裸露、暴力等不当素材，并倡导用户在获得授权及明确标注的前提下合规使用，体现了技术发展与伦理责任的平衡。",88924,"2026-04-06T03:28:53",[14,15,13,52],"视频",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[14,35],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":76,"owner_website":79,"owner_url":80,"languages":81,"stars":86,"forks":87,"last_commit_at":88,"license":89,"difficulty_score":32,"env_os":90,"env_gpu":91,"env_ram":90,"env_deps":92,"category_tags":99,"github_topics":102,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":114,"updated_at":115,"faqs":116,"releases":167},4302,"Grt1228\u002Fchatgpt-java","chatgpt-java","ChatGPT Java SDK支持流式输出、Gpt插件、联网。支持OpenAI官方所有接口。ChatGPT的Java客户端。OpenAI GPT-3.5-Turb GPT-4  Api Client for Java","chatgpt-java 是一个由社区维护的 OpenAI 官方接口 Java SDK，旨在帮助开发者快速将 ChatGPT 能力集成到 Java 项目中。它全面支持 GPT-3.5、GPT-4 等主流模型，覆盖了对话、图片生成（Dall-e-3）、语音转文字、文本微调及余额查询等所有官方 API 功能。\n\n该工具主要解决了 Java 开发者在对接大模型时面临的开发成本高、功能支持不全以及网络稳定性等痛点。特别是针对国内访问环境，它提供了灵活的解决方案；同时内置了 Tokens 计算功能，帮助开发者精准控制成本。其独特的技术亮点在于完善的流式输出支持（兼容 SSE 和 WebSocket），非常适合需要实时对话反馈的场景。此外，它还具备动态管理 API Key 的能力，当遇到密钥失效或封禁时，可自动切换密钥或触发告警，显著提升了生产环境的稳定性。\n\nchatgpt-java 非常适合后端开发工程师、架构师以及希望在自己的应用中嵌入 AI 能力的技术团队使用。无论是构建智能客服、AI 助手，还是进行企业级应用开发，它都能提供稳定、高效且易于扩展的技术支持，让开发者能更专注于业务逻辑的实现","chatgpt-java 是一个由社区维护的 OpenAI 官方接口 Java SDK，旨在帮助开发者快速将 ChatGPT 能力集成到 Java 项目中。它全面支持 GPT-3.5、GPT-4 等主流模型，覆盖了对话、图片生成（Dall-e-3）、语音转文字、文本微调及余额查询等所有官方 API 功能。\n\n该工具主要解决了 Java 开发者在对接大模型时面临的开发成本高、功能支持不全以及网络稳定性等痛点。特别是针对国内访问环境，它提供了灵活的解决方案；同时内置了 Tokens 计算功能，帮助开发者精准控制成本。其独特的技术亮点在于完善的流式输出支持（兼容 SSE 和 WebSocket），非常适合需要实时对话反馈的场景。此外，它还具备动态管理 API Key 的能力，当遇到密钥失效或封禁时，可自动切换密钥或触发告警，显著提升了生产环境的稳定性。\n\nchatgpt-java 非常适合后端开发工程师、架构师以及希望在自己的应用中嵌入 AI 能力的技术团队使用。无论是构建智能客服、AI 助手，还是进行企业级应用开发，它都能提供稳定、高效且易于扩展的技术支持，让开发者能更专注于业务逻辑的实现。","\nit’s an “unofficial\" or \"community-maintained” library.\n这是一个非官方的社区维护的库。有bug欢迎朋友们指出，互相学习。\n> **原创发布转载注明出处！**\n\n> 文档地址：https:\u002F\u002Fchatgpt-java.unfbx.com\u002F\n\n> 星火大模型Java SDK: https:\u002F\u002Fgithub.com\u002FGrt1228\u002FSparkDesk-Java \n\nTo English Doc -> [English Doc](README_EN.md)\n\n\n### 💬 联系我，ChatGPT相关学习交流咨询全部免费。\n\n一起探讨chatgpt-java，SDK问题咨询\u003Cbr\u002F>项目产品开发交流 | 群失效关注公众号恢复：chatgpt-java |\n---|---\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_1365d8081e01.jpg\" width=\"210\" height=\"300\" alt=\"二维码\" \u002F>  | \u003Cimg src=\"https:\u002F\u002Fg-photo.oss-cn-shanghai.aliyuncs.com\u002Fhd15.jpg\" width=\"210\" height=\"210\" alt=\"二维码\" \u002F> | \n\u003C!--\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_ef32c1c27868.jpg\" width=\"210\" height=\"300\" alt=\"二维码\" \u002F>-->\n\n- [📖 项目简介](#-项目简介)\n- [🚩 特性](#-特性)\n- [📑 更新日志](#-更新日志)\n- [🚀 快速开始](#-快速开始)\n  - [方式一](#方式一)\n    - [1、导入pom依赖](#1导入pom依赖)\n    - [2、流式客户端使用示例：](#2流式客户端使用示例)\n      - [默认OkHttpClient](#默认okhttpclient)\n      - [自定义OkHttpClient客户端使用示例：](#自定义okhttpclient客户端使用示例)\n    - [3、默认客户端使用示例（支持全部API）：](#3默认客户端使用示例支持全部api)\n      - [默认OkHttpClient](#默认okhttpclient-1)\n      - [自定义OkHttpClient客户端使用示例：](#自定义okhttpclient客户端使用示例-1)\n  - [方式二（下载源码直接运行）](#方式二下载源码直接运行)\n- [❔ QA](#-qa)\n- [📌 国内访问解决方案](#-国内访问解决方案)\n- [📋 开发案例收集](#-开发案例收集)\n- [🌟 Star History](#-star-history)\n- [🙏 鸣谢](#-鸣谢)\n- [☕ 打赏](#-打赏)\n\n# 📖 项目简介\n\n**ChatGPT的Java客户端**\nOpenAI官方Api的Java SDK，可以快速接入项目使用。支持OpenAI官方全部接口，**同时支持Tokens计算。参考文档：[Tokens_README.md](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002FTokens_README.md)**。\n\n| Assistant | Dall-e-3 | FineTuneJob | TTS | ChatCompletionWithPicture |\n| --- | --- | --- | --- | --- |\n| 自定义知识库、AI助理 | AI生成图片 | 微调job | 文本转语音 | 附加图片的ChatCompletion |\n\n| TikToken | Chat | Completions | Images | Speech To Text | 余额查询 |\n| --- | --- | --- | --- | --- | --- |\n| Token计算 | GPT-3.5、4.0对话模型 | GPT-3.0对话 | 图片模型 | 语音转文字，语音翻译 | 余额查询\n\n\n| Embeddings | Files | Moderations | Fine-tune | Models |\n| --- | --- | --- | --- | --- |\n| 嵌入 | 自定义训练模型 | 文本审核，敏感词鉴别 | 微调 | 模型检索相关 |\n\n支持流式输出：\n流式输出实现方式 | 小程序 | 安卓 | ios | H5 \n---|---|---|---|---\nSSE参考：[OpenAISSEEventSourceListener](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgptsteamoutput\u002Flistener\u002FOpenAISSEEventSourceListener.java) | 不支持| 支持| 支持 | 支持\nWebSocket参考：[OpenAIWebSocketEventSourceListener](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgptsteamoutput\u002Flistener\u002FOpenAIWebSocketEventSourceListener.java) | 支持| 支持| 支持| 支持\n\n基于本SDK开发的Demo项目，整合Spring Boot 实现CahtGPT对话模式，思路可以参考：\n**https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output**\n\n# 🚩 特性\n- 支持附加图片的ChatCompletion、指定返回数据格式、Tool Call、Dall-e-3生成图片、FineTuneJob、文本转语音TTS。\n- 支持GPT插件模式 参考实现[PluginTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FPluginTest.java)\n- 支持当key异常（失效、过期、封禁）时，自定义动态处理key 参考实现[DynamicKeyOpenAiAuthInterceptor](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Finterceptor\u002FDynamicKeyOpenAiAuthInterceptor.java)\n- 支持当key异常时的告警处理（钉钉、飞书、email、企业微信等等需要自定义开发）参考实现[DynamicKeyOpenAiAuthInterceptor](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Finterceptor\u002FDynamicKeyOpenAiAuthInterceptor.java)\n- 支持多种Tokens计算方式\n- 支持自定义OkhttpClient\n- 支持自定义多Apikey\n- 支持自定义ApiKey的获取策略\n- 支持余额查询\n- 支持个人账户信息查询\n- 支持GPT3、GPT3.5、GPT4.0、GPT3.5—0614、GPT4.0—0614...\n- 支持全部OpenAI的Api\n\n# 📑 更新日志\n- [x] 1.1.6   ChatCompletion接口支持logprobs参数设置，Assistant相关接口支持流式输出\n- [x] 1.1.5   Bug Fix\n- [x] 1.1.3   支持Assistant、Run、Thread、Message Api。测试案例[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fv1_1_3\u002FOpenAiClientTest.java)\n- [x] 1.1.2-beta0   支持附加图片的ChatCompletion、指定返回数据格式、Tool Call、Dall-e-3生成图片、FineTuneJob、文本转语音TTS。官方文档示例：[chatgpt-java.unfbx.com](https:\u002F\u002Fchatgpt-java.unfbx.com\u002Fdocs\u002Fcategory\u002F-%E6%A0%B8%E5%BF%83%E5%8A%9F%E8%83%BD) 。测试案例[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fv1_1_2\u002FOpenAiClientTest.java)\n- [x] 1.1.1-beta0   function call改成GPT插件模式调用更加简单的调用方式.参考实现[PluginTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FPluginTest.java)\n- [x] 1.0.15  moderations接口更新，代码优化，序列化修复。\n- [x] 1.0.14  升级支持最新版Gpt-3.5—0614、Gpt-4.0—0614等模型, 支持function-calling完整使用案例参考：[OpenAiClientFunctionTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002F1.0.14\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientFunctionTest.java) \n- [x] 1.0.13  支持当key异常（失效、过期、封禁）时，自定义动态处理key，参考实现[DynamicKeyOpenAiAuthInterceptor](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Finterceptor\u002FDynamicKeyOpenAiAuthInterceptor.java) ，支持key异常时的告警处理（钉钉、飞书、email、企业微信等等需要自定义开发）\n- [x] 1.0.12  tokens计算优化、删除模型接口修改、语音接口更新支持官方最新参数\n- [x] 1.0.11  增加新的余额查询接口参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) ,修复tokens计算慢的问题，\n- [x] 1.0.10  支持tokens计算：[TikTokensTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FTikTokensTest.java) ，更多详细的资料参考文档：[Tokens_README.md](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002FTokens_README.md)\n- [x] 1.0.9   支持自定义key使用策略参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) ，弃用ChatGPTClient，优化Moderation接口\n- [x] 1.0.8   修改OpenAiClient和OpenAiStreamClient的自定义相关实现，超时设置，代理设置，自定义拦截器设置改为通过自定义OkHttpClient实现，将OkHttpClient交由用户自定义控制更加合理，可以实现更多的参数自定义。支持多Api Keys配置。\n- [x] 1.0.7   修复反序列化报错Bug：https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F79 ，Image SDK枚举值bug：https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F76 ，感谢两位朋友指出：[@CCc3120](https:\u002F\u002Fgithub.com\u002FCCc3120) 、[@seven-cm](https:\u002F\u002Fgithub.com\u002Fseven-cm)\n- [x] 1.0.6   支持余额查询参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) creditGrants方法,支持最新GPT-4模型，参考：[ChatCompletion.Model](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fentity\u002Fchat\u002FChatCompletion.java\u002F)构建消息体传入模型即可。感谢群友提供的余额接口地址以及[@PlexPt](https:\u002F\u002Fgithub.com\u002FPlexPt) 提供的模型参数\n- [x] 1.0.5   支持自定义Api Host，使用Builder构建。参考下面的快速开始部分代码。\n- [x] 1.0.4   官方最新的ChatGPT Stream模式下的Api返回值改动。\n- [x] 1.0.3   支持最新的GPT-3.5-Turbo模型和Whisper-1模型，支持语音功能转文字，语音翻译。OpenAiClient和OpenAiStreamClient支持Builder构造，支持代理。\n- [x] 1.0.2   支持Stream流式输出，参考：OpenAiStreamClient\n- [x] 1.0.1   支持自定义超时时间，自定义OkHttpClient拦截器，参考：OpenAiClient构造函数\n- [x] 1.0.0   支持所有的OpenAI官方接口\n\n# 🚀 快速开始\n本项目支持**默认输出**和**流式输出**。完整SDK测试案例参考：\n\nSDK测试案例 | Tokens计算测试案例 | 完整Function-Call调用案例\n---| --- | ---\n[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) | Tokens计算参考：[TikTokensTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FTikTokensTest.java) | [OpenAiClientFunctionTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientFunctionTest.java)\n\n## 方式一\n\n### 1、导入pom依赖\n```\n\u003Cdependency>\n    \u003CgroupId>com.unfbx\u003C\u002FgroupId>\n    \u003CartifactId>chatgpt-java\u003C\u002FartifactId>\n    \u003Cversion>1.0.14-beta1\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n### 2、流式客户端使用示例：\n更多SDK示例参考：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) \n#### 默认OkHttpClient\n```\npublic class Test {\n    public static void main(String[] args) {\n        OpenAiStreamClient client = OpenAiStreamClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n        \u002F\u002F聊天模型：gpt-3.5\n        ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();\n        Message message = Message.builder().role(Message.Role.USER).content(\"你好啊我的伙伴！\").build();\n        ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();\n        client.streamChatCompletion(chatCompletion, eventSourceListener);\n        CountDownLatch countDownLatch = new CountDownLatch(1);\n        try {\n            countDownLatch.await();\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n#### 自定义OkHttpClient客户端使用示例：\n```\npublic class Test {\n    public static void main(String[] args) {\n        \u002F\u002F国内访问需要做代理，国外服务器不需要\n        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(\"127.0.0.1\", 7890));\n        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());\n        \u002F\u002F！！！！千万别再生产或者测试环境打开BODY级别日志！！！！\n        \u002F\u002F！！！生产或者测试环境建议设置为这三种级别：NONE,BASIC,HEADERS,！！！\n        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);\n        OkHttpClient okHttpClient = new OkHttpClient\n                .Builder()\n                .proxy(proxy)\u002F\u002F自定义代理\n                .addInterceptor(httpLoggingInterceptor)\u002F\u002F自定义日志\n                .connectTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .writeTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .readTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .build();\n        OpenAiStreamClient client = OpenAiStreamClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                .okHttpClient(okHttpClient)\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n    }\n}\n```\n输出日志（text是持续输出的）：\n```\n23:03:59.158 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI建立sse连接...\n23:03:59.160 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\n\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.172 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\n\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.251 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u5fc3\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.313 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u60c5\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.380 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u8212\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.439 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u7545\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.532 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\uff0c\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.579 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u5fc3\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.641 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u65f7\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.673 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u795e\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.751 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u6021\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.782 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u3002\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.815 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：[DONE]\n23:03:59.815 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据结束了\n23:03:59.815 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI关闭sse连接...\n```\n### 3、默认客户端使用示例（支持全部API）：\n更多SDK示例参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) \n#### 默认OkHttpClient\n```\npublic class Test {\n    public static void main(String[] args) {\n        OpenAiClient openAiClient = OpenAiClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n                \u002F\u002F聊天模型：gpt-3.5\n        Message message = Message.builder().role(Message.Role.USER).content(\"你好啊我的伙伴！\").build();\n        ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();\n        ChatCompletionResponse chatCompletionResponse = openAiClient.chatCompletion(chatCompletion);\n        chatCompletionResponse.getChoices().forEach(e -> {\n            System.out.println(e.getMessage());\n        });\n    }\n}\n```\n#### 自定义OkHttpClient客户端使用示例：\n```\npublic class Test {\n    public static void main(String[] args) {\n        \u002F\u002F国内访问需要做代理，国外服务器不需要\n        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(\"127.0.0.1\", 7890));\n        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());\n        \u002F\u002F！！！！千万别再生产或者测试环境打开BODY级别日志！！！！\n        \u002F\u002F！！！生产或者测试环境建议设置为这三种级别：NONE,BASIC,HEADERS,！！！\n        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);\n        OkHttpClient okHttpClient = new OkHttpClient\n                .Builder()\n                .proxy(proxy)\u002F\u002F自定义代理\n                .addInterceptor(httpLoggingInterceptor)\u002F\u002F自定义日志输出\n                .addInterceptor(new OpenAiResponseInterceptor())\u002F\u002F自定义返回值拦截\n                .connectTimeout(10, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .writeTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .readTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .build();\n        \u002F\u002F构建客户端\n        OpenAiClient openAiClient = OpenAiClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                .okHttpClient(okHttpClient)\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n                \u002F\u002F聊天模型：gpt-3.5\n        Message message = Message.builder().role(Message.Role.USER).content(\"你好啊我的伙伴！\").build();\n        ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();\n        ChatCompletionResponse chatCompletionResponse = openAiClient.chatCompletion(chatCompletion);\n        chatCompletionResponse.getChoices().forEach(e -> {\n            System.out.println(e.getMessage());\n        });\n    }\n}\n```\n## 方式二（下载源码直接运行）\n下载源码打包\n# ❔ QA\nQ | A\n---|---\n如何实现连续对话？ | issues：https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F8\n如何实现流式输出？ | 升级1.0.2版本，参考源码：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java\u002F)\n如何整合SpringBoot实现流式输出的Api接口？ | 参考另外一个项目：[chatgpt-steam-output](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output)\n最新版GPT-3.5-TURBO是否支持？ | 升级1.0.3 已经支持ChatCompletion, 参考测试案例：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java\u002F) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java\u002F)\n最新版语言转文字和语言翻译是否支持？ | 升级1.0.3 已经支持whisper参考测试案例：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java\u002F) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java\u002F)\n\n# 📌 国内访问解决方案\n国内访问可以看下这个解决方案：**https:\u002F\u002Fgithub.com\u002Fnoobnooc\u002Fnoobnooc\u002Fdiscussions\u002F9**\n\n# 📋 开发案例收集\n**基于本SDK开发案例收集**：[chatgpt-java SDK案例征集](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F87) \n# 🌟 Star History\n\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_4d93fbea6935.png)](https:\u002F\u002Fstar-history.com\u002F#Grt1228\u002Fchatgpt-java&Date)\n\n\n# 🙏 鸣谢\n站在巨人的肩膀：\n- OpenAi：https:\u002F\u002Fopenai.com\u002F\n- [knuddelsgmbh](https:\u002F\u002Fgithub.com\u002Fknuddelsgmbh) 的[jtokkit](https:\u002F\u002Fgithub.com\u002Fknuddelsgmbh\u002Fjtokkit) 的开源计算算法。\n\n\n# ☕ 打赏\n如果项目对你有帮助，可以选择请我喝杯奶茶\n\n\u003Cimg width=\"180\" alt=\"微信截图_20230405222411\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_ac7edcc5d6ce.png\">  \u003Cimg width=\"164\" alt=\"微信截图_20230405222357\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_3b359191e032.png\">\n\n开源协议：[LICENSE](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002FLICENSE) \n","这是一个“非官方”或“社区维护”的库。\n这是一个非官方的社区维护的库。有bug欢迎朋友们指出，互相学习。\n> **原创发布转载注明出处！**\n\n> 文档地址：https:\u002F\u002Fchatgpt-java.unfbx.com\u002F\n\n> 星火大模型Java SDK: https:\u002F\u002Fgithub.com\u002FGrt1228\u002FSparkDesk-Java \n\nTo English Doc -> [English Doc](README_EN.md)\n\n\n### 💬 联系我，ChatGPT相关学习交流咨询全部免费。\n\n一起探讨chatgpt-java，SDK问题咨询\u003Cbr\u002F>项目产品开发交流 | 群失效关注公众号恢复：chatgpt-java |\n---|---\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_1365d8081e01.jpg\" width=\"210\" height=\"300\" alt=\"二维码\" \u002F>  | \u003Cimg src=\"https:\u002F\u002Fg-photo.oss-cn-shanghai.aliyuncs.com\u002Fhd15.jpg\" width=\"210\" height=\"210\" alt=\"二维码\" \u002F> | \n\u003C!--\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_ef32c1c27868.jpg\" width=\"210\" height=\"300\" alt=\"二维码\" \u002F>-->\n\n- [📖 项目简介](#-项目简介)\n- [🚩 特性](#-特性)\n- [📑 更新日志](#-更新日志)\n- [🚀 快速开始](#-快速开始)\n  - [方式一](#方式一)\n    - [1、导入pom依赖](#1导入pom依赖)\n    - [2、流式客户端使用示例：](#2流式客户端使用示例)\n      - [默认OkHttpClient](#默认okhttpclient)\n      - [自定义OkHttpClient客户端使用示例：](#自定义okhttpclient客户端使用示例)\n    - [3、默认客户端使用示例（支持全部API）：](#3默认客户端使用示例支持全部api)\n      - [默认OkHttpClient](#默认okhttpclient-1)\n      - [自定义OkHttpClient客户端使用示例：](#自定义okhttpclient客户端使用示例-1)\n  - [方式二（下载源码直接运行）](#方式二下载源码直接运行)\n- [❔ QA](#-qa)\n- [📌 国内访问解决方案](#-国内访问解决方案)\n- [📋 开发案例收集](#-开发案例收集)\n- [🌟 Star History](#-star-history)\n- [🙏 鸣谢](#-鸣谢)\n- [☕ 打赏](#-打赏)\n\n# 📖 项目简介\n\n**ChatGPT的Java客户端**\nOpenAI官方Api的Java SDK，可以快速接入项目使用。支持OpenAI官方全部接口，**同时支持Tokens计算。参考文档：[Tokens_README.md](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002FTokens_README.md)**。\n\n| Assistant | Dall-e-3 | FineTuneJob | TTS | ChatCompletionWithPicture |\n| --- | --- | --- | --- | --- |\n| 自定义知识库、AI助理 | AI生成图片 | 微调job | 文本转语音 | 附加图片的ChatCompletion |\n\n| TikToken | Chat | Completions | Images | Speech To Text | 余额查询 |\n| --- | --- | --- | --- | --- | --- |\n| Token计算 | GPT-3.5、4.0对话模型 | GPT-3.0对话 | 图片模型 | 语音转文字，语音翻译 | 余额查询\n\n\n| Embeddings | Files | Moderations | Fine-tune | Models |\n| --- | --- | --- | --- | --- |\n| 嵌入 | 自定义训练模型 | 文本审核，敏感词鉴别 | 微调 | 模型检索相关 |\n\n支持流式输出：\n流式输出实现方式 | 小程序 | 安卓 | ios | H5 \n---|---|---|---|---\nSSE参考：[OpenAISSEEventSourceListener](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgptsteamoutput\u002Flistener\u002FOpenAISSEEventSourceListener.java) | 不支持| 支持| 支持 | 支持\nWebSocket参考：[OpenAIWebSocketEventSourceListener](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgptsteamoutput\u002Flistener\u002FOpenAIWebSocketEventSourceListener.java) | 支持| 支持| 支持| 支持\n\n基于本SDK开发的Demo项目，整合Spring Boot 实现CahtGPT对话模式，思路可以参考：\n**https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output**\n\n# 🚩 特性\n- 支持附加图片的ChatCompletion、指定返回数据格式、Tool Call、Dall-e-3生成图片、FineTuneJob、文本转语音TTS。\n- 支持GPT插件模式 参考实现[PluginTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FPluginTest.java)\n- 支持当key异常（失效、过期、封禁）时，自定义动态处理key 参考实现[DynamicKeyOpenAiAuthInterceptor](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Finterceptor\u002FDynamicKeyOpenAiAuthInterceptor.java)\n- 支持当key异常时的告警处理（钉钉、飞书、email、企业微信等等需要自定义开发）参考实现[DynamicKeyOpenAiAuthInterceptor](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Finterceptor\u002FDynamicKeyOpenAiAuthInterceptor.java)\n- 支持多种Tokens计算方式\n- 支持自定义OkhttpClient\n- 支持自定义多Apikey\n- 支持自定义ApiKey的获取策略\n- 支持余额查询\n- 支持个人账户信息查询\n- 支持GPT3、GPT3.5、GPT4.0、GPT3.5—0614、GPT4.0—0614...\n- 支持全部OpenAI的Api\n\n# 📑 更新日志\n- [x] 1.1.6   ChatCompletion接口支持logprobs参数设置，Assistant相关接口支持流式输出\n- [x] 1.1.5   Bug Fix\n- [x] 1.1.3   支持Assistant、Run、Thread、Message Api。测试案例[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fv1_1_3\u002FOpenAiClientTest.java)\n- [x] 1.1.2-beta0   支持附加图片的ChatCompletion、指定返回数据格式、Tool Call、Dall-e-3生成图片、FineTuneJob、文本转语音TTS。官方文档示例：[chatgpt-java.unfbx.com](https:\u002F\u002Fchatgpt-java.unfbx.com\u002Fdocs\u002Fcategory\u002F-%E6%A0%B8%E5%BF%83%E5%8A%9F%E8%83%BD) 。测试案例[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fv1_1_2\u002FOpenAiClientTest.java)\n- [x] 1.1.1-beta0   function call改成GPT插件模式调用更加简单的调用方式.参考实现[PluginTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FPluginTest.java)\n- [x] 1.0.15  moderations接口更新，代码优化，序列化修复。\n- [x] 1.0.14  升级支持最新版Gpt-3.5—0614、Gpt-4.0—0614等模型, 支持function-calling完整使用案例参考：[OpenAiClientFunctionTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002F1.0.14\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientFunctionTest.java) \n- [x] 1.0.13  支持当key异常（失效、过期、封禁）时，自定义动态处理key，参考实现[DynamicKeyOpenAiAuthInterceptor](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Finterceptor\u002FDynamicKeyOpenAiAuthInterceptor.java) ，支持key异常时的告警处理（钉钉、飞书、email、企业微信等等需要自定义开发）\n- [x] 1.0.12  tokens计算优化、删除模型接口修改、语音接口更新支持官方最新参数\n- [x] 1.0.11  增加新的余额查询接口参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) ,修复tokens计算慢的问题，\n- [x] 1.0.10  支持tokens计算：[TikTokensTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FTikTokensTest.java) ，更多详细的资料参考文档：[Tokens_README.md](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002FTokens_README.md)\n- [x] 1.0.9   支持自定义key使用策略参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) ，弃用ChatGPTClient，优化Moderation接口\n- [x] 1.0.8   修改OpenAiClient和OpenAiStreamClient的自定义相关实现，超时设置，代理设置，自定义拦截器设置改为通过自定义OkHttpClient实现，将OkHttpClient交由用户自定义控制更加合理，可以实现更多的参数自定义。支持多Api Keys配置。\n- [x] 1.0.7   修复反序列化报错Bug：https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F79 ，Image SDK枚举值bug：https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F76 ，感谢两位朋友指出：[@CCc3120](https:\u002F\u002Fgithub.com\u002FCCc3120) 、[@seven-cm](https:\u002F\u002Fgithub.com\u002Fseven-cm)\n- [x] 1.0.6   支持余额查询参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) creditGrants方法,支持最新GPT-4模型，参考：[ChatCompletion.Model](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fentity\u002Fchat\u002FChatCompletion.java\u002F)构建消息体传入模型即可。感谢群友提供的余额接口地址以及[@PlexPt](https:\u002F\u002Fgithub.com\u002FPlexPt) 提供的模型参数\n- [x] 1.0.5   支持自定义Api Host，使用Builder构建。参考下面的快速开始部分代码。\n- [x] 1.0.4   官方最新的ChatGPT Stream模式下的Api返回值改动。\n- [x] 1.0.3   支持最新的GPT-3.5-Turbo模型和Whisper-1模型，支持语音功能转文字，语音翻译。OpenAiClient和OpenAiStreamClient支持Builder构造，支持代理。\n- [x] 1.0.2   支持Stream流式输出，参考：OpenAiStreamClient\n- [x] 1.0.1   支持自定义超时时间，自定义OkHttpClient拦截器，参考：OpenAiClient构造函数\n- [x] 1.0.0   支持所有的OpenAI官方接口\n\n# 🚀 快速开始\n本项目支持**默认输出**和**流式输出**。完整SDK测试案例参考：\n\nSDK测试案例 | Tokens计算测试案例 | 完整Function-Call调用案例\n---| --- | ---\n[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) | Tokens计算参考：[TikTokensTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FTikTokensTest.java) | [OpenAiClientFunctionTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientFunctionTest.java)\n\n## 方式一\n\n### 1、导入pom依赖\n```\n\u003Cdependency>\n    \u003CgroupId>com.unfbx\u003C\u002FgroupId>\n    \u003CartifactId>chatgpt-java\u003C\u002FartifactId>\n    \u003Cversion>1.0.14-beta1\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n### 2、流式客户端使用示例：\n更多SDK示例参考：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java) \n#### 默认OkHttpClient\n```\npublic class Test {\n    public static void main(String[] args) {\n        OpenAiStreamClient client = OpenAiStreamClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n        \u002F\u002F聊天模型：gpt-3.5\n        ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();\n        Message message = Message.builder().role(Message.Role.USER).content(\"你好啊我的伙伴！\").build();\n        ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();\n        client.streamChatCompletion(chatCompletion, eventSourceListener);\n        CountDownLatch countDownLatch = new CountDownLatch(1);\n        try {\n            countDownLatch.await();\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n#### 自定义OkHttpClient客户端使用示例：\n```\npublic class Test {\n    public static void main(String[] args) {\n        \u002F\u002F国内访问需要做代理，国外服务器不需要\n        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(\"127.0.0.1\", 7890));\n        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());\n        \u002F\u002F！！！！千万别再生产或者测试环境打开BODY级别日志！！！！\n        \u002F\u002F！！！生产或者测试环境建议设置为这三种级别：NONE,BASIC,HEADERS,！！！\n        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);\n        OkHttpClient okHttpClient = new OkHttpClient\n                .Builder()\n                .proxy(proxy)\u002F\u002F自定义代理\n                .addInterceptor(httpLoggingInterceptor)\u002F\u002F自定义日志\n                .connectTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .writeTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .readTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .build();\n        OpenAiStreamClient client = OpenAiStreamClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                .okHttpClient(okHttpClient)\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n    }\n}\n```\n输出日志（text是持续输出的）：\n```\n23:03:59.158 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI建立sse连接...\n23:03:59.160 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\n\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.172 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\n\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.251 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u5fc3\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.313 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u60c5\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.380 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u8212\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.439 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u7545\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.532 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\uff0c\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.579 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u5fc3\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.641 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u65f7\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.673 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u795e\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.751 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u6021\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.782 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：{\"id\": \"cmpl-6pIHnOOJiiUEVMesXwxzzcSQFoZHj\", \"object\": \"text_completion\", \"created\": 1677683039, \"choices\": [{\"text\": \"\\u3002\", \"index\": 0, \"logprobs\": null, \"finish_reason\": null}], \"model\": \"text-davinci-003\"}\n23:03:59.815 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据：[DONE]\n23:03:59.815 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI返回数据结束了\n23:03:59.815 [省略无效信息] INFO com.unfbx.chatgpt.sse.ConsoleEventSourceListener - OpenAI关闭sse连接...\n```\n\n### 3、默认客户端使用示例（支持全部API）：\n更多SDK示例参考：[OpenAiClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java) \n#### 默认OkHttpClient\n```\npublic class Test {\n    public static void main(String[] args) {\n        OpenAiClient openAiClient = OpenAiClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n                \u002F\u002F聊天模型：gpt-3.5\n        Message message = Message.builder().role(Message.Role.USER).content(\"你好啊我的伙伴！\").build();\n        ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();\n        ChatCompletionResponse chatCompletionResponse = openAiClient.chatCompletion(chatCompletion);\n        chatCompletionResponse.getChoices().forEach(e -> {\n            System.out.println(e.getMessage());\n        });\n    }\n}\n```\n#### 自定义OkHttpClient客户端使用示例：\n```\npublic class Test {\n    public static void main(String[] args) {\n        \u002F\u002F国内访问需要做代理，国外服务器不需要\n        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(\"127.0.0.1\", 7890));\n        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());\n        \u002F\u002F！！！！千万别再生产或者测试环境打开BODY级别日志！！！！\n        \u002F\u002F！！！生产或者测试环境建议设置为这三种级别：NONE,BASIC,HEADERS,！！！\n        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);\n        OkHttpClient okHttpClient = new OkHttpClient\n                .Builder()\n                .proxy(proxy)\u002F\u002F自定义代理\n                .addInterceptor(httpLoggingInterceptor)\u002F\u002F自定义日志输出\n                .addInterceptor(new OpenAiResponseInterceptor())\u002F\u002F自定义返回值拦截\n                .connectTimeout(10, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .writeTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .readTimeout(30, TimeUnit.SECONDS)\u002F\u002F自定义超时时间\n                .build();\n        \u002F\u002F构建客户端\n        OpenAiClient openAiClient = OpenAiClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\",\"sk-********\"))\n                \u002F\u002F自定义key的获取策略：默认KeyRandomStrategy\n                \u002F\u002F.keyStrategy(new KeyRandomStrategy())\n                .keyStrategy(new FirstKeyStrategy())\n                .okHttpClient(okHttpClient)\n                \u002F\u002F自己做了代理就传代理地址，没有可不不传\n\u002F\u002F                .apiHost(\"https:\u002F\u002F自己代理的服务器地址\u002F\")\n                .build();\n                \u002F\u002F聊天模型：gpt-3.5\n        Message message = Message.builder().role(Message.Role.USER).content(\"你好啊我的伙伴！\").build();\n        ChatCompletion chatCompletion = ChatCompletion.builder().messages(Arrays.asList(message)).build();\n        ChatCompletionResponse chatCompletionResponse = openAiClient.chatCompletion(chatCompletion);\n        chatCompletionResponse.getChoices().forEach(e -> {\n            System.out.println(e.getMessage());\n        });\n    }\n}\n```\n## 方式二（下载源码直接运行）\n下载源码打包\n# ❔ QA\nQ | A\n---|---\n如何实现连续对话？ | issues：https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F8\n如何实现流式输出？ | 升级1.0.2版本，参考源码：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java\u002F)\n如何整合SpringBoot实现流式输出的Api接口？ | 参考另外一个项目：[chatgpt-steam-output](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-steam-output)\n最新版GPT-3.5-TURBO是否支持？ | 升级1.0.3 已经支持ChatCompletion, 参考测试案例：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java\u002F) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java\u002F)\n最新版语言转文字和语言翻译是否支持？ | 升级1.0.3 已经支持whisper参考测试案例：[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiStreamClientTest.java\u002F) 和[OpenAiStreamClientTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientTest.java\u002F)\n\n# 📌 国内访问解决方案\n国内访问可以看下这个解决方案：**https:\u002F\u002Fgithub.com\u002Fnoobnooc\u002Fnoobnooc\u002Fdiscussions\u002F9**\n\n# 📋 开发案例收集\n**基于本SDK开发案例收集**：[chatgpt-java SDK案例征集](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F87) \n# 🌟 Star History\n\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_4d93fbea6935.png)](https:\u002F\u002Fstar-history.com\u002F#Grt1228\u002Fchatgpt-java&Date)\n\n\n# 🙏 鸣谢\n站在巨人的肩膀：\n- OpenAi：https:\u002F\u002Fopenai.com\u002F\n- [knuddelsgmbh](https:\u002F\u002Fgithub.com\u002Fknuddelsgmbh) 的[jtokkit](https:\u002F\u002Fgithub.com\u002Fknuddelsgmbh\u002Fjtokkit) 的开源计算算法。\n\n\n# ☕ 打赏\n如果项目对你有帮助，可以选择请我喝杯奶茶\n\n\u003Cimg width=\"180\" alt=\"微信截图_20230405222411\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_ac7edcc5d6ce.png\">  \u003Cimg width=\"164\" alt=\"微信截图_20230405222357\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_readme_3b359191e032.png\">\n\n开源协议：[LICENSE](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fmain\u002FLICENSE)","# chatgpt-java 快速上手指南\n\n## 环境准备\n\n- **系统要求**：JDK 1.8 及以上版本\n- **前置依赖**：\n  - Maven 或 Gradle 构建工具\n  - OpenAI API Key（需自行申请）\n- **网络要求**：\n  - 若能直接访问 OpenAI 官方接口，无需额外配置\n  - 若在国内访问受限，需配置 HTTP 代理或使用反向代理服务\n\n## 安装步骤\n\n### 方式一：Maven 依赖（推荐）\n\n在项目的 `pom.xml` 中添加以下依赖：\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.unfbx\u003C\u002FgroupId>\n    \u003CartifactId>chatgpt-java\u003C\u002FartifactId>\n    \u003Cversion>1.0.14-beta1\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n### 方式二：源码运行\n\n克隆项目源码后直接导入 IDE 运行测试案例：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java.git\ncd chatgpt-java\n```\n\n## 基本使用\n\n### 1. 流式对话示例（默认 OkHttpClient）\n\n```java\nimport com.unfbx.chatgpt.OpenAiStreamClient;\nimport com.unfbx.chatgpt.entity.chat.ChatCompletion;\nimport com.unfbx.chatgpt.entity.chat.Message;\nimport com.unfbx.chatgpt.sse.ConsoleEventSourceListener;\n\nimport java.util.Arrays;\nimport java.util.concurrent.CountDownLatch;\n\npublic class Test {\n    public static void main(String[] args) {\n        \u002F\u002F 初始化客户端，支持多个 API Key\n        OpenAiStreamClient client = OpenAiStreamClient.builder()\n                .apiKey(Arrays.asList(\"sk-********\", \"sk-********\"))\n                \u002F\u002F 可选：自定义 Key 获取策略，默认为随机策略\n                .keyStrategy(new FirstKeyStrategy())\n                \u002F\u002F 若有代理地址可在此设置，无代理则注释掉\n                \u002F\u002F .apiHost(\"https:\u002F\u002F你的代理服务器地址\u002F\")\n                .build();\n\n        \u002F\u002F 构建消息\n        Message message = Message.builder()\n                .role(Message.Role.USER)\n                .content(\"你好啊我的伙伴！\")\n                .build();\n\n        ChatCompletion chatCompletion = ChatCompletion.builder()\n                .messages(Arrays.asList(message))\n                .build();\n\n        \u002F\u002F 监听流式输出\n        ConsoleEventSourceListener eventSourceListener = new ConsoleEventSourceListener();\n        client.streamChatCompletion(chatCompletion, eventSourceListener);\n\n        \u002F\u002F 等待输出完成\n        CountDownLatch countDownLatch = new CountDownLatch(1);\n        try {\n            countDownLatch.await();\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n\n### 2. 自定义 OkHttpClient（适用于国内代理场景）\n\n```java\nimport okhttp3.OkHttpClient;\nimport okhttp3.logging.HttpLoggingInterceptor;\nimport com.unfbx.chatgpt.interceptor.OpenAILogger;\n\nimport java.net.InetSocketAddress;\nimport java.net.Proxy;\nimport java.util.concurrent.TimeUnit;\n\n\u002F\u002F 创建代理（国内用户常用）\nProxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(\"127.0.0.1\", 7890));\n\n\u002F\u002F 配置日志拦截器（生产环境建议设为 HEADERS 或 NONE）\nHttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());\nhttpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);\n\n\u002F\u002F 构建自定义 OkHttpClient\nOkHttpClient okHttpClient = new OkHttpClient.Builder()\n        .proxy(proxy)\n        .addInterceptor(httpLoggingInterceptor)\n        .connectTimeout(30, TimeUnit.SECONDS)\n        .writeTimeout(30, TimeUnit.SECONDS)\n        .readTimeout(30, TimeUnit.SECONDS)\n        .build();\n\n\u002F\u002F 注入自定义客户端\nOpenAiStreamClient client = OpenAiStreamClient.builder()\n        .apiKey(Arrays.asList(\"sk-********\"))\n        .okHttpClient(okHttpClient)\n        .build();\n```\n\n> 💡 提示：完整功能包括图片生成、语音转文字、Token 计算、Function Call 等，请参考官方文档：https:\u002F\u002Fchatgpt-java.unfbx.com\u002F","某电商平台的 Java 后端团队正在开发一款智能客服系统，需要让用户在咨询商品时能实时获得带有图片展示和语音回复的 AI 应答。\n\n### 没有 chatgpt-java 时\n- 开发人员需手动封装复杂的 HTTP 请求来处理 OpenAI 接口，代码冗余且难以维护流式输出（SSE\u002FWebSocket），导致用户等待响应时间长，体验卡顿。\n- 面对多账号 Key 轮询、失效自动切换及异常告警等生产级需求，团队必须从零编写拦截器和监控逻辑，耗费大量精力在非核心业务上。\n- 想要实现“图文结合”的回答（如调用 DALL-E 3 生成商品图）或文本转语音（TTS）功能时，缺乏统一的 SDK 支持，集成不同模型接口极其繁琐。\n- 无法便捷地计算 Token 消耗量，导致成本核算滞后，难以优化提示词以控制 API 调用费用。\n\n### 使用 chatgpt-java 后\n- 直接调用 SDK 内置的流式客户端，轻松实现类似打字机的实时回复效果，显著降低首字延迟，大幅提升用户交互流畅度。\n- 利用动态 Key 拦截器功能，自动处理 Key 失效、过期或封禁情况，并无缝对接钉钉或企微告警，确保服务高可用且无需重复造轮子。\n- 通过一行代码即可串联 ChatCompletion、DALL-E 3 和 TTS 接口，快速构建出能“看图说话”并发语音的多模态智能客服助手。\n- 内置多种 Token 计算工具，实时监控每次对话的成本消耗，帮助团队精准优化策略，有效降低运营支出。\n\nchatgpt-java 将原本数周的底层接口适配工作缩短至几天，让 Java 开发者能专注于业务逻辑，快速落地生产级多模态 AI 应用。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FGrt1228_chatgpt-java_cd017c1a.png","Grt1228","unFbx","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FGrt1228_c9dd1b03.png",null,"Shang Hai","aliyun2333@126.com","https:\u002F\u002Fwww.unfbx.com","https:\u002F\u002Fgithub.com\u002FGrt1228",[82],{"name":83,"color":84,"percentage":85},"Java","#b07219",100,3459,808,"2026-04-03T19:06:23","Apache-2.0","未说明","不需要",{"notes":93,"python":94,"dependencies":95},"这是一个 Java SDK 库，非独立运行的 AI 模型，因此无需 GPU 或特定 Python 环境。主要通过 Maven 导入依赖使用。支持自定义 OkHttpClient 配置代理（国内访问需配置 HTTP 代理）和超时设置。需准备有效的 OpenAI API Key。","不适用",[96,97,98],"chatgpt-java (Maven)","OkHttpClient","Spring Boot (可选)",[15,35,100,101],"音频","插件",[103,104,105,106,64,107,108,109,110,111,112,113],"chatgpt","gpt-35-turbo","gpt-4","java","openai-api","openai-images","openai-whisper","whisper","openai-chatgpt","tiktoken-java","gpt-plugins","2026-03-27T02:49:30.150509","2026-04-06T16:58:08.418281",[117,122,127,132,137,142,147,152,157,162],{"id":118,"question_zh":119,"answer_zh":120,"source_url":121},19591,"如何实现连续对话功能？","实现连续对话的核心在于管理 Token 和会话 ID（session_id）。需要根据 Token 限制，截取掉前面多余的对话内容以控制上下文长度。对于 session_id 的实现，通常需要在客户端维护一个会话标识，并在每次请求时携带该标识，服务端据此关联历史消息。具体实现逻辑可参考项目中的相关演示或自行设计消息列表的追加与裁剪策略。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F8",{"id":123,"question_zh":124,"answer_zh":125,"source_url":126},19592,"使用库发送请求超时，但浏览器代理正常，如何解决？","这通常是因为 Java 程序未正确配置代理。需要在代码中显式设置 SOCKS 或 HTTP 代理。解决方案是将代理地址设置为本地代理服务器（如梯子）的地址和端口。示例代码如下：\nProxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(\"127.0.0.1\", 10808));\nOpenAiClient.Builder builder = OpenAiClient.builder();\nbuilder.proxy(proxy);\n注意：如果 Key 曾泄露或在非代理环境下尝试过，建议在官网删除并重新生成 Key。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F51",{"id":128,"question_zh":129,"answer_zh":130,"source_url":131},19593,"遇到 'unexpected end of stream' 或 'EOFException' 报错怎么办？","该错误通常与网络连接或代理配置有关，表现为流意外结束。最常见的解决方法是参考“请求超时问题”的解决方案，检查并正确配置本地代理（Proxy）。确保 Java 程序能够通过配置的代理（如 127.0.0.1:10808 或 10809）访问外网。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F43",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},19594,"运行时出现 HTTPS 证书认证错误如何绕过？","有两种主要解决方法：\n1. 升级 JDK 版本：旧版本 JDK（如 1.8.0_144）可能缺少新证书，升级到较新的 JDK 版本通常能直接解决。\n2. 代码层面忽略证书验证：可以在代码中配置 HttpClient 忽略 SSL 证书校验，或者手动将证书导入到本地 JDK 的 truststore 中。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F46",{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},19595,"同一个 API Key 支持多少人同时通过 SSE 方式提问？","官方对 API Key 有限流策略，通常是每分钟 20,000 tokens。只要总请求量不超过这个限制，同一 Key 可以支持多个人同时提问。如果需要更高并发或更复杂的流式输出管理，可以参考社区项目（如 chatgpt-steam-output）进行扩展，但需注意类名冲突问题。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F33",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},19596,"如何启用最新的 Function Calling（函数调用）功能？","需要升级依赖到支持该功能的 Beta 版本。在 pom.xml 中添加或更新以下依赖：\n\u003Cdependency>\n    \u003CgroupId>com.unfbx\u003C\u002FgroupId>\n    \u003CartifactId>chatgpt-java\u003C\u002FartifactId>\n    \u003Cversion>1.0.14-beta1\u003C\u002Fversion>\n\u003C\u002Fdependency>\n该版本支持最新的 Gpt3.5-16k 及 0613 模型，并包含 Function calling 功能。具体用法可参考官方测试用例：OpenAiClientFunctionTest.java。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F159",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},19597,"项目依赖导致 SLF4J 日志框架冲突（multiple bindings）如何解决？","这是因为库中默认包含了 slf4j-simple 实现，与项目中已有的 logback 等其他实现冲突。解决方法是在项目的 pom.xml 中引入 chatgpt-java 依赖时，排除掉 slf4j-simple。例如：\n\u003Cexclusions>\n    \u003Cexclusion>\n        \u003CgroupId>org.slf4j\u003C\u002FgroupId>\n        \u003CartifactId>slf4j-simple\u003C\u002FartifactId>\n    \u003C\u002Fexclusion>\n\u003C\u002Fexclusions>\n日志框架的选型应由用户自己决定，库应仅依赖 slf4j-api。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F157",{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},19598,"运行 Demo 后主程序不退出（不停止运行）是什么原因？","这是因为 Demo 中使用了流式输出（SSE），为了保证接收完所有返回数据，代码中使用了 CountDownLatch 进行阻塞等待。如果是集成到 Web 应用（如 Spring Boot）中，不需要这种阻塞机制，可以直接移除相关的 CountDownLatch 等待代码，程序即可正常结束或交由 Web 容器管理线程。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F120",{"id":158,"question_zh":159,"answer_zh":160,"source_url":161},19599,"调用 chatCompletion 时报 'UnrecognizedPropertyException: pre_token_count' 错误？","该错误表明返回的 JSON 中包含了一个库中实体类未定义的字段 'pre_token_count'。这通常是因为你使用的不是 OpenAI 官方接口，而是第三方中转接口（如 api2d），这些中转接口可能会返回额外的字段。解决方法是检查你的 BaseUrl 配置，确认是否指向了非官方地址。如果是第三方接口，可能需要联系提供方或暂时忽略该字段（如果库支持配置忽略未知属性）。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F100",{"id":163,"question_zh":164,"answer_zh":165,"source_url":166},19600,"SSE 流式响应似乎被阻塞，直到全部返回才触发事件，如何优化？","这通常是因为开启了 OkHttp 的 BODY 级别日志（HttpLoggingInterceptor.Level.BODY）。该级别会缓冲整个响应体后才输出日志，从而导致流式数据无法实时回调。解决方法是将日志级别调整为 HEADERS、BASIC 或 NONE。示例代码：\nHttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());\nhttpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);\n切记在生产或测试环境中不要开启 BODY 级别日志以免影响流式体验。","https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fissues\u002F93",[168,173,178,183,188,193,198,203,208,213],{"id":169,"version":170,"summary_zh":171,"released_at":172},117654,"v1.1.5","- 修复bug","2023-12-05T17:12:54",{"id":174,"version":175,"summary_zh":176,"released_at":177},117655,"v1.1.3","- 支持Assistant、Run、Thread、Message API\n- 支持同步文本转语音\n\n示例参考：[v1_1_3\u002FOpenAiClientTest.java](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fv1_1_3\u002FOpenAiClientTest.java)\n\n文档地址：https:\u002F\u002Fchatgpt-java.unfbx.com\u002F","2023-11-22T01:48:36",{"id":179,"version":180,"summary_zh":181,"released_at":182},117656,"v1.1.2-beta0","- Dall-e-3\n- 带附加图片的ChatCompletion\n- 文本转语音TTS\n- 微调任务\n- 工具调用\n\n示例参考：[OpenAiClientTest.java](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002Fdevelop\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002Fv1_1_2\u002FOpenAiClientTest.java)\n\n文档地址：https:\u002F\u002Fchatgpt-java.unfbx.com\u002F","2023-11-14T02:02:48",{"id":184,"version":185,"summary_zh":186,"released_at":187},117657,"v1.1.1-beta0","- **支持GPT插件模式。参考实现[PluginTest](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002F1.0.14\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FPluginTest.java)**","2023-08-21T16:49:51",{"id":189,"version":190,"summary_zh":191,"released_at":192},117658,"v1.0.15","- 审核接口返回值更新\n- Bug修复\n- 代码优化","2023-07-20T14:43:40",{"id":194,"version":195,"summary_zh":196,"released_at":197},117659,"v1.0.14","- 修复bug\n- 支持函数调用\n- 支持最新模型\n- 支持最新模型的token计算","2023-06-26T08:55:16",{"id":199,"version":200,"summary_zh":201,"released_at":202},117660,"1.0.14-beta1","🔥🔥🔥\n\n#### ✔️更新支持最新版0613模型\n#### ✔️更新支持最新功能Function Call。示例参考：[OpenAiClientFunctionTest.java](https:\u002F\u002Fgithub.com\u002FGrt1228\u002Fchatgpt-java\u002Fblob\u002F1.0.14\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Funfbx\u002Fchatgpt\u002FOpenAiClientFunctionTest.java)","2023-06-16T09:17:48",{"id":204,"version":205,"summary_zh":206,"released_at":207},117661,"v1.0.13","- 支持在键异常（失效、过期、被封禁）时，自定义动态处理键\n- 支持键异常时的告警通知（钉钉、飞书……）","2023-04-28T08:54:25",{"id":209,"version":210,"summary_zh":211,"released_at":212},117662,"v1.0.12","- 令牌计算速度优化\n- 模型接口更新\n- 语音接口更新，支持官方最新参数","2023-04-14T10:28:52",{"id":214,"version":215,"summary_zh":216,"released_at":217},117663,"v1.0.11","### 功能：1.0.11 #105 支持 tokens、新增余额查询接口、Embeddings 支持数组传入，修复 bug","2023-04-09T17:31:08"]