java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java集成OpenAI的chatGpt

java集成OpenAI的chatGpt功能示例详解

作者:追极

这篇文章主要介绍了java集成OpenAI的chatGpt功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、开通OpenAI账号

1.注册OpenAI账号

官网地址:https://openai.com/

注意:提前准备好国外手机号,没有的话用短信平台购买手机号接收短信

2.购买国外手机号

地址:https://tiger-sms.com/

我用支付宝充值了30多元(起充要30,加上手续费30多有点坑啊),买了一个印度尼西亚的号,美国的号用不了,提示虚拟手机号不允许注册。

3.用买到的手机号注册并获取短信验证码

4.登录OpenAI选择第一个开始聊天

二、java集成OpenAI的api

1.设置token

登录OpenAI选择第三个进入

进入个人平台页面,右上角点击后选择View API keys

新增一个key,注意复制好key的内容(这就是token)

2. 项目中引入OpenAI的第三方工具包

由于官方只提供NodeJs和Python版本的工具包,java版的只能用第三方的开源包,可靠性安全性没法保证,将就着用。

点击openai-java进入这个开源网站

代码写的挺不错的,可惜用的是gradle构建的,由于gradle本人几乎不会用,就没下载源码了。好在提供了maven依赖。

在maven仓库中可以查询到最新的jar包,引入项目即可

<!-- https://mvnrepository.com/artifact/com.theokanning.openai-gpt3-java/service -->
<dependency>
    <groupId>com.theokanning.openai-gpt3-java</groupId>
    <artifactId>service</artifactId>
    <version>0.12.0</version>
</dependency>

3.拷贝例子代码进行测试

由于缺少类等原因跑不起来,引入相关包

 <!-- json数据解析工具包 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.15.2</version>
        </dependency>

在国内无法直接调用OpenAI的接口,需要使用VPN代理访问。完整的代码测试代码如下:

package org.example.chatgpt;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.theokanning.openai.OpenAiApi;
import com.theokanning.openai.completion.CompletionChoice;
import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.completion.chat.*;
import com.theokanning.openai.image.CreateImageRequest;
import com.theokanning.openai.service.OpenAiService;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;
import static com.theokanning.openai.service.OpenAiService.*;
/**
 * 时间: 2023/6/5 17:07
 */
public class Main {
    public static void main(String[] args) {
        String token = "sk-XXXXXXXXXXXX";
        String proxyHost = "127.0.0.1";
        int proxyPort = 7890;
        //构建HTTP代理
        Proxy proxy = null;
        if (StrUtil.isNotBlank(proxyHost)) {
            proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
        }
        //构建HTTP客户端
        OkHttpClient client = defaultClient(token, Duration.of(60, ChronoUnit.SECONDS))
                .newBuilder()
                .proxy(proxy)
                .build();
        ObjectMapper mapper = defaultObjectMapper();
        Retrofit retrofit = defaultRetrofit(client, mapper);
        OpenAiApi api = retrofit.create(OpenAiApi.class);
        OpenAiService service = new OpenAiService(api, client.dispatcher().executorService());
        //文本补全
        System.out.println("\nCreating completion...");
        CompletionRequest completionRequest = CompletionRequest.builder()
                .model("ada")
                .prompt("你叫什么?")
                .echo(true)
                .user("testing")
                .n(3)
                .build();
        service.createCompletion(completionRequest).getChoices().forEach(new Consumer<CompletionChoice>() {
            @Override
            public void accept(CompletionChoice completionChoice) {
                System.out.println(completionChoice.getText());
            }
        });
        //图片生成
        System.out.println("\nCreating Image...");
        CreateImageRequest request = CreateImageRequest.builder()
                .prompt("小猫钓鱼漫画")
                .build();
        System.out.println("\nImage is located at:");
        System.out.println(service.createImage(request).getData().get(0).getUrl());
        //对话
        System.out.println("Creating chat completion...");
        final List<ChatMessage> messages = new ArrayList<>();
        final ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), "你叫什么?");
        messages.add(systemMessage);
        ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
                .builder()
                .model("gpt-3.5-turbo")
                .messages(messages)
                .n(1)
                .maxTokens(500)
                .logitBias(new HashMap<>())
                .build();
        //完整对话
        service.createChatCompletion(chatCompletionRequest)
                .getChoices().forEach(new Consumer<ChatCompletionChoice>() {
                    @Override
                    public void accept(ChatCompletionChoice chatCompletionChoice) {
                        System.out.println(chatCompletionChoice.getMessage());
                    }
                });
        //流式对话(逐Token返回)
//        service.streamChatCompletion(chatCompletionRequest)
//                .doOnError(Throwable::printStackTrace)
//                .blockingForEach(System.out::println);
        //立即释放连接
        service.shutdownExecutor();
    }
}

上述代码测试了:文本补全、绘图、聊天三个功能。

注意事项:

1.由于网络的原因,很多国外网站无法访问,需要先开通VPN,访问国外网站

2.国外手机号购买无法注册,多换几个号码试试

3.代码中需要设置HTTP代理,代理的地址就是VPN的本地地址

到此这篇关于java集成OpenAI的chatGpt功能的文章就介绍到这了,更多相关java集成OpenAI的chatGpt内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文