政安晨的个人主页:政安晨
欢迎 👍点赞✍评论⭐收藏
希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!
本例,我们将从零展示如何创建一款专门针对儿童对某项主题进行问答的对话流智能体,并以此为例,分析AI工作流在设计时要注意的问题。
创建智能体
首先,按照你自己的规划创建一个智能体,并修改智能体为对话流模式:
创建工作流
对话流节点说明
开始节点
工作流节点的输入和输出结构取决于子工作流定义的输入输出结构,不支持自定义设置。
在工作流节点中你需要为必选的输入参数指定数据来源,支持设置为固定值或引用上游节点的输出参数。
代码节点
在开始节点之后,我们放置一个代码节点,通过编写代码获取当前的时间和日期,以备后续在对话工作流的处理中使用。
代码节点支持通过编写代码来生成返回值。扣子支持在代码节点内使用 IDE 工具,通过 AI 自动生成代码或编写自定义代码逻辑,来处理输入参数并返回响应结果。
配置
说明
输入
声明代码中需要使用的变量。添加输入参数时需要设置参数名和变量值,其中变量值支持设置为固定值或引用上游节点的输出参数。
在代码中引用输入参数时,直接通过 params['input'] 取值即可。
代码:
代码节点中需要执行的代码片段。你可以直接编写代码,也可以通过 AI 自动生成代码。
- 引用变量:直接使用输入参数中的变量,通过return一个对象来输出处理结果。
- 函数限制:不支持编写多个函数。即使仅有一个输出值,也务必保持以对象的形式返回。
支持 JavaScript 和 Python 两种语言。详细说明可参考开发语言。
输出
代码运行成功后,输出的参数。你可以根据实际需求,在输出结构中只保留必要的参数。
确保此处定义的参数名、类型与代码的 return 对象完全一致。以代码节点默认提供的代码为例,输出的参数与代码中定义的 return 对象完全一致。
代码如下:
from datetime import datetime
async def main(args: Args) -> Output:
current_time = datetime.now()
formatted_date = current_time.strftime("%Y-%m-%d")
formatted_time = current_time.strftime("%H:%M")
ret: Output = {
"current_date": formatted_date,
"current_time": formatted_time
}
return ret
编码完成后,对该节点进行测试:
意图识别节点
意图识别节点能够让智能体识别用户输入的意图,并将不同的意图流转至工作流不同的分支处理,提高用户体验,增强智能体的落地效果。
节点说明
意图识别(Intent Recognition)指的是让智能体理解用户通过自然语言表达的意图或目的。意图识别是智能助手的典型能力,例如用户在对话中输入“我想查看今天的 AI 新闻”,其中“查看新闻”为用户意图,也就是用户希望智能体执行的操作。扣子工作流支持意图识别节点对用户意图进行归类,无需再通过大模型节点配合选择器节点实现意图识别,使工作流运行更加高效。
意图识别节点可用于以下场景:
- 客户服务:识别用户问题的类型,并转交各类知识库处理,对于知识库中未匹配的问题,转交人工客服处理。
- 医疗咨询:对用户咨询的医学问题进行归类,非医学问题的咨询则拒绝回复。
- 综合类智能体:对于功能多样的智能体,可以先由意图识别节点对用户咨询进行初步分类,转交各个 Agent 分支处理。
意图识别节点支持极速模式或完整模式运行。
- 极速模式:以较快的速度对用户意图进行分类,适用于关注工作流运行效率的场景。极速模式下使用扣子预设的极速模型进行意图识别,不支持修改模型,且不支持通过高级设置来指定模型分类的提示词。
- 完整模式:意图识别效果优先,响应速度可能较长,适用于需要复杂逻辑判断的场景,例如剧情类游戏中根据情节发展切换剧情。完整模式往往需要选择意图识别能力较强的模型,并配合细致、严谨的提示词。
这里我们使用急速模式,快速区分儿童的提问:
我们做一个最简单的意图:
这里只有天气与其它意图。
输出节点
接下来,我们使用一个输出节点,作为查询天气时的安抚用语。
大语言模型
调用大语言模型,获取天气状况。
大模型节点是扣子提供的基础节点之一,你可以在该节点使用大语言模型处理任务。
节点说明
大模型节点可以调用大型语言模型,根据输入参数和提示词生成回复,通常用于执行文本生成任务,例如文案制作、文本总结、文章扩写等。
大模型节点依赖大语言模型的语言理解和生成能力,可以处理复杂的自然语言处理任务,你可以根据业务场景的需求选择不同的模型,并配置提示词来定义模型的人设和回复风格。为了更精准地控制模型生成的结果,你还可以在大模型节点中设置模型的参数,从而影响模型回复的文本长度、内容的多样性等。
配置大模型节点
技能
支持为大模型节点配置技能,添加插件、工作流或知识库,扩展模型能力的边界。大模型节点运行时,会根据用户提示词自动调用插件、工作流或知识库,综合各类信息输入后输出回复。
配置技能后,大模型节点的能力更接近一个独立运行的智能体,可以自动进行意图识别,并判断调用技能的时机和方式,大幅度提高此节点的文本处理能力和文本生成效果,简化工作流的节点编排。例如用户需求是某地区的穿搭推荐,通常需要先通过插件节点查询某地天气,再由模型节点根据天气情况生成穿搭推荐,现在你可以直接在大模型节点添加查询天气的插件,大模型会自动调用插件,查询天气并推荐穿搭。
模型
选择要使用的模型。此节点的输出内容质量很大程度上受模型能力的影响,建议根据实际业务场景选择模型。可选的模型范围取决于当前的账号类型,基础版账号可以使用默认的几类模型,且存在对话数量限制,专业版账号可以使用火山引擎方舟平台的模型。
你还可以单击配置图标,调整模型配置。模型配置的详细说明可参考设置模型。
输入
需要添加到提示词中的动态内容。系统提示词和用户提示词中支持引用输入参数,实现动态调整的效果。添加输入参数时需要设置参数名和变量值,其中变量值支持设置为固定值或引用上游节点的输出参数。
在多轮对话场景中,你还可以开启智能体对话历史。执行此节点时,扣子会将智能体与当前用户的最近多条对话记录和提示词一起传递给大模型,以供大模型参考上下文语境,生成符合当前对话场景的回复。一问一答场景下通常无需开启此功能。
系统提示词
模型的系统提示词,用于指定人设和回复风格。支持直接插入提示词库中的提示词模版、插入团队资源库下已创建的提示词,也可以自行编写提示词。编写方式可参考编写提示词。
编写系统提示词时,可以引用输入参数中的变量、已经添加到大模型节点的技能,例如插件工具、工作流、知识库,实现提示词的高效编写。例如{{variable}}表示直接引用变量,{{变量名.子变量名}}表示引用 JSON 的子变量,{{变量名[数组索引]}}表示引用数组中的某个元素。
用户提示词
模型的用户提示词是用户在本轮对话中的输入,用于给模型下达最新的指令或问题。用户提示词同样可以引用输入参数中的变量。
输出
指定此节点输出的内容格式与输出的参数。输出格式支持设置为:
- 文本:纯文本格式。此时大模型节点只有一个输出参数,参数值为模型回复的文本内容。
- Markdown:Markdown 格式。此时大模型节点只有一个输出参数,参数值为模型回复的文本内容。
- JSON:标准 JSON 格式。你可以直接导入一段 JSON 样例,系统会根据样例格式自动设置输出参数的结构,也可以直接添加多个参数并设置参数类型。
参数的名称和描述有助于模型在参数中正确返回匹配的内容。当存在多个输出参数时,建议为输出参数指定有意义的名称,并设置描述信息。例如用于改写 Query 的模型节点,可以设置输出参数为 new_query,描述是改写后的 Query,另一个参数为 reason,描述是改写原因。
字符串分割代码节点
# 在这里,您可以通过 ‘args’ 获取节点中的输入变量,并通过 'ret' 输出结果
# 'args' 和 'ret' 已经被正确地注入到环境中
# 下面是一个示例,首先获取节点的全部输入参数params,其次获取其中参数名为‘input’的值:
# params = args.params;
# input = params.input;
# 下面是一个示例,输出一个包含多种数据类型的 'ret' 对象:
# ret: Output = { "name": ‘小明’, "hobbies": [“看书”, “旅游”] };
async def main(args: Args) -> Output:
params = args.params
input_str = params["input"]
try:
# 分割输入字符串
parts = input_str.split('|')
if len(parts) != 3:
return {"isOk": False}
city, start_time, end_time = parts
if city.strip() == "":
return {"isOk": False}
result = {
"isOk": True,
"city": city.strip(),
"start_time": start_time.strip(),
"end_time": end_time.strip()
}
return result
except Exception as e:
return {"isOk": False}
选择器节点
该节点是一个 if-else 节点,用于设计工作流内的分支流程。
当向该节点输入参数时,节点会判断是否符合如果区域的条件,符合则执行如果对应的工作流分支,否则执行否则对应的工作流分支。
每个分支条件支持添加多个判断条件(且/或),同时支持添加多个条件分支,可通过拖拽分支条件配置面板来设定分支条件的优先级。
获取指定日期天气的插件
使用大模型节点总结天气结果
完成输出
闲聊节点
我们再建立一个闲聊的对话流,完成意图识别的其它分支。
试运行
保存并调试->
编排Agent
设置语音:
打开语音对话的开关,然后发布:
好了,你完成了一个智能体对话流,坚决地发布它!
整个智能体的对话流如下: