使用 openai-java-sdk 整合 ChatGPT

本文我们主要讲述通过 openai-java-sdk 依赖整合访问 OpenAi 提供的功能。 OpenAI Java SDK 主要 为 Java 开发人员提供方便易用的 SDK 来与 OpenAI

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

github 地址:github.com/devlive-com…

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

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

构建 maven 项目,并添加依赖

xml
复制代码
<dependency> <groupId>org.devlive.sdk</groupId> <artifactId>openai-java-sdk</artifactId> <version>1.2.0</version> </dependency>

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

构建连接客户端

java
复制代码
OpenAiClient client = OpenAiClient.builder() .apiKey(System.getProperty("openai.token")) .build();

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

java
复制代码
OpenAiClient client = OpenAiClient.builder() .apiHost(System.getProperty("proxy.host")) .apiKey(System.getProperty("proxy.token")) .build();

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

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

构建 Completions

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

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

java
复制代码
ChoiceEntity(content=git diff git diff 恩·胜恩, index=0, logProb=null, finishReason=length)

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

构建 Chat Completions

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

java
复制代码
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()); });

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

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

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

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

自动释放资源

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

java
复制代码
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,里面配置了默认的一些配置,比如超时时间等,如果我们需要自定义这些参数我们需要使用以下代码

java
复制代码
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()); }); }

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

java
复制代码
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 提供的服务中,有些方式做了修改,我们可以参考以下代码:

java
复制代码
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 的一些基本使用方式,后续我们会提供更多文章来详细讲解更多的其他模式。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
人工智能

【OpenAI】ChatGPT函数调用(Function Calling)实践 | 京东云技术团队

2024-4-27 1:32:10

人工智能

大语言模型(LLM)实践 | 识别与修复风险代码

2024-4-27 5:31:23

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索