searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

OpenAI - API解读之ChatCompletions

2024-09-19 09:34:07
122
0

1 接口描述

- 描述
接口名称 对话完成
请求路径 /v1/chat/completions
功能描述 针对描述会话的消息列表,请求模型得到响应

2 请求参数

2.1 请求头参数

参数 示例值 描述
Authorization Bearer $OPEN_API_KEY 鉴权信息填入Api Key
Content-Type application/json

2.2 请求参数

参数名称 二级参数 三级参数 四级参数 类型 必选 描述
model string 模型ID,包括预置模型、用户自定义部署模型
messages array 对话列表,每个列表项为一个message objectmessage object中包含用户rolecontent两部分信息:role可选值为user、assistant、systemrolesystem时,不校验content空值,且messagesystem只能位于开头,即messages[0]位置roleuser时说明是用户提问,roleassistant时说明是模型回答,而content为实际的对话内容单轮/多轮对话中,最后一个messagerole必须为usercontent为用户输入的最新问题,其余结果除system角色外都为历史信息拼接送入messages中,assistantuserrole只能交替出现,assistant后只能跟useruser后只能跟assistant
- role string 对话角色,role类型枚举值:user、assistant、system
- content string/array 对话内容,内容目前有两种格式:string,arraystring类型:表示文本对话内容。array类型:表示多个对话内容列表,每个列表项为一个content object,每个content object包含type、image_url、text等信息。type可选值为text、image_url``typetext时,取text字段作为对话内容typeimage_url时,取image_url字段作为对话内容
- - type string 对话内容类型,type类型枚举值:text,image_url
- - text string 文本对话内容,typetext时传入。
- - image_url object 图片对话内容,typeimage_url时传入。
- - - url string 图片对话内容中的图片地址,目前可以为图片url或是 图片二进制数据的base64编码。
frequency_penalty float 频率惩罚。一般取值范围[-2, 2],默认值为0.0。它影响模型如何根据文本中词汇(token)的现有频率惩罚新词汇(token)。值大于0,会根据新标记在文本中的现有频率来惩罚新标记,从而降低模型逐字重复同一行的可能性。
max_tokens int 最大标记数目。一般取值范围 (0, 2048]。控制最大生成长度,超过该值则截断。
n int 1-n个choices
presence_penalty float 存在惩罚。一般取值范围[-2.0, 2.0]。它影响模型如何根据到目前为止是否出现在文本中来惩罚新token。值大于0,将通过惩罚已经使用的词,增加模型谈论新主题的可能性。
response_format object 返回格式
- type string 返回格式枚举值:text,json_object
seed int 随机种子。一般取值范围(0, 9223372036854775807]。用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。
service_tier string Beta
stop string/array 生成停止标识。当模型生成结果以stop中某个元素结尾时,停止文本生成。
stream bool 是否以流式接口的形式返回数据。默认为False,非流式。
stream_options object 流式选项,stream为True有效
- include_usage bool 是否在返回中包含usage,stream为True有效取值为True时,会在流式返回的最后一个chunk里返回usage信息,并该chunk中choices列表为空
temperature float 温度采样。一般取值范围 (0, 2)。控制生成的随机性,值比1大,则会生成更加随机的文本;值比1小,则生成的文本更加保守。
top_p int top-p 采样。一般取值范围 (0, 1]。控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。取值越大,生成的随机性越高;取值越低,生成的确定性越高。
user string 用户唯一身份ID

请求参数示例

{
  "model": "gpt-4o-mini",
  "stream": false,
  "messages": [
    {
      "role": "user",
      "content": "Hello!"
    }
  ]
}

3、请求返回

3.1 非流式返回

3.1.1 非流式正常返回

字段名称 二级字段 三级字段 字段类型 描述
id string 唯一标识符
choices string choices列表
- index int choice索引
- message object 模型生成的消息
- - role string 对话角色
- - content string 对话消息内容
- finish_reason string 模型停止生成标记的原因。stop: 模型生成遇到自然停止点或提供的停止序列;length: 达到请求中指定的最大标记数;content_filter:如果由于内容过滤器中的标志而省略了内容tool_calls/function_call: 模型调用了函数。
created int Unix时间戳(以秒为单位)。
model string 调用的模型名称。
object string 返回的对象类型。非流式返回始终为:chat.completion
service_tier string
system_fingerprint string Beta
usage object 请求使用情况的统计信息。
- completion_tokens int 生成token数。
- prompt_tokens int 输入token数。
- total_tokens int 使用的token总数(prompt + completion)。

返回结果示例

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "gpt-4o-mini",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?"
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

3.1.2 非流式异常返回

非流式异常返回时:

  • http code 返回非200。
  • http body 中返回 error 结构,error结构中包含code、type、message、param等信息,具体可见OpenAI接口文档中的error结构描述及错误码部分介绍。

错误结果示例

{
  "error": {
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "type": "rate_limit_error",
    "param": null,
    "code": "rate_limit_exceeded"
  }
}

3.2 流式返回

3.2.1 流式正常返回

字段名称 二级字段 三级字段 字段类型 描述
id string 唯一标识符
choices string choices列表
- index int choice索引
- delta object 模型生成的消息
- - role string 对话角色
- - content string 对话消息内容
- finish_reason string 模型停止生成标记的原因。stop: 模型生成遇到自然停止点或提供的停止序列;length: 达到请求中指定的最大标记数;content_filter:如果由于内容过滤器中的标志而省略了内容tool_calls/function_call: 模型调用了函数。
created int Unix时间戳(以秒为单位)。
model string 调用的模型名称。
object string 返回的对象类型。流式返回始终为:chat.completion.chunk
service_tier string
system_fingerprint string Beta
usage object 请求使用情况的统计信息。仅在stream_options: {"include_usage": true}设置时显示。如果存在,则它包含一个 null 值,但最后一个块包含整个请求的token使用情况的统计信息。
- completion_tokens int 生成token数。
- prompt_tokens int 输入token数。
- total_tokens int 使用的token总数(prompt + completion)。

返回结果示例

{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
....
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

​**stream_options.include_usageTrue 时多返回一条包含usage流式消息**​。

{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268199,"model":"gpt-4o-mini", "choices":[], "usage": {"prompt_tokens": 9,"completion_tokens": 120,"total_tokens": 129}}

3.2.2 流式异常返回

流式异常分为两种:

  • 如果在流式请求接收处理之前发生了异常,如鉴权、参数校验等问题,与普通的非流式一样返回http code,并带有error结构。
  • 如果在流式请求已经接收,会先对外返回流式请求连接建立的信息,此时http code200,而在后续模型流式返回过程中发生了异常,会在流失返回的chunk返回异常信息,并终止当前的流式请求。

4、请求示例代码

4.1 curl方式请求

curl --request POST \
  --url $OPEN_AI_HOST/v1/chat/completions \
  --header 'Accept: */*' \
  --header 'Accept-Encoding: gzip, deflate, br' \
  --header 'Authorization: Bearer $OPEN_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
	"model": "gpt-4o-mini",
	"messages": [
		{
			"role": "user",
			"content": "Hello"
		}
	]
}'

4.2 python方式请求

import json
import requests
URL = "$OPEN_AI_HOST/v1/chat/completions"
headers = {
    "Authorization": "Bearer $OPEN_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "gpt-4o-mini",
    "messages": [
        {"role": "user", "content": "Hello"}
    ]
    ,"stream": True
}
try:
    response = requests.post(URL, json=data, stream=True)
    if response.status_code != 200:
        print(response.json())
    else:
        # 流式
        for line in response.iter_lines(chunk_size=8192, decode_unicode=True):
            // 处理请求
        # 非流式直接处理
        message = response.json()["choices"][0]["message"]["content"]
except Exception as e:
    print(f"Exception: {e}")

4.3 openai python客户端示例代码

import openai
from openai import OpenAI
client = OpenAI(base_url="$OPEN_AI_HOST/v1", api_key="$OPEN_API_KEY")
messages = [
    {"role": "user", "content": "Hello"}
]
try:
    stream = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        stream=True 
    )
    # 流式
    for chunk in stream:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
except openai.APIStatusError as e:
    print(f"APIStatusError: {e.status_code}, {e.message}, {e.body}")
except openai.APIError as e:
    print(f"APIError: {e.body}")
except Exception as e:
    print(f"Exception: {e}")

5 参考文档

  • OpenAI 官网API接口:/docs/api-reference/introduction
  • OpenAI 官网文档:/api-reference/chat
  • GitHub openai cookbook:/openai/openai-cookbook
0条评论
作者已关闭评论
c****j
4文章数
0粉丝数
c****j
4 文章 | 0 粉丝
c****j
4文章数
0粉丝数
c****j
4 文章 | 0 粉丝
原创

