如何通过 Java 使用 ChatGPT API ?


ChatGPT作为OpenAI训练的大型语言模型,为自然语言处理任务提供人工智能服务。通过使用 ChatGPT API,开发人员可以将 ChatGPT 模型的功能集成到他们的应用程序中。在本文中,我们将探索如何通过 Java 使用 ChatGPT API。

第 1 步:获取 API 密钥
在使用 ChatGPT API 之前,您需要从 OpenAI 获取 API 密钥。您可以通过在 OpenAI 网站上创建一个帐户并按照说明创建新的 API 密钥来执行此操作。API 密钥是一长串字母和数字,您将使用它来验证您的 API 请求。

第 2 步:设置您的 Java 环境
要从 Java 发送 API 请求,您需要使用可以发出 HTTP 请求的库。我们推荐使用 OkHttp 库,它易于使用且得到广泛支持。

要使用 OkHttp,您需要将以下依赖项添加到您的 Maven 项目中:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.1</version>
</dependency>
  

    
如果你没有使用 Maven,你可以从官网下载 OkHttp 库,然后手动添加到你的项目中。

第 3 步:发送 API 请求
下面是如何使用 OkHttp 发送 API 请求的示例。要发出 API 请求,您需要向 ChatGPT API 端点发送 POST 请求。端点 URL 是https://api.openai.com/v1/engine/davinci-codex/completions。

以下是如何使用 OkHttp 发出 API 请求的示例:

import okhttp3.*;

public class ChatGPTClient {
    private static final String API_URL = "https://api.openai.com/v1/engines/davinci-codex/completions";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();

        String prompt = "My name is";
        String apiKey = "YOUR_API_KEY";

        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{\"prompt\": \"" + prompt + "\"}");

        Request request = new Request.Builder()
                .url(API_URL)
                .post(body)
                .addHeader("Authorization", "Bearer " + apiKey)
                .addHeader("Content-Type", "application/json")
                .build();

        Response response = client.newCall(request).execute();
        String responseBody = response.body().string();

        System.out.println(responseBody);
    }
}

这段代码向ChatGPT API发送一个完成请求,提示 "你好,我的名字是",并将响应体打印到控制台。你可以根据需要修改提示和其他参数。

第4步:设置请求主体
请求主体应该包含一个JSON对象,包含完成请求的参数。必需的参数是 "提示",它指定了要生成完成度的输入文本。你还可以设置可选参数,如 "温度"、"max_tokens "和 "top_p",以控制生成过程。

下面是一个完成请求JSON对象的例子:
{
    "prompt": "Hello, my name is",
    "temperature": 0.5,
    "max_tokens": 50,
    "top_p": 1,
    "frequency_penalty": 0,
    "presence_penalty": 0
}

你可以根据需要修改提示和其他参数。每个参数的含义如下:


- "prompt":要生成补全的输入文本。
- "temperature":控制生成的补语的随机性。更高的值会导致更多的随机性完成。
- "max_tokens":每个生成的补语中的最大标记数(单词或标点符号)。
- "top_p":控制生成的补语的多样性。较低的值会导致更多的完整性。
- "frequency_penalty":惩罚那些重复提示词或短语的完成品。
- "presence_penalty":惩罚那些包含提示中没有的单词或短语的填写。


第5步:处理API响应
发送API请求后,你将收到一个包含生成的完成度的JSON对象。响应格式如下:


{
    "choices": [
        {
            "text": "My name is John.",
            "index": 0,
            "logprobs": null,
            "finish_reason": "stop"
        },
        {
            "text": "My name is Sarah.",
            "index": 1,
            "logprobs": null,
            "finish_reason": "stop"
        },
        {
            "text": "My name is David.",
            "index": 2,
            "logprobs": null,
            "finish_reason": "stop"
        }
    ]
}


"choices"数组包含一个或多个完成度,每个完成度由一个具有以下字段的JSON对象表示:

"text":生成的完成度文本。
"index":完成度在生成的完成度列表中的索引。
"logprobs":完成度中的标记的日志概率,用于调试目的。
"finish_reason":完成度生成停止的原因。可能的值是 "stop"、"max_tokens"、"temperature "和 "top_p"。

你可以使用Gson或Jackson这样的JSON库来解析响应的JSON对象。下面是一个使用Gson的例子:

import com.google.gson.Gson;

public class ChatGPTClient {
    // ...
    
    public static void main(String[] args) throws Exception {
        // ...

        Gson gson = new Gson();
        ChatGPTResponse response = gson.fromJson(responseBody, ChatGPTResponse.class);
        for (ChatGPTCompletion completion : response.choices) {
            System.out.println(completion.text);
        }
    }
    
    private static class ChatGPTResponse {
        private ChatGPTCompletion[] choices;
    }
    
    private static class ChatGPTCompletion {
        private String text;
        private int index;
        private Object logprobs;
        private String finish_reason;
    }
}


这段代码使用Gson将响应的JSON对象解析成Java对象。ChatGPTResponse "类代表顶级的JSON对象,"ChatGPTCompletion "类代表每个完成对象。每个完成对象的 "文本 "字段被打印到控制台。

总结
在这篇文章中,我们展示了如何用Java来使用ChatGPT API。通过发送带有正确头信息和正文的HTTP请求,并解析JSON响应,你可以将ChatGPT模型的力量整合到你的Java应用程序中。