ChatGPT API有什么用,ChatGPT API 接入指南

蜗牛vps教程2023-07-04270

最近 ChatGPT 突然爆火。抱着好奇的心态我也去官网注册账号体验了一下,因为网站人数太多,一时半会竟然注册不了,不过最终还是成功注册了。 

在我和 ChatGPT 聊了十几分钟之后,这个东西令我大为震惊,虽然它有些地方显得笨笨的,带点机器人的味道,但是丝毫不影响我对它的喜爱。感叹之余我思考了一下,能不能将它接入到我们现有的应用中。于是我仔细浏览了一下 OpenAI 官网,果然已经提供了比较多的接口供我们使用。

准备工作

ChatGPT API 接入需要如下条件。

  1. 已成功注册 OpenAI 的账号。
  2. 创建 API KEY,这个 API KEY 是用于 HTTP 请求身份验证的,可以创建多个。如下图点击“Create new secret key“,注意这个创建之后需要马上复制好保存,关闭弹框之后就看不到了。

ChatGPT API有什么用,ChatGPT API 接入指南  第1张

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

ChatGPT API有什么用,ChatGPT API 接入指南  第2张

补全接口示例

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

  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 } } 复制代码

总结

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo6@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram