对话Chat V2
更新时间:2024-11-05
本文介绍了对话Chat V2版本相关API及使用。
功能介绍
调用本接口,发起一次对话请求。
支持模型列表
模型名称 | 模型版本 | model 参数值 |
---|---|---|
ERNIE 4.0 | ERNIE-4.0-8K-Latest | ernie-4.0-8k-latest |
ERNIE 4.0 | ERNIE-4.0-8K-Preview | ernie-4.0-8k-preview |
ERNIE 4.0 | ERNIE-4.0-8K | ernie-4.0-8k |
ERNIE 4.0 Turbo | ERNIE-4.0-Turbo-8K-Latest | ernie-4.0-turbo-8k-latest |
ERNIE 4.0 Turbo | ERNIE-4.0-Turbo-8K-Preview | ernie-4.0-turbo-8k-preview |
ERNIE 4.0 Turbo | ERNIE-4.0-Turbo-8K | ernie-4.0-turbo-8k |
ERNIE 4.0 Turbo | ERNIE-4.0-Turbo-128K | ernie-4.0-turbo-128k |
ERNIE 3.5 | ERNIE-3.5-8K-Preview | ernie-3.5-8k-preview |
ERNIE 3.5 | ERNIE-3.5-8K | ernie-3.5-8k |
ERNIE 3.5 | ERNIE-3.5-128K | ernie-3.5-128k |
ERNIE Speed | ERNIE-Speed-8K | ernie-speed-8k |
ERNIE Speed | ERNIE-Speed-128K | ernie-speed-128k |
ERNIE Speed | ERNIE-Speed-Pro-128K | ernie-speed-pro-128k |
ERNIE Lite | ERNIE-Lite-8K | ernie-lite-8k |
ERNIE Lite | ERNIE-Lite-Pro-128K | ernie-lite-pro-128k |
ERNIE Tiny | ERNIE-Tiny-8K | ernie-tiny-8k |
ERNIE Character | ERNIE-Character-8K | ernie-char-8k |
ERNIE Character | ERNIE-Character-Fiction-8K | ernie-char-fiction-8k |
ERNIE-Novel-8K | ERNIE-Novel-8K | ernie-novel-8k |
SDK调用
使用说明
- 本文API支持通过Python SDK调用,调用流程请参考SDK安装及使用流程。
- 请确保使用最新版本Python SDK,版本需≥0.4.11。
调用示例
使用model
字段,指定平台支持预置服务的模型,调用示例如下。
from qianfan import Qianfan
client = Qianfan(
# 方式一:使用安全认证AK/SK鉴权
# 替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk,如何获取请查看https://cloud.baidu.com/doc/Reference/s/9jwvz2egb
access_key="your_iam_ak",
secret_key="your_iam_sk",
#app_id="", # 选填,不填写则使用默认appid
# 方式二:使用应用BearerToken鉴权
# 替换下列示例中参数,将your_BearerToken替换为真实值,如何获取请查看https://cloud.baidu.com/doc/IAM/s/Mm2x80phi
#api_key="your_BearerToken"
#app_id="", # 选填,不填写则使用默认appid
)
completion = client.chat.completions.create(
model="ernie-3.5-8k", # 指定特定模型
messages=[
{'role': 'user', 'content': '你好'}
]
)
print(completion.choices[0])
返回示例
finish_reason='normal' index=0 message=ChatCompletionMessage(content='你好!我是文心一言,很高兴与你交流。请问你有什么特别的问题或者话题想要聊吗?无论是关于知识、文化、科技还是生活等方面的问题,我都会尽力回答你的。', role='assistant', name=None, content_type=None, function_call=None) need_clear_history=None ban_round=None function_call=None search_info=None flag=0 tools_info=None
请求参数
SDK其他参数请参考本文HTTP调用-请求说明,SDK重试机制相关参数如下。
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
etry_count | int | 否 | 重试次数,默认1次 |
request_timeout | float | 否 | 请求超时时间,默认60秒 |
backoff_factor | float | 否 | 请求重试参数,用于指定重试的策略,默认为0 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
id | string | 本次请求的唯一标识,可用于排查问题 |
object | string | 回包类型 chat.completion:多轮对话返回 |
created | int | 时间戳 |
model | string | 模型ID |
choices | List[Choice] | 说明:当请求参数 stream = False 时返回 |
choices | List[CompletionChunkChoice] | 说明:当请求参数 stream = True 时返回 |
usage | usage | token统计信息,说明: (1)同步请求默认返回 (2)流式请求默认不返回,当开启stream_options.include_usage=True时,会在最后一个chunk返回实际内容,其他chunk返回null |
Choice说明
名称 | 类型 | 描述 |
---|---|---|
index | int | choice列表中的序号 |
message | message | 响应信息,当stream=False时返回 |
finish_reason | string | 输出内容标识,说明: · normal:输出内容完全由大模型生成,未触发截断、替换 · stop:输出结果命中入参stop中指定的字段后被截断 · length:达到了最大的token数 · content_filter:输出内容被截断、兜底、替换为**等 |
flag | int | 安全细分类型,说明: 当stream=False,flag值含义如下: · 0或不返回:安全 · 1:低危不安全场景,可以继续对话 · 2:禁聊:不允许继续对话,但是可以展示内容 · 3:禁止上屏:不允许继续对话且不能上屏展示 · 4:撤屏 |
ban_round | int | 当flag 不为 0 时,该字段会告知第几轮对话有敏感信息;如果是当前问题,ban_round = -1 |
need_clear_history | bool | 是否需要清空历史对话 |
CompletionChunkChoice说明
名称 | 类型 | 描述 |
---|---|---|
index | int | choice列表中的序号 |
delta | ChoiceDelta | 响应信息,当 stream= True 时返回 |
finish_reason | string | 输出内容标识,说明: · normal:输出内容完全由大模型生成,未触发截断、替换 · stop:输出结果命中入参stop中指定的字段后被截断· length:达到了最大的token数 · content_filter:输出内容被截断、兜底、替换为**等 |
ChoiceDelta说明
名称 | 类型 | 描述 |
---|---|---|
content | string | 流式响应内容 |
usage说明
名称 | 类型 | 描述 |
---|---|---|
prompt_tokens | int | 问题tokens数(包含历史QA) |
completion_tokens | int | 回答tokens数 |
total_tokens | int | 总tokens数 |
message说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
role | string | 是 | 当前支持以下: · user: 表示用户 · assistant: 表示对话助手 · system:表示人设 |
name | string | 否 | message名 |
content | string | 是 | 对话内容,说明: (1)不能为空 (2)最后一个message对应的content不能为blank字符,如空格、"\n"、“\r”、“\f”等 |
HTTP调用
鉴权说明
- 调用本文API,需使用Bearer Token鉴权方式。具体调用流程,请查看使用BearerToken鉴权调用API流程。
请求说明
- 基本信息
请求地址:https://qianfan.baidubce.com/v2/chat/completions
请求方式:POST
- Header参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
Content-Type | string | 是 | 固定值application/json |
Authorization | string | 是 | 用于验证请求合法性的认证信息,说明: (1)可以通过调用创建BearerToken接口获取值 (2)BearerToken最长有效期为30天,即在调用创建BearerToken接口时,需设置expireInSeconds=25920000,如果设置超过该值,有效期最大值仍为30天 |
appid | string | 否 | V2版本接口对应的应用ID,说明: (1)可以通过控制台-模型服务-应用接入页面,在应用列表查看应用ID,如下图所示: (2)如果无应用,需要先创建V2版本服务对应的应用,在控制台-模型服务-应用接入页面创建应用。 |
- Body参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
model | string | 是 | 模型ID,可选值参考本文支持模型列表 |
messages | List |
是 | 聊天上下文信息。说明: (1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话,例如: · 1个成员示例, "messages": [ {"role": "user","content": "你好"}] · 3个成员示例, "messages": [ {"role": "user","content": "你好"},{"role":"assistant","content":"需要什么帮助"},{"role":"user","content":"自我介绍下"}] (2) 最后一个message为当前请求的信息,前面的message为历史对话信息 (3)messages的role说明: · 第一条message的role必须是user或system · 最后一条message的role必须是user · 当第一条message的role为user,role值需要依次为user/function -> assistant -> user/function ...,即奇数位message的role值必须为user或function,偶数位message的role值为assistant,例如: 示例中message中的role值分别为user、assistant、user、assistant、user;奇数位(红框)message中的role值为user,即第1、3、5个message中的role值为user;偶数位(蓝框)值为assistant,即第2、4个message中的role值为assistant · 当第一条message的role为system,role值需要依次为system -> user/function -> assistant -> user/function ... (4)message中的content总长度不能超过对应model的输入字符限制和输入tokens限制,请查看各模型上下文长度说明 |
stream | bool | 否 | 是否以流式接口的形式返回数据,说明: (1)beam search模型只能为false (2)默认false |
stream_options | object | 否 | 流式响应的选项,当字段stream为true时,该字段生效 |
temperature | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)默认0.95,范围 (0, 1.0],不能为0 |
top_p | float | 否 | 说明: (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 (2)默认0.7,取值范围 [0, 1.0] |
penalty_score | float | 否 | 通过对已生成的token增加惩罚,减少重复生成的现象。说明: (1)值越大表示惩罚越大 (2)默认1.0,取值范围:[1.0, 2.0] |
max_completion_tokens | int | 否 | 指定模型最小输出token数,说明: (1)取值范围[2, 2048] |
response_format | string | 否 | 指定响应内容的格式,说明: (1)可选值: · json_object:以json格式返回,可能出现不满足效果情况 · text:以文本格式返回 (2)如果不填写参数response_format值,默认为text |
seed | int | 否 | 说明: (1)取值范围: (0,2147483647),会由模型随机生成,默认值为空 (2)如果指定,系统将尽最大努力进行确定性采样,以便使用相同seed和参数的重复请求返回相同的结果 |
stop | List |
否 | 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: (1)每个元素长度不超过20字符 (2)最多4个元素 |
user | string | 否 | 表示最终用户的唯一标识符 |
frequency_penalty | float | 否 | 说明: (1)正值根据迄今为止文本中的现有频率对新token进行惩罚,从而降低模型逐字重复同一行的可能性 (2)取值范围:[-2.0, 2.0] (3)支持以下模型: · ernie-speed-8k · ernie-speed-128k · ernie-speed-pro-128k · ernie-lite-8k · ernie-lite-pro-128k · ernie-tiny-8k · ernie-char-8k · ernie-char-fiction-8k |
presence_penalty | float | 否 | 说明: (1)正值根据token记目前是否出现在文本中来对其进行惩罚,从而增加模型谈论新主题的可能性 (2)取值范围:[-2.0, 2.0] (3)支持以下模型: · ernie-speed-8k · ernie-speed-128k · ernie-speed-pro-128k · ernie-lite-8k · ernie-lite-pro-128k · ernie-tiny-8k · ernie-char-8k · ernie-char-fiction-8k |
message说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
role | string | 是 | 当前支持以下: · user: 表示用户 · assistant: 表示对话助手 · system:表示人设 |
name | string | 否 | message名 |
content | string | 是 | 对话内容,说明: (1)不能为空 (2)最后一个message对应的content不能为blank字符,如空格、"\n"、“\r”、“\f”等 |
stream_options说明
| 名称 | 类型 | 必填 |
---|---|---|---|
include_usage | bool | 否 | 流式响应是否输出usage,说明: · ture:是,设置为true时,在最后一个chunk会输出一个字段,这个chunk上的usage字段显示整个请求的token统计信息 · false:否,流式响应默认不输出usage |
响应说明
- 响应头Header参数
名称 | 描述 |
---|---|
X-Ratelimit-Limit-Requests | 一分钟内允许的最大请求次数 |
X-Ratelimit-Limit-Tokens | 一分钟内允许的最大tokens消耗,包含输入tokens和输出tokens |
X-Ratelimit-Remaining-Requests | 达到RPM速率限制前,剩余可发送的请求数配额,如果配额用完,将会在0-60s后刷新 |
X-Ratelimit-Remaining-Tokens | 达到TPM速率限制前,剩余可消耗的tokens数配额,如果配额用完,将会在0-60s后刷新 |
- 响应体参数
名称 | 类型 | 描述 |
---|---|---|
id | string | 本次请求的唯一标识,可用于排查问题 |
object | string | 回包类型 chat.completion:多轮对话返回 |
created | int | 时间戳 |
model | string | 模型ID |
choices | object | stream=false时,返回内容 |
choices | sse_choices | stream=true时,返回内容 |
usage | usage | token统计信息,说明: (1)同步请求默认返回 (2)流式请求默认不返回,当开启stream_options.include_usage=true时,会在最后一个chunk返回实际内容,其他chunk返回null |
choices说明
当stream=false时,返回内容如下:
名称 | 类型 | 描述 |
---|---|---|
index | int | choice列表中的序号 |
message | message | 响应信息,当stream=false时返回 |
finish_reason | string | 输出内容标识,说明: · normal:输出内容完全由大模型生成,未触发截断、替换 · stop:输出结果命中入参stop中指定的字段后被截断· length:达到了最大的token数 · content_filter:输出内容被截断、兜底、替换为**等 |
flag | int | 安全细分类型,说明: 当stream=false,flag值含义如下: · 0或不返回:安全 · 1:低危不安全场景,可以继续对话 · 2:禁聊:不允许继续对话,但是可以展示内容 · 3:禁止上屏:不允许继续对话且不能上屏展示 · 4:撤屏 |
ban_round | int | 当flag 不为 0 时,该字段会告知第几轮对话有敏感信息;如果是当前问题,ban_round = -1 |
sse_choices说明
当stream=true时,返回内容如下:
名称 | 类型 | 描述 |
---|---|---|
index | int | choice列表中的序号 |
delta | delta | 响应信息,当stream=true时返回 |
finish_reason | string | 输出内容标识,说明: · normal:输出内容完全由大模型生成,未触发截断、替换 · stop:输出结果命中入参stop中指定的字段后被截断· length:达到了最大的token数 · content_filter:输出内容被截断、兜底、替换为**等 |
flag | int | 安全细分类型,说明:当stream=true时,返回flag表示触发安全 |
ban_round | int | 当flag 不为 0 时,该字段会告知第几轮对话有敏感信息;如果是当前问题,ban_round = -1 |
delta说明
名称 | 类型 | 描述 |
---|---|---|
content | string | 流式响应内容 |
usage说明
名称 | 类型 | 描述 |
---|---|---|
prompt_tokens | int | 问题tokens数(包含历史QA) |
completion_tokens | int | 回答tokens数 |
total_tokens | int | 总tokens数 |
message说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
role | string | 是 | 当前支持以下: · user: 表示用户 · assistant: 表示对话助手 · system:表示人设 |
name | string | 否 | message名 |
content | string | 是 | 对话内容,说明: (1)不能为空 (2)最后一个message对应的content不能为blank字符,如空格、"\n"、“\r”、“\f”等 |
请求示例
curl --location 'https://qianfan.gz.baidubce.com/v2/chat/completions' \
--header 'Content-Type: application/json' \
--header 'appid: app-tODvu5IS' \
--header 'Authorization: Bearer bce-v3/ALTAK-*********/614fb**********' \
--data '{
"model": "ernie-3.5-8k",
"messages": [
{
"role": "user",
"content": "你好"
}
]
}'
import requests
import json
def main():
url = "https://qianfan.gz.baidubce.com/v2/chat/completions"
payload = json.dumps({
"model": "ernie-3.5-8k",
"messages": [
{
"role": "user",
"content": "你好"
}
]
})
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer bce-v3/ALTAK-*********/614fb**********'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
if __name__ == '__main__':
main()
响应示例
HTTP/1.1 200 OK
Date: Fri, 19 Jan 2024 08:49:13 GMT
Content-Type: application/json;charset=utf-8
Statement: AI-generated
X-Ratelimit-Limit-Requests: 300
X-Ratelimit-Limit-Tokens: 300000
X-Ratelimit-Remaining-Requests: 298
X-Ratelimit-Remaining-Tokens: 299971
{
"id": "as-61qu1k9xvf",
"object": "chat.completion",
"created": 1709711333,
"model": "ernie-3.5-8k",
"choices": {
"index": xx,
"message": {
"role": "assistant",
"cotent": "你好,请问有什么我可以帮助你的吗?无论你有什么问题或需要帮助,我都会尽力回答和协助你。请随时告诉我你的需求。"
},
"flag": 0
}
"usage": {
"prompt_tokens": 1,
"completion_tokens": 29,
"total_tokens": 30
}
}
错误码
如果请求错误,服务器返回的JSON文本包含以下参数。
名称 | 描述 |
---|---|
code | 错误码 |
msg | 错误描述信息,帮助理解和解决发生的错误 |
type | 错误类型 |
更多相关错误码,请查看推理服务V2版本错误码说明。