NAV
shell python

APIGPT.Cloud - OpenAI 开发文档

你可以通过任何语言的 HTTP 请求与 API 进行交互,可以使用OpenAI的官方 Python 绑定、官方 Node.js 库或其他社区维护的库。

要安装官方 Python 绑定,请运行以下命令:

pip install openai

要安装官方 Node.js 库,请在你的 Node.js 项目目录中运行以下命令:

npm install openai

当您在API中需要开启使用stream模式时,推荐用OpenAI官方的SDK来调用接口,避免繁琐的数据解析问题。

01 认证

OpenAI API 使用 API 密钥进行身份验证。请访问你的 App 页面,以获取你在请求中使用的 API 密钥。

请记住,你的 API 密钥是一个秘密!不要与他人分享它,也不要在任何客户端代码(浏览器、应用程序)中公开它。生产请求必须通过你自己的后端服务器路由,你的 API 密钥可以从环境变量或密钥管理服务中安全加载。

所有 API 请求都应该在 API-KEY HTTP 头中包含你的 API 密钥,如下所示: api-key: <替换成从APIGPT.CLOUD创建的OpenAI APP Key>

02 发送请求

你可以将下面的命令粘贴到终端中以运行你的第一个 API 请求。请确保将 替换为你的秘密 API 密钥。

发送你的第一个 API 请求

curl https://openai.pgpt.cloud/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
 "messages": [{"role": "user", "content": "Say this message is from apigpt.cloud!"}],
 "temperature": 0.7
}'
#你也可以用Python代码来发送第一个 API 请求
import openai
openai.api_key = '<API_KEY>'
openai.api_base = 'https://openai.pgpt.cloud/v1'
res = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello world"}],
    temperature=1,
    max_tokens=1000,
)
print(res)

这个请求查询了 gpt-3.5-turbo 模型,以完成以 "Say this message is from apigpt.cloud!" 为提示开始的文本。

如果你会收到类下面JSON格式的数据响应,这说明你的请求成功了

{
    "id":"chatcmpl-7SKQgp3ry5w9ZB0A3mMcvYOFB1VYG",
    "object":"chat.completion",
    "created":1686986070,
    "model":"gpt-35-turbo",
    "choices":[
        {
            "index":0,
            "finish_reason":"stop",
            "message":{
                "role":"assistant",
                "content":"Hello, this message is from apigpt.cloud! How may I assist you today?"
            }
        }
    ],
    "usage":{
        "completion_tokens":18,
        "prompt_tokens":18,
        "total_tokens":36
    }
}

我们可以在收到的请求里看到 finish_reason 是 stop,这意味着 API 返回了模型生成的完整完成。在上面的请求中,我们只生成了一条消息,但是你可以设置 n 参数来生成多个消息选项。

03 Chat APIs

给定一个包含对话的消息列表,模型将返回一个响应。

API - Create chat completion

POST https://openai.pgpt.cloud/v1/chat/completions

为给定的聊天对话创建一个模型响应。

Request body

Create chat completion 请求示范

import openai
openai.api_key = "<API_KEY>"
openai.api_base = 'https://openai.pgpt.cloud/v1'
res = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
  ]
)
print(res)
curl https://openai.pgpt.cloud/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
 "messages": [{"role": "user", "content": "You are a helpful assistant."}],
 "temperature": 0.7
}'

Create chat completion 请求示范打印结果

{
    "id":"chatcmpl-7Tl47vuq1rKS4XlcV7IihageYc514",
    "object":"chat.completion",
    "created":1687326787,
    "model":"gpt-35-turbo",
    "choices":[
        {
            "index":0,
            "finish_reason":"stop",
            "message":{
                "role":"assistant",
                "content":"Thank you! How may I assist you today?"
            }
        }
    ],
    "usage":{
        "completion_tokens":10,
        "prompt_tokens":14,
        "total_tokens":24
    }
}

参数 - model string Required

要使用的模型ID。目前我们支持并推荐用 gpt-3.5-turbo, gpt-3.5-turbo-16k, gpt-4,gpt-4-32k, gpt-4-turbo, gpt-4-tubo-vision

其中 gpt-4-turbo-vision 融合了视觉数据,实现了更进阶的图像理解,不仅仅是认识图片中的物件,更能理解上下文和细节,比如写出详细的图片标题、提供丰富的语意描述、回答有关视觉内容的问题等。示例见右侧请求示范。

gpt-4-turbo-vision 请求示范

from openai import OpenAI
import os

base_url = 'https://openai.pgpt.cloud/v1'
api_key = os.getenv("API_KEY")

openai = OpenAI(api_key=api_key, base_url=base_url)

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text",
             "text":
                 """
                 用关键词描述图片, 输出格式为:

                 第一张图片的关键词描述:...
                 ...
                 第N张图片的关键词描述:...
                 """
             },
            {"type": "image_url", "image_url": {"url": "https://dalleproduse.blob.core.windows.net/private/images/e9113ac5-1a91-467f-b751-7f9e746c5ae9/generated_00.png?se=2024-02-05T03%3A19%3A22Z&sig=M5y1Npoovxvp1CQslKGnwrQ3Pk3IbY%2Biwjk9MD3Z%2Bfo%3D&ske=2024-02-07T17%3A32%3A21Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2024-01-31T17%3A32%3A21Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"}},
            # *image_urls
        ],
    }
]

response = openai.chat.completions.create(
    model='gpt-4-turbo-vision',
    messages=messages,
    max_tokens=1000,
    temperature=0,
    stream=False
)

print(response)
curl https://openai.pgpt.cloud/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
 "model": "gpt-4-turbo-vision",
 "messages": [{"role": "user", "content": [{"type": "text", "text": "用关键词描述图片"}, {"type": "image_url", "image_url": {"url": "https://dalleproduse.blob.core.windows.net/private/images/e9113ac5-1a91-467f-b751-7f9e746c5ae9/generated_00.png?se=2024-02-05T03%3A19%3A22Z&sig=M5y1Npoovxvp1CQslKGnwrQ3Pk3IbY%2Biwjk9MD3Z%2Bfo%3D&ske=2024-02-07T17%3A32%3A21Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2024-01-31T17%3A32%3A21Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"}}]}],
 "temperature": 0.7
}'

参数 - messages array Required

到目前为止,对话包含的消息列表

消息 message 的数据结构:

参数 类型 是否必须 描述
role string Required 消息作者的角色。其中之一是systemuserassistant
content string Optional 消息的内容。除了带有函数调用的assistant,所有消息都需要 content
name string Optional content 作者的姓名。姓名可以包含a-z、A-Z、0-9和下划线,最长长度为64个字符。

参数 - temperature number Optional Defaults to 1

要使用的采样温度,介于0和2之间。较高的值(如0.8)会使输出更加随机,而较低的值(如0.2)会使输出更加集中和确定性。

参数 stream boolean Optional Defaults to false

如果设置了此选项,将发送部分消息增量,就像在 ChatGPT 中一样。令牌将作为数据类型的服务器发送的事件逐步发送,一旦可用,流将以 data: [DONE] 消息终止。

参数 max_tokens integer Optional Defaults to inf

在聊天补全中生成的最大令牌数。 输入令牌和生成令牌的总长度受模型上下文长度的限制。

参数 tools array Optional Default to null

模型可能调用的工具列表。 目前,仅支持函数作为工具。 使用它来提供模型可以为其生成 JSON 输入的函数列表。

参数 类型 是否必须 描述
type string Required tool的类型,仅支持function
function object Required 函数定义
function.description string Optional 对函数功能的描述,模型使用它来选择何时以及如何调用该函数。
function.name string Required 函数名
function.parameters object Optional 函数要接收的参数

Functions请求示范

curl https://openai.pgpt.cloud/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "user",
      "content": "What is the weather like in Boston?"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_current_weather",
        "description": "Get the current weather in a given location",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "The city and state, e.g. San Francisco, CA"
            },
            "unit": {
              "type": "string",
              "enum": ["celsius", "fahrenheit"]
            }
          },
          "required": ["location"]
        }
      }
    }
  ],
  "tool_choice": "auto"
}'
from openai import OpenAI
base_url = 'https://openai.pgpt.cloud/v1'
api_key = os.getenv("API_KEY")

client = OpenAI(api_key=api_key, base_url=base_url)

tools = [
  {
    "type": "function",
    "function": {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA",
          },
          "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
        },
        "required": ["location"],
      },
    }
  }
]
messages = [{"role": "user", "content": "What's the weather like in Boston today?"}]
completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=messages,
  tools=tools,
  tool_choice="auto"
)

print(completion)

参数 tool_choice string Optional Default to 'auto'

控制模型调用哪个函数(如果有)。 none 表示模型不会调用函数而是生成消息。 auto 意味着模型可以在生成消息或调用函数之间进行选择。 通过 {"type": "function", "function": {"name": "my_function"}} 指定特定函数会强制模型调用该函数。

当不存在任何函数时,none 是默认值。 如果存在函数,则 auto 是默认值。

参数 functions array Optional Default to null

已弃用,取而代之的是 tools。

参数 function_call string Optional Default to 'auto'

已弃用,取而代之的是 tool_choice。

04 Completions APIs

根据提示,模型将返回一个或多个预测完成,并且还可以返回每个位置替代标记的概率。

API - Create completion

POST https://openai.pgpt.cloud/v1/completions

Request body

Create completion 请求示范

import openai
openai.api_key = '<API_KEY>'
openai.api_base = 'https://openai.pgpt.cloud/v1'
res = openai.Completion.create(
  model="gpt-3.5-turbo-instruct",
  prompt="I am a",
  max_tokens=7,
  temperature=0
)
print(res)
curl https://openai.pgpt.cloud/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <APK_KEY>" \
-d '{
    "model": "gpt-3.5-turbo-instruct",
    "prompt": "I am a",
    "max_tokens": 7,
    "temperature": 0
  }'

Create completion 请求示范打印结果

{
  "id": "cmpl-7TkgRTfjrz80goegsOC2nrkzi1WPm",
  "object": "text_completion",
  "created": 1687325319,
  "model": "gpt-35-turbo-instruct",
  "choices": [
    {
      "text": " 20 year old female and I",
      "index": 0,
      "finish_reason": "length",
      "logprobs": null
    }
  ],
  "usage": {
    "completion_tokens": 7,
    "prompt_tokens": 3,
    "total_tokens": 10
  }
}

参数 - model string Required

要使用的模型ID。目前我们支持并推荐用 gpt-3.5-turbo-instruct

参数 - prompt string or array Required

要为其生成完成(completions)的提示,可以以字符串、字符串数组、标记数组或标记数组的数组形式进行编码。

请注意,在训练期间,模型所看到的文档分隔符为 "<|endoftext|>"

参数 max_tokens integer Optional Defaults to inf

在文本补全中生成的最大令牌数。 输入令牌和生成令牌的总长度受模型上下文长度的限制。

参数 - temperature number Optional Defaults to 1

要使用的采样温度,介于0和2之间。较高的值(如0.8)会使输出更加随机,而较低的值(如0.2)会使输出更加集中和确定性。

参数 stream boolean Optional Defaults to false

如果设置了此选项,将发送部分消息增量,就像在 ChatGPT 中一样。令牌将作为数据类型的服务器发送的事件逐步发送,一旦可用,流将以 data: [DONE] 消息终止。

05 Embeddings APIs

获取给定输入的矢量表示,以便机器学习模型和算法可以轻松处理。

API - Create embeddings

POST https://openai.pgpt.cloud/v1/embeddings

创建一个表示输入文本的嵌入向量。

Request body

Create embeddings 示范请求

import openai
openai.api_key = '<API_KEY>'
openai.api_base = 'https://openai.pgpt.cloud/v1'
res = openai.Embedding.create(
  model="text-embedding-ada-002",
  input="The food was delicious and the waiter..."
)
print(res)
curl https://openai.pgpt.cloud/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
    "input": "The food was delicious and the waiter...",
    "model": "text-embedding-ada-002"
  }'

