ChatGPT API有什么用,ChatGPT API 接入指南
最近 ChatGPT 突然爆火。抱着好奇的心态我也去官网注册账号体验了一下,因为网站人数太多,一时半会竟然注册不了,不过最终还是成功注册了。
在我和 ChatGPT 聊了十几分钟之后,这个东西令我大为震惊,虽然它有些地方显得笨笨的,带点机器人的味道,但是丝毫不影响我对它的喜爱。感叹之余我思考了一下,能不能将它接入到我们现有的应用中。于是我仔细浏览了一下 OpenAI 官网,果然已经提供了比较多的接口供我们使用。
准备工作
ChatGPT API 接入需要如下条件。
- 已成功注册 OpenAI 的账号。
- 创建 API KEY,这个 API KEY 是用于 HTTP 请求身份验证的,可以创建多个。如下图点击“Create new secret key“,注意这个创建之后需要马上复制好保存,关闭弹框之后就看不到了。
- 官方 API 文档链接 api-reference。
- 注意 API 调用是收费的,但是 OpenAI 已经为我们免费提供了18美元的用量,足够大家放心使用。
补全接口示例
该接口功能较多,支持最常用的问答功能。
- 请求方式,Post
- url,api.openai.com/v1/completi…
- 请求体 (json)。
{ "model": "text-davinci-003", "prompt": "Say this is a test", "max_tokens": 7, "temperature": 0, "top_p": 1, "n": 1, "stream": false } 复制代码
- 接口文档,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
作为序列/反序列化框架。编写单元测试对该接口进行请求,代码如下。
- 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(); 复制代码
- 请求实体类。
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; } 复制代码
- 请求方法。
使用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()); } } 复制代码
- 在
completion()
测试方法中调用上面的completion(String prompt)
方法
@Test public void completion() { try { chatGPT.completion("你能背诵多少位圆周率"); } catch (IOException e) { e.printStackTrace(); } } 复制代码
- 查看请求结果
{ "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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论