OpenAI - API解读之ChatCompletions

2024-09-19 09:34:07
122
0

1 接口描述

- 描述
接口名称 对话完成
请求路径 /v1/chat/completions
功能描述 针对描述会话的消息列表,请求模型得到响应

2 请求参数

2.1 请求头参数

参数 示例值 描述
Authorization Bearer $OPEN_API_KEY 鉴权信息填入Api Key
Content-Type application/json

2.2 请求参数

参数名称 二级参数 三级参数 四级参数 类型 必选 描述
model string 模型ID,包括预置模型、用户自定义部署模型
messages array 对话列表,每个列表项为一个message objectmessage object中包含用户rolecontent两部分信息:role可选值为user、assistant、systemrolesystem时,不校验content空值,且messagesystem只能位于开头,即messages[0]位置roleuser时说明是用户提问,roleassistant时说明是模型回答,而content为实际的对话内容单轮/多轮对话中,最后一个messagerole必须为usercontent为用户输入的最新问题,其余结果除system角色外都为历史信息拼接送入messages中,assistantuserrole只能交替出现,assistant后只能跟useruser后只能跟assistant
- role string 对话角色,role类型枚举值:user、assistant、system
- content string/array 对话内容,内容目前有两种格式:string,arraystring类型:表示文本对话内容。array类型:表示多个对话内容列表,每个列表项为一个content object,每个content object包含type、image_url、text等信息。type可选值为text、image_url``typetext时,取text字段作为对话内容typeimage_url时,取image_url字段作为对话内容
- - type string 对话内容类型,type类型枚举值:text,image_url
- - text string 文本对话内容,typetext时传入。
- - image_url object 图片对话内容,typeimage_url时传入。
- - - url string 图片对话内容中的图片地址,目前可以为图片url或是 图片二进制数据的base64编码。
frequency_penalty float 频率惩罚。一般取值范围[-2, 2],默认值为0.0。它影响模型如何根据文本中词汇(token)的现有频率惩罚新词汇(token)。值大于0,会根据新标记在文本中的现有频率来惩罚新标记,从而降低模型逐字重复同一行的可能性。
max_tokens int 最大标记数目。一般取值范围 (0, 2048]。控制最大生成长度,超过该值则截断。
n int 1-n个choices
presence_penalty float 存在惩罚。一般取值范围[-2.0, 2.0]。它影响模型如何根据到目前为止是否出现在文本中来惩罚新token。值大于0,将通过惩罚已经使用的词,增加模型谈论新主题的可能性。
response_format object 返回格式
- type string 返回格式枚举值:text,json_object
seed int 随机种子。一般取值范围(0, 9223372036854775807]。用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。
service_tier string Beta
stop string/array 生成停止标识。当模型生成结果以stop中某个元素结尾时,停止文本生成。
stream bool 是否以流式接口的形式返回数据。默认为False,非流式。
stream_options object 流式选项,stream为True有效
- include_usage bool 是否在返回中包含usage,stream为True有效取值为True时,会在流式返回的最后一个chunk里返回usage信息,并该chunk中choices列表为空
temperature float 温度采样。一般取值范围 (0, 2)。控制生成的随机性,值比1大,则会生成更加随机的文本;值比1小,则生成的文本更加保守。
top_p int top-p 采样。一般取值范围 (0, 1]。控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。取值越大,生成的随机性越高;取值越低,生成的确定性越高。
user string 用户唯一身份ID

请求参数示例

{
  "model": "gpt-4o-mini",
  "stream": false,
  "messages": [
    {
      "role": "user",
      "content": "Hello!"
    }
  ]
}

3、请求返回

3.1 非流式返回

3.1.1 非流式正常返回

字段名称 二级字段 三级字段 字段类型 描述
id string 唯一标识符
choices string choices列表
- index int choice索引
- message object 模型生成的消息
- - role string 对话角色
- - content string 对话消息内容
- finish_reason string 模型停止生成标记的原因。stop: 模型生成遇到自然停止点或提供的停止序列;length: 达到请求中指定的最大标记数;content_filter:如果由于内容过滤器中的标志而省略了内容tool_calls/function_call: 模型调用了函数。
created int Unix时间戳(以秒为单位)。
model string 调用的模型名称。
object string 返回的对象类型。非流式返回始终为:chat.completion
service_tier string
system_fingerprint string Beta
usage object 请求使用情况的统计信息。
- completion_tokens int 生成token数。
- prompt_tokens int 输入token数。
- total_tokens int 使用的token总数(prompt + completion)。

