对话 Chat
百度智能云千帆大模型平台提供了对话Chat相关模型API SDK,支持单轮对话、多轮对话、流式等调用。
注意事项
模型不同,调用SDK时,使用参数不同。请结合具体模型,查看参数使用说明进行调用。
- 默认模型,即ERNIE-Bot-turbo,无需填写model和endpoint参数,详见请求参数说明。
- 指定支持预置服务的模型,使用model参数指定支持预置服务的模型,详见请求参数说明。
- 用户快速部署自行发布的模型服务,需使用参数endpoint,详见请求参数说明。
支持模型列表
- ERNIE-Bot 4.0
- ERNIE-Bot
- ERNIE-Bot-turbo
- BLOOMZ-7B
- Qianfan-BLOOMZ-7B-compressed
- Llama-2-7b-chat
- Llama-2-13b-chat
- Llama-2-70b-chat
- Qianfan-Chinese-Llama-2-7B
- ChatGLM2-6B-32K
- AquilaChat-7B
- Qianfan-Chinese-Llama-2-13B
- Linly-Chinese-LLaMA-2-7B
- Linly-Chinese-LLaMA-2-13B
- ChatGLM2-6B
- ChatGLM2-6B-INT4
- Baichuan2-13B-Chat
- XVERSE-13B-Chat
- Falcon-7B
- Falcon-40B-Instruct
- RWKV-4-World
- RWKV-4-pile-14B
- RWKV-Raven-14B
- OpenLLaMA-7B
- Dolly-12B
- MPT-7B-Instruct
- MPT-30B-instruct
- OA-Pythia-12B-SFT-4
- 自定义模型
单轮对话
调用示例
默认模型
默认模型,即 ERNIE-Bot-turbo,无需使用参数model,调用示例如下。
import qianfan
# 替换下列示例中参数,应用API Key替换your_ak,Secret Key替换your_sk
chat_comp = qianfan.ChatCompletion(ak="your_ak", sk="your_sk")
# 调用默认模型,即 ERNIE-Bot-turbo
resp = chat_comp.do(messages=[{
"role": "user",
"content": "你好"
}])
print(resp)
指定支持预置服务的模型
使用model字段,指定千帆平台支持预置服务的模型,调用示例如下。
import qianfan
# 替换下列示例中参数,应用API Key替换your_ak,Secret Key替换your_sk
chat_comp = qianfan.ChatCompletion(ak="your_ak", sk="your_sk")
# 指定特定模型
resp = chat_comp.do(model="ERNIE-Bot", messages=[{
"role": "user",
"content": "你好"
}])
print(resp)
用户自行发布的模型服务
对于用户快速部署自行发布的模型服务,通过使用endpoint进行调用,示例如下。
import qianfan
# 替换下列示例中参数,应用API Key替换your_ak,Secret Key替换your_sk
chat_comp = qianfan.ChatCompletion(ak="your_ak", sk="your_sk")
# 使用自行发布的模型
resp = chat_comp.do(endpoint="your_custom_endpoint", messages=[{
"role": "user",
"content": "你好"
}])
# 可以通过resp["body"]获取接口返回的内容
print(resp)
返回示例
QfResponse(
code=200,
headers={
...
},
body={
'id': 'as-4v1h587fyv',
'object': 'chat.completion',
'created': 1695021339,
'result': '你好,我是百度研发的知识增强大语言模型,中文名是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。',
'is_truncated': False,
'need_clear_history': False,
'usage': {
'prompt_tokens': 7,
'completion_tokens': 67,
'total_tokens': 74
}
},
)
多轮对话
调用示例
import qianfan
# 替换下列示例中参数,应用API Key替换your_ak,Secret Key替换your_sk
chat_comp = qianfan.ChatCompletion(ak="your_ak", sk="your_sk")
# 多轮对话
resp = chat_comp.do(messages=[{ # 调用默认模型,即 ERNIE-Bot-turbo
"role": "user",
"content": "你好"
},
{
"role": "assistant",
"content": "你好。"
},
{
"role": "user",
"content": "你是谁"
},
])
print(resp)
也可以使用内置 Messages 简化多轮对话,与用户对话的示例如下。
import qianfan
# 替换下列示例中参数,应用API Key替换your_ak,Secret Key替换your_sk
chat_comp = qianfan.ChatCompletion(ak="your_ak", sk="your_sk")
# 下面是一个与用户对话的例子
msgs = qianfan.Messages()
while True:
msgs.append(input("输入:")) # 增加用户输入
resp = chat_comp.do(messages=msgs)
print(resp) # 模型的输出
msgs.append(resp) # 追加模型输出
返回示例
QfResponse(
code=200,
headers={
...
},
body={
'id': 'as-4v1h587fyv',
'object': 'chat.completion',
'created': 1695021339,
'result': '你好,我是百度研发的知识增强大语言模型,我能够与人进行交流,回答问题,协助创作,并且我还具备了语言理解,语言生成,知识推理的能力。',
'is_truncated': False,
'need_clear_history': False,
'usage': {
'prompt_tokens': 7,
'completion_tokens': 67,
'total_tokens': 74
}
},
)
流式输出
调用示例
import qianfan
chat_comp = qianfan.ChatCompletion(ak="your_ak", sk="your_sk")
resp = chat_comp.do(model="ERNIE-Bot-turbo", messages=[{
"role": "user",
"content": "你好"
}], stream=True)
for r in resp:
print(r)
# 输出:
# 您好!
# 我是百度研发的知识增强大语言模型,中文名是文心一言,英文名是ERNIE Bot。
# 我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。
返回示例
{
'code': 200,
'headers': {
...
},
'id': 'as-r0qq952rh5',
'object': 'chat.completion',
'created': 1695026934,
'sentence_id': 0,
'is_end': False,
'is_truncated': False,
'result': '您好!',
'need_clear_history': False,
'usage': {
'prompt_tokens': 2,
'completion_tokens': 2,
'total_tokens': 4
}
}
{
'code': 200,
'headers': {
...
},
'id': 'as-r0qq952rh5',
'object': 'chat.completion',
'created': 1695026935,
'sentence_id': 1,
'is_end': False,
'is_truncated': False,
'result': '我是百度研发的知识增强大语言模型,中文名是文心一言,英文名是ERNIE Bot。',
'need_clear_history': False,
'usage': {
'prompt_tokens': 2,
'completion_tokens': 30,
'total_tokens': 34
}
}
参数说明
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
messages | List[dict] | 是 | 聊天上下文信息。说明: (1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话 (2)最后一个message为当前请求的信息,前面的message为历史对话信息 (3)必须为奇数个成员,成员中message的role必须依次为user(or function)、assistant (4)最后一个message的content长度(即此轮对话的问题)不能超过3000 token;如果messages中content总长度大于3000 token,系统会依次遗忘最早的历史会话,直到content的总长度不超过3000 token |
functions | List[dict] | 否 | 一个可触发函数的描述列表,说明:只有当参数model值为ERNIE-Bot时,functions字段有效 |
temperature | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)范围 (0, 1.0],不能为0 (3)建议该参数和top_p只设置1个 (4)建议top_p和temperature不要同时更改 (5)默认值: · 当model值为ERNIE-Bot或ERNIE-Bot 4.0,默认值为0.8 · 当model值为ERNIE-Bot-turbo,默认值为0.95 |
top_k | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)默认0.95,范围 (0, 1.0],不能为0 (3)建议该参数和top_p只设置1个 (4)以下情况,不支持使用此参数: · 当model或endpoint值为ERNIE-Bot、ERNIE-Bot 4.0或ERNIE-Bot-turbo · 基于ERNIE-Bot-turbo SFT调优后的模型 |
top_p | float | 否 | 说明: (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 (2)取值范围 [0, 1.0] (3)建议该参数和temperature只设置1个 (4)建议top_p和temperature不要同时更改 (5)默认值: · 当model值为ERNIE-Bot或ERNIE-Bot 4.0,默认值为0.8 · 当model值为ERNIE-Bot-turbo,默认值为0.7 |
penalty_score | float | 否 | 通过对已生成的token增加惩罚,减少重复生成的现象。说明: (1)值越大表示惩罚越大 (2)取值范围:[1.0, 2.0] (3)默认值: · 当model值为ERNIE-Bot、ERNIE-Bot 4.0或ERNIE-Bot-turbo,默认值为1.0 |
stream | bool | 否 | 是否以流式接口的形式返回数据,默认false true:是,以流式接口的形式返回数据 false:否 |
model | string | 否 | 模型名称,用于指定平台支持预置服务的模型,说明: (1)不填写此字段时,默认模型为ERNIE-Bot-turbo (2)如果模型为平台支持预置服务的模型,此字段必填,且支持模型名称如下: · ERNIE-Bot 4.0 · ERNIE-Bot · ERNIE-Bot-turbo · BLOOMZ-7B · Qianfan-BLOOMZ-7B-compressed · Llama-2-7b-chat · Llama-2-13b-chat · Llama-2-70b-chat · Qianfan-Chinese-Llama-2-7B · ChatGLM2-6B-32K · AquilaChat-7B |
endpoint | string | 否 | 用于指定用户自行发布的模型服务,包括自行发布平台预置的模型、用户自定义模型。说明: (1)如果指定用户自行发布的模型服务,endpoint字段为必填,目前平台支持以下自行发布的模型服务: · ERNIE-Bot 4.0 · ERNIE-Bot · ERNIE-Bot-turbo · BLOOMZ-7B · Qianfan-BLOOMZ-7B-compressed · Llama-2-7b-chat · Llama-2-13b-chat · Llama-2-70b-chat · Qianfan-Chinese-Llama-2-7B · Qianfan-Chinese-Llama-2-13B · ChatGLM2-6B-32K · AquilaChat-7B · Linly-Chinese-LLaMA-2-7B · Linly-Chinese-LLaMA-2-13B · ChatGLM2-6B · ChatGLM2-6B-INT4 · Baichuan2-13B-Chat · XVERSE-13B-Chat · Falcon-7B · Falcon-40B-Instruct · RWKV-4-World · RWKV-4-pile-14B · RWKV-Raven-14B · OpenLLaMA-7B · Dolly-12B · MPT-7B-Instruct · MPT-30B-instruct · OA-Pythia-12B-SFT-4 · 自定义模型 (2)用户自行发布服务,该字段值可以通过查看服务地址获取:打开服务管理-选择创建的服务-点击详情页查看服务地址,endpoint值为https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ 后面的地址,如下图所示 注意: 在创建服务页面,选择模型后,API地址会自动新增个后缀。例如选择模型RWKV-4-World,输入API地址为“test1”,endpoint的取值即为“ngxxxol8_test1”,如下图所示,如何发布服务请参考发布平台预置的模型服务、快速部署自定义模型 |
retry_count | int | 否 | 重试次数,默认1次 |
request_timeout | float | 否 | 请求超时时间,默认60秒 |
backoff_factor | float | 否 | 请求重试参数,用于指定重试的策略,默认为0 |
system | string | 否 | 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: (1)长度限制1024个字符 (2)如果使用functions参数,不支持设定人设system (3)只有当参数model值为ERNIE-Bot 4.0、ERNIE-Bot、ERNIE-Bot-turbo时,system字段有效 |
stop | List[string] | 否 | 生成停止标识。当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: (1)每个元素长度不超过20字符。 (2)最多4个元素 (3)以下情况,不支持使用此参数: · 当model或endpoint值为ERNIE-Bot、ERNIE-Bot 4.0或ERNIE-Bot-turbo · 基于ERNIE-Bot-turbo SFT调优后的模型 |
user_id | string | 否 | 表示最终用户的唯一标识符,可以监视和检测滥用行为,防止接口恶意调用 |
messages说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
role | string | 是 | 当前支持以下: user: 表示用户 assistant: 表示对话助手 function: 表示函数 |
content | string | 是 | 对话内容,当前message存在function_call时可以为空,其他场景不能为空 |
name | string | 否 | message作者;当role=function时,必填,且是响应内容中function_call中的name |
function_call | dict | 否 | 函数调用,function call场景下第一轮对话的返回,第二轮对话作为历史信息在message中传入 |
functions说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
name | string | 是 | 函数名 |
description | string | 是 | 函数描述 |
parameters | object | 是 | 函数请求参数,说明: (1)JSON Schema 格式,参考JSON Schema描述 (2)如果函数没有请求参数,parameters值格式如下: {"type": "object","properties": {}} |
responses | object | 否 | 函数响应参数,JSON Schema 格式,参考JSON Schema描述 |
examples | List[dict] | 否 | function调用的一些历史示例 |
examples说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
role | string | 是 | 当前支持以下: user: 表示用户 assistant: 表示对话助手 function: 表示函数 |
content | string | 是 | 对话内容,当前message存在function_call时可以为空,其他场景不能为空 |
name | string | 否 | message作者;当role=function时,必填,且是响应内容中function_call中的name |
function_call | dict | 否 | 函数调用,function call场景下第一轮对话的返回,第二轮对话作为历史信息在message中传入 |
funcation_call说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
name | string | 是 | 触发的function名 |
arguments | string | 是 | 请求参数 |
thoughts | string | 否 | 模型思考过程 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
id | string | 本轮对话的id |
object | string | 回包类型 chat.completion:多轮对话返回 |
created | int | 时间戳 |
sentence_id | int | 表示当前子句的序号。只有在流式接口模式下会返回该字段。 |
is_end | bool | 表示当前子句是否是最后一句。只有在流式接口模式下会返回该字段 |
is_truncated | bool | 当前生成的结果是否被截断 |
result | string | 对话返回结果 |
need_clear_history | bool | 表示用户输入是否存在安全,是否关闭当前会话,清理历史会话信息。 true:是,表示用户输入存在安全风险,建议关闭当前会话,清理历史会话信息 false:否,表示用户输入无安全风险 |
ban_round | int | 当need_clear_history为true时,此字段会告知第几轮对话有敏感信息,如果是当前问题,ban_round=-1 |
usage | usage | token统计信息,token数 = 汉字数+单词数*1.3 (仅为估算逻辑) |
usage说明
名称 | 类型 | 描述 |
---|---|---|
prompt_tokens | int | 问题tokens数 |
completion_tokens | int | 回答tokens数 |
total_tokens | int | tokens总数 |
最后修改时间: 1 年前