敞开生长之旅!这是我参与「日新计划 2 月更文应战」的第 2 天,点击检查活动概况

最近 ChatGPT 突然爆火。抱着猎奇的心态我也去官网注册账号体验了一下,由于网站人数太多,一时半会居然注册不了,不过最终仍是成功注册了。还没注册的朋友们能够参考一下这篇教程 OpenAI 推出超神 ChatGPT 注册攻略来了。写的很详细,我就不再说明晰。

在我和 ChatGPT 聊了十几分钟之后,这个东西令我大为震动,尽管它有些当地显得笨笨的,带点机器人的味道,可是丝毫不影响我对它的喜爱。感叹之余我思考了一下,能不能将它接入到咱们现有的运用中。所以我仔细阅读了一下 OpenAI 官网,果然已经提供了比较多的接口供咱们运用。

准备工作

ChatGPT API 接入需求如下条件。

  1. 已成功注册 OpenAI 的账号。
  2. 创建 API KEY,这个 API KEY 是用于 HTTP 恳求身份验证的,能够创建多个。如下图点击“Create new secret key“,留意这个创建之后需求立刻仿制好保存,封闭弹框之后就看不到了。

一文读懂 ChatGPT API 接入指南

  1. 官方 API 文档链接 api-reference。
  2. 留意 API 调用是收费的,可是 OpenAI 已经为咱们免费提供了18美元的用量,满足大家放心运用。

一文读懂 ChatGPT API 接入指南

补全接口示例

该接口功用较多,支撑最常用的问答功用。

  1. 恳求方式,Post
  2. url,api.openai.com/v1/completi…
  3. 恳求体 (json)。
{
  "model": "text-davinci-003",
  "prompt": "Say this is a test",
  "max_tokens": 7,
  "temperature": 0,
  "top_p": 1,
  "n": 1,
  "stream": false
}
  1. 接口文档,platform.openai.com/docs/api-re…

恳求参数解析

字段 说明
model 可选参数。言语模型,这儿选择的是text-davinci-003
prompt 必选参数。即用户的输入。
max_tokens 可选参数,默认值为 16。最大分词数,会影响回来成果的长度
temperature 可选参数,默认值为 1,取值 0-2。该值越大每次回来的成果越随机,即类似度越小。
top_p 可选参数,与temperature类似。
n 可选参数,默认值为 1。表示对每条prompt生成多少条成果。
stream 可选参数,默认值为false。表示是否回流部分成果。

恳求示例

本文运用OkHttp作为网络恳求结构,Moshi作为序列/反序列化结构。编写单元测验对该接口进行恳求,代码如下。

  1. OkHttp 的初始化。
private final OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .callTimeout(60, TimeUnit.SECONDS)
        .build();
  1. 恳求实体类。
private static class CompletionRequest {
    private String model = "text-davinci-003";
    private String prompt;
    private Integer max_tokens = 256;
    private float temperature = 0.5f;
    private Integer top_p = 1;
    private Integer n = 1;
    private Boolean stream = false;
    private Boolean logprobs;
    private String stop;
}
  1. 恳求方法。

运用OkHttp发送恳求。需留意所有的 Post 恳求需求添加头字段Authorization,值为Bearer YOUR_API_KEY来验证身份。

public void completion(String prompt) throws IOException {
    CompletionRequest completionRequest = new CompletionRequest();
    completionRequest.setPrompt(prompt);
    String reqJson = moshi.adapter(CompletionRequest.class).toJson(completionRequest);
    System.out.println("reqJson: " + reqJson);
    Request request = new Request.Builder()
            .url("https://api.openai.com/v1/completions")
            // 将 API_KEY 替换成你自己的 API_KEY
            .header("Authorization", "Bearer " + API_KEY)
            .post(RequestBody.create(MEDIA_TYPE_JSON, reqJson))
            .build();
    try (Response response = okHttpClient.newCall(request).execute()) {
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
        System.out.println(response.body().string());
    }
}
  1. completion()测验方法中调用上面的completion(String prompt)方法
@Test
public void completion() {
    try {
        chatGPT.completion("你能背诵多少位圆周率");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  1. 检查恳求成果
{
  "id": "cmpl-6j9PhjAom9GyxBNCVacvckcVNKVZg",
  "object": "text_completion",
  "created": 1676218965,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "?\n\n我能够背诵50位圆周率:3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 21,
    "completion_tokens": 73,
    "total_tokens": 94
  }
}

总结

通过上面一个例子,信任大家已经学会了如何将 ChatGPT API 接入到自己的运用了。OpenAI 还提供了其他有用的接口,这儿就不一个一个说明晰,大家能够前往官网自行检查文档。

写在最终

假如你对我感兴趣,请移步到 blogss.cn ,或重视大众号:程序员小北,进一步了解。

  • 假如本文帮助到了你,欢迎点赞和重视,这是我继续创造的动力 ❤️
  • 由于作者水平有限,文中假如有过错,欢迎在评论区纠正 ✔️
  • 本文首发于,未经许可制止转载 ️