编排工作流
Agent平台支持对工作流编排多个节点,以实现复杂业务流程的编排。
工作流包含两种类型:
- 对话型工作流。面向多轮交互的开放式问答场景,基于用户对话内容提取关键信息,输出最终结果。适用于客服助手、工单助手、娱乐互动等场景。
- 任务型工作流。面向自动化处理场景,基于输入内容直接输出结果,无中间的对话交互过程。适用于内容生成、批量翻译、数据分析等场景。
其中,任务型工作流不支持配置消息节点和提问器节点。
工作流编排流程见表1。
操作步骤 |
说明 |
---|---|
创建一个新的工作流。 |
|
设定工作流的起始点。 |
|
将大模型节点加入工作流,用于处理复杂的自然语言理解或生成任务。 |
|
配置该节点来分析用户输入,识别其意图,以便后续处理。 |
|
配置一个提问器节点,用于向用户或系统提出问题,获取所需信息。 |
|
将外部API等集成到工作流中,以扩展功能或调用外部接口。 |
|
设置条件判断逻辑,根据不同情况分支到不同的流程路径。 |
|
配置自定义代码逻辑,用于处理特定的业务需求或复杂运算。 |
|
向用户展示中间过程的消息输出能力。 |
|
设定工作流的结束点,标志流程的完成或终止。 |
|
进行工作流的调试,确保各节点正常运行。 |
步骤1:创建工作流
创建工作流的步骤如下:
- 登录ModelArts Studio大模型开发平台,在“我的空间”模块,单击进入所需空间。
- 在左侧导航栏中选择“Agent开发”,跳转至Agent开发平台。
- 单击左侧导航栏“工作台”,在“工作流”页签,单击右上角“创建工作流”。
- 在“创建工作流”页面,选择工作流类型。填写工作流名称、英文名称与工作流描述。
- 单击页面左下角的图片可修改工作流图标,单击“确定”,进入工作流编排页面。
步骤2:配置开始节点
开始节点是工作流的起始节点,包含用户输入信息,用于触发一个工作流,是每个工作流的入口节点。开始节点不支持新增或者删除。
开始节点为必选节点,需要配置于所有场景。
开始节点配置步骤如下:
- 拖动左侧任意节点至画布中,以显示开始节点。
- 单击画布中的开始节点以打开节点配置页面。
- 开始节点的参数默认已配置,不支持修改开始节点的参数。
图1 开始节点配置图
步骤3:配置大模型节点
大模型节点提供了使用大模型能力,可在节点中配置已部署的模型,用户可以通过编写Prompt、设置参数让模型处理相应任务。
大模型节点为可选节点,若无需配置,可跳过该步骤。
大模型节点配置步骤如下:
- 拖动左侧“大模型”节点至画布中,单击该节点以打开节点配置页面。
- 参照表2,完成大模型节点的配置。
表2 大模型节点配置说明 配置类型
参数名称
参数说明
参数配置
输入参数
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 字母(A-Z或a-z)
- 数字(0-9)
- 特殊字符:_
- 类型、值:支持“引用”和“输入”两种类型。
- 引用:支持用户选择工作流中已包含的前置节点的输出变量值。
- 输入:支持用户自定义取值。
输出参数
该参数用于解析大模型节点的输出,并提供给后序节点的输出参数引用。
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 字母(A-Z或a-z)
- 数字(0-9)
- 特殊字符:_
说明:用户自定义输出参数名称不允许与内置输出参数rawOutput同名。大模型节点有一个内置输出参数rawOutput,代表该节点未经解析的原始输出,与大模型节点相连的后序节点可以直接引用该输出。
- 参数类型:输出参数的类型,可选String、Integer、Number、Boolean。
- 描述:对于该输出参数的描述。
- 输出格式:支持输出的格式包括文本、Markdown、JSON。
模型配置
模型选择
选择已部署的模型。
核采样
模型在输出时会从概率最高的词汇开始选择,直到这些词汇的总概率累积达到核采样值,核采样值可以限制模型选择这些高概率的词汇,从而控制输出内容的多样性。建议不要与温度同时调整。
温度
用于控制生成结果的随机性。调高温度,会使得模型的输出更具多样性和创新性;降低温度,会使输出内容更加遵循指令要求,但同时也会减少模型输出的多样性。
提示词配置
提示词
写提示词时,支持使用{{variable}}格式引用当前节点输入参数中已定义好的参数。
- 提示词:大模型的系统提示词,用于指导模型更好的完成任务。
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 节点配置完成后,单击“确定”。
- 连接大模型节点和其他节点。
步骤4:配置意图识别节点
意图识别节点通过大模型推理分析用户输入,匹配预定义的意图关键字类别,并根据识别结果引导至相应的处理流程,通常位于工作流的前置位置。
意图识别节点为可选节点,若无需配置,可跳过该步骤。
意图识别节点配置步骤如下:
- 拖动左侧“意图识别”节点至画布中,单击该节点以打开节点配置页面。
- 参照表3,完成意图识别节点的配置。
表3 意图识别节点配置说明 配置类型
参数名称
参数说明
参数配置
输入参数
- 参数名称:默认名称input,为固定值,不可编辑。
- 类型、值:支持“引用”和“输入”两种类型。
- 引用:支持用户选择工作流中已包含的前置节点的输出变量值。
- 输入:支持用户自定义取值。
模型配置
模型选择
选择已部署的模型。
核采样
模型在输出时会从概率最高的词汇开始选择,直到这些词汇的总概率累积达到核采样值,核采样值可以限制模型选择这些高概率的词汇,从而控制输出内容的多样性。建议不要与温度同时调整。
温度
用于控制生成结果的随机性。调高温度,会使得模型的输出更具多样性和创新性;降低温度,会使输出内容更加遵循指令要求,但同时也会减少模型输出的多样性。
意图配置
意图1
配置相关意图关键字信息。
在意图输入框中输入意图描述信息,描述信息为针对该类别的描述语句或者关键词,也将作为大模型进行推理和分类的依据。意图数量为2 ~ 5个。
高级配置
提示词
高级配置项供进阶开发者修改提示词,如果不配置将会使用系统默认值。提示词的撰写可能影响到意图识别节点的准确性。
- 节点配置完成后,单击“确定”。
- 连接意图识别节点和其他节点。
步骤5:配置提问器节点
提问器节点为开发者提供了收集用户问题所需信息的功能。该节点会循环执行,直到收集到所有必需的信息为止。
提问器节点为可选节点,若无需配置,可跳过该步骤。
提问器节点配置步骤如下:
- 拖动左侧“提问器”节点至画布中,单击该节点以打开节点配置页面。
- 参照表4,完成提问器节点的配置。
表4 提问器节点配置说明 配置类型
参数名称
参数说明
参数配置
输入参数
输出参数
该参数用于解析大模型节点的输出,并提供给后序节点的输出参数引用。
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 字母(A-Z或a-z)
- 数字(0-9)
- 特殊字符:_
- 类型:输出参数的类型,可选String、Integer、Number、Boolean。
- 默认值:输出参数的默认值,若开启“参数提取 > 是否提取”功能,则默认值不允许为空。
- 描述:对于该输出参数的描述。
- 参数提取:开启后,可增加输出参数的配置,并对参数中文名进行额外配置。关闭参数提取,输出为用户最近一轮(即回答当前提问器)的对话输入。
- 中文名称:若开启“参数提取 > 是否提取”功能,可额外配置中文名称。
- 参数校验:可自定义参数校验规则对输出参数规范性进行校验。规则包括参数名称、校验类型及校验规则。
- 是否提取:开启后该参数必须提取到或使用默认值,关闭则该参数允许为空或者使用默认值。
- 反思:在参数提取之后,会根据参数描述与用户指令,对打开反思开关的参数,独立调用大模型进行反思并修正当前提取的结果。
- 引用插件:支持导入已有插件的参数信息。
模型配置
模型选择
选择已部署的模型。
核采样
模型在输出时会从概率最高的词汇开始选择,直到这些词汇的总概率累积达到核采样值,核采样值可以限制模型选择这些高概率的词汇,从而控制输出内容的多样性。建议不要与温度同时调整。
温度
用于控制生成结果的随机性。调高温度,会使得模型的输出更具多样性和创新性;降低温度,会使输出内容更加遵循指令要求,但同时也会减少模型输出的多样性。
问题配置
问题
该参数将在对话框中原样呈现给用户。如未配置此处,将由大模型根据输出参数描述,自动生成包含所有问题关键词的一个问题。
最大回复轮数
该参数指在与用户交互过程中,模型能够持续进行对话而不丧失上下文或性能的最大回合数。
输入配置
对话历史
开启对话历史后,当前工作流的上下文会带入提问器。
高级配置
指令
提供大模型额外的提示信息,用于更准确的提取参数,例如指定被提取参数的格式要求。
深度定制
示例配置
用户配置的示例内容,配置后会在大模型的请求中添加“#示例 {{用户配置的内容}}”。
输入改写
日期时间改写
开启后,用户问题涉及日历、日期及时间相关内容时,系统将进行运算,补充具体时间点,以便大模型更准确的理解。
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 节点配置完成后,单击“确定”。
- 连接大模型节点和其他节点。
步骤6:配置插件节点
插件节点使开发者可以在工作流中实现与外部环境的交互,以拥有更强大的能力,完成更复杂的任务。
插件类型包括预置插件和个人插件。
- 预置插件:平台预置了代码解释器插件,支持开发者直接将插件添加到工作流或应用中,丰富其能力。
- 自定义插件:平台允许开发者创建自定义插件,支持将API通过配置方式快速创建为插件,并供Agent调用。
插件节点为可选节点,若无需配置,可跳过该步骤。
插件节点配置步骤如下:
步骤7:配置判断节点
判断节点是一个IF-ELSE节点,提供了多分支条件判断的能力,用于设计分支流程。
当向该节点输入参数时,节点会判断输入是否符合“参数配置”中预设的条件,符合则执行“IF”对应的工作流分支,否则执行“ELSE”对应的工作流分支。
每个分支条件支持添加多个判断条件(且、或),同时支持添加多个条件分支。
判断节点为可选节点,若无需配置,可跳过该步骤。
判断节点配置步骤如下:
- 拖动左侧“判断”节点至画布中,单击该节点以打开节点配置页面。
- 参照表6,完成判断节点的配置。
表6 判断节点配置说明 配置类型
参数名称
参数说明
参数配置
IF
IF分支由[参数名称 比较条件 比较对象 值]组成一条件表达式。
- 参数名称:条件表达式左边部分,需要选择来自前序节点的输出参数。
- 比较条件:条件表达式中间部分,当前支持的比较条件有:
- equal:等于
- not equal:不等于
- contain:包含
- not contain:不包含
- 比较对象、值:条件表达式右边部分,支持“引用”和“输入”两种类型。
- 引用:支持用户选择工作流中已包含的前置节点输出变量值。
- 输入:支持用户自定义取值。
- 添加条件:单击“添加条件”,在当前分支添加多个条件表达式,多个条件表达式之间通过“且”或“或”来连接。
- 单击“且”或“或”,可以切换该分支表达式的运算逻辑。
ELSE
该参数用于解析大模型节点的输出,并提供给后序节点的输出参数引用。
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 字母(A-Z或a-z)
- 数字(0-9)
- 特殊字符:_
说明:用户自定义输出参数名称不允许与内置输出参数rawOutput同名。大模型节点有一个内置输出参数rawOutput,代表该节点未经解析的原始输出,与大模型节点相连的后序节点可以直接引用该输出。
- 参数类型:输出参数的类型,可选String、Integer、Number、Boolean。
- 描述:对于该输出参数的描述。
- 输出格式:支持输出的格式包括文本、Markdown、JSON。
添加分支
可以添加新的分支ELSE IF,新分支的配置方式与IF分支相同。
模型配置
模型选择
选择已部署的模型。
核采样
模型在输出时会从概率最高的词汇开始选择,直到这些词汇的总概率累积达到核采样值,核采样值可以限制模型选择这些高概率的词汇,从而控制输出内容的多样性。建议不要与温度同时调整。
温度
用于控制生成结果的随机性。调高温度,会使得模型的输出更具多样性和创新性;降低温度,会使输出内容更加遵循指令要求,但同时也会减少模型输出的多样性。
提示词配置
提示词
写提示词时,支持使用{{variable}}格式引用当前节点输入参数中已定义好的参数。
- 提示词:大模型的系统提示词,用于指导模型更好的完成任务。
- 节点配置完成后,单击“确定”。
- 连接判断节点和其他节点。
步骤8:配置代码节点
代码节点支持编写Python代码来处理文本、复杂逻辑判断等。
代码节点可以增强开发人员的灵活性,使其能够在工作流程中以嵌入自定义Python脚本的方式操作变量。通过配置选项,开发者可以指定所需的输入和输出变量,并编写相应的执行代码。
代码节点为可选节点,若无需配置,可跳过该步骤。
代码节点配置步骤如下:
- 拖动左侧“代码”节点至画布中,单击该节点以打开节点配置页面。
- 参照表7,完成代码节点的配置。
表7 代码节点配置说明 配置类型
参数名称
参数说明
参数配置
输入参数
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 字母(A-Z或a-z)
- 数字(0-9)
- 特殊字符:_
- 类型、值:支持“引用”和“输入”两种类型。
- 引用:支持用户选择工作流中已包含的前置节点输出变量值。
- 输入:支持用户自定义取值。
输出参数
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 字母(A-Z或a-z)
- 数字(0-9)
- 特殊字符:_
- 参数类型:输出参数的类型,可选String、Integer、Number、Boolean。
- 描述:对于该输出参数的描述。
- 必填:选择当前输出参数是否必填。
代码
-
编写Python代码,代码配置示例如下:
- 文本拼接示例代码。
def main(args: dict) -> dict: # 注意在输入参数中定义名为input1的变量 input1 = args.get('input1') # 注意在输入参数中定义名为input2的变量 input2 = args.get('input2') res = { # 注意在输出参数中定义名为res的变量 "res": input1 + input2, } return res
- 复杂逻辑判断示例代码。
def main(args: dict) -> dict: import re # 注意在输入参数中定义input1参数 input1 = args.get('input1') # 判断是否满足要求:非空、以字母开头、只包含数字字母下划线 if input1 and bool(re.match(r'^[A-Za-z][A-Za-z0-9_]*$', input1)): return { # 注意在输出参数中定义res 'res': "输入字符串满足要求" } else: return { # 注意在输出参数中定义res 'res': "输入字符串不满足要求" }
- 数学计算示例代码。
def main(args: dict) -> dict: # 注意在输入参数中定义名为input1的变量 input1 = args.get('input1') try: input1 = int(input1) return { # 注意输出参数中定义res变量 'res': input1 * input1 } except Exception as e: return { # 注意输出参数中定义res变量 'res': "输入类型错误或者数字大小超出限制" }
说明:编写代码时不要更改第一行函数定义以及输入输出定义。
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 节点配置完成后,单击“确定”。
- 连接代码节点和其他节点。
步骤9:配置消息节点
消息节点可提供中间过程的消息输出能力。
消息节点配置步骤如下:
- 拖动左侧“消息”节点至画布中,单击该节点以打开节点配置页面。
- 参照表8,完成大模型节点的配置。
- 节点配置完成后,单击“确定”。
- 连接消息节点和其他节点。
步骤10:配置结束节点
结束节点是工作流的最终节点。当工作流执行完成后,需要结束节点用于输出工作流的执行结果。结束节点不支持新增或者删除,该节点后不支持添加其他节点。
结束节点可能会有多个输入,但是只能有一个输出值,因此需要开发者在“指定回复”中合并多个输入值为一个输出值。
结束节点为必选节点,需要配置于所有场景中。
结束节点配置步骤如下:
- 拖动左侧任意节点至画布中,以显示结束节点。
- 单击画布中的结束节点以打开节点配置页面。
- 参照表9,完成结束节点的配置。
表9 结束节点配置说明 配置类型
参数名称
参数说明
参数配置
输入参数
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 字母(A-Z或a-z)
- 数字(0-9)
- 特殊字符:_
- 类型、值:支持“引用”和“输入”两种类型。
- 引用:支持用户选择工作流中已包含的前置节点的输出变量值。
- 输入:支持用户自定义取值。
指定回复
-
可撰写指定的回复信息,并以{{参数名称}}的形式插入变量。
- 支持用户将多个输入变量合并成一个字符串输出,使用{{参数名称}}代指上述定义的输入参数。
例如,已定义输入参数end_input值为hello,定义“指定回复”内容为{{end_input}} world,则最终的输出即为hello world。
- 参数名称:参数的名称长度必须大于等于1个字符,并且字符只允许为下面三种类型:
- 节点配置完成后,单击“确定”。
- 连接结束节点和其他节点。
步骤11:试运行工作流
工作流编排完成后,单击右上角“试运行”,在对话框中输入问题,等待返回试运行结果。
在试运行过程中,可以单击右上角“”查看运行日志,包括运行结果与调用详情。
如果试运行失败,常见报错与解决方案请详见Agent开发常见报错与解决方案。