资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

对话Chat

千帆ModelBuilder提供了对话Chat相关模型API SDK,支持单轮对话、多轮对话、流式等调用。

注意事项

(1)本文内容适用Python、Go、Java和Node.js SDK,调用流程请查看SDK使用说明

(2)模型不同,调用SDK时,使用参数不同。请结合具体模型,查看参数使用说明进行调用。

  • 指定支持预置服务的模型,使用model参数指定支持预置服务的模型,详见请求参数说明。
  • 用户快速部署自行发布的模型服务,需使用参数endpoint,详见请求参数说明。

支持模型列表

支持的模型列表,及各模型支持的调用方法说明如下,更多详情见请求参数说明

模型 支持预置服务的模型
(使用model参数)
用户自行发布的模型服务
(使用endpoint参数)
ERNIE-4.0-8K
(即ERNIE-Bot-4)
ERNIE-4.0-8K-Preview
ERNIE-4.0-8K-Latest
ERNIE-4.0-8K-0613
ERNIE-4.0-Turbo-8K
ERNIE-4.0-Turbo-8K-Preview
ERNIE-4.0-Turbo-8K-Latest
ERNIE-4.0-Turbo-8K-0628
ERNIE-4.0-Turbo-128K
ERNIE-3.5-8K
(即ERNIE-Bot)
ERNIE-3.5-8K-Preview
ERNIE-3.5-128K
ERNIE-3.5-8K-0613
ERNIE-3.5-8K-0701
ERNIE-3.5-128K-Preview
ERNIE-Speed-Pro-128K
ERNIE-Speed-8K
(即ERNIE-Speed)
ERNIE-Speed-128k
ERNIE-Lite-8K
ERNIE-Lite-8K-0725
ERNIE-Lite-8K-0704
ERNIE-Lite-8K-0516
ERNIE-Lite-8K-0419
ERNIE-Lite-Pro-128K
ERNIE-Tiny-8K
ERNIE-Tiny-128K-0929
ERNIE-Novel-8K
ERNIE-Character-8K
ERNIE-Character-Fiction-8K
ERNIE-Character-Fiction-8K-Preview
ERNIE-Functions-8K
Qianfan-Dynamic-8K
Qianfan-Agent-Speed-8K
Qianfan-Agent-Speed-32K
Qianfan-Agent-Lite-8K
Gemma-2B-it
Gemma-7B-it
Yi-34B-Chat
Mixtral-8x7B-Instruct
Mistral-7B-Instruct
Llama-2-7b-chat
Linly-Chinese-LLaMA-2-7B
Qianfan-Chinese-Llama-2-7B
Qianfan-Chinese-Llama-2-7B-32K
Llama-2-13b-chat
Linly-Chinese-LLaMA-2-13B
Qianfan-Chinese-Llama-2-13B-v1
Qianfan-Chinese-Llama-2-13B-v2
Llama-2-70b-chat
Qianfan-Llama-2-70B-compressed
Qianfan-Chinese-Llama-2-70B
Qianfan-Chinese-Llama-2-1.3B
Meta-Llama-3-8B-Instruct
(即Meta-Llama-3-8B)
Meta-Llama-3-70B-Instruct
(即Meta-Llama-3-70B)
ChatGLM3-6B
chatglm3-6b-32k
ChatGLM2-6B-32K
ChatGLM2-6B-INT4
ChatGLM2-6B
Baichuan2-7B-Chat
Baichuan2-13B-Chat
XVERSE-13B-Chat
XuanYuan-70B-Chat-4bit
DISC-MedLLM
ChatLaw
Falcon-7B
Falcon-40B-Instruct
AquilaChat-7B
RWKV-4-World
BLOOMZ-7B
Qianfan-BLOOMZ-7B-compressed
RWKV-4-pile-14B
RWKV-Raven-14B
OpenLLaMA-7B
Dolly-12B
MPT-7B-Instruct
MPT-30B-instruct
OA-Pythia-12B-SFT-4