Create embeddings 示范请求打印结果

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "embedding": [
        0.0023064255,
        -0.009327292,
        .... (1536 floats total for ada-002)
        -0.0028842222,
      ],
      "index": 0
    }
  ],
  "model": "text-embedding-ada-002",
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 8
  }
}

参数 - model string Required

要使用的模型ID。目前我们支持并推荐用 text-embedding-ada-002

参数 - input string or array Required

要嵌入的输入文本,可以以字符串或标记数组的形式进行编码。要在单个请求中嵌入多个输入,请传递字符串数组或标记数组的数组。每个输入的标记数不能超过模型的最大输入标记数(对于text-embedding-ada-002模型,最大输入标记数为8191个)。

06 其他 APIs

ChatGPT 官方支持的其他 API 支持情况如下,如果你有需要,请扫描左方二维码来联系我们。

Fine-tunes

在规划中

Edits

暂未支持

Images

PGPT 支持 OpenAI DALL-E接口,这是OpenAI官方训练出的根据文本说明创建图像的人工智能系统。

接入的DALL-E模型包括以下两种:

API - Create images

POST https://openai.pgpt.cloud/v1/images/generations

Request body

Create image 请求示范

# openai < 1.0
import openai
openai.api_key = '<YOUR_API_KEY>'
openai.api_base = 'https://openai.pgpt.cloud/v1'
generation_response = openai.Image.create(
    prompt='一团火焰',    # Enter your prompt text here
    size='1024x1024',
    n=1,
    model='dall-e-3'
)
print(generation_response)
# openai >= 1.0
from openai import OpenAI

api_key = '<YOUR_API_KEY>'
base_url = 'https://openai.pgpt.cloud/v1'

client = OpenAI(api_key=api_key, base_url=base_url)
generation_response = client.images.generate(
    # Enter your prompt text here
    prompt='Long exposure image capturing the mesmerizing '
           'trails of stars above a tranquil mountain landscape.',
    model='dall-e-3',
    size='1024x1024',
    n=1
)
print(generation_response)
curl -X POST https://openai.pgpt.cloud/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <APK_KEY>" \
-d '{
    "model": "dall-e-3",
    "prompt": "一团火焰",
    "size": "1024x1024",
    "n": 1
  }'

Create image 请求示范打印结果

{
  "created": 1716862564,
  "data": [
    {
      "b64_json": null,
      "revised_prompt": "a ball of fire",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/0d06c6d3-5279-44a7-a596-0941573cd02a/generated_00.png?se=2024-05-29T02%3A16%3A13Z&sig=a4vKF1k8oVqlNmij8EISHkFI6dhPcTe9h5Qvb2U4s9U%3D&ske=2024-05-31T00%3A01%3A35Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-05-24T00%3A01%3A35Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02",
      "content_filter_results": {
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      },
      "prompt_filter_results": {
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "profanity": {
          "detected": false,
          "filtered": false
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      }
    }
  ]
}
参数 - model string Required

要使用的模型ID。目前我们支持并推荐用 dall-e-2, dall-e-3

参数 - prompt string Required

提示词,用于生成图片

参数 - size string Required

指定图像的尺寸,目前仅支持 1024x1024、1024x1792 或 1792x1024 像素

参数 - n int Optional default t0 1

指定生成的图片数量。

在一次请求中,dall-e-2支持最多10张图片,dall-e-3仅支持生成1张图片

Audio

暂未支持

Files

暂未支持

Moderations

暂未支持

错误代码

Error Code Meaning
400 Invalid request: there was an issue with the format or content of your request.
401 Unauthorized: there's an issue with your API key.
403 Forbidden: your API key does not have permission to use the specified resource.
404 Not found: the requested resource was not found.
429 Your account has hit a rate limit.
500 An unexpected error has occurred internal to Anthropic's systems.
529 Your API is temporarily overloaded.

When receiving a streaming response via SSE, it's possible that an error can occur after returning a 200 response, in which case error handling wouldn't follow these standard mechanisms.