使用 openai-java-sdk 整合 ChatGPT

news/2024/11/29 11:52:22/

推荐一套基于 SpringBoot 开发的全平台数据 (数据库管理工具) 功能比较完善,建议下载使用: github.com/EdurtIO/datacap 目前已经支持 40+ 多种数据源。国内首个应用 ChatGPT 到数据管理系统中项目。

github 地址:https://github.com/devlive-community/openai-java-sdk

本文我们主要讲述通过 openai-java-sdk 依赖整合访问 OpenAi 提供的功能。

OpenAI Java SDK 主要 为 Java 开发人员提供方便易用的 SDK 来与 OpenAI 的 API 进行交互。

构建 maven 项目,并添加依赖

<dependency><groupId>org.devlive.sdk</groupId><artifactId>openai-java-sdk</artifactId><version>1.2.0</version>
</dependency>

推荐将 1.2.0 替换为 LATEST,这样可以始终使用最新版本。

构建连接客户端

OpenAiClient client = OpenAiClient.builder().apiKey(System.getProperty("openai.token")).build();

默认我们只需要指定 OpenAi 提供的密钥即可。如果我们需要使用第三方提供的 OpenAi 镜像,可以使用以下代码:

OpenAiClient client = OpenAiClient.builder().apiHost(System.getProperty("proxy.host")).apiKey(System.getProperty("proxy.token")).build();

proxy.host 第三方服务提供的主机名

proxy.token 第三方服务提供的密钥

构建 Completions

CompletionEntity configure = CompletionEntity.builder().model(CompletionModel.TEXT_DAVINCI_003.getName()).prompt("测试一下").temperature(2D).build();
client.createCompletion(configure).getChoices().forEach(System.out::println);

运行程序后,输入大概如下内容:

ChoiceEntity(content=git diff
git diff 恩·胜恩, index=0, logProb=null, finishReason=length)

如果我们需要替换其他模型只需要替换 .model(CompletionModel.TEXT_DAVINCI_003.getName()) 即可。

构建 Chat Completions

通过该方式可以实现 ChatGPT 的对话模式。

List<CompletionMessageEntity> messages = Lists.newArrayList();
messages.add(CompletionMessageEntity.builder().content("Hello, my name is openai-java-sdk").build());CompletionChatEntity configure = CompletionChatEntity.builder().messages(messages).build();client.createChatCompletion(configure).getChoices().forEach(choice -> messages.add(choice.getMessage()));messages.add(CompletionMessageEntity.builder().content("What is my name?").build());client.createChatCompletion(configure).getChoices().forEach(choice -> {System.out.println(choice.getMessage());});

运行程序后,输入大概如下内容:

CompletionMessageEntity(role=assistant, content=Your name is "openai-java-sdk" as mentioned earlier., name=null)

在本地调用中我们通过传递上下文对 Ai 提供一些相关信息,方便使其记录我们要获取的内容。

如果我们需要替换其他模型只需要替换 .model(CompletionModel.TEXT_DAVINCI_003.getName()) 即可。

自动释放资源

以上提供的方式无法自动释放我们构建的客户端等资源,这样就会导致我们过度消耗,如果访问过大会导致 OOM。

try (OpenAiClient client = OpenAiClient.builder().apiKey(System.getProperty("openai.token")).build()) {List<CompletionMessageEntity> messages = Lists.newArrayList();messages.add(CompletionMessageEntity.builder().content("Hello, my name is openai-java-sdk").build());CompletionChatEntity configure = CompletionChatEntity.builder().messages(messages).build();client.createChatCompletion(configure).getChoices().forEach(choice -> messages.add(choice.getMessage()));messages.add(CompletionMessageEntity.builder().content("What is my name?").build());client.createChatCompletion(configure).getChoices().forEach(choice -> {System.out.println(choice.getMessage());});
}

自定义 OkHttpClient

默认会提供一个 OkHttpClient,里面配置了默认的一些配置,比如超时时间等,如果我们需要自定义这些参数我们需要使用以下代码

try (OpenAiClient client = OpenAiClient.builder().apiKey(System.getProperty("openai.token")).client(okHttpClient).build()) {List<CompletionMessageEntity> messages = Lists.newArrayList();messages.add(CompletionMessageEntity.builder().content("Hello, my name is openai-java-sdk").build());CompletionChatEntity configure = CompletionChatEntity.builder().messages(messages).build();client.createChatCompletion(configure).getChoices().forEach(choice -> messages.add(choice.getMessage()));messages.add(CompletionMessageEntity.builder().content("What is my name?").build());client.createChatCompletion(configure).getChoices().forEach(choice -> {System.out.println(choice.getMessage());});
}