SDK调用

调用示例(单轮)

  • 指定支持预置服务的模型

使用model字段,指定平台支持预置服务的模型,调用示例如下。

import os
import qianfan

#通过环境变量初始化认证信息
# 方式一:【推荐】使用安全认证AK/SK鉴权
# 替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换,your_iam_sk,如何获取请查看https://cloud.baidu.com/doc/Reference/s/9jwvz2egb
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"

# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值,如何获取请参考https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fllg87pck
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"

chat_comp = qianfan.ChatCompletion()

# 指定特定模型
resp = chat_comp.do(model="ERNIE-3.5-8K", messages=[{
    "role": "user",
    "content": "你好"
}])

print(resp["body"])
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,如何获取请查看https://cloud.baidu.com/doc/Reference/s/9jwvz2egb
	os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
	os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")
    
    // 指定特定模型
	chat := qianfan.NewChatCompletion(
		qianfan.WithModel("ERNIE-3.5-8K"),
	)
	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,如何获取请查看https://cloud.baidu.com/doc/Reference/s/9jwvz2egb
        Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
        
        // 指定模型
       ChatResponse resp = qianfan.chatCompletion()
                .model("ERNIE-3.5-8K")
                .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,,如何获取请查看https://cloud.baidu.com/doc/Reference/s/9jwvz2egb
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"

# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"

chat_comp = qianfan.ChatCompletion()

# 使用自行发布的模型
resp = chat_comp.do(endpoint="your_custom_endpoint", messages=[{
    "role": "user",
    "content": "你好"
}])

# 可以通过resp["body"]获取接口返回的内容
print(resp["body"])
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();

返回示例(单轮)

