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 请求
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 |
消息作者的角色。其中之一是system 、user 、assistant 。 |
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模型包括以下两种:
- DALL-E-2: 通过自然语言描述创建逼真的图像和艺术。
- DALL-E-3: 比DALL-E-2了解更多的细微差别和细节,能将想法转化为及其准确的图像。
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.