{"id":13453572,"url":"https://github.com/PlexPt/chatgpt-java","last_synced_at":"2025-03-24T01:31:39.224Z","repository":{"id":64415489,"uuid":"575253452","full_name":"PlexPt/chatgpt-java","owner":"PlexPt","description":"ChatGPT Java SDK。支持 GPT-4o、 GPT4 API。开箱即用。An unofficial Java SDK for seamless integration with ChatGPT's GPT-3.5 and GPT-4 APIs. Ready-to-use, simple setup, and efficient for building AI-powered applications.","archived":false,"fork":false,"pushed_at":"2024-12-09T12:11:10.000Z","size":464,"stargazers_count":3636,"open_issues_count":46,"forks_count":714,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-03-18T21:06:51.681Z","etag":null,"topics":["chatgpt","chatgpt-api","chatgpt-api-wrapper","chatgpt-bot","chatgpt-sdk","chatgpt3","chatgpt4","gpt4","java"],"latest_commit_sha":null,"homepage":"https://chat.plexpt.com/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PlexPt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-07T04:55:33.000Z","updated_at":"2025-03-14T13:54:37.000Z","dependencies_parsed_at":"2024-01-13T00:36:47.116Z","dependency_job_id":"301cabc7-1119-4093-a5f7-ebdc7d87ff04","html_url":"https://github.com/PlexPt/chatgpt-java","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlexPt%2Fchatgpt-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlexPt%2Fchatgpt-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlexPt%2Fchatgpt-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlexPt%2Fchatgpt-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PlexPt","download_url":"https://codeload.github.com/PlexPt/chatgpt-java/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245194256,"owners_count":20575729,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatgpt","chatgpt-api","chatgpt-api-wrapper","chatgpt-bot","chatgpt-sdk","chatgpt3","chatgpt4","gpt4","java"],"created_at":"2024-07-31T08:00:43.541Z","updated_at":"2025-03-24T01:31:39.216Z","avatar_url":"https://github.com/PlexPt.png","language":"Java","readme":"\u003ch1 style=\"text-align: center; color: hotpink; -webkit-animation: rainbow 5s infinite; -moz-animation: rainbow 5s infinite; -o-animation: rainbow 5s infinite; animation: rainbow 5s infinite;\"\u003eChatGPT Java API\u003c/h1\u003e\n\n![stable](https://img.shields.io/badge/stability-stable-brightgreen.svg)\n[![Maven Central](https://img.shields.io/maven-central/v/com.github.plexpt/chatgpt)](https://maven-badges.herokuapp.com/maven-central/com.github.plexpt/chatgpt)\n\n[English Doc](https://github.com/PlexPt/chatgpt-java/blob/main/README_en.md).\n\n\nOpenAI ChatGPT 的SDK。觉得不错请右上角Star\n\n\n# 功能特性\n\n|     功能      | 特性  |\n|:-----------:|:---:|\n|   GPT 3.5   | 支持  |\n|   GPT 4.0   | 支持  |\n|   GPT 4o    | 支持  |\n| GPT 4o-mini | 支持  |\n|    函数调用     | 支持  |\n|    流式对话     | 支持  |\n|     上下文     | 支持  |\n|   计算Token   | 支持  |\n|   多KEY轮询    | 支持  |\n|     代理      | 支持  |\n|    反向代理     | 支持  |\n\n\n## 使用指南\n\n参考Demo https://github.com/PlexPt/chatgpt-online-springboot\n\n最新版本 [![Maven Central](https://img.shields.io/maven-central/v/com.github.plexpt/chatgpt)](https://maven-badges.herokuapp.com/maven-central/com.github.plexpt/chatgpt)\n\nmaven\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.plexpt\u003c/groupId\u003e\n    \u003cartifactId\u003echatgpt\u003c/artifactId\u003e\n    \u003cversion\u003e6.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\ngradle\n```\nimplementation group: 'com.github.plexpt', name: 'chatgpt', version: '6.0.0'\n```\n\n\n\n### 最简使用\n\n\n```java\n      //国内需要代理\n      Proxy proxy = Proxys.http(\"127.0.0.1\", 1081);\n     //socks5 代理\n    // Proxy proxy = Proxys.socks5(\"127.0.0.1\", 1080);\n\n      ChatGPT chatGPT = ChatGPT.builder()\n                .apiKey(\"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\")\n                .proxy(proxy)\n                .apiHost(\"https://api.openai.com/\") //反向代理地址\n                .build()\n                .init();\n                \n        String res = chatGPT.chat(\"写一段七言绝句诗，题目是：火锅！\");\n        System.out.println(res);\n\n```\n也可以使用这个类进行测试 [ConsoleChatGPT](src/main/java/com/plexpt/chatgpt/ConsoleChatGPT.java)\n\n\n### 进阶使用\n\n```java\n      //国内需要代理 国外不需要\n      Proxy proxy = Proxys.http(\"127.0.0.1\", 1080);\n\n      ChatGPT chatGPT = ChatGPT.builder()\n                .apiKey(\"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\")\n                .proxy(proxy)\n                .timeout(900)\n                .apiHost(\"https://api.openai.com/\") //反向代理地址\n                .build()\n                .init();\n     \n        Message system = Message.ofSystem(\"你现在是一个诗人，专门写七言绝句\");\n        Message message = Message.of(\"写一段七言绝句诗，题目是：火锅！\");\n\n        ChatCompletion chatCompletion = ChatCompletion.builder()\n                .model(ChatCompletion.Model.GPT_3_5_TURBO.getName())\n                .messages(Arrays.asList(system, message))\n                .maxTokens(3000)\n                .temperature(0.9)\n                .build();\n        ChatCompletionResponse response = chatGPT.chatCompletion(chatCompletion);\n        System.out.println(response.toPlainString());\n\n```\n\n\n### 计算token数\n\n\n```java\n        Message system = Message.ofSystem(\"你现在是一个诗人，专门写七言绝句\");\n        Message message = Message.of(\"写一段七言绝句诗，题目是：火锅！\");\n\n        ChatCompletion chatCompletion1 = ChatCompletion.builder()\n        .model(ChatCompletion.Model.GPT_3_5_TURBO)\n        .messages(Arrays.asList(system, message))\n        .maxTokens(3000)\n        .temperature(0.9)\n        .build();\n        ChatCompletion chatCompletion2 = ChatCompletion.builder()\n        .model(ChatCompletion.Model.GPT4)\n        .messages(Arrays.asList(system, message))\n        .maxTokens(3000)\n        .temperature(0.9)\n        .build();\n\n        log.info(\"{} tokens: {}\", chatCompletion1.getModel(), chatCompletion1.countTokens());\n        log.info(\"{} tokens: {}\", chatCompletion2.getModel(), chatCompletion2.countTokens());\n\n```\n\n### 函数调用（Function Call）\n\n```java\n      //国内需要代理 国外不需要\n          Proxy proxy = Proxys.http(\"127.0.0.1\", 1080);\n\n                  chatGPT = ChatGPT.builder()\n                  .apiKey(\"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\")\n                  .timeout(900)\n                  .proxy(proxy)\n                  .apiHost(\"https://api.openai.com/\") //代理地址\n                  .build()\n                  .init();\n\n        List\u003cChatFunction\u003e functions = new ArrayList\u003c\u003e();\n        ChatFunction function = new ChatFunction();\n        function.setName(\"getCurrentWeather\");\n        function.setDescription(\"获取给定位置的当前天气\");\n        function.setParameters(ChatFunction.ChatParameter.builder()\n        .type(\"object\")\n        .required(Arrays.asList(\"location\"))\n        .properties(JSON.parseObject(\"{\\n\" +\n        \"          \\\"location\\\": {\\n\" +\n        \"            \\\"type\\\": \\\"string\\\",\\n\" +\n        \"            \\\"description\\\": \\\"The city and state, e.g. San Francisco, \" +\n        \"CA\\\"\\n\" +\n        \"          },\\n\" +\n        \"          \\\"unit\\\": {\\n\" +\n        \"            \\\"type\\\": \\\"string\\\",\\n\" +\n        \"            \\\"enum\\\": [\\\"celsius\\\", \\\"fahrenheit\\\"]\\n\" +\n        \"          }\\n\" +\n        \"        }\"))\n        .build());\n        functions.add(function);\n\n        Message message = Message.of(\"上海的天气怎么样？\");\n        ChatCompletion chatCompletion = ChatCompletion.builder()\n        .model(ChatCompletion.Model.GPT_3_5_TURBO_0613.getName())\n        .messages(Arrays.asList(message))\n        .functions(functions)\n        .maxTokens(8000)\n        .temperature(0.9)\n        .build();\n        ChatCompletionResponse response = chatGPT.chatCompletion(chatCompletion);\n        ChatChoice choice = response.getChoices().get(0);\n        Message res = choice.getMessage();\n        System.out.println(res);\n        if (\"function_call\".equals(choice.getFinishReason())) {\n\n        FunctionCallResult functionCall = res.getFunctionCall();\n        String functionCallName = functionCall.getName();\n\n        if (\"getCurrentWeather\".equals(functionCallName)) {\n        String arguments = functionCall.getArguments();\n        JSONObject jsonObject = JSON.parseObject(arguments);\n        String location = jsonObject.getString(\"location\");\n        String unit = jsonObject.getString(\"unit\");\n        String weather = getCurrentWeather(location, unit);\n\n        callWithWeather(weather, res, functions);\n        }\n        }\n\n\n    private void callWithWeather(String weather, Message res, List\u003cChatFunction\u003e functions) {\n\n\n        Message message = Message.of(\"上海的天气怎么样？\");\n        Message function1 = Message.ofFunction(weather);\n        function1.setName(\"getCurrentWeather\");\n        ChatCompletion chatCompletion = ChatCompletion.builder()\n        .model(ChatCompletion.Model.GPT_3_5_TURBO_0613.getName())\n        .messages(Arrays.asList(message, res, function1))\n        .functions(functions)\n        .maxTokens(8000)\n        .temperature(0.9)\n        .build();\n        ChatCompletionResponse response = chatGPT.chatCompletion(chatCompletion);\n        ChatChoice choice = response.getChoices().get(0);\n        Message res2 = choice.getMessage();\n        //上海目前天气晴朗，气温为 22 摄氏度。\n        System.out.println(res2.getContent());\n        }\n\n    public String getCurrentWeather(String location, String unit) {\n        return \"{ \\\"temperature\\\": 22, \\\"unit\\\": \\\"celsius\\\", \\\"description\\\": \\\"晴朗\\\" }\";\n        }\n\n```\n\n### 流式使用\n\n```java\n      //国内需要代理 国外不需要\n      Proxy proxy = Proxys.http(\"127.0.0.1\", 1080);\n\n      ChatGPTStream chatGPTStream = ChatGPTStream.builder()\n                .timeout(600)\n                .apiKey(\"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\")\n                .proxy(proxy)\n                .apiHost(\"https://api.openai.com/\")\n                .build()\n                .init();\n\n                \n        ConsoleStreamListener listener = new ConsoleStreamListener();\n        Message message = Message.of(\"写一段七言绝句诗，题目是：火锅！\");\n        ChatCompletion chatCompletion = ChatCompletion.builder()\n                .messages(Arrays.asList(message))\n                .build();\n        chatGPTStream.streamChatCompletion(chatCompletion, listener);\n\n```\n\n### 流式配合Spring SseEmitter使用\n\n参考 [SseStreamListener](src/main/java/com/plexpt/chatgpt/listener/SseStreamListener.java)\n\n你可能在找这个，参考Demo https://github.com/PlexPt/chatgpt-online-springboot\n\n```java\n  \n\n    @GetMapping(\"/chat/sse\")\n    @CrossOrigin\n    public SseEmitter sseEmitter(String prompt) {\n       //国内需要代理 国外不需要\n       Proxy proxy = Proxys.http(\"127.0.0.1\", 1080);\n\n       ChatGPTStream chatGPTStream = ChatGPTStream.builder()\n                .timeout(600)\n                .apiKey(\"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\")\n                .proxy(proxy)\n                .apiHost(\"https://api.openai.com/\")\n                .build()\n                .init();\n        \n        SseEmitter sseEmitter = new SseEmitter(-1L);\n\n        SseStreamListener listener = new SseStreamListener(sseEmitter);\n        Message message = Message.of(prompt);\n\n        listener.setOnComplate(msg -\u003e {\n            //回答完成，可以做一些事情\n        });\n        chatGPTStream.streamChatCompletion(Arrays.asList(message), listener);\n\n\n        return sseEmitter;\n    }\n\n```\n\n\n\n## 多KEY自动轮询\n\n只需替换chatGPT构造部分\n\n```\nchatGPT = ChatGPT.builder()\n        .apiKeyList(\n               // 从数据库或其他地方取出多个KEY\n                Arrays.asList(\"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\",\n                        \"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\",\n                        \"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\",\n                        \"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\",\n                        ))\n        .timeout(900)\n        .proxy(proxy)\n        .apiHost(\"https://api.openai.com/\") //代理地址\n        .build()\n        .init();\n```\n\n## 上下文\n\n参考  [ChatContextHolder.java](src/main/java/com/plexpt/chatgpt/util/ChatContextHolder.java) \n\n\n\n# 常见问题\n\n|                              问                              |                                                  答                                                   |\n| :----------------------------------------------------------: |:----------------------------------------------------------------------------------------------------:|\n|                         KEY从哪来？                          | 手动注册生成：openai.com(需要海外手机号)、或者[GPT API 额度购买(微信)](https://work.weixin.qq.com/kfid/kfc6913bb4906e0e597) |\n|                        哪些地区不能用                        |                       **以下国家IP不支持使用：中国(包含港澳台) 俄罗斯 乌克兰 阿富汗 白俄罗斯 委内瑞拉 伊朗 埃及**                        |\n|                         有封号风险吗                         |                                             使用代理有一定的风险。                                              |\n| 显示`Your access was terminated due to violation of our policies`... |                                               你号没了，下一个                                               |\n| 显示`That model is currently overloaded with other requests. You can retry your request` |                                             模型过载，官方炸了，重试                                             |\n|                          如何充值？                          |                                             用国外信用卡，国内的不行                                             |\n|                    没有国外信用卡怎么办？                    |                                             暂时没有特别好的办法待定                                             |\n|                         返回http 401                         |                                             API 密钥写错了/没写                                             |\n|                         返回http 429                         |                                         请求超速了，或者官方超载了。充钱可解决                                          |\n|                         返回http 500                         |                                                服务器炸了                                                 |\n|                                                              |                                                                                                      |\n\n---\n\n\n\n\n\n### 注册教程\n\nhttps://juejin.cn/post/7173447848292253704\n\nhttps://mirror.xyz/boxchen.eth/9O9CSqyKDj4BKUIil7NC1Sa1LJM-3hsPqaeW_QjfFBc\n\n#### 另外请看看我的另一个项目 [ChatGPT中文使用指南](https://github.com/PlexPt/awesome-chatgpt-prompts-zh)\n\n公众号\n\n \u003cimg src=\"https://user-images.githubusercontent.com/15922823/218004565-bb632624-b376-4f01-8ce2-d7065107bf4a.png\" width=\"300\"/\u003e \n\n# 云服务器\n\n点击👇🏻传送链接，购买云服务器：\n\n- [**阿里云服务器**](https://reurl.cc/NqQXyx)\n- [**【腾讯云】云服务器等爆品抢先购，低至4.2元/月**](https://url.cn/B7m0OYnG)\n\n \n#### 项目合作洽谈请点击 联系微信 https://work.weixin.qq.com/kfid/kfc6913bb4906e0e597\n\n### QQ群：645132635\n\n# Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=PlexPt/chatgpt-java\u0026type=Date)](https://star-history.com/#PlexPt/chatgpt-java\u0026Date)\n","funding_links":[],"categories":["GitHub-ChatGPT","A01_文本生成_文本对话","Developer Libraries, SDKs, and APIs","API tools","精选开源项目合集","Java","人工智能","twitter","Languages"],"sub_categories":["大语言对话模型及数据","Java","JavaScript","GTP编程语言客户端"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPlexPt%2Fchatgpt-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPlexPt%2Fchatgpt-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPlexPt%2Fchatgpt-java/lists"}