返回结果示例

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "gpt-4o-mini",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?"
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

3.1.2 非流式异常返回

非流式异常返回时:

  • http code 返回非200。
  • http body 中返回 error 结构,error结构中包含code、type、message、param等信息,具体可见OpenAI接口文档中的error结构描述及错误码部分介绍。

错误结果示例

{
  "error": {
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "type": "rate_limit_error",
    "param": null,
    "code": "rate_limit_exceeded"
  }
}

3.2 流式返回

3.2.1 流式正常返回

字段名称 二级字段 三级字段 字段类型 描述
id string 唯一标识符
choices string choices列表
- index int choice索引
- delta object 模型生成的消息
- - role string 对话角色
- - content string 对话消息内容
- finish_reason string 模型停止生成标记的原因。stop: 模型生成遇到自然停止点或提供的停止序列;length: 达到请求中指定的最大标记数;content_filter:如果由于内容过滤器中的标志而省略了内容tool_calls/function_call: 模型调用了函数。
created int Unix时间戳(以秒为单位)。
model string 调用的模型名称。
object string 返回的对象类型。流式返回始终为:chat.completion.chunk
service_tier string
system_fingerprint string Beta
usage object 请求使用情况的统计信息。仅在stream_options: {"include_usage": true}设置时显示。如果存在,则它包含一个 null 值,但最后一个块包含整个请求的token使用情况的统计信息。
- completion_tokens int 生成token数。
- prompt_tokens int 输入token数。
- total_tokens int 使用的token总数(prompt + completion)。

返回结果示例

{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
....
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

​**stream_options.include_usageTrue 时多返回一条包含usage流式消息**​。

{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268199,"model":"gpt-4o-mini", "choices":[], "usage": {"prompt_tokens": 9,"completion_tokens": 120,"total_tokens": 129}}

3.2.2 流式异常返回

流式异常分为两种:

  • 如果在流式请求接收处理之前发生了异常,如鉴权、参数校验等问题,与普通的非流式一样返回http code,并带有error结构。
  • 如果在流式请求已经接收,会先对外返回流式请求连接建立的信息,此时http code200,而在后续模型流式返回过程中发生了异常,会在流失返回的chunk返回异常信息,并终止当前的流式请求。

4、请求示例代码

4.1 curl方式请求

curl --request POST \
  --url $OPEN_AI_HOST/v1/chat/completions \
  --header 'Accept: */*' \
  --header 'Accept-Encoding: gzip, deflate, br' \
  --header 'Authorization: Bearer $OPEN_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
	"model": "gpt-4o-mini",
	"messages": [
		{
			"role": "user",
			"content": "Hello"
		}
	]
}'

4.2 python方式请求

import json
import requests
URL = "$OPEN_AI_HOST/v1/chat/completions"
headers = {
    "Authorization": "Bearer $OPEN_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "gpt-4o-mini",
    "messages": [
        {"role": "user", "content": "Hello"}
    ]
    ,"stream": True
}
try:
    response = requests.post(URL, json=data, stream=True)
    if response.status_code != 200:
        print(response.json())
    else:
        # 流式
        for line in response.iter_lines(chunk_size=8192, decode_unicode=True):
            // 处理请求
        # 非流式直接处理
        message = response.json()["choices"][0]["message"]["content"]
except Exception as e:
    print(f"Exception: {e}")

4.3 openai python客户端示例代码

import openai
from openai import OpenAI
client = OpenAI(base_url="$OPEN_AI_HOST/v1", api_key="$OPEN_API_KEY")
messages = [
    {"role": "user", "content": "Hello"}
]
try:
    stream = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        stream=True 
    )
    # 流式
    for chunk in stream:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
except openai.APIStatusError as e:
    print(f"APIStatusError: {e.status_code}, {e.message}, {e.body}")
except openai.APIError as e:
    print(f"APIError: {e.body}")
except Exception as e:
    print(f"Exception: {e}")

5 参考文档

  • OpenAI 官网API接口:/docs/api-reference/introduction
  • OpenAI 官网文档:/api-reference/chat
  • GitHub openai cookbook:/openai/openai-cookbook
文章来自个人专栏
OpenAI
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0