对话Chat
更新时间:2024-04-23
百度智能云千帆大模型平台提供了对话Chat相关模型API SDK,支持单轮对话、多轮对话、流式等调用。
注意事项
(1)本文内容适用千帆Python、Go、Java和Node.js SDK。SDK支持功能详情,请查看SDK功能列表。
(2)模型不同,调用SDK时,使用参数不同。请结合具体模型,查看参数使用说明进行调用。
- 默认使用模型,即ERNIE-Bot-turbo,无需填写model和endpoint参数,使用的模型,详见请求参数说明。
- 指定支持预置服务的模型,使用model参数指定支持预置服务的模型,详见请求参数说明。
- 用户快速部署自行发布的模型服务,需使用参数endpoint,详见请求参数说明。
支持模型列表
支持的模型列表,及各模型支持的调用方法说明如下,更多详情见请求参数说明。
模型 | 支持预置服务的模型 (使用model参数) |
用户自行发布的模型服务 (使用endpoint参数) |
---|---|---|
ERNIE-Bot-4 (即ERNIE 4.0) |
✓ | ✓ |
ERNIE-Bot (即ERNIE-3.5-8K) |
✓ | ✓ |
ERNIE-3.5-4K-0205 | ✓ | ✓ |
ERNIE-3.5-8K-0205 | ✓ | ✓ |
ERNIE-3.5-8K-1222 | ✓ | ✓ |
ERNIE-Speed (即ERNIE-Speed-8K) |
✓ | ✓ |
ERNIE-Speed-128k | ✓ | ✓ |
ERNIE-Bot-turbo (即ERNIE Lite) |
✓ | ✓ |
ERNIE-Lite-8K-0308 | ✓ | ✓ |
ERNIE-Tiny-8K | ✓ | ✓ |
EB-turbo-AppBuilder (即ERNIE Speed-AppBuilder) |
✓ | ✓ |
Gemma-7B-it | ✓ | ✓ |
Yi-34B-Chat | ✓ | ✓ |
BLOOMZ-7B | ✓ | ✓ |
Qianfan-BLOOMZ-7B-compressed | ✓ | ✓ |
Mixtral-8x7B-Instruct | ✓ | ✓ |
Llama-2-7b-chat | ✓ | ✓ |
Llama-2-13b-chat | ✓ | ✓ |
Llama-2-70b-chat | ✓ | ✓ |
Qianfan-Chinese-Llama-2-7B | ✓ | ✓ |
Qianfan-Chinese-Llama-2-13B (即Qianfan-Chinese-Llama-2-13B-v1) |
✓ | ✓ |
ChatGLM2-6B-32K | ✓ | ✓ |
XuanYuan-70B-Chat-4bit | ✓ | ✓ |
ChatLaw | ✓ | ✓ |
AquilaChat-7B | ✓ | ✓ |
ERNIE Tiny | ✕ | ✓ |
Gemma-2B-it | ✕ | ✓ |
Qianfan-Chinese-Llama-2-7B-32K | ✕ | ✓ |
Qianfan-Llama-2-70B-compressed | ✕ | ✓ |
Linly-Chinese-LLaMA-2-7B | ✕ | ✓ |
Linly-Chinese-LLaMA-2-13B | ✕ | ✓ |
ChatGLM3-6B | ✕ | ✓ |
ChatGLM3-6B-32K | ✕ | ✓ |
ChatGLM2-6B | ✕ | ✓ |
ChatGLM2-6B-INT4 | ✕ | ✓ |
Baichuan2-7B-Chat | ✕ | ✓ |
Baichuan2-13B-Chat | ✕ | ✓ |
XVERSE-13B-Chat | ✕ | ✓ |
DISC-MedLLM | ✕ | ✓ |
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 os
import qianfan
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
chat_comp = qianfan.ChatCompletion()
# 调用默认模型,即 ERNIE-Bot-turbo
resp = chat_comp.do(messages=[{
"role": "user",
"content": "你好"
}])
print(resp)
package main
import (
"context"
"fmt"
"os"
"github.com/baidubce/bce-qianfan-sdk/go/qianfan"
)
func main() {
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")
// 调用默认模型,即 ERNIE-Bot-turbo
chat := qianfan.NewChatCompletion()
resp, _ := chat.Do(
context.TODO(),
&qianfan.ChatCompletionRequest{
Messages: []qianfan.ChatCompletionMessage{
qianfan.ChatCompletionUserMessage("你好!"),
},
},
)
fmt.Println(resp.Result)
}
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.chat.ChatResponse;
public class Demo {
public static void main(String[] args) {
// 使用安全认证AK/SK鉴权,替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
// 调用默认模型
ChatResponse resp = qianfan.chatCompletion()
.addMessage("user", "你好")
.execute();
System.out.println(resp.getResult());
}
}
import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');
const client = new ChatCompletion();
async function main() {
const resp = await client.chat({
messages: [
{
role: 'user',
content: '你好!',
},
],
});
console.log(resp);
}
main();
指定支持预置服务的模型
使用model字段,指定千帆平台支持预置服务的模型,调用示例如下。
import os
import qianfan
# 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
chat_comp = qianfan.ChatCompletion()
# 指定特定模型
resp = chat_comp.do(model="ERNIE-Bot", messages=[{
"role": "user",
"content": "你好"
}])
print(resp)
package main
import (
"context"
"fmt"
"os"
"github.com/baidubce/bce-qianfan-sdk/go/qianfan"
)
func main() {
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")
// 指定特定模型
chat := qianfan.NewChatCompletion(
qianfan.WithModel("ERNIE-Bot"),
)
resp, _ := chat.Do(
context.TODO(),
&qianfan.ChatCompletionRequest{
Messages: []qianfan.ChatCompletionMessage{
qianfan.ChatCompletionUserMessage("你好!"),
},
},
)
fmt.Println(resp.Result)
}
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.chat.ChatResponse;
public class Demo {
public static void main(String[] args) {
// 使用安全认证AK/SK鉴权,替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
// 指定模型
ChatResponse resp = qianfan.chatCompletion()
.model("ERNIE-Bot")
.addMessage("user", "你好")
.execute();
System.out.println(resp.getResult());
}
}
import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');
const client = new ChatCompletion();
async function main() {
const resp = await client.chat({
messages: [
{
role: 'user',
content: '你好!',
},
],
}, 'ERNIE-Bot-turbo');
console.log(resp);
}
main();
用户自行发布的模型服务
对于用户快速部署自行发布的模型服务,通过使用endpoint进行调用,示例如下。
import os
import qianfan
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
chat_comp = qianfan.ChatCompletion()
# 使用自行发布的模型
resp = chat_comp.do(endpoint="your_custom_endpoint", messages=[{
"role": "user",
"content": "你好"
}])
# 可以通过resp["body"]获取接口返回的内容
print(resp)
package main
import (
"context"
"fmt"
"os"
"github.com/baidubce/bce-qianfan-sdk/go/qianfan"
)
func main() {
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")
// 使用自行发布的模型
chat := qianfan.NewChatCompletion(
qianfan.WithEndpoint("endpoint"),
)
resp, _ := chat.Do(
context.TODO(),
&qianfan.ChatCompletionRequest{
Messages: []qianfan.ChatCompletionMessage{
qianfan.ChatCompletionUserMessage("你好!"),
},
},
)
fmt.Println(resp.Result)
}
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.chat.ChatResponse;
public class Demo {
public static void main(String[] args) {
// 使用安全认证AK/SK鉴权,替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
// 使用自行发布的模型,替换your_custom_endpoint
ChatResponse resp = qianfan.chatCompletion()
.endpoint("your_custom_endpoint")
.addMessage("user", "你好")
.execute();
System.out.println(resp.getResult());
}
}
import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');
const client = new ChatCompletion({Endpoint: '***'});
async function main() {
const resp = await client.chat({
messages: [
{
role: 'user',
content: '你好',
},
],
});
console.log(resp);
}
main();
返回示例
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
}
},
)
你好!有什么我可以帮助你的吗?
你好!有什么我可以帮助你的吗?
{
id: 'as-xdiknr8pj9',
object: 'chat.completion',
created: 1709721393,
result: '你好!有什么我可以帮助你的吗?',
is_truncated: false,
need_clear_history: false,
usage: { prompt_tokens: 2, completion_tokens: 8, total_tokens: 10 }
}
多轮对话
调用示例
import os
import qianfan
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
chat_comp = qianfan.ChatCompletion()
# 多轮对话
resp = chat_comp.do(messages=[{ # 调用默认模型,即 ERNIE-Bot-turbo
"role": "user",
"content": "你好"
},
{
"role": "assistant",
"content": "你好,请问有什么我可以帮助你的吗?"
},
{
"role": "user",
"content": "我在北京,周末可以去哪里玩?"
},
])
print(resp)
package main
import (
"context"
"fmt"
"os"
"github.com/baidubce/bce-qianfan-sdk/go/qianfan"
)
func main() {
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")
// 多轮对话,调用默认模型,即 ERNIE-Bot-turbo
chat := qianfan.NewChatCompletion()
resp, _ := chat.Do(
context.TODO(),
&qianfan.ChatCompletionRequest{
Messages: []qianfan.ChatCompletionMessage{
qianfan.ChatCompletionUserMessage("你好!"),
qianfan.ChatCompletionAssistantMessage("你好!有什么我可以帮助你的吗?"),
qianfan.ChatCompletionUserMessage("我在北京,周末可以去哪里玩?"),
},
},
)
fmt.Println(resp.Result)
}
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.chat.ChatResponse;
public class Demo {
public static void main(String[] args) {
// 使用安全认证AK/SK鉴权,替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
// 多轮对话
ChatResponse resp = qianfan.chatCompletion()
.addMessage("user", "你好")
.addMessage("assistant", "你好!有什么我可以帮助你的吗?")
.addMessage("user", "你是谁")
.execute();
System.out.println(resp.getResult());
}
}
import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');
const client = new ChatCompletion();
async function main() { // 调用默认模型,即 ERNIE-Bot-turbo
const resp = await client.chat({
messages: [
{
role: 'user',
content: '你好!',
},
{
role: "assistant",
content: "你好,请问有什么我可以帮助你的吗?"
},
{
role: "user",
"content": "我在北京,周末可以去哪里玩?"
},
],
});
console.log(resp);
}
main();
如果使用Python SDK,也可以使用内置 Messages 简化多轮对话,与用户对话的示例如下。
import os
import qianfan
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
chat_comp = qianfan.ChatCompletion()
# 下面是一个与用户对话的例子
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-wkg3gtxsjp",
"object": "chat.completion",
"created": 1709887957,
"result": "北京是一个拥有许多历史、文化和自然景观的城市,周末你可以去以下几个地方玩:\n\n1. 故宫:这是中国最大的古代建筑群,是中国古代皇家宫殿的代表,你可以参观各个宫殿,了解中国古代皇室的生活。\n2. 颐和园:这是中国最著名的皇家园林之一,拥有美丽的湖泊和壮观的建筑群。\n3. 长城:作为世界文化遗产,北京段的长城非常著名,你可以选择徒步、骑行或者乘坐缆车等方式去游览。\n4. 圆明园:这是清朝皇家园林的一部分,拥有丰富的文化遗产和美丽的自然风光。\n5. 798艺术区:这是一个现代化的艺术区,有很多艺术展览、画廊和创意工作室,也是北京时尚潮流的聚集地。\n6. 北京欢乐谷:这是一个大型主题公园,有各种刺激的游乐设施和丰富多彩的活动。\n7. 北京鸟巢和水立方:这是北京奥运会的主要体育场馆,是北京的地标性建筑,可以参观并欣赏它们的美丽夜景。\n8. 北京动物园:这是中国最大的动物园之一,拥有各种珍稀动物和美丽的鸟类。\n\n以上是一些适合周末游玩的景点,你可以根据自己的兴趣和时间来选择。此外,北京还有很多小吃和美食,你可以尝试一些当地的特色美食,如烤鸭、炸酱面、豆汁焦圈等等。",
"is_truncated": False,
"need_clear_history": False,
"usage": {"prompt_tokens": 18, "completion_tokens": 285, "total_tokens": 303},
},
statistic={"request_latency": 3.77764, "total_latency": 3.7924645809980575},
request=QfRequest(
method="POST",
url="https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant",
query={},
headers={
...
},
json_body={
"messages": [
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好,请问有什么我可以帮助你的吗?"},
{"role": "user", "content": "我在北京,周末可以去哪里玩?"},
],
"stream": False,
"extra_parameters": {"request_source": "qianfan_py_sdk_v0.3.3"},
},
retry_config=RetryConfig(
retry_count=1,
timeout=10,
max_wait_interval=120,
backoff_factor=1,
jitter=1,
retry_err_codes={},
),
),
)
北京是一个拥有许多历史、文化和自然景观的城市,有很多地方可以探索。如果你在周末有空,以下是一些建议的景点和活动:
1. 故宫:这是中国最大的古代宫殿之一,拥有丰富的历史和文化遗产。
2. 颐和园:这是一个美丽的皇家园林,拥有壮丽的湖泊和精美的建筑。
3. 长城:北京附近的长城段是许多人向往的地方。你可以选择参加一日游或自驾前往。
4. 798艺术区:这是一个充满艺术气息的地方,有许多画廊、艺术工作室和博物馆。
5. 南锣鼓巷:这是一个充满历史气息的胡同区,有很多小吃、手工艺品和文化遗产店。
6. 玉渊潭公园:这是一个大型公园,环境优美,有很多娱乐设施和活动。
7. 郊区古迹:如妙应寺白塔、太阳宫等,这些地方虽然不那么热闹,但也有其独特的魅力。
除此之外,北京还有很多博物馆、剧院和美食街区,如三里屯、簋街等,你可以根据自己的兴趣和时间来选择。另外,你也可以尝试一些当地的活动,如品尝北京烤鸭、炸酱面等美食,或者参加一些传统文化活动。
希望这些建议对你有所帮助!
我是由百度公司开发的人工智能语言模型,我叫文心一言。我的知识来自于训练数据和算法,旨在为人类提供帮助和启示。如果你有任何问题或需要帮助,请随时提出。
{
id: 'as-8vcq0n4u0e',
object: 'chat.completion',
created: 1709887877,
result: '北京是一个拥有许多有趣和独特景点的大城市,周末你可以去很多地方玩。例如:\n' +
'\n' +
'1. **故宫博物院**:这是中国最大的古代建筑群,有着丰富的历史和文化遗产,是个很好的适合全家人游玩的地方。\n' +
'2. **天安门广场**:这里是北京的心脏,周围有许多历史和现代建筑。你可以在广场上漫步,欣赏升旗仪式和观看周围的繁华景象。\n' +
'3. **颐和园**:这是一个美丽的皇家园林,有着优美的湖泊和精美的古建筑。你可以在这里漫步,欣赏美丽的景色,同时也可以了解中国的传统文化。\n' +
'4. **北京动物园**:这是中国最大的动物园之一,有许多稀有动物,包括熊猫、老虎、长颈鹿等。对于孩子们来说是个很好的去处。\n' +
'5. **798艺术区**:这是一个充满艺术气息的地方,有许多画廊、艺术工作室和艺术展览。这里有许多新的现代艺术作品,可以欣赏到一些艺术家的创作。\n' +
'6. **三里屯酒吧街**:如果你对夜生活感兴趣,可以去三里屯酒吧街。这里有许多酒吧和餐馆,是一个热闹的夜生活场所。\n' +
'7. **北京环球度假区**:如果你们喜欢主题公园,那么可以去环球度假区,虽然这是在建的,但是等它建好之后肯定是一个很好的去处。\n' +
'\n' +
'当然,你也可以考虑一些其他的地方,比如购物街、博物馆、公园等等。希望这些建议对你有所帮助!',
is_truncated: false,
need_clear_history: false,
usage: { prompt_tokens: 19, completion_tokens: 307, total_tokens: 326 }
}
流式输出
调用示例
import os
import qianfan
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
chat_comp = qianfan.ChatCompletion()
resp = chat_comp.do(model="ERNIE-Bot-turbo", messages=[{
"role": "user",
"content": "你好"
}], stream=True)
for r in resp:
print(r)
# 输出:
# 您好!
# 有什么我可以帮助你的吗?
package main
import (
"context"
"fmt"
"os"
"github.com/baidubce/bce-qianfan-sdk/go/qianfan"
)
func main() {
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")
chat := qianfan.NewChatCompletion()
resp, _ := chat.Stream( // Stream 启用流式返回,参数与 Do 相同
context.TODO(),
&qianfan.ChatCompletionRequest{
Messages: []qianfan.ChatCompletionMessage{
qianfan.ChatCompletionUserMessage("你好"),
},
},
)
for {
r, err := resp.Recv()
if err != nil {
panic(err)
}
if resp.IsEnd { // 判断是否结束
break
}
fmt.Println(r.Result)
}
}
import com.baidubce.qianfan.Qianfan;
import com.google.gson.Gson;
public class Demo {
public static void main(String[] args) {
Gson gson = new Gson();
// 使用安全认证AK/SK鉴权,替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
qianfan.chatCompletion()
.addMessage("user", "你好")
// 启用流式返回
.executeStream()
.forEachRemaining(chunk -> System.out.print(gson.toJson(chunk)));
}
}
import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');
const client = new ChatCompletion();
async function main() {
const stream = await client.chat({
messages: [
{
role: 'user',
content: '你好!',
},
],
stream: true, //启用流式返回
});
for await (const chunk of stream as AsyncIterableIterator<any>) {
console.log(chunk);
}
}
main();
返回示例
{
'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': 1,
'completion_tokens': 0,
'total_tokens': 1
}
}
{
'code': 200,
'headers': {
...
},
'id': 'as-r0qq952rh5',
'object': 'chat.completion',
'created': 1695026935,
'sentence_id': 1,
'is_end': False,
'is_truncated': False,
'result': '有什么我可以帮助你的吗?',
'need_clear_history': False,
'usage': {
'prompt_tokens': 1,
'completion_tokens': 8,
'total_tokens': 9
}
}
你好,
有什么我可以帮助你的吗?
{"id":"as-bz14dun5it","object":"chat.completion","created":1710469885,"sentenceId":0,"isEnd":false,"isTruncated":false,"result":"你好,","needClearHistory":false,"usage":{"promptTokens":1,"completionTokens":2,"totalTokens":3}}
{"id":"as-bz14dun5it","object":"chat.completion","created":1710469885,"sentenceId":1,"isEnd":false,"isTruncated":false,"result":"有什么我可以帮助你的吗?","needClearHistory":false,"usage":{"promptTokens":1,"completionTokens":2,"totalTokens":3}}
{"id":"as-bz14dun5it","object":"chat.completion","created":1710469885,"sentenceId":2,"isEnd":true,"isTruncated":false,"result":"","needClearHistory":false,"usage":{"promptTokens":1,"completionTokens":8,"totalTokens":9}}
{
id: 'as-f7mrqpanb3',
object: 'chat.completion',
created: 1709724132,
sentence_id: 0,
is_end: false,
is_truncated: false,
result: '你好!',
need_clear_history: false,
usage: { prompt_tokens: 2, completion_tokens: 0, total_tokens: 2 }
}
{
id: 'as-f7mrqpanb3',
object: 'chat.completion',
created: 1709724132,
sentence_id: 1,
is_end: false,
is_truncated: false,
result: '有什么我可以帮助你的吗?',
need_clear_history: false,
usage: { prompt_tokens: 2, completion_tokens: 0, total_tokens: 2 }
}
{
id: 'as-f7mrqpanb3',
object: 'chat.completion',
created: 1709724132,
sentence_id: 2,
is_end: true,
is_truncated: false,
result: '',
need_clear_history: false,
usage: { prompt_tokens: 2, completion_tokens: 8, total_tokens: 10 }
}
参数说明
注意:以下为Python SDK参数说明,其他SDK参数相关说明请参考Go SDK-对话Chat参数相关说明、Java SDK参数相关说明、Node.js SDK参数相关说明。
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
messages | List[dict] | 是 | 聊天上下文信息。说明: (1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话 (2)最后一个message为当前请求的信息,前面的message为历史对话信息 (3)必须为奇数个成员,成员中message的role必须依次为user(or function)、assistant (4)长度的限制: · 参考预置模型服务列表中,输入字符、输入Token等内容 · 其他,message中的content总长度不能超过4800个字符 |
functions | List[dict] | 否 | 一个可触发函数的描述列表,说明: (1)只有当参数当model值或endpoint对应的模型为ERNIE-Bot,functions字段有效 (2)长度限制请参考message说明 |
temperature | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)默认值: · 当model值或endpoint对应的模型为ERNIE-Bot或ERNIE-Bot-4,范围(0, 1.0],默认值为0.8 · 当model值或endpoint对应的模型为ERNIE-Bot-turbo,范围(0, 1.0],默认值为0.95 · 当model值或endpoint对应的模型为ChatLaw,范围是 [0,2.0],默认值是1 · 其他,范围(0, 1.0] |
top_k | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)默认0.95,范围 (0, 1.0],不能为0 (3)建议该参数和top_p只设置1个 (4)以下情况,不支持使用此参数: · 当model值或endpoint对应的模型为ERNIE-Bot、ERNIE-Bot-4、ERNIE-Bot-turbo或ChatLaw · 基于ERNIE-Bot-turbo SFT调优后的模型 |
top_p | float | 否 | 说明: (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 (2)取值范围 [0, 1.0] (3)默认值: · 当model值为ERNIE-Bot或ERNIE-Bot-4时,默认值为0.8 · 当model值为ERNIE-Bot-turbo,默认值为0.7 · 当model值为ChatLaw,表示温度采样的替代方法,其中模型考虑具有 top_p 概率质量的令牌的结果,默认值是1 |
penalty_score | float | 否 | 通过对已生成的token增加惩罚,减少重复生成的现象。说明: (1)值越大表示惩罚越大 (2)取值范围:[1.0, 2.0] (3)默认值,当model值或endpoint对应的模型值为以下时,penalty_score字段默认值为1.0: · ERNIE-Bot · ERNIE-Bot-4 · ERNIE-Bot-turbo · (4)当model值为ChatLaw,不支持此参数 |
stream | bool | 否 | 是否以流式接口的形式返回数据,默认false true:是,以流式接口的形式返回数据 false:否 |
model | string | 否 | 模型名称,用于指定平台支持预置服务的模型,说明: (1)不填写此字段时,默认模型为ERNIE-Bot-turbo (2)如果模型为平台支持预置服务的模型,此字段必填,且支持模型名称如下: · ERNIE-Bot-4:模型版本为ERNIE 4.0 · ERNIE-Bot:模型版本为ERNIE-3.5-8K · ERNIE-3.5-4K-0205:模型版本为ERNIE-3.5-4K-0205 · ERNIE-3.5-8K-0205:模型版本为ERNIE-3.5-8K-0205 · ERNIE-3.5-8K-1222:模型版本为ERNIE-3.5-8K-1222 · ERNIE-Speed:模型版本为ERNIE-Speed-8K · ERNIE-Speed-128k · ERNIE-Bot-turbo:模型为ERNIE Lite · ERNIE-Lite-8K-0308 · ERNIE-Tiny-8K · EB-turbo-AppBuilder:模型为ERNIE-Speed-AppBuilder · Gemma-7B-it · Yi-34B-Chat · BLOOMZ-7B · Qianfan-BLOOMZ-7B-compressed · Mixtral-8x7B-Instruct · Llama-2-7b-chat · Llama-2-13b-chat · Llama-2-70b-chat · Qianfan-Chinese-Llama-2-7B · Qianfan-Chinese-Llama-2-13B:模型版本为Qianfan-Chinese-Llama-2-13B-v1 · ChatGLM2-6B-32K · XuanYuan-70B-Chat-4bit · ChatLaw · AquilaChat-7B |
endpoint | string | 否 | 用于指定用户自行发布的模型服务,包括自行发布平台预置的模型、用户自定义模型。说明: (1)如果指定用户自行发布的模型服务,endpoint字段为必填,目前平台支持自行发布的模型服务,请参考模型列表-用户自行发布的模型服务列表,示例:Falcon-7B (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次,说明: 当model值为ChatLaw,不支持此参数 |
request_timeout | float | 否 | 请求超时时间,默认60秒,说明: 当model值为ChatLaw,不支持此参数 |
backoff_factor | float | 否 | 请求重试参数,用于指定重试的策略,默认为0,说明: 当model值为ChatLaw,不支持此参数 |
system | string | 否 | 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: (1)只有当参数model值或endpoint对应的模型为以下时,system字段有效: · ERNIE-Bot-4 · ERNIE-Bot · ERNIE-Bot-turbo · EB-turbo-AppBuilder (2)长度限制请参考message说明 (3)如果同时使用system和functions,可能暂无法保证使用效果,持续进行优化 |
stop | List[string] | 否 | 生成停止标识。当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: (1)每个元素长度不超过20字符。 (2)最多4个元素 (3)以下情况,不支持使用此参数: · 当model值或endpoint对应的模型为ERNIE-Bot-turbo、ChatLaw · 基于ERNIE-Bot-turbo SFT调优后的模型 |
disable_search | bool | 否 | 是否强制关闭实时搜索功能,说明: (1)默认false,表示不关闭 (2)当model值或endpoint对应的模型为ERNIE-Bot或ERNIE-Bot-4,该字段有效 |
enable_citation | bool | 否 | 是否开启上角标返回,说明: (1)开启后,有概率触发搜索溯源信息search_info,search_info内容见返回参数介绍 (2)默认false,不开启 (3)当model值或endpoint对应的模型为ERNIE-Bot或ERNIE-Bot-4,该字段有效 |
max_output_tokens | int | 否 | 指定模型最大输出token数,说明: (1)当参数model值或endpoint对应的模型为以下时,该字段有效: · ERNIE-Bot-4,取值范围[2, 2048] · ERNIE-Bot,取值范围[2, 2048] · ERNIE-3.5-4K-0205,取值范围[2, 2048] · ERNIE-3.5-8K-0205,取值范围[2, 2048] · ERNIE-3.5-8K-1222,取值范围[2, 2048] · ERNIE-Speed,取值范围[2, 1024] · ERNIE-Speed-128k,取值范围[2, 4096] · ERNIE-Bot-turbo,取值范围[2, 1024] · ERNIE-Lite-8K-0308,取值范围[2, 2048] · ERNIE Tiny,取值范围[2, 2048] (2)如果不设置此参数,最大输出token数为1024 |
response_format | string | 否 | 指定响应内容的格式,说明: (1)当model值或endpoint对应的模型为ERNIE-Bot或ERNIE-Bot-4,该字段有效 (2)可选值: · json_object:以json格式返回,可能出现不满足效果情况 · text:以文本格式返回 (3)如果不填写参数response_format值,默认为text |
user_id | string | 否 | 表示最终用户的唯一标识符 |
extra_parameters | Object | 否 | 第三方大模型推理高级参数,依据第三方大模型厂商不同而变化,说明: 当model值或endpoint对应的模型为ChatLaw,该字段必填 |
tool_choice | tool_choice | 否 | 在函数调用场景下,提示大模型选择指定的函数(非强制),说明: (1)指定的函数名必须在functions中存在 (2)只有当参数model值或endpoint对应的模型为ERNIE-Bot时,此字段有效 |
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[List[dict]] | 否 | function调用的一些历史示例,说明: (1)可以提供正例(正常触发)和反例(无需触发)的example ·正例:从历史请求数据中获取 ·反例: 当role = user,不会触发请求的query 当role = assistant,有固定的格式。function_call的name为空,arguments是空对象:"{}",thought可以填固定的:"我不需要调用任何工具" (2)兼容之前的 List[dict] 格式 |
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中传入 |
tool_choice说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
type | string | 是 | 指定工具类型,function |
function | function | 是 | 指定要使用的函数 |
name | string | 是 | 指定要使用的函数名 |
funcation_call说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
name | string | 是 | 触发的function名 |
arguments | string | 是 | 请求参数 |
thoughts | string | 否 | 模型思考过程 |
extra_parameters说明
名称 | 类型 | 必须 | 描述 |
---|---|---|---|
use_keyword | bool | 是 | 表示是否提取问答关键词以加强模型推理。使用use_keyword参数,可能会导致以下情况: (1)模型回答通识性问题下降 (2)在接口响应前,获取到提取的问答关键词,并将内容拼接到prompt中,最终接口返回参数prompt_tokens数会比用户输入多 |
use_reference | bool | 是 | 表示是否使用参考法条以加强推理。使用use_reference参数,可能会导致以下情况: (1)模型回答通识性问题下降 (2)在接口响应前,获取到参考法条,并将内容拼接到prompt中,最终接口返回参数prompt_tokens数会比用户输入多 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
id | string | 本轮对话的id |
object | string | 回包类型 chat.completion:多轮对话返回 |
created | int | 时间戳 |
sentence_id | int | 表示当前子句的序号。只有在流式接口模式下会返回该字段。 |
is_end | bool | 表示当前子句是否是最后一句。只有在流式接口模式下会返回该字段 |
is_truncated | bool | 当前生成的结果是否被截断 |
finish_reason | string | 输出内容标识,说明: (1)当model值或endpoint对应的模型为ERNIE-Bot、ERNIE-Bot-4时,会返回该字段 (2)标识说明: · normal:输出内容完全由大模型生成,未触发截断、替换 · stop:输出结果命中入参stop中指定的字段后被截断 · length:达到了最大的token数,根据EB返回结果is_truncated来截断 · content_filter:输出内容被截断、兜底、替换为**等 · function_call:调用了funtion call功能 |
search_info | dict | 搜索数据,当请求参数enable_citation为true并且触发搜索时,会返回该字段 |
result | string | 对话返回结果,说明: 如果使用ChatLaw模型,对话返回结果限制在1000个token |
need_clear_history | bool | 表示用户输入是否存在安全,是否关闭当前会话,清理历史会话信息。 true:是,表示用户输入存在安全风险,建议关闭当前会话,清理历史会话信息 false:否,表示用户输入无安全风险 |
ban_round | int | 当need_clear_history为true时,此字段会告知第几轮对话有敏感信息,如果是当前问题,ban_round=-1 |
usage | usage | token统计信息 |
search_info说明
名称 | 类型 | 描述 |
---|---|---|
search_results | List(search_result) | 搜索结果列表 |
search_result说明
名称 | 类型 | 描述 |
---|---|---|
index | int | 序号 |
url | string | 搜索结果URL |
title | string | 搜索结果标题 |
usage说明
名称 | 类型 | 描述 |
---|---|---|
prompt_tokens | int | 问题tokens数 |
completion_tokens | int | 回答tokens数 |
total_tokens | int | tokens总数 |