当前位置:   article > 正文

Java支持ChatGPT_国内java可以调用chatgpt

国内java可以调用chatgpt

 一、官方介绍

        使用OpenAI可参考官网的文档。官网给出了详细的参数解释、用例和使用方法的介绍。同时也罗列了计费规则和余额都查询。

OpenAI API官方文档

1.1 Documentation

在Documentation页面每个模型的MAX_TOKENS,表示输入的最大文本限制。

最大文本限制:请求+想用的单词数

每个模型允许的最大token数量不一样,比如gpt-3.5-turbo模型,允许最多有4096个token。

需要注意,这个数量既包括你输入的提示语,也包括AI产出的回答,两个加起来不能超过4096个token

比如,你的输入有1000个token,那么你这里设置的 max_tokens 就不能超过 3096。不然调用就会报错。

1.2 API reference

API reference介绍了API的参数解释,开发人员在开发过程中可参考文档进行开发

1.3 调用限制

        在实际调用API的过程中,出于对计算资源的保护,OpenAI还限制了各模型API的每分钟请求最大次数和每分钟Token通信量最大值

二、获取API Keys

根据自己的OpenAI账号,获取对应的API KEY,申请API KEY之后需保存下来,该Key是你用来调用接口的token,主要用于接口鉴权。

三、 代码实现

3.1 参数介绍

3.1.1 model

       model: 为必选参数. 指定使用的模型,常用:gpt-3.5-turbo、gpt-4o

3.1.2 Messages

        messages:为必选参数. 上下文列表,用于实现上下文对话. 必须为数组格式

        role:角色,可选值:system、user、assistant

                system:系统角色。可以帮助设定对话的语境,以便 AI 更好地理解其在对话中的角色

                user:表示用户的消息。

                assistant:表示助手(AI)的回复。

        content:必填. 消息体。也可以理解为提示词。

3.1.3 temperature

        temperature: 可选参数。取值范围为:0-2,默认值为1.参数代表采样温度,数值越小,模型会选择概率高的词汇,生成的文本更保守;数值越高,则会选择概率较低的词汇,生成的文本更多样化。

3.1.4 top_p

        top_p:可选参数。取值范围:0-1。作用与temperature类似,用于控制输出文本的随机性,数值越低,随机性越低,数值越高,随机性越高。通常来说,要调整随机性,top_p和temperature使用一个即可。

3.1.5 max_tokens

        max_tokens:可选参数。代表返回结果的token的数量。

3.1.6 其他参数可参考

        文章:OpenAI开发系列(六):Completions模型的工作原理及应用实例(开发多轮对话机器人)_如何做openai的上层应用-CSDN博客

3.2 简单使用

  • 请求地址和请求体
  1. curl https://api.openai.com/v1/chat/completions \
  2. -H "Content-Type: application/json" \
  3. -H "Authorization: Bearer $OPENAI_API_KEY" \
  4. -d '{
  5. "model": "gpt-3.5-turbo",
  6. "messages": [{"role": "user", "content": "Say this is a test!"}],
  7. "temperature": 0.7
  8. }'
  • 响应参数
  1. {
  2. "id": "chatcmpl-abc123",
  3. "object": "chat.completion",
  4. "created": 1677858242,
  5. "model": "gpt-3.5-turbo-0613",
  6. "usage": {
  7. "prompt_tokens": 13,
  8. "completion_tokens": 7,
  9. "total_tokens": 20
  10. },
  11. "choices": [
  12. {
  13. "message": {
  14. "role": "assistant",
  15. "content": "\n\nThis is a test!"
  16. },
  17. "logprobs": null,
  18. "finish_reason": "stop",
  19. "index": 0
  20. }
  21. ]
  22. }

3.2.1 引入Pom文件

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.squareup.okhttp3</groupId>
  4. <artifactId>okhttp</artifactId>
  5. <version>4.9.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.google.code.gson</groupId>
  9. <artifactId>gson</artifactId>
  10. <version>2.8.6</version>
  11. </dependency>
  12. </dependencies>

3.3.2 主要Java代码实现

  1. private String sendMessageToChatGpt(String translateMsgs)
  2. throws Exception {
  3. if (StringUtil.isNullOrBlank(translateMsgs)) {
  4. return null;
  5. }
  6. // 获取chatGpt配置
  7. String url = "https://api.openai.com/v1/chat/completions";
  8. if (StringUtil.isNullOrBlank(url)) {
  9. throw new Exception("ChatGpt地址未配置");
  10. }
  11. OkHttpClient.Builder clientBuilder = new OkHttpClient().newBuilder();
  12. // 设置代理(国内访问,需要使用;国外访问无需使用)
  13. Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7897));
  14. clientBuilder.proxy(proxy);
  15. OkHttpClient client = clientBuilder.build();
  16. // 构造请求体
  17. JsonObject message = new JsonObject();
  18. message.put("role", "user");
  19. message.put("content", "请帮我翻译成英文:" + translateMsgs);
  20. JsonArray messages = new JsonArray();
  21. messages.add(message);
  22. JsonObject jsonBody = new JsonObject();
  23. jsonBody.put("model", "gpt-4o");
  24. jsonBody.put("messages", messages);
  25. jsonBody.put("temperature", "0.7");
  26. RequestBody body = RequestBody.create(MediaType.get("application/json; charset=utf-8"),
  27. jsonBody.toString());
  28. // 构造请求
  29. Request request = new Request.Builder().url(url).post(body)
  30. .addHeader("Content-Type", "application/json")
  31. .addHeader("Authorization", "Bearer " + API_KEYS).build();
  32. try (Response response = client.newCall(request).execute()) {
  33. if (!response.isSuccessful()) {
  34. throw new IOException("请求OpenAi失败:" + response);
  35. }
  36. // 解析响应
  37. String responseBody = response.body().string();
  38. JsonObject jsonResponse = new JsonObject(responseBody);
  39. JsonArray choices = jsonResponse.getJsonArray("choices");
  40. JsonObject firstChoice = choices.getJsonObject(0);
  41. JsonObject messageContent = firstChoice.getJsonObject("message");
  42. return messageContent.getString("content").trim();
  43. }
  44. }
  • 其中API_KEYS为自己账号申请的秘钥,替换即可使用

四、优秀框架和文章推荐

4.1 优秀框架

      PlexPt,可直接引入jar包,实现对接OpenAI的功能。

  1. <dependency>
  2. <groupId>com.github.plexpt</groupId>
  3. <artifactId>chatgpt</artifactId>
  4. <version>4.1.2</version>
  5. </dependency>
  1. Proxy proxy = Proxys.http("127.0.0.1", 7897);
  2. ChatGPT chatGPT = ChatGPT.builder()
  3. .apiKey(API_KEYS)
  4. .proxy(proxy)
  5. .timeout(3600)
  6. .apiHost("https://api.openai.com/v1/chat/completions")
  7. .build()
  8. .init();
  9. Message system = Message.ofSystem("帮我翻译一段话:你好世界");
  10. Message message = Message.of("写一段诗,主题:回家!");
  11. ChatCompletion chatCompletion = ChatCompletion.builder()
  12. .model(ChatCompletion.Model.GPT_3_5_TURBO.getName())
  13. .messages(Arrays.asList(system, message))
  14. .maxTokens(1000)
  15. .temperature(0.7)
  16. .build();
  17. ChatCompletionResponse response = chatGPT.chatCompletion(chatCompletion);
  18. Message res = response.getChoices().get(0).getMessage();

4.2 优秀文章

AI前线:AIGC与大模型的应用实例

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/962883
推荐阅读
相关标签
  

闽ICP备14008679号