变量
变量是煎蛋智能体平台的重要组成部分。变量可以在智能体的节点之间传递信息,也可以通过API调用从客户端传递给智能体。
值得一提的是,煎蛋平台的变量不是强类型的,变量的值统一当作字符串来传递。这个可以类比人与人之间通过对话传递信息,都是通过自然语言(字符串)来进行的,而字符串的具体含义和格式,是由接收者自行分析处理。同样的,如果我们将智能体类比为具有智慧的生物或者人,他们之间传递的信息也是自然语言字符串,由接收的节点自行判断这个字符串的格式或者包含的信息。
举个例子,当你调用某一个API返回强类型的JSON对象时,你可以把这个对象通过JSON.stringify序列化成字符串,通过变量传递给下游节点。下游节点可以用大语言模型的能力从中提取所需的信息,也可以利用代码节点使用JSON.parse函数把字符串再反序列化为强类型对象。
平台有两种变量类型:系统变量和流程输出变量
系统变量
系统变量为煎蛋智能体平台提供的信息,包含以下几种:
{{sys.userMessage}}
表示最后一条用户发送的信息。通过格式 {{sys.userMessage}} 来在提示词中引用。
{{sys.context}}
表示智能体在处理时查询到的资料库上下文。通过格式 {{sys.context}} 来在提示词中引用。
{{sys.history}}
表示用户和智能体对话的完整历史。通过格式 {{sys.history}} 来在提示词中引用。
{{sys.rephrasedHistory}}
当智能体的设定启用了多轮对话重新组织问题时,可以用这个变量来获取到被大语言模型重新组织过问题的对话历史。
{{sys.agentDesc}}
表示智能体的描述设定。通过格式 {{sys.agentDesc}} 来在提示词中引用。
{{sys.agentStylePrompt}}
表示智能体的对话风格设定。通过格式 {{sys.agentStylePrompt}} 来在提示词中引用。
{{sys.imageUrl}}
用户发送的最后一条包含图片的消息里的图片Url
{{sys.fileUrl}}
用户发送的最后一条包含文档的消息里的文档Url
{{sys.fileName}}
用户发送的最后一条包含文档的消息里的文档原名
{{sys.files}}
新增 现在与智能体对话时可以一次性上传多个文件(多达100个, 每个文件大小不超过40MB),特别适合用于文件自动化处理的智能体。上传的文件可以用 {{sys.files}} 变量在节点里获取这些上传的文件信息。这个变量的值是一个JSON数组,格式如下
[
{
"fileName": "<原文件名>",
"fileUrl": "<上传后文件url>",
},
{
"fileName": "<原文件名>",
"fileUrl": "<上传后文件url>",
},
]
{{sys.now}}
当前系统的UTC时间,主要需要转换为本地时间进行使用
{{sys.userInfo}}
当前登录用户的用户信息(当用户使用煎蛋平台和原生客户端并要求登录时),为以下JSON对象的字符串:
{
"userId": "<用户的唯一ID>",
"displayName": "<用户的显示名称>",
"casUid": "<CAS账号ID,仅当使用CAS统一身份认证登录时存在>",
"aadOpenId": "<Azure AAD ID,仅当使用AAD统一身份认证登录时存在>",
}
流程输出变量
流程输出变量是智能体在执行时按照设定输出的变量。可以在获取信息节点、输出信息节点、API调用节点、空白提示节点,代码节点设置输出变量名,将智能体的输出信息保存到对应的变量里,之后就可以在后续的流程步骤或提示词里引用。
同一个输出变量名可以在多个节点多次设定,后续输出的节点将覆盖前面节点的值,类比程序里对变量多次赋值操作。
输出变量可以在API调用节点作为输入参数直接引用,也可以通过 {{变量名}} 的格式在提示词中引用。
注意:引用变量后,变量的值将在对应的位置原文替换。所以如果变量的值是一大段文字,将可能导致你写的提示词变得很难读懂,影响提示词的效果。
比如以下的提示词:
根据用户的要求,从{{content}}中找到对应的信息
如果content是1万字的文章内容,将会直接替换在{{content}}位置,使得原来看起来很清楚的提示词变得难以辨认。
这个时候需要改变原来的提示词的写法,改成下面的格式
根据用户的要求,从文章内容中找到对应的信息。
文章内容
======
{{content}}
新的提示词经过变量的值替换后,仍然可以清晰的阅读和识别。这样大语言模型处理起来效果也会更好。
客户端通过API调用传递变量
智能体都提供兼容OpenAI API格式的调用方式。在调用API时,除了OpenAI规定的字段之外,还可以传递一个 "variables" 对象,类型为字符串字典或者javascript object。这些传递的变量会写入到智能体运行时的变量当中,当作普通的流程输出变量来使用。
以下是一个curl命令通过OpenAI API传递变量的例子:
curl https://gendial.cn/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AGENT_SECRET" \
-d '{
"model": "$AGENT_GUID",
"messages": [
{"role": "user", "content": "9.11和9.9谁更大"}
],
"variables": {
"myvar": "我的自定义变量"
}
}'
其中AGENT_SECRET是智能体设定里的API密钥,AGENT_GUID是智能体的唯一标识,可以在浏览器地址栏里获取。