ERNIE-Novel-8K
ERNIE-Novel-8K是百度自研通用大语言模型,在小说续写能力上有明显优势,也可用在短剧、电影等场景。本文介绍了相关API。
功能介绍
调用本接口,发起一次对话请求。
在线调试
百度智能云千帆提供了 API在线调试平台-示例代码 ,用于帮助开发者调试接口,平台集成快速检索、查看开发文档、查看在线调用的请求内容和返回结果、复制和下载示例代码等功能,简单易用,更多内容请查看API在线调试介绍。
SDK调用
使用说明
本文内容适用千帆Python、Go、Java和Node.js SDK,SDK调用流程请参考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值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"
chat_comp = qianfan.ChatCompletion()
# 指定特定模型
resp = chat_comp.do(model="ERNIE-Novel-8K", messages=[{
"role": "user",
"content": "第二天下午,羽林卿卿来到了A市。“你怎么在这儿?”,浑厚的声线从卿卿的身后传来。卿卿转身:“真是踏破铁鞋无觅处,得来全不费工夫。我就是过来找你!”叶风白林听后一怔,还没来得及反应,“啪!”卿卿将委任状摔到了他的脸上,“这就是你做的好事?!"
}],system="你是一位优秀的网文小说作家,你需要根据【上文】内容进行续写,请保持上文的语言风格、结构特色,生成的内容和上文衔接紧密。\n*写作要求:\n**1.**不要写结尾:**一定不要有结尾!确保故事留下悬念\n2.*增加人物互动:*侧重描写人物之间的对话、动作等互动细节,使小说更加生动有趣,吸引读者的兴趣。\n3.**情节丰富:**情节要有合理反转,出人意料的发展,或者能够带给读者较高期待感的情节。\n**注意事项*:\n1.不要涉及暴力黄色\n2.不要涉及政治人物")
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.WithModel("ERNIE-Novel-8K"),
)
resp, _ := chat.Do(
context.TODO(),
&qianfan.ChatCompletionRequest{
Messages: []qianfan.ChatCompletionMessage{
qianfan.ChatCompletionUserMessage("第二天下午,羽林卿卿来到了A市。“你怎么在这儿?”,浑厚的声线从卿卿的身后传来。卿卿转身:“真是踏破铁鞋无觅处,得来全不费工夫。我就是过来找你!”叶风白林听后一怔,还没来得及反应,“啪!”卿卿将委任状摔到了他的脸上,“这就是你做的好事?!"),
},
System:"你是一位优秀的网文小说作家,你需要根据【上文】内容进行续写,请保持上文的语言风格、结构特色,生成的内容和上文衔接紧密。\n*写作要求:\n**1.**不要写结尾:**一定不要有结尾!确保故事留下悬念\n2.*增加人物互动:*侧重描写人物之间的对话、动作等互动细节,使小说更加生动有趣,吸引读者的兴趣。\n3.**情节丰富:**情节要有合理反转,出人意料的发展,或者能够带给读者较高期待感的情节。\n**注意事项*:\n1.不要涉及暴力黄色\n2.不要涉及政治人物",
},
)
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-Novel-8K")
.system("你是一位优秀的网文小说作家,你需要根据【上文】内容进行续写,请保持上文的语言风格、结构特色,生成的内容和上文衔接紧密。\n*写作要求:\n**1.**不要写结尾:**一定不要有结尾!确保故事留下悬念\n2.*增加人物互动:*侧重描写人物之间的对话、动作等互动细节,使小说更加生动有趣,吸引读者的兴趣。\n3.**情节丰富:**情节要有合理反转,出人意料的发展,或者能够带给读者较高期待感的情节。\n**注意事项*:\n1.不要涉及暴力黄色\n2.不要涉及政治人物")
.addMessage("user", "第二天下午,羽林卿卿来到了A市。“你怎么在这儿?”,浑厚的声线从卿卿的身后传来。卿卿转身:“真是踏破铁鞋无觅处,得来全不费工夫。我就是过来找你!”叶风白林听后一怔,还没来得及反应,“啪!”卿卿将委任状摔到了他的脸上,“这就是你做的好事?!")
.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: '第二天下午,羽林卿卿来到了A市。“你怎么在这儿?”,浑厚的声线从卿卿的身后传来。卿卿转身:“真是踏破铁鞋无觅处,得来全不费工夫。我就是过来找你!”叶风白林听后一怔,还没来得及反应,“啪!”卿卿将委任状摔到了他的脸上,“这就是你做的好事?!',
},
],
system:"你是一位优秀的网文小说作家,你需要根据【上文】内容进行续写,请保持上文的语言风格、结构特色,生成的内容和上文衔接紧密。\n*写作要求:\n**1.**不要写结尾:**一定不要有结尾!确保故事留下悬念\n2.*增加人物互动:*侧重描写人物之间的对话、动作等互动细节,使小说更加生动有趣,吸引读者的兴趣。\n3.**情节丰富:**情节要有合理反转,出人意料的发展,或者能够带给读者较高期待感的情节。\n**注意事项*:\n1.不要涉及暴力黄色\n2.不要涉及政治人物"
}, 'ERNIE-Novel-8K');
console.log(resp);
}
main();
返回示例
{
'id': 'as-75q7q2i2tm',
'object': 'chat.completion',
'created': 1719051683,
'result': '叶风白林被羽林卿卿的突然出现和激烈的反应弄得一愣,他低头捡起那张委任状,看了一眼,脸色微微一变。\n\n“你听我解释,卿卿。”他深吸一口气,尽量让自己保持冷静,“这个委任状的事情,并不是你想的那样的。”\n\n“不是我想的这样?那是怎样?”羽林卿卿冷笑一声,双手环胸,一脸嘲讽地看着他,“你背叛了我们的约定,还想要怎么解释?”\n\n“我没有背叛我们的约定,卿卿。”叶风白林看着她,眼神坚定,“这个委任状,是上面直接下来的命令,我根本没有选择的余地。”\n\n“没有选择的余地?”羽林卿卿眉头一挑,“那你为什么不告诉我?为什么要瞒着我?”\n\n“我……”叶风白林张了张嘴,却发现自己无言以对。他确实没有告诉羽林卿卿,因为他知道,如果告诉她,她一定会像现在这样生气。\n\n“你无话可说了吧?”羽林卿卿冷笑一声,“叶风白林,我真的对你很失望。”\n\n说完,她转身就要走。叶风白林见状,连忙拉住她的手腕:“卿卿,你听我说,我真的不是故意的。我知道我错了,我不应该瞒着你,但是请你给我一个解释的机会。”\n\n羽林卿卿看着他,眼中闪过一丝犹豫。她深吸一口气,然后转身看向他:“好,我给你一个解释的机会。但是,如果你不能给我一个满意的解释,那我们之间,就真的完了。”\n\n叶风白林看着她,眼中闪过一丝坚定:“谢谢你,卿卿。我一定会给你一个满意的解释。”\n\n两人相视而坐,叶风白林开始解释起整个事件的经过。他讲述了自己是如何接到这个委任状的,以及自己为什么没有告诉羽林卿卿的原因。他的话语中充满了真诚和歉意,让羽林卿卿不禁开始重新思考整个事件。\n\n听着叶风白林的解释,羽林卿卿心中的怒火渐渐平息了下来。她看着眼前的男人,心中五味杂陈。她知道,叶风白林并没有背叛她,也没有背叛他们的约定。他只是被迫接受了这个委任状,而没有告诉她,也只是因为不想让她担心。\n\n“对不起,卿卿。”叶风白林看着她,眼中满是歉意,“我知道我错了,我不应该瞒着你。但是请你相信我,我真的没有背叛你。”\n\n羽林卿卿看着他,眼中闪过一丝泪光。她深吸一口气,然后轻轻地点了点头:“我相信你,叶风白林。”\n\n两人相视而笑,心中的隔阂在这一刻烟消云散。他们知道,无论未来会遇到什么困难和挑战,只要彼此信任、相互扶持,就一定能够度过难关。',
'is_truncated': False,
'need_clear_history': False,
'finish_reason': 'normal',
'usage': {'prompt_tokens': 197, 'completion_tokens': 540, 'total_tokens': 737}
}
叶风白林被羽林卿卿的突然出现和激烈的反应弄得一愣,他低头捡起那张委任状,看了一眼,脸色微微一变。
“你听我解释,卿卿。”他深吸一口气,尽量让自己保持冷静,“这个委任状的事情,并不是你想的那样的。”
“不是我想的这样?那是怎样?”羽林卿卿冷笑一声,双手环胸,一脸嘲讽地看着他,“你背叛了我们的约定,还想要怎么解释?”
“我没有背叛我们的约定,卿卿。”叶风白林看着她,眼神坚定,“这个委任状,是上面直接下来的命令,我根本没有选择的余地。”
“没有选择的余地?”羽林卿卿眉头一挑,“那你为什么不告诉我?为什么要瞒着我?”
“我……”叶风白林张了张嘴,却发现自己无言以对。他确实没有告诉羽林卿卿,因为他知道,如果告诉她,她一定会像现在这样生气。
“你无话可说了吧?”羽林卿卿冷笑一声,“叶风白林,我真的对你很失望。”
说完,她转身就要走。叶风白林见状,连忙拉住她的手腕:“卿卿,你听我说,我真的不是故意的。我知道我错了,我不应该瞒着你,但是请你给我一个解释的机会。”
羽林卿卿看着他,眼中闪过一丝犹豫。她深吸一口气,然后转身看向他:“好,我给你一个解释的机会。但是,如果你不能给我一个满意的解释,那我们之间,就真的完了。”
叶风白林看着她,眼中闪过一丝坚定:“谢谢你,卿卿。我一定会给你一个满意的解释。”
两人相视而坐,叶风白林开始解释起整个事件的经过。他讲述了自己是如何接到这个委任状的,以及自己为什么没有告诉羽林卿卿的原因。他的话语中充满了真诚和歉意,让羽林卿卿不禁开始重新思考整个事件。
听着叶风白林的解释,羽林卿卿心中的怒火渐渐平息了下来。她看着眼前的男人,心中五味杂陈。她知道,叶风白林并没有背叛她,也没有背叛他们的约定。他只是被迫接受了这个委任状,而没有告诉她,也只是因为不想让她担心。
“对不起,卿卿。”叶风白林看着她,眼中满是歉意,“我知道我错了,我不应该瞒着你。但是请你相信我,我真的没有背叛你。”
羽林卿卿看着他,眼中闪过一丝泪光。她深吸一口气,然后轻轻地点了点头:“我相信你,叶风白林。”
两人相视而笑,心中的隔阂在这一刻烟消云散。他们知道,无论未来会遇到什么困难和挑战,只要彼此信任、相互扶持,就一定能够度过难关。
叶风白林被羽林卿卿的突然出现和激烈的反应弄得一愣,他低头捡起那张委任状,看了一眼,脸色微微一变。
“你听我解释,卿卿。”他深吸一口气,尽量让自己保持冷静,“这个委任状的事情,并不是你想的那样的。”
“不是我想的这样?那是怎样?”羽林卿卿冷笑一声,双手环胸,一脸嘲讽地看着他,“你背叛了我们的约定,还想要怎么解释?”
“我没有背叛我们的约定,卿卿。”叶风白林看着她,眼神坚定,“这个委任状,是上面直接下来的命令,我根本没有选择的余地。”
“没有选择的余地?”羽林卿卿眉头一挑,“那你为什么不告诉我?为什么要瞒着我?”
“我……”叶风白林张了张嘴,却发现自己无言以对。他确实没有告诉羽林卿卿,因为他知道,如果告诉她,她一定会像现在这样生气。
“你无话可说了吧?”羽林卿卿冷笑一声,“叶风白林,我真的对你很失望。”
说完,她转身就要走。叶风白林见状,连忙拉住她的手腕:“卿卿,你听我说,我真的不是故意的。我知道我错了,我不应该瞒着你,但是请你给我一个解释的机会。”
羽林卿卿看着他,眼中闪过一丝犹豫。她深吸一口气,然后转身看向他:“好,我给你一个解释的机会。但是,如果你不能给我一个满意的解释,那我们之间,就真的完了。”
叶风白林看着她,眼中闪过一丝坚定:“谢谢你,卿卿。我一定会给你一个满意的解释。”
两人相视而坐,叶风白林开始解释起整个事件的经过。他讲述了自己是如何接到这个委任状的,以及自己为什么没有告诉羽林卿卿的原因。他的话语中充满了真诚和歉意,让羽林卿卿不禁开始重新思考整个事件。
听着叶风白林的解释,羽林卿卿心中的怒火渐渐平息了下来。她看着眼前的男人,心中五味杂陈。她知道,叶风白林并没有背叛她,也没有背叛他们的约定。他只是被迫接受了这个委任状,而没有告诉她,也只是因为不想让她担心。
“对不起,卿卿。”叶风白林看着她,眼中满是歉意,“我知道我错了,我不应该瞒着你。但是请你相信我,我真的没有背叛你。”
羽林卿卿看着他,眼中闪过一丝泪光。她深吸一口气,然后轻轻地点了点头:“我相信你,叶风白林。”
两人相视而笑,心中的隔阂在这一刻烟消云散。他们知道,无论未来会遇到什么困难和挑战,只要彼此信任、相互扶持,就一定能够度过难关。
{
headers: {...},
id: 'as-vbth613hw7',
object: 'chat.completion',
created: 1719214694,
result: "叶风白林被羽林卿卿的突然出现和激烈的反应弄得一愣,他低头捡起那张委任状,看了一眼,脸色微微一变。\n\n“你听我解释,卿卿。”他深吸一口气,尽量让自己保持冷静,“这个委任状的事情,并不是你想的那样的。”\n\n“不是我想的这样?那是怎样?”羽林卿卿冷笑一声,双手环胸,一脸嘲讽地看着他,“你背叛了我们的约定,还想要怎么解释?”\n\n“我没有背叛我们的约定,卿卿。”叶风白林看着她,眼神坚定,“这个委任状,是上面直接下来的命令,我根本没有选择的余地。”\n\n“没有选择的余地?”羽林卿卿眉头一挑,“那你为什么不告诉我?为什么要瞒着我?”\n\n“我……”叶风白林张了张嘴,却发现自己无言以对。他确实没有告诉羽林卿卿,因为他知道,如果告诉她,她一定会像现在这样生气。\n\n“你无话可说了吧?”羽林卿卿冷笑一声,“叶风白林,我真的对你很失望。”\n\n说完,她转身就要走。叶风白林见状,连忙拉住她的手腕:“卿卿,你听我说,我真的不是故意的。我知道我错了,我不应该瞒着你,但是请你给我一个解释的机会。”\n\n羽林卿卿看着他,眼中闪过一丝犹豫。她深吸一口气,然后转身看向他:“好,我给你一个解释的机会。但是,如果你不能给我一个满意的解释,那我们之间,就真的完了。”\n\n叶风白林看着她,眼中闪过一丝坚定:“谢谢你,卿卿。我一定会给你一个满意的解释。”\n\n两人相视而坐,叶风白林开始解释起整个事件的经过。他讲述了自己是如何接到这个委任状的,以及自己为什么没有告诉羽林卿卿的原因。他的话语中充满了真诚和歉意,让羽林卿卿不禁开始重新思考整个事件。\n\n听着叶风白林的解释,羽林卿卿心中的怒火渐渐平息了下来。她看着眼前的男人,心中五味杂陈。她知道,叶风白林并没有背叛她,也没有背叛他们的约定。他只是被迫接受了这个委任状,而没有告诉她,也只是因为不想让她担心。\n\n“对不起,卿卿。”叶风白林看着她,眼中满是歉意,“我知道我错了,我不应该瞒着你。但是请你相信我,我真的没有背叛你。”\n\n羽林卿卿看着他,眼中闪过一丝泪光。她深吸一口气,然后轻轻地点了点头:“我相信你,叶风白林。”\n\n两人相视而笑,心中的隔阂在这一刻烟消云散。他们知道,无论未来会遇到什么困难和挑战,只要彼此信任、相互扶持,就一定能够度过难关。",
is_truncated: false,
need_clear_history: false,
finish_reason: 'normal',
usage: { prompt_tokens: 197, completion_tokens: 540, total_tokens: 737 }
}
请求参数
注意:以下为Python SDK参数说明,其他SDK参数相关说明请参考Go SDK-对话Chat参数相关说明、Java SDK参数相关说明、Node.js SDK参数相关说明。
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
messages | List(message) | 是 | 聊天上下文信息。说明: (1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话,例如: · 1个成员示例, "messages": [ {"role": "user","content": "你好"}] · 3个成员示例, "messages": [ {"role": "user","content": "你好"},{"role":"assistant","content":"需要什么帮助"},{"role":"user","content":"自我介绍下"}] (2)最后一个message为当前请求的信息,前面的message为历史对话信息 (3)成员数目必须为奇数,成员中message的role值说明如下:奇数位message的role值必须为user,偶数位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 (4)message中的content总长度和system字段总内容不能超过20000个字符,且不能超过5120 tokens |
model | string | 是 | 模型名称,用于指定平台支持预置服务的模型,该字段为固定值ERNIE-Novel-8K |
temperature | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)默认0.8,范围 (0, 1.0],不能为0 |
top_p | float | 否 | 说明: (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 (2)默认0.8,取值范围 [0, 1.0] |
penalty_score | float | 否 | 通过对已生成的token增加惩罚,减少重复生成的现象。说明: (1)值越大表示惩罚越大 (2)默认1.0,取值范围:[1.0, 2.0] |
stream | bool | 否 | 是否以流式接口的形式返回数据,默认false |
enable_system_memory | bool | 否 | 是否开启系统记忆,说明: (1)false:未开启,默认false (2)true:表示开启,开启后,system_memory_id字段必填 |
system_memory_id | string | 否 | 系统记忆ID,说明: (1)用于读取对应ID下的系统记忆,读取到的记忆文本内容会拼接message参与请求推理 (2)通过调用创建系统记忆接口,返回的systemMemoryId字段获取 |
system | string | 否 | 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: (1)长度限制,message中的content总长度和system字段总内容不能超过20000个字符,且不能超过5120 tokens |
stop | List(string) | 否 | 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: (1)每个元素长度不超过20字符 (2)最多4个元素 |
disable_search | bool | 否 | 是否强制关闭实时搜索功能,可选值: · true:关闭 · flase:表示不关闭,默认false |
enable_citation | bool | 否 | 是否开启上角标返回,说明: (1)开启后,有概率触发搜索溯源信息search_info,search_info内容见响应参数介绍 (2)默认false,不开启 (3)注意:本字段不控制是否关闭实时搜索功能,该功能请参见disable_search字段。如果设置了disable_search=true,那么本字段无效 |
enable_trace | bool | 否 | 是否返回搜索溯源信息,说明: (1)如果开启,在触发了搜索增强的场景下,会返回搜索溯源信息search_info,search_info内容见响应参数介绍 (2)默认false,表示不开启 (3)注意:本字段不控制是否关闭实时搜索功能,该功能请参见disable_search字段。如果设置了disable_search=true,那么本字段无效 |
max_output_tokens | int | 否 | 指定模型最大输出token数,说明: (1)如果设置此参数,范围[2, 2048] (2)如果不设置此参数,最大输出token数为1024 |
response_format | string | 否 | 指定响应内容的格式,说明: (1)可选值: · json_object:以json格式返回,可能出现不满足效果情况 · text:以文本格式返回 (2)如果不填写参数response_format值,默认为text |
user_id | string | 否 | 表示最终用户的唯一标识符 |
retry_count | int | 否 | 重试次数,默认1次 |
request_timeout | float | 否 | 请求超时时间,默认60秒 |
backoff_factor | float | 否 | 请求重试参数,用于指定重试的策略,默认为0 |
message说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
role | string | 是 | 当前支持以下: user: 表示用户 assistant: 表示对话助手 |
content | string | 是 | 对话内容 |
name | string | 否 | message作者 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
id | string | 本轮对话的id |
object | string | 回包类型 chat.completion:多轮对话返回 |
created | int | 时间戳 |
sentence_id | int | 表示当前子句的序号。只有在流式接口模式下会返回该字段 |
is_end | bool | 表示当前子句是否是最后一句。只有在流式接口模式下会返回该字段 |
is_truncated | bool | 当前生成的结果是否被截断 |
finish_reason | string | 输出内容标识,说明: · normal:输出内容完全由大模型生成,未触发截断、替换 · stop:输出结果命中入参stop中指定的字段后被截断 · length:达到了最大的token数,根据EB返回结果is_truncated来截断 · content_filter:输出内容被截断、兜底、替换为**等 |
search_info | search_info | 搜索数据,当请求参数enable_citation或enable_trace为true,并且触发搜索时,会返回该字段 |
result | string | 对话返回结果 |
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总数 |
HTTP调用
鉴权说明
本文API,支持2种鉴权方式。不同鉴权方式,调用方式不同,使用Header、Query参数不同,详见本文请求说明。开发者可以选择以下任一种方式进行鉴权。
请求说明
- 基本信息
请求地址: https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-novel-8k
请求方式: POST
- Header参数
根据不同鉴权方式,查看对应Header参数。
访问凭证access_token鉴权
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
Content-Type | string | 是 | 固定值application/json |
基于安全认证AK/SK进行签名计算鉴权
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
Content-Type | string | 是 | 固定值application/json |
x-bce-date | string | 否 | 当前时间,遵循ISO8601规范,格式如2016-04-06T08:23:49Z |
Authorization | string | 是 | 用于验证请求合法性的认证信息,更多内容请参考鉴权认证机制,签名工具可参考IAM签名工具 |
- Query参数
只有访问凭证access_token鉴权方式,需使用Query参数。
访问凭证access_token鉴权
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
access_token | string | 是 | 通过API Key和Secret Key获取的access_token,参考Access Token获取 |
- Body参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
messages | List(message) | 是 | 聊天上下文信息。说明: (1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话,例如: · 1个成员示例, "messages": [ {"role": "user","content": "你好"}] · 3个成员示例, "messages": [ {"role": "user","content": "你好"},{"role":"assistant","content":"需要什么帮助"},{"role":"user","content":"自我介绍下"}] (2)最后一个message为当前请求的信息,前面的message为历史对话信息 (3)成员数目必须为奇数,成员中message的role值说明如下:奇数位message的role值必须为user,偶数位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 (4)message中的content总长度和system字段总内容不能超过20000个字符,且不能超过5120 tokens |
temperature | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)默认0.8,范围 (0, 1.0],不能为0 |
top_p | float | 否 | 说明: (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 (2)默认0.8,取值范围 [0, 1.0] |
penalty_score | float | 否 | 通过对已生成的token增加惩罚,减少重复生成的现象。说明: (1)值越大表示惩罚越大 (2)默认1.0,取值范围:[1.0, 2.0] |
stream | bool | 否 | 是否以流式接口的形式返回数据,默认false |
enable_system_memory | bool | 否 | 是否开启系统记忆,说明: (1)false:未开启,默认false (2)true:表示开启,开启后,system_memory_id字段必填 |
system_memory_id | string | 否 | 系统记忆ID,说明: (1)用于读取对应ID下的系统记忆,读取到的记忆文本内容会拼接message参与请求推理 (2)通过调用创建系统记忆接口,返回的systemMemoryId字段获取 |
system | string | 否 | 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: (1)长度限制,message中的content总长度和system字段总内容不能超过20000个字符,且不能超过5120 tokens |
stop | List(string) | 否 | 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: (1)每个元素长度不超过20字符 (2)最多4个元素 |
disable_search | bool | 否 | 是否强制关闭实时搜索功能,可选值: · true:关闭 · flase:表示不关闭,默认false |
enable_citation | bool | 否 | 是否开启上角标返回,说明: (1)开启后,有概率触发搜索溯源信息search_info,search_info内容见响应参数介绍 (2)默认false,不开启 (3)注意:本字段不控制是否关闭实时搜索功能,该功能请参见disable_search字段。如果设置了disable_search=true,那么本字段无效 |
enable_trace | bool | 否 | 是否返回搜索溯源信息,说明: (1)如果开启,在触发了搜索增强的场景下,会返回搜索溯源信息search_info,search_info内容见响应参数介绍 (2)默认false,表示不开启 (3)注意:本字段不控制是否关闭实时搜索功能,该功能请参见disable_search字段。如果设置了disable_search=true,那么本字段无效 |
max_output_tokens | int | 否 | 指定模型最大输出token数,说明: (1)如果设置此参数,范围[2, 2048] (2)如果不设置此参数,最大输出token数为1024 |
response_format | string | 否 | 指定响应内容的格式,说明: (1)可选值: · json_object:以json格式返回,可能出现不满足效果情况 · text:以文本格式返回 (2)如果不填写参数response_format值,默认为text |
user_id | string | 否 | 表示最终用户的唯一标识符 |
message说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
role | string | 是 | 当前支持以下: user: 表示用户 assistant: 表示对话助手 |
content | string | 是 | 对话内容 |
name | string | 否 | message作者 |
响应说明
- 响应头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 | 本轮对话的id |
object | string | 回包类型 chat.completion:多轮对话返回 |
created | int | 时间戳 |
sentence_id | int | 表示当前子句的序号。只有在流式接口模式下会返回该字段 |
is_end | bool | 表示当前子句是否是最后一句。只有在流式接口模式下会返回该字段 |
is_truncated | bool | 当前生成的结果是否被截断 |
finish_reason | string | 输出内容标识,说明: · normal:输出内容完全由大模型生成,未触发截断、替换 · stop:输出结果命中入参stop中指定的字段后被截断 · length:达到了最大的token数,根据EB返回结果is_truncated来截断 · content_filter:输出内容被截断、兜底、替换为**等 |
search_info | search_info | 搜索数据,当请求参数enable_citation或enable_trace为true,并且触发搜索时,会返回该字段 |
result | string | 对话返回结果 |
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总数 |
注意 :同步模式和流式模式,响应参数返回不同,详细内容参考示例描述。
- 同步模式下,响应参数为以上字段的完整json包。
- 流式模式下,各字段的响应参数为 data: {响应参数}。
请求示例
以访问凭证access_token鉴权方式为例,说明如何调用API,示例如下。
# 步骤一,获取access_token,替换下列示例中的API Key与Secret Key
curl 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[API Key]&client_secret=[Secret Key]'
# 步骤二,调用本文API,使用步骤一获取的access_token,替换下列示例中的”调用接口获取的access_token“
curl -X POST 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-novel-8k?access_token=[步骤一调用接口获取的access_token]' -d '{
"messages": [
{"role":"user","content":"第二天下午,羽林卿卿来到了A市。“你怎么在这儿?”,浑厚的声线从卿卿的身后传来。卿卿转身:“真是踏破铁鞋无觅处,得来全不费工夫。我就是过来找你!”叶风白林听后一怔,还没来得及反应,“啪!”卿卿将委任状摔到了他的脸上,“这就是你做的好事?!"}
],
"system":"你是一位优秀的网文小说作家,你需要根据【上文】内容进行续写,请保持上文的语言风格、结构特色,生成的内容和上文衔接紧密。\n*写作要求:\n**1.**不要写结尾:**一定不要有结尾!确保故事留下悬念\n2.*增加人物互动:*侧重描写人物之间的对话、动作等互动细节,使小说更加生动有趣,吸引读者的兴趣。\n3.**情节丰富:**情节要有合理反转,出人意料的发展,或者能够带给读者较高期待感的情节。\n**注意事项*:\n1.不要涉及暴力黄色\n2.不要涉及政治人物"
}' | iconv -f utf-8 -t utf-8
import requests
import json
def get_access_token():
"""
使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key
"""
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]"
payload = json.dumps("")
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
return response.json().get("access_token")
def main():
url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-novel-8k?access_token=" + get_access_token()
payload = json.dumps({
"messages": [
{
"role": "user",
"content": "第二天下午,羽林卿卿来到了A市。“你怎么在这儿?”,浑厚的声线从卿卿的身后传来。卿卿转身:“真是踏破铁鞋无觅处,得来全不费工夫。我就是过来找你!”叶风白林听后一怔,还没来得及反应,“啪!”卿卿将委任状摔到了他的脸上,“这就是你做的好事?!"
}
],
"system":"你是一位优秀的网文小说作家,你需要根据【上文】内容进行续写,请保持上文的语言风格、结构特色,生成的内容和上文衔接紧密。\n*写作要求:\n**1.**不要写结尾:**一定不要有结尾!确保故事留下悬念\n2.*增加人物互动:*侧重描写人物之间的对话、动作等互动细节,使小说更加生动有趣,吸引读者的兴趣。\n3.**情节丰富:**情节要有合理反转,出人意料的发展,或者能够带给读者较高期待感的情节。\n**注意事项*:\n1.不要涉及暴力黄色\n2.不要涉及政治人物"
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
if __name__ == '__main__':
main()
响应示例
HTTP/1.1 200 OK
Date: Thu, 23 Mar 2023 03:12:03 GMT
Content-Type: application/json;charset=utf-8
Statement: AI-generated
X-Ratelimit-Limit-Requests: 60
X-Ratelimit-Limit-Tokens: 60000
X-Ratelimit-Remaining-Requests: 59
X-Ratelimit-Remaining-Tokens: 59803
{
"id": "as-5trg73wj2b",
"object": "chat.completion",
"created": 1723022029,
"result": "叶风白林被羽林卿卿的突然出现和激烈的反应弄得一愣,他低头捡起那张委任状,看了一眼,脸色微微一变。\n\n“你听我解释,卿卿。”他深吸一口气,尽量让自己保持冷静,“这个委任状的事情,并不是你想的那样的。”\n\n“不是我想的这样?那是怎样?”羽林卿卿冷笑一声,双手环胸,一脸嘲讽地看着他,“你背叛了我们的约定,还想要怎么解释?”\n\n“我没有背叛我们的约定,卿卿。”叶风白林看着她,眼神坚定,“这个委任状,是上面直接下来的命令,我根本没有选择的余地。”\n\n“没有选择的余地?”羽林卿卿眉头一挑,“那你为什么不告诉我?为什么要瞒着我?”\n\n“我……”叶风白林张了张嘴,却发现自己无言以对。他确实没有告诉羽林卿卿,因为他知道,如果告诉她,她一定会像现在这样生气。\n\n“你无话可说了吧?”羽林卿卿冷笑一声,“叶风白林,我真的对你很失望。”\n\n说完,她转身就要走。叶风白林见状,连忙拉住她的手腕:“卿卿,你听我说,我真的不是故意的。我知道我错了,我不应该瞒着你,但是请你给我一个解释的机会。”\n\n羽林卿卿看着他,眼中闪过一丝犹豫。她深吸一口气,然后转身看向他:“好,我给你一个解释的机会。但是,如果你不能给我一个满意的解释,那我们之间,就真的完了。”\n\n叶风白林看着她,眼中闪过一丝坚定:“谢谢你,卿卿。我一定会给你一个满意的解释。”\n\n两人相视而坐,叶风白林开始解释起整个事件的经过。他讲述了自己是如何接到这个委任状的,以及自己为什么没有告诉羽林卿卿的原因。他的话语中充满了真诚和歉意,让羽林卿卿不禁开始重新思考整个事件。\n\n听着叶风白林的解释,羽林卿卿心中的怒火渐渐平息了下来。她看着眼前的男人,心中五味杂陈。她知道,叶风白林并没有背叛她,也没有背叛他们的约定。他只是被迫接受了这个委任状,而没有告诉她,也只是因为不想让她担心。\n\n“对不起,卿卿。”叶风白林看着她,眼中满是歉意,“我知道我错了,我不应该瞒着你。但是请你相信我,我真的没有背叛你。”\n\n羽林卿卿看着他,眼中闪过一丝泪光。她深吸一口气,然后轻轻地点了点头:“我相信你,叶风白林。”\n\n两人相视而笑,心中的隔阂在这一刻烟消云散。他们知道,无论未来会遇到什么困难和挑战,只要彼此信任、相互扶持,就一定能够度过难关。",
"is_truncated": false,
"need_clear_history": false,
"finish_reason": "normal",
"usage": {
"prompt_tokens": 197,
"completion_tokens": 540,
"total_tokens": 737
}
}
错误码
如果请求错误,服务器返回的JSON文本包含以下参数。
名称 | 描述 |
---|---|
error_code | 错误码 |
error_msg | 错误描述信息,帮助理解和解决发生的错误 |
例如Access Token失效返回以下内容,需要重新获取新的Access Token再次请求。
{
"error_code": 110,
"error_msg": "Access token invalid or no longer valid"
}
千帆大模型平台相关错误码,请查看错误码说明。