当然如果我们只是修改一些超时时间相关问题可以参考以下代码:

try (OpenAiClient client = OpenAiClient.builder().apiKey(System.getProperty("openai.token")).timeout(10).unit(TimeUnit.SECONDS).build()) {
List<CompletionMessageEntity> messages = Lists.newArrayList();
messages.add(CompletionMessageEntity.builder().content("Hello, my name is openai-java-sdk").build());CompletionChatEntity configure = CompletionChatEntity.builder().messages(messages).build();client.createChatCompletion(configure).getChoices().forEach(choice -> messages.add(choice.getMessage()));messages.add(CompletionMessageEntity.builder().content("What is my name?").build());client.createChatCompletion(configure).getChoices().forEach(choice -> {System.out.println(choice.getMessage());});
}

我们通过指定 .timeout(10) 配置时长,通过 .unit(TimeUnit.SECONDS) 时长单位,示例中我们配置的是 10秒

使用 Azure 提供的 OpenAi

在 Azure 提供的服务中,有些方式做了修改,我们可以参考以下代码:

try(OpenAiClient client=OpenAiClient.builder().apiHost("https://eus-chatgpt.openai.azure.com").apiKey(System.getProperty("azure.token")).provider(ProviderModel.azure).model("text-davinci-002").version("2022-12-01").build())
{client.createCompletion(configure).getChoices();
}

以上就是我们使用 openai-java-sdk 的一些基本使用方式,后续我们会提供更多文章来详细讲解更多的其他模式。


http://www.ppmy.cn/news/957360.html

相关文章

五、DQL-1.概述

一、DQL介绍 Data Query Language 数据查询语言 用来查询数据库中表的记录。 查询关键字&#xff1a;SELECT 二、语法

从制造到智造,安捷利的云数蝶变

伴随着新一轮科技革命和产业变革的兴起&#xff0c;制造业的数字化转型步入深水区&#xff0c;尤其是在5G、工业互联网、大数据等为代表的新技术推动下&#xff0c;制造业全方位、全链条的升级已是大势所趋。 南沙地处中国的南大门&#xff0c;既是国家面向世界的重要战略平台…

GIt 同时绑定 GItee 与 Github 进行 push 操作

1 GIt 同时绑定 GItee 与 Github 进行 push 操作 1) 查看远程仓库 查看下当前项目的远程仓库 git remote查看绑定的远程仓库 该命令会显示读写远程仓库的名称和地址&#xff0c;指向仓库为 Github。 git remote -v >>> origin https://github.com/yanSir/demos.gi…

如何用ChatGPT做一门课?(包含大纲、脚本、PPT文本)

【ChatGPT】前些天发现了一个巨牛的人工智能学习资源&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击查看学习资源&#xff09; 该场景对应的关键词库&#xff08;13个&#xff09;&#xff1a; 市场调研、在…

从0开始搭建前端项目2:使用ChatGPT实现高自动化完成率,提高开发效率并掌握最新前端技术

目录 第一章 需求调研第一节 背景第二节 需求调研工具第三节 需求调研一、项目需求二、市场竞争三、用户需求四、技术支持五、成本预算与收益预期六、团队建议与想法七、公司战略规划与政策要求 第一章 需求调研 第一节 背景 随着人工智能技术的快速发展&#xff0c;越来越多…

紧跟时代潮流,如用ChatGPT速成自媒体达人

每一个选题是否成为爆款和热门&#xff0c;这个就占了80%&#xff0c;为什么&#xff1f;因为我看到你的标题&#xff0c;我可以点进去啊&#xff0c;不管内容如何&#xff0c;至少让人眼前一亮&#xff0c;有点进去的欲望&#xff0c;至少浏览量会很大&#xff0c;这就成功了一…

如何利用 ChatGPT 和 GPT4 搞用户调研?

这位产品经理&#xff0c;GPT-4都已经发布了&#xff0c;你还在纯人工搞用户调研吗&#xff1f;还在为纯人工搞用户调研而烦恼&#xff1f; 不如把问题交给GPT-4和ChatGPT&#xff0c;放心啃着方便面消遣吧&#xff01; 对于 ChatGPT及GPT-4 是什么&#xff0c;相信大家已经有所…

chatgpt赋能python:Python如何收集数据:一份基本指南

Python如何收集数据&#xff1a;一份基本指南 Python是一门广泛应用于数据分析和挖掘的编程语言, 而数据的管道之一就是数据收集。无论你是用于市场研究&#xff0c;竞争情报收集或仅仅是出于好奇心&#xff0c;Python提供了许多的数据收集可视化框架&#xff0c;各种库和工具…