{
        '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"

# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"

chat_comp = qianfan.ChatCompletion()

# 多轮对话
resp = chat_comp.do(messages=[{       # 调用默认模型,即 ERNIE-Bot-turbo
    "role": "user",
    "content": "你好"
},
{
    "role": "assistant",
    "content": "你好,请问有什么我可以帮助你的吗?"
},
{
    "role": "user",
    "content": "我在北京,周末可以去哪里玩?"
},
])
print(resp["body"])
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();

返回示例(多轮)

{
        "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},
    }
北京是一个拥有许多历史、文化和自然景观的城市,有很多地方可以探索。如果你在周末有空,以下是一些建议的景点和活动:

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"

# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"

chat_comp = qianfan.ChatCompletion()

resp = chat_comp.do(model="ERNIE-Bot-turbo", messages=[{
    "role": "user",
    "content": "你好"
}], stream=True)

for r in resp:
    print(r["body"])
# 输出:
# 您好!
# 有什么我可以帮助你的吗?
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();

返回示例(流式)

{'id': 'as-csh5xe4mcf', 'object': 'chat.completion', 'created': 1716897265, 'sentence_id': 0, 'is_end': False, 'is_truncated': False, 'result': '你好!', 'need_clear_history': False, 'finish_reason': 'normal', 'usage': {'prompt_tokens': 1, 'completion_tokens': 2, 'total_tokens': 3}}
{'id': 'as-csh5xe4mcf', 'object': 'chat.completion', 'created': 1716897266, 'sentence_id': 1, 'is_end': False, 'is_truncated': False, 'result': '请问有什么我可以帮助你的吗?', 'need_clear_history': False, 'finish_reason': 'normal', 'usage': {'prompt_tokens': 1, 'completion_tokens': 2, 'total_tokens': 3}}
{'id': 'as-csh5xe4mcf', 'object': 'chat.completion', 'created': 1716897267, 'sentence_id': 2, 'is_end': False, 'is_truncated': False, 'result': '无论是关于学习、工作、生活还是其他方面的问题,我都会尽力为你解答。', 'need_clear_history': False, 'finish_reason': 'normal', 'usage': {'prompt_tokens': 1, 'completion_tokens': 2, 'total_tokens': 3}}
{'id': 'as-csh5xe4mcf', 'object': 'chat.completion', 'created': 1716897267, 'sentence_id': 3, 'is_end': True, 'is_truncated': False, 'result': '', 'need_clear_history': False, 'finish_reason': 'normal', 'usage': {'prompt_tokens': 1, 'completion_tokens': 24, 'total_tokens': 25}}
你好,
有什么我可以帮助你的吗?
{"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 }
}

function call调用示例

import os
import qianfan
import json

#通过环境变量初始化认证信息
# 方式一:【推荐】使用安全认证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"

# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"

# 定义可被调用函数
def get_file_num(language: str) -> str:
    """获取数据库中指定语言的代码文件数量"""
    language_low = language.lower()
    language_map = {
        "c/c++": 35,
        "java": 10,
        "javascript": 25,
        "python": 35,
        "go": 32,
    }
    return str(language_map.get(language_low, 0))


# 定义函数schema
func_list = [{
    "name": "get_file_num",  # 函数名称
    "description": "获取内部数据库中以某一编程语言编写的文件数量",  # 函数描述
    "parameters": {
        "type": "object",
        "properties": {  # 参数schema,如果参数为空,设为空字典即可
            "language": {  # 参数名称
                "type": "string",  # 参数类型
                "description": "代码所运用的编程语言,例如:python、c/c++、go、java"  # 参数描述
            }
        },
        "required": ["language"]  # 必填参数(无默认值)
    }
}]

# 第一轮调用触发function_call
chat_comp = qianfan.Function()
query = "请帮我查询一下数据库中用python撰写的代码文件数量"
msgs = qianfan.QfMessages()
msgs.append(query, role='user')
resp = chat_comp.do(
    messages=msgs,
    functions=func_list
)
print("function_calling:", resp['body'].get('function_call'))

if resp.get("function_call"):
    # 获取函数名称、入参
    func_call_result = resp["function_call"]
    func_name = func_call_result["name"]
    language = json.loads(func_call_result["arguments"]).get("language")

    # 调用函数获得函数返回值
    func_resp = get_file_num(language)

    # 将函数返回值转换成json字符串
    func_content = json.dumps({
        "return": func_resp
    })

    # 添加到历史对话记录
    msgs.append(resp, role="assistant")
    msgs.append(func_content, role="function")

    # 再次调用chat_completion
    second_resp = chat_comp.do(
        messages=msgs,
        functions=func_list
    )

    # 得到答案
    print(second_resp['body']['result'])

function call响应示例

function_calling: {'name': 'get_file_num', 'arguments': '{"language": "python"}'}
数据库中用Python撰写的代码文件数量为35

请求参数

注意:以下为Python SDK参数说明,其他SDK参数相关说明请参考Go SDK-对话Chat参数相关说明Java SDK参数相关说明Node.js SDK参数相关说明

名称 类型 必填 描述
model string 模型名称,用于指定平台支持预置服务的模型,说明:
(1)不填写此字段时,默认模型为ERNIE-Lite-8K
(2)如果模型为平台支持预置服务的模型,此字段必填,model参数值,请查看本文支持模型列表-支持预置服务的模型列。
endpoint string 用于指定用户自行发布的模型服务,包括自行发布平台预置的模型、用户自定义模型。说明:
(1)如果指定用户自行发布的模型服务,endpoint字段为必填,目前平台支持自行发布的模型服务,请参考模型列表-用户自行发布的模型服务列表,示例:Falcon-7B
(2)用户自行发布服务,该字段值可以通过查看服务地址获取:打开模型服务-在线服务页面,选择创建的服务-点击详情页查看服务地址,endpoint值为https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/后面的地址,如下图所示
image.png
注意:
在创建服务页面,选择模型后,API地址会自动新增个后缀。例如选择模型RWKV-4-World,输入API地址为“test1”,endpoint的取值即为“ngxxxol8_test1”,如下图所示,如何发布服务请参考发布平台预置的模型服务快速部署自定义模型
image.png
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对应的模型为以下时,functions字段有效:
· ERNIE-3.5-8K
· ERNIE-3.5-8K-Preview
· ERNIE-3.5-128K
· ERNIE-3.5-8K-0613
· ERNIE-3.5-8K-0701
· ERNIE-3.5-128K-Preview
(2)长度限制请参考message说明
temperature float 说明:
(1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定
(2)默认值:
· 当model值或endpoint对应的模型为以下时,范围(0, 1.0],默认值为0.8:ERNIE-4.0-8K、ERNIE-4.0-8K-Preview、ERNIE-4.0-8K-Latest、ERNIE-4.0-8K-0613、ERNIE-4.0-Turbo-8K、ERNIE-4.0-Turbo-8K-Preview、ERNIE-4.0-Turbo-8K-Latest、ERNIE-4.0-Turbo-8K-0628、ERNIE-4.0-Turbo-128K、ERNIE-3.5-8K、ERNIE-3.5-8K-Preview、ERNIE-3.5-128K、 ERNIE-3.5-8K-0613、ERNIE-3.5-8K-0701、ERNIE-3.5-128K-Preview、ERNIE-Novel-8K、Qianfan-Dynamic-8K
· 当model值或endpoint对应的模型为以下时,范围(0, 1.0],默认值为0.95:ERNIE Lite系列、ERNIE-Speed-Pro-128K、ERNIE-Speed-8K、ERNIE-Speed-128k、ERNIE-Tiny-8K、ERNIE-Tiny-128K-0929、ERNIE-Character-8K、ERNIE-Character-Fiction-8K、ERNIE-Character-Fiction-8K-Preview、ERNIE-Functions-8K、Qianfan-Agent-Lite-8K、Qianfan-Agent-Speed-8K、Qianfan-Agent-Speed-32K
· 当model值或endpoint对应的模型为ChatLaw,范围是 [0,2.0],默认值是1
· 其他,范围(0, 1.0],不能为0
top_k float 说明:
(1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定
(2)默认0.95,范围 (0, 1.0],不能为0
(3)建议该参数和top_p只设置1个
(4)以下情况,不支持使用此参数:
· 当model值或endpoint对应的模型为ERNIE 4.0系列、ERNIE 4.0 Turbo系列、ERNIE 3.5系列、ERNIE Speed系列、ERNIE Lite系列、ERNIE Lite Pro系列、ERNIE Tiny系列、ERNIE-Novel-8K、ERNIE Character、ERNIE Functions、Qianfan-Dynamic-8K、Qianfan-Agent-Lite-8K、Qianfan-Agent-Speed-8K、、Qianfan-Agent-Speed-32K或ChatLaw
· 基于ERNIE-Lite-8K SFT调优后的模型
top_p float 说明:
(1)影响输出文本的多样性,取值越大,生成文本的多样性越强
(2)取值范围 [0, 1.0]
(3)默认值:
· 当model值或endpoint对应的模型为以下时,默认值为0.8:ERNIE 4.0系列、ERNIE 4.0 Turbo系列、ERNIE 3.5系列、ERNIE-Novel-8K、Qianfan-Dynamic-8K
· 当model值或endpoint对应的模型为以下时,默认值为0.7 :ERNIE Lite系列、ERNIE Speed系列、ERNIE Lite Pro系列、ERNIE Character、ERNIE Functions、Qianfan-Agent-Lite-8K、Qianfan-Agent-Speed-8K、Qianfan-Agent-Speed-32K
· 当model值为ChatLaw,表示温度采样的替代方法,其中模型考虑具有 top_p 概率质量的令牌的结果,默认值是1
penalty_score float 通过对已生成的token增加惩罚,减少重复生成的现象。说明:
(1)值越大表示惩罚越大
(2)取值范围:[1.0, 2.0]
(3)默认值,当model值或endpoint对应的模型值为以下时,penalty_score字段默认值为1.0:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE Speed系列
· ERNIE Lite系列
· ERNIE Lite Pro系列
· ERNIE-Novel-8K
· ERNIE Character
· ERNIE Functions
· Qianfan-Dynamic-8K
· Qianfan-Agent-Lite-8K
· Qianfan-Agent-Speed-8K
· Qianfan-Agent-Speed-32K
(4)当model值为ChatLaw,不支持此参数
stream bool 是否以流式接口的形式返回数据,默认false
true:是,以流式接口的形式返回数据
false:否
retry_count int 重试次数,默认1次,说明:
当model值或endpoint对应的模型为ChatLaw,不支持此参数
request_timeout float 请求超时时间,默认60秒,说明:
当model值或endpoint对应的模型为ChatLaw,不支持此参数
backoff_factor float 请求重试参数,用于指定重试的策略,默认为0,说明:
当model值或endpoint对应的模型为ChatLaw,不支持此参数
system string 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明:
(1)只有当参数model值或endpoint对应的模型为以下时,system字段有效:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE Lite系列
· ERNIE Lite Pro系列
· ERNIE Speed系列
· ERNIE Tiny系列
· ERNIE Character
· ERNIE-Novel-8K
· Qianfan-Dynamic-8K
· Qianfan-Agent-Lite-8K
· Qianfan-Agent-Speed-8K
· Qianfan-Agent-Speed-32K
(2)长度限制请参考message说明
(3)如果同时使用system和functions,可能暂无法保证使用效果,持续进行优化
stop List[string] 生成停止标识。当模型生成结果以stop中某个元素结尾时,停止文本生成。说明:
(1)每个元素长度不超过20字符。
(2)最多4个元素
(3)以下情况,不支持使用此参数:
· 当model值或endpoint对应的模型为ChatLaw
disable_search bool 是否强制关闭实时搜索功能,说明:
(1)默认false,表示不关闭
(2)当model值或endpoint对应的模型为以下时,该字段有效:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE-Novel-8K
· Qianfan-Dynamic-8K
enable_citation bool 是否开启上角标返回,说明:
(1)开启后,有概率触发搜索溯源信息search_info,search_info内容见返回参数介绍
(2)默认false,不开启
(3)当model值或endpoint对应的模型为以下时,该字段有效:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE-Novel-8K
· ERNIE Functions
· Qianfan-Dynamic-8K
enable_trace bool 是否返回搜索溯源信息,说明:
(1)如果开启,在触发了搜索增强的场景下,会返回搜索溯源信息search_info,search_info内容见响应参数介绍
(2)默认false,表示不开启
(3)当model值或endpoint对应的模型为以下时,此字段有效:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE-Novel-8K
· Qianfan-Dynamic-8K
min_output_tokens int 指定模型最小输出token数,说明:
(1)当model值或endpoint对应的模型为ERNIE-Lite-8K、ERNIE-Speed-8K、ERNIE-Lite-Pro-128K、ERNIE-Tiny-8K、ERNIE-Tiny-128K-0929、Qianfan-Agent-Lite-8K、Qianfan-Agent-Speed-8K、Qianfan-Agent-Speed-32K时,该字段有效
(2)该参数取值范围[2, 2048]
max_output_tokens int 指定模型最大输出token数,说明:支持模型及限制,可参考模型广场操作及模型列表中,输出区间、默认最大输出Tokens值
response_format string 指定响应内容的格式,说明:
(1)当model值或endpoint对应的模型为以下时,该字段有效:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE-Novel-8K
· Qianfan-Dynamic-8K
(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 3.5系列
· Qianfan-Dynamic-8K
logprobs bool 是否在输出token的时候返回对数概率,说明:
(1)只有先经过SFT模型训练后发布服务,才能使用该参数
(2)可选值:
· true:在响应消息体中返回该内容
· false:不返回,默认为false
(3)当model值或endpoint对应的模型为以下时,该字段有效:
· ERNIE-Tiny-128K-0929
· Qianfan-Chinese-Llama-2-13B-v1
· Qianfan-Chinese-Llama-2-13b-v2
· Qianfan-Chinese-Llama-2-7b-32K
· Qianfan-Chinese-Llama-2-1.3B
· ChatGLM2-6B
· Baichuan2-7B-Chat
· Baichuan2-13B-Chat
top_logprobs int 指定为每个token位置返回多少最有可能的token,说明:
(1)只有先经过SFT模型训练后发布服务,才能使用该参数
(2)当logprobs为true,该参数必填
(3)取值范围:[0,5]
(4)当model值或endpoint对应的模型为以下时,该字段有效:
· ERNIE-Tiny-128K-0929
· Qianfan-Chinese-Llama-2-13B-v1
· Qianfan-Chinese-Llama-2-13b-v2
· Qianfan-Chinese-Llama-2-7b-32K
· Qianfan-Chinese-Llama-2-1.3B
· ChatGLM2-6B
· Baichuan2-7B-Chat
· Baichuan2-13B-Chat
frequency_penalty float 正值根据迄今为止文本中的现有频率对新token进行惩罚,从而降低模型逐字重复同一行的可能性;说明:
(1)默认0.1,取值范围[-2.0, 2.0]
(2)只有当参数当model值或endpoint对应的模型为以下时,该字段有效:
· ERNIE-Speed-8K
· ERNIE-Speed-128K
· ERNIE-Speed-Pro-128K
· ERNIE-Lite-8K
· ERNIE-Lite-128K-0419
· ERNIE-Lite-Pro-128K
· ERNIE-Tiny-8K
· ERNIE-Tiny-128K-0929
· Qianfan-Agent-Lite-8K
· Qianfan-Agent-Speed-8K
· Qianfan-Agent-Speed-32K
presence_penalty float 正值根据token记目前是否出现在文本中来对其进行惩罚,从而增加模型谈论新主题的可能性;说明:
(1)默认0.0,取值范围[-2.0, 2.0]
(2)只有当参数当model值或endpoint对应的模型为以下时,该字段有效:
· ERNIE-Speed-8K
· ERNIE-Speed-128K
· ERNIE-Speed-Pro-128K
· ERNIE-Lite-8K
· ERNIE-Lite-128K-0419
· ERNIE-Lite-Pro-128K
· ERNIE-Tiny-8K
· ERNIE-Tiny-128K-0929
· Qianfan-Agent-Lite-8K
· Qianfan-Agent-Speed-8K
· Qianfan-Agent-Speed-32K
enable_system_memory bool 是否开启系统记忆,说明:
(1)可选值:
false:未开启,默认false
true:表示开启,开启后,system_memory_id字段必填
(2)当model值或endpoint对应的模型值为以下时,该字段有效:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE-Novel-8K
system_memory_id string 系统记忆ID,用于读取对应ID下的系统记忆,读取到的记忆文本内容会拼接message参与请求推理,说明
(1)当model值或endpoint对应的模型值为以下时,该字段有效:
· ERNIE 4.0系列
· ERNIE 4.0 Turbo系列
· ERNIE 3.5系列
· ERNIE-Novel-8K
enable_user_memory bool 是否开启用户记忆,说明:
(1)false:未开启,默认false
(2)true:表示开启,开启后,user_id 字段必填
(3)当model值或endpoint对应的模型值为以下时,该字段有效:
· ERNIE Character
user_memory_extract_level int 用户记忆抽取级别,说明:
(1)可选值如下:
· 0:关闭抽取
· 1:实时抽取-普通抽取
· 2:实时抽取-高级抽取
(2)当model值或endpoint对应的模型值为以下时,该字段有效:
· ERNIE Character
metadata map<string,string> 说明:
(1)元素个数最大支持16个
(2)key和value必须都是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[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 指定要使用的函数名

function_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-3.5-8K、ERNIE-4.0-8K或ERNIE-Functions-8K时,会返回该字段
(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:否,表示用户输入无安全风险
flag int 说明:返回flag表示触发安全
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总数
上一篇
推理服务API V1介绍
下一篇
续写Completions