手把手教你如何通过API使用OpenAI ChatGPT最新模型

OpenAI Chat Completion API 的申请与使用指南

OpenAI ChatGPT 是一款极为强大的人工智能对话系统,用户只需输入提示词,便可在几秒钟内便生成流畅而自然的响应。凭借其卓越的语言理解与生成能力,ChatGPT 在行业中已然脱颖而出,现今已广泛地应用于各行各业,其影响力日渐提升。不论是日常对话、创意写作,还是专业咨询和程序编程,ChatGPT 都能提供出人意料的智能支持,极大地提升了人类的工作效率和创造力。

本文档旨在详尽介绍 OpenAI Chat Completion API 的操作流程,借助此工具,我们可以轻松享用官方的 OpenAI ChatGPT 的对话功能。

注册试用链接

注册试用链接

申请流程

欲使用 OpenAI Chat Completion API,首先可前往 OpenAI Chat Completion API 页面,并点击「Acquire」按钮以获取所需的凭证:

若您尚未登入或注册,页面会自动跳转至登录界面,邀请您进行注册与登录,完成后便会自动返回当前页面。

首次申请时您将获得免费额度,可免费体验该 API。

基本使用

紧接着,您可以在界面中填写相应内容,如下图所示:

在首次使用此接口时,我们至少需要填写三个字段:其一为 authorization,可直接在下拉菜单中选择。第二个参数为 modelmodel 表示我们所选择的 OpenAI ChatGPT 官方模型类型,这里提供了 20 种模型,具体信息请参阅我们列出的模型。最后一个参数为 messagesmessages 是我们所输入的提问词数组,表示可以同时上传多个提问,每条提问均包含 rolecontent,其中 role 标示提问者的身份属性,我们提供了三种角色:userassistantsystem;而 content 则是我们实际的提问内容。

您还可以注意到右侧有相应的调用代码生成,您可以直接复制代码进行运行,或点击「Try」按钮进行测试。

调用后,我们可以看到返回结果如下:

json代码解读复制代码{   "id": "chatcmpl-9k1idCCQuteN6Zu7Kv35TrG6DHKNt",   "object": "chat.completion.chunk",   "created": 1720756723,   "model": "gpt-4",   "system_fingerprint": "fp_abc28019ad",   "choices": [     {       "index": 0,       "message": {         "role": "assistant",         "content": "Hello! How can I assist you today?"       },       "finish_reason": "stop"     }   ],   "recipient": "all",   "usage": {     "prompt_tokens": 8,     "completion_tokens": 9,     "total_tokens": 17   } }

返回结果中包含多个字段,具体介绍如下:

  • id:用于唯一标识此次对话任务的 ID。

  • model:所选择的 OpenAI ChatGPT 官方模型。

  • choices:ChatGPT 针对提问给予的回答信息。

  • usage:本次问答所涉及 token 的统计信息。

其中 choices 包含了 ChatGPT 的回答信息,从中可以获悉,如下图所示。

可以指出的是,choices 里的 content 字段包含了 ChatGPT 所给出的具体答复。

流式响应

此接口亦支持流式响应,这对网页的接入极为有利,能够实现逐字展现效果。

若希望实现流式返回响应,则可在请求头中将 stream 参数更改为 true

如图所示的修改会需要相应调整才能支持流式响应。

当您将 stream 修改为 true 后,API 将逐行返回对应的 JSON 数据,我们需在代码层面做相应调整以获取逐行的结果。

Python 示例代码调用如下:

python代码解读复制代码import requests  url = "https://api.acedata.cloud/openai/chat/completions"  headers = {     "accept": "application/json",     "authorization": "Bearer {token}",     "content-type": "application/json" }  payload = {     "model": "gpt-4",     "messages": [{"role":"user","content":"hello"}],     "stream": True }  response = requests.post(url, json=payload, headers=headers) print(response.text)

输出效果如下:

json代码解读复制代码data: {"choices": [{"delta": {"role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": "Hi", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": " there", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": "!", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": " How", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": " can", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": " I", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": " assist", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": " you", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": " today", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"content": "?", "role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"role": "assistant"}, "index": 0}], "created": 1721007348, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: {"choices": [{"delta": {"role": "assistant"}, "finish_reason": "stop", "index": 0}], "created": 1721007349, "id": "chatcmpl-YzczYjVhNjhjMzMwNDQ5MDkyNGYzOGZjZGE1ZGQ5OGU", "model": "gpt-4", "object": "chat.completion.chunk", "recipient": "all"}  data: [DONE]

在这个响应中,您能看到多个 data,而 data 中的 choices 便是最新的回复内容,和前文描述一致。choices 中的新回复内容,您可以依此将其接入到您的系统中。同时,流式响应的结束是基于 data 的内容判定的,当内容为 [DONE] 时,便表示流式响应已全部结束。返回的 data 结果同样包含多个字段,具体介绍如下:

  • id:用于唯一标识此次对话任务的 ID。

  • model:所选择的 OpenAI ChatGPT 官方模型。

  • choices:ChatGPT 针对提问给予的回答信息。

JavaScript 亦支持流式调用,以下是 Node.js 的代码示例:

javascript代码解读复制代码const options = {   method: "post",   headers: {     accept: "application/json",     authorization: "Bearer {token}",     "content-type": "application/json",   },   body: JSON.stringify({     model: "gpt-4",     messages: [{ role: "user", content: "hello" }],     stream: true,   }), };  fetch("https://api.acedata.cloud/openai/chat/completions", options)   .then((response) => response.json())   .then((response) => console.log(response))   .catch((err) => console.error(err));

Java 示例代码如下:

java代码解读复制代码JSONObject jsonObject = new JSONObject(); jsonObject.put("model", "gpt-4"); jsonObject.put("messages", [{"role":"user","content":"hello"}]); jsonObject.put("stream", true); MediaType mediaType = "application/json; charset=utf-8".toMediaType(); RequestBody body = jsonObject.toString().toRequestBody(mediaType); Request request = new Request.Builder()   .url("https://api.acedata.cloud/openai/chat/completions")   .post(body)   .addHeader("accept", "application/json")   .addHeader("authorization", "Bearer {token}")   .addHeader("content-type", "application/json")   .build();  OkHttpClient client = new OkHttpClient(); Response response = client.newCall(request).execute(); System.out.print(response.body!!.string())

其他语言可按自身需求进行改写,基本原理一致。

多轮对话

若您想要接入多轮对话功能,则需对 messages 字段上传多个提问,这些提问的具体示例如下图所示:

Python 示例调用代码如下:

python代码解读复制代码import requests  url = "https://api.acedata.cloud/openai/chat/completions"  headers = {     "accept": "application/json",     "authorization": "Bearer {token}",     "content-type": "application/json" }  payload = {     "model": "gpt-4",     "messages": [{"role":"user","content":"Hello"},{"role":"assistant","content":"Hi! How can I assist you today?"},{"role":"user","content":"What I say just now?"}] }  response = requests.post(url, json=payload, headers=headers) print(response.text)

通过上传多个提问,您便能轻松实现多轮对话,并获取如下回答:

json代码解读复制代码{   "choices": [     {       "index": 0,       "message": {         "role": "assistant",         "content": "You said, \"Hello.\""       },       "finish_reason": "stop"     }   ],   "created": 1721323012,   "id": "chatcmpl-NWZmOTA5MDlkZjBjNDRjNGEwMzRjYzA5NmM1MzQwMWY",   "model": "gpt-4",   "object": "chat.completion.chunk",   "recipient": "all",   "usage": {     "prompt_tokens": 31,     "completion_tokens": 6,     "total_tokens": 37   } }

可以观察到,choices 中的信息与基本使用的内容一致,包括 ChatGPT 针对多个对话进行回复的具体内容,这样便能依据众多对话内容准确回答相应的问题。

对接 OpenAI-Python

OpenAI Chat Completion API 服务的上游是官方的 OpenAI 服务,具体可参考官方的 OpenAI-Python,以下简要介绍如何使用官方提供的服务。

  1. 首先需搭建本地的 Python 环境,您可通过谷歌搜索相关教程。

  2. 下载并安装开发环境,例如 VSCode 编辑器。

  3. 配置 OpenAI 的环境变量。

  • 在项目文件夹中,创建一个名为 .env 的文件并保存。

  • .env 文件内容应为:

json代码解读复制代码OPENAI_API_KEY="sk-xxx" OPENAI_BASE_URL="https://api.acedata.cloud/openai"  # 再次提醒:若使用官网OpenAI的key,请确保不使用此地址。

请用您的密钥替换 sk-xxxOPENAI_BASE_URL 是访问 OpenAI 代理接口的地址。

  1. 安装项目所需的依赖包:

shell代码解读复制代码pip install openai

在 Mac OS 中,命令为:

shell代码解读复制代码pip3 install openai

  1. 创建示例源代码文件

假定我们创建一个示例代码 index.py,具体内容如下:

python代码解读复制代码import os from openai import OpenAI   client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))  response = client.chat.completions.create(     messages=[         {             "role": "user",             "content": "hello",         }     ],     model="gpt-4", )  print(response.text)

联网模型

gpt-3.5-browsing 和 gpt-4-browsing 模型与其他模型有所不同,它们能根据提问词进行在线搜索,并相应调整结果返回给您。以下将通过具体示例演示联网功能,接下来可在 OpenAI Chat Completion API 界面填写相应内容,如下图所示:

同时,您还可以注意到右侧生成相应的调用代码,您可以直接复制代码进行运行,或点击「Try」按钮进行测试。

调用之后,我们发现返回结果如下:

json代码解读复制代码{   "choices": [     {       "index": 0,       "message": {         "role": "assistant",         "content": "For the latest news in China today, you can check major news websites such as:\n\n- [BBC News China](https://www.bbc.com/news/world/asia/china)\n- [CNN China News](https://edition.cnn.com/china)\n- [Reuters China](https://www.reuters.com/news/archive/china-news)\n\nThese sources will have up-to-date information on current events in China."       },       "finish_reason": "stop"     }   ],   "created": 1721009347,   "id": "chatcmpl-YzA0M2RjZDVkYThlNDkxNTkzOThmZWQ4OGMzNzdhNzA",   "model": "gpt-4-browsing",   "object": "chat.completion.chunk",   "recipient": "all",   "usage": {     "prompt_tokens": 325,     "completion_tokens": 82,     "total_tokens": 407   } }

可以明显看到,choices 中的回答信息是依据联网查询结果生成的,且给出了相关链接,需通过 markdown 语法进行渲染,以获得最佳体验,最终也展现出了我们模型联网功能的强大优势。

视觉模型

gpt-4o 是 OpenAI 开发的一款多模态大型语言模型,它在 GPT-4 的基础上增加了视觉理解能力。此模型能够同时处理文本与图像输入,达成跨模态的理解与生成。

使用 gpt-4o 模型处理文本的方式与前述基本使用内容相似,下面将简要介绍如何运用该模型的图像处理能力。

使用 gpt-4o 模型进行图像处理的方式是,通过在原有的 content 内容上增添一个 type 字段,以识别上传的是文本還是图片,从而利用 gpt-4o 模型的图像处理能力。以下主要通过 Curl 和 Python 两种方式来调用该功能。

  • Curl 脚本方式

css代码解读复制代码curl -X POST 'https://api.acedata.cloud/openai/chat/completions' \ -H 'accept: application/json' \ -H 'authorization: Bearer {token}' \ -H 'content-type: application/json' \ -d '{     "model": "gpt-4o",     "messages": [       {         "role": "user",         "content": [           {             "type": "text",             "text": "What'\''s in this image?"           },           {             "type": "image_url",             "image_url": {               "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"             }           }         ]       }     ]   }'

  • Python 脚本方式

python代码解读复制代码import requests  url = "https://api.acedata.cloud/openai/chat/completions"  headers = {     "accept": "application/json",     "authorization": "Bearer {token}",     "content-type": "application/json" }  payload = {     "model": "gpt-4o",     "messages": [         {             "role": "user",             "content": [                 {                     "type": "text", "text": "What's in this image?"                 },                 {                     "type": "image_url",                     "image_url": {                         "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"                     }                 },             ],         }     ] }  response = requests.post(url, json=payload, headers=headers) print(response.text)

最终您将获得如下结果,结果中的字段信息与前述一致,具体如下:

json代码解读复制代码{   "id": "chatcmpl-123",   "object": "chat.completion",   "created": 1677652288,   "model": "gpt-4-vision-preview",   "system_fingerprint": "fp_44709d6fcb",   "choices": [     {       "index": 0,       "message": {         "role": "assistant",         "content": "\n\nThis image shows a wooden boardwalk extending through a lush green marshland."       },       "logprobs": null,       "finish_reason": "stop"     }   ],   "usage": {     "prompt_tokens": 9,     "completion_tokens": 12,     "total_tokens": 21   } }

可见回答的内容是依据所上传的图片生成的,因此无论您采用何种方式,都能轻松使用 gpt-4o 模型的文本与图像处理能力。

此外,另有一款低成本的模型,称为 gpt-4o-mini。gpt-4o-mini 是 OpenAI 最新推出的大型语言模型,除响应速度快之外,其价格亦更为亲民,且同样支持多模态。视觉功能的使用可参考前文 gpt-4o 模型的使用指导。

错误处理

在调用 API 时,如遇到错误,API 会返回相应的错误代码与信息。例如:

  • 400 token_mismatched:请求错误,可能由于缺少或无效的参数。

  • 400 api_not_implemented:请求错误,可能由于缺少或无效的参数。

  • 401 invalid_token:未授权,验证码无效或缺失。

  • 429 too_many_requests:请求过多,超出请求限度。

  • 500 api_error:内部服务器错误,服务器出现问题。

错误响应示例

json代码解读复制代码{   "success": false,   "error": {     "code": "api_error",     "message": "fetch failed"   },   "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89" }

结论

通过本文档,您已了解到如何轻松地使用 OpenAI Chat Completion API 实现官方 OpenAI ChatGPT 的对话功能。希望此文档能帮助您更好地对接与使用该 API。如有任何疑问,请随时联系到我们的技术支持团队。





分享一个国内免费使用GPT4.0的AI智能问答工具:智答专家。支持AI文本、作图、语音、Sora视频。无需魔法,亲测有效,点击访问

标签:OpenAI,ChatGPT,API
来源:智答专家
发布时间:2024-08-27 16:04