LangStudio为应用流开发提供了直观且高效的集成开发环境,您可以构建、调试和优化由大语言模型、Python节点以及其他工具组成的应用流。
前提条件
已创建所需的连接。具体操作,请参见连接配置。
创建应用流
进入LangStudio,选择工作空间后,在应用流页签下单击新建应用流,进入应用流创建页面。
关键参数说明:
参数 | 说明 | |
新建方式 | 从模板新建 |
|
按类型新建 |
| |
从OSS导入 | 选择待导入的应用流ZIP压缩包文件或应用流OSS路径,该路径必须直接包含应用流的flow.dag.yaml及其他Code文件。 注:您可通过应用流列表操作列的导出功能将应用流导出。 | |
选择运行时 | 选择用于应用流开发调试的运行时,选择之后应用流的工作路径会默认为运行时的工作路径。如果没有可用的运行时,可前往运行时管理页面创建,或暂时置空,后续在应用流开发页面创建。 | |
工作路径 | 如果运行时置空,需手动设置应用流工作路径。后续如果在运行时管理页面创建运行时,需确保运行时的工作路径和应用流工作路径保持一致。 |
开发应用流
在完成指定应用流的创建后,您可以进入开发阶段。应用流开发界面划分为以下区域:
区域 | 区域说明 | 备注 |
① | 应用流编辑区域 | 应用流的DAG图,可直观地查看数据在整个应用流中的传递。
|
② | 应用流配置区域 | 配置应用流中的各个节点。 |
③ | 应用流显示调整区域 | 包含应用流缩放、画布调整、添加节点(大模型、Python、条件分支等,详情请参见附录:预置组件说明)等功能。 |
④ | 应用流运行区域 | 包含一些常用的操作按钮,如启动/查看/解绑运行时、调试/运行应用流、应用流部署、应用流克隆、查看应用流历史等功能 重要
|
基础开发流程如下:
(可选)添加组件:单击应用流节点输出端“+”或画布左下方的添加节点,然后在“+”位置进行首尾连线。
支持添加大模型、Python、条件分支等类型的节点,详情请参见附录:预置组件说明。
启动运行时:单击右上角启动运行时并进行配置。注:在进行Python节点解析或查看更多工具时,需要保证运行时已启动。运行时一旦启动即会产生费用,因此如果您暂不需要运行应用流,建议解绑运行时,避免持续计费。
重要当前应用流与运行时实例解绑后,运行时状态不会发生改变,不影响运行时实例的正常计费。如果您希望彻底停止计费,请前往运行时管理页面对运行时实例进行停止或删除操作。
关键参数说明:
专有网络配置:请确保选择的VPC和应用流所用的连接(如大模型服务连接、数据库服务连接等)所在的VPC一致或两者网络已连通。
配置节点参数。各组件详情,请参见附录:预置组件说明。
调试/运行:单击右上角运行, 开始执行应用流。
查看链路/错误日志:单击生成答案下的查看链路或查看日志,查看链路(Trace详情、拓扑视图)或运行日志。
说明查看日志功能仅在应用流运行错误时才会显示。
(可选)停止/删除运行时。如果您暂不需要运行应用流,建议解绑运行时,避免持续计费。
重要当前应用流与运行时实例解绑后,运行时状态不会发生改变,不影响运行时实例的正常计费。如果您希望彻底停止计费,请前往运行时管理页面对运行时实例进行停止或删除操作。
后续操作
在完成应用流的开发和调试后,您可以对应用流进行评测,待满足业务需求后,您可以将应用流部署至模型在线服务PAI-EAS中供生产使用。
附录:预置组件说明
开始(Start)
定义
开始节点用于标识应用流(Workflow)的运行起始状态,以及应用流的输入参数。一个应用流中只能有一个开始节点。
输入参数配置
通过开始节点可以配置应用流的输入参数信息。对于对话型应用流,系统会默认提供对话历史和对话输入两个默认字段,您可以根据需求添加自定义变量。
使用方式
在运行应用流时,通过对话面板配置当前会话的输入参数。
大模型(LLM)
定义
LLM节点是应用流(Workflow)的核心组件,专门用于调用大语言模型以处理自然语言任务。通过此节点,用户可以获得智能的文本响应,帮助回答问题或处理复杂的自然语言输入。此外,LLM节点还提供灵活的配置选项,允许用户调整模型参数、管理对话历史以及自定义提示词,以优化响应质量和准确性。
应用场景
文本生成:根据主题、关键词生成文本内容。
内容分类:自动分类邮件类型(咨询/投诉/垃圾邮件)。
文本转换:将文本翻译成指定语言。
RAG:结合检索到的知识回答用户问题。
配置界面
输入(Input)
模型设置:支持使用从ModelGallery部署或其他自定义部署的模型服务,以及Dashscope、DeepSeek等模型提供商提供的模型。如果关注效果,建议选择能力较强的模型。支持配置以下模型参数:
温度:通常是一个介于0到1之间的值,用于控制模型输出的随机性。温度越接近0,结果越确定和一致;温度越接近1,结果则越随机和多样化。
Top P:用于控制结果的多样性。模型会从候选词中选择,确保选择的词的累积概率不超过设定的阈值P,从而影响输出的多样性。
Top K:用于控制模型的输出。它限定了模型在生成结果时可以选择的候选词数量。具体来说,Top K设定一个数值K,模型只会从概率最高的前K个词中进行选择。这种方法可以减少生成结果中的随机性,使输出更加集中在可能性较高的词汇上。相比于Top P,Top K更加直接地限制了候选词的数量,而不是基于累积概率。
存在惩罚:用于减少模型重复生成相同的实体或信息。通过对已生成的内容施加惩罚,模型更倾向于生成新的或不同的内容。随着参数值的增加,模型对已经生成过的内容施加更大的惩罚,从而降低重复生成的可能性。
频率惩罚:用于减少过于频繁出现的词或短语的生成概率。随着参数值的增加,对这些常见词或短语施加更大的惩罚,从而降低其出现频率。较高的频率惩罚参数值有助于提升文本的词汇多样性。
最大标记:用于设定模型在单次生成中可以输出的最大长度。设定较低的最大标记值可能会导致生成的文本较短或被截断,而较高的值则允许更长的输出,从而帮助控制生成内容的规模和复杂度,确保结果符合预期的长度要求。
种子:当指定种子值时,模型会尽量进行确定性采样,使得相同种子和参数的重复请求应产生相同的结果。然而,不能保证完全的确定性,建议您参考system_fingerprint(可能需要代理才能访问)响应参数来监控可能的变化。
停止序列:最多4个停止序列,用于指示模型在生成文本时停止进一步输出。当模型检测到其中任意一个停止序列时,它将停止生成更多的tokens,并且返回的文本将不包含该停止序列本身。
对话历史:配置打开后,会自动地在提示词中插入应用流的聊天历史记录。
输入变量:变量中可以引用本节点前置所有节点的输出。
提示词:自定义系统(SYSTEM)/用户(USER)/助手(ASSISTANT)的提示词内容,提示词是jinja2模板,模板中可以通过两个双引号
{{}}
的方式引用输入变量。
输出(Output)
节点默认输出String类型的数据,也可以根据需求配置为JSON类型数据。JSON类型支持自定义添加输出变量,大模型会根据变量名称的含义进行输出。
使用案例
Python开发(Python)
定义
应用流(Workflow)支持自定义Python代码的节点,可以实现复杂的数据处理逻辑。
配置界面
输入(Input)
代码:Python代码,需注意以下事项:
Python节点的执行入口函数需要被
@tool
装饰,才可以被加载为一个节点。修改完代码后,会自动进行解析,函数的入参会被动态解析成节点的输入,函数的输出会被放到output字典中,可以被其他节点引用。
重要Python节点的输入/输出参数通过解析Python函数获得,依赖于运行时。在没有启动运行时的情况下,无法配置节点的输入/输出信息。
函数支持的输入/输出类型:int、float、bool、str、dict、TypedDict、dataclass(只支持输出)、list。
输入:Python函数代码的入参会被动态解析成节点的输入。
输出(Output)
Python函数代码的输出会被动态解析到output字典中,可以被其他节点引用。
使用案例
在代码区域输入以下实例代码,代码会被映射为节点的输入和输出:
from langstudio.core import tool from dataclasses import dataclass @dataclass class Result: output1: str output2: int @tool def invoke(foo: str, bar: int) -> Result: return Result( output1="hello" + foo, output2=bar + 10 )
如果Python代码需要额外的执行依赖包,则需要安装相应的依赖。requirements.txt文件会同应用流一起保存,在运行时启动,或是部署服务时会被安装到对应的环境里。
条件分支(Condition)
定义
主要用于流程控制。主要实现if-else逻辑,若设定的条件成立则仅运行对应的分支,若均不成立则运行else分支。需搭配变量聚合(Variable Aggregate)节点使用。
配置界面
输入(Input)
配置分支条件时,需注意:
每个分支代表一个执行路线,最后一个分支为else分支,代表没有匹配到任何分支,不可编辑。
每个分支可包含多个条件,条件之间支持and/or聚合。
注意上游节点输出、匹配符(如
=
、≠
、为空
、不包括
等)以及匹配值,以确保条件的准确性和有效性。
输出(Output)
无输出。
使用案例
在连接条件分支组件与下游节点时,每个分支在组件上都有一个对应的连线端口。当某个分支条件被触发时,该分支将执行连接的下游节点,而其他分支节点则会被跳过。之后,可以通过变量聚合(Variable Aggregate)组件收集各个条件分支的执行结果(即下游节点的输出)。
变量聚合(Variable Aggregate)
定义
负责整合不同分支的输出结果,确保无论哪个分支被执行,其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用,可将不同分支下相同作用的变量映射为一个输出变量,避免下游节点重复定义。
配置界面
输入(Input)
配置变量分组时,需注意:
上游一般是条件分支(Condition)/意图识别(Intent Recognition)产生的多个执行分支。
同一分组中变量必须同类型,第一个非空输出值即为该组的输出。
由于条件分支/意图识别仅会触发一个分支,所以每组有且仅有一个非空值,通过变量聚合节点即可提取出该值,方便下游使用。
如果每个条件分支/意图识别的分支有多个需要的输出,可以添加多个分组,分别提取对应输出值。
输出(Output)
输出变量会根据所添加的分组进行动态调整。如果存在多个分组,节点将输出多个键值对(Key-Value),其中,Key为组名,Value为组内第一个非空的变量值。
使用案例
请参见条件分支(Condition)组件的使用案例。
意图识别(Intent Recognition)
定义
主要用于流程控制。通过大语言模型分析用户输入的意图,并根据识别结果执行相应的分支。支持多意图配置和对话历史。
配置界面
输入(Input)
用户输入:选择用户输入,用于识别意图。
多意图配置:按需设置意图,确保每个意图的描述都清晰明确,并且不同意图之间不存在语义重叠。最后一个意图默认为“其他意图”,代表没有匹配到任何其他意图,不可编辑。
模型设置:配置意图识别需要的大语言模型,如果关注效果,请选择能力较强的模型,如qwen-max等。
对话历史:配置打开后,大模型推理时会自动地在提示词中插入应用流的聊天历史记录。
额外提示:输入的内容将会被追加到系统提示词中,帮助模型更好的完成意图识别。
输出(Output)
无输出。
使用案例
在连接意图识别组件与下游节点时,每个意图分支在组件上都有一个对应的连线端口。当某个意图被识别时,该分支将执行连接的下游节点,而其他分支节点则会被跳过。之后,可以通过变量聚合(Variable Aggregate)组件收集各个条件分支的执行结果(即下游节点的输出)。
知识库检索(Index Lookup)
定义
从知识库中检索与用户问题相关的文本内容,以便将其用作下游LLM节点的上下文。
配置界面
输入(Input)
知识库索引名称:选择在LangStudio上已注册可用的知识库,详情请参见知识库管理。
检索关键词:选择希望在知识库中检索的关键信息,需要引用上游节点的输出参数,格式为String。
Top K:知识库索引检索时,系统返回的与检索关键词最相关的前K项结果。
输出(Output)
检索输出变量result, 类型为List[Dict],其中Dict的Key包含以下字段:
Key
说明
content
检索到的文档分片的内容。这个内容是从知识库中提取出来的文本片段,通常与输入的查询相关。
score
文档分片与输入查询的相似度得分,即文档分片与查询的匹配程度。得分越高,说明该文档分片与查询的相关性越强。
以下为输出示例,表示返回结果包含得分最高的top_k条记录:
[ { "score": 0.8057173490524292, "content": "受疫情带来的不确定性影响,xx银行根据经济走势及中国或中国内地环境预判,主动\n加大了贷款和垫款、非信贷资产减值损失的计提力度,加大\n不良资产核销处置力度,提升拨备覆盖率,2020 年实现净利\n润289.28亿元,同比增长 2.6%,盈利能力逐步改善。\n(人民币百万元) 2020年 2019年 变动(%)\n经营成果与盈利\n营业收入 153,542 137,958 11.3\n减值损失前营业利润 107,327 95,816 12.0\n净利润 28,928 28,195 2.6\n成本收入比(1)(%) 29.11 29.61下降 0.50个\n百分点\n平均总资产收益率 (%) 0.69 0.77下降 0.08个\n百分点\n加权平均净资产收益率 (%) 9.58 11.30下降 1.72个\n百分点\n净息差(2)(%) 2.53 2.62下降 0.09个\n百分点\n注: (1) 成本收入比 =业务及管理费/营业收入。", "id": "49f04c4cb1d48cbad130647bd0d75f***1cf07c4aeb7a5d9a1f3bda950a6b86e", "metadata": { "page_label": "40", "file_name": "2021-02-04_中国xx保险集团股份有限公司_xx_中国xx_2020年__年度报告.pdf", "file_path": "oss://my-bucket-name/datasets/chatglm-fintech/2021-02-04__中国xx保险集团股份有限公司__601318__中国xx__2020年__年度报告.pdf", "file_type": "application/pdf", "file_size": 7982999, "creation_date": "2024-10-10", "last_modified_date": "2024-10-10" } }, { "score": 0.7708036303520203, "content": "72亿元,同比增长 5.2%。\n2020年\n(人民币百万元)寿险及\n健康险业务财产保险\n业务 银行业务 信托业务 证券业务其他资产\n管理业务 科技业务其他业务\n及合并抵消 集团合并\n归属于母公司股东的净利润 95,018 16,083 16,766 2,476 2,959 5,737 7,936 (3,876) 143,099\n少数股东损益 1,054 76 12,162 3 143 974 1,567 281 16,260\n净利润 (A) 96,072 16,159 28,928 2,479 3,102 6,711 9,503 (3,595) 159,359\n剔除项目 :\n 短期投资波动(1)(B) 10,308 – – – – – – – 10,308\n 折现率变动影响 (C) (7,902) – – – – – – – (7,902)\n 管 理层认为不属于 \n日常营运收支而剔除的 \n一次性重大项目及其他 (D) – – – – – – 1,282 – 1,282\n营运利润 (E=A-B-C-D) 93,666 16,159 28,928 2,479 3,102 6,711 8,221 (3,595) 155,670\n归属于母公司股东的营运利润 92,672 16,", "id": "8066c16048bd722d030a85ee8b1***36d5f31624b28f1c0c15943855c5ae5c9f", "metadata": { "page_label": "19", "file_name": "2021-02-04_中国xx保险集团股份有限公司_xxx_中国xx__2020年__年度报告.pdf", "file_path": "oss://my-bucket-name/datasets/chatglm-fintech/2021-02-04__中国xx保险集团股份有限公司__601318__中国xx__2020年__年度报告.pdf", "file_type": "application/pdf", "file_size": 7982999, "creation_date": "2024-10-10", "last_modified_date": "2024-10-10" } } ]
使用案例
Agent(Agent)
定义
Agent节点是LangStudio工作流中基于自主性智能体开发的节点组件。该节点支持推理(Reasoning)策略和Tools Use等能力,可通过集成不同的推理策略(目前仅支持FunctionCalling策略),实现自主调用模型上下文协议(MCP)工具,从而使得大语言模型(LLM)能够在运行时动态选择并执行工具(Tools),实现自主性多步推理能力。该节点需要启动运行时后才可配置,可在“更多工具”中选择。
配置界面
输入(Input)
Agent策略:选择所需的Agent推理策略,目前仅支持了FunctionCalling策略。
FunctionCalling
通过将自然语言指令映射到预定义的工具,实现与外部系统的交互。大语言模型(LLM)首先识别用户意图,决定调用哪个工具并提取所需参数。随后,系统将自动调用选定工具并获得其返回结果,从而帮助LLM生成对自然语言指令的回复。
应用场景
精确任务处理:对于明确的任务,LLM可以直接调用相应的工具,无需复杂的推理过程,从而提高响应效率和准确性。
外部功能集成:通过调用MCP Tools,LLM可以访问实时数据、执行特定操作等,从而扩展其功能范围。
模型设置:选择驱动Agent的大语言模型,策略中使用OpenAI API中Tool Call方式传递Tools信息,因此模型需要支持Tool Call功能。
对话历史:启用对话历史,可以为Agent提供对话上下文记忆能力。系统会自动的将对话历史消息填充到提示词中,这使得Agent能够理解和引用之前的对话内容,从而提供连贯的上下文相关的回答。例如,当用户在新的消息中使用代词(如“他”、“这里”、“那一天”等)时,开启了对话历史的Agent能够理解这些代词所指代的前文实体,而无需用户重复指定完整信息。
MCP服务配置:支持配置SSE MCP Server,内容格式为JSON。FunctionCalling策略支持使用MCP Server提供的MCP Tools,使用方式由策略决定。示例:
# 使用SSE通信方式的MCP Server配置 # 用户根据需求,自行手动配置,更换“server-name”为用户需要的服务名称,并替换“url”(必填) # 其他非必填参数包括“header”(默认为空)、“timeout”(默认为30)、“sse_read_timeout”(默认为300),参数含义具体可参考:https://github.com/modelcontextprotocol/python-sdk/blob/main/src/mcp/client/sse.py#L22 # 请自行确保Agent运行环境与MCP Server的网络连通以及MCP Server的功能正确性 # 支持配置多个MCP Server { "mcpServers": { "server-name": { "url": "http://localhost:3000:sse", "headers": { "Authorization": "Bearer 371D480C-15B0-435B-B418-9395B38B9343" }, "timeout": 30, "sse_read_timeout": 300 }, ... } }
输入变量:当您希望在提示词中引用应用流上游节点的变量时,需要在本节点中定义相应的输入变量,并将其值设置为上游节点变量的引用。随后,在下面提示词中,您可以通过Jinja2模板语法(通过两个双引号
{{}}
的方式)引用这些已定义的输入变量,以实现动态数据传递。提示词:自定义系统(SYSTEM)/用户(USER)/助手(ASSISTANT)的提示词内容,提示词中可引用输入变量。
循环次数:设置Agent执行的最大循环次数,范围为1~30。Agent将根据循环次数重复执行任务以生成响应,直到满足以下任一条件:
LLM判断已通过调用工具获取足够的信息以生成完整的结果
达到设定的最大循环次数
请注意,设置合理的循环次数有助于在响应完整性与执行效率之间取得平衡。
输出(Output)
节点输出String类型的数据。
查看链路/日志
在应用流页面右上角单击运行后的对话框中,您可以在弹出的对话框中运行结果下方查看链路或日志。
查看链路:查看当前运行的Trace信息,了解Agent在每次请求模型时的输入、模型的输出(包括工具调用及请求参数)、token开销、耗时等信息。
查看日志:当应用流运行错误时,可以查看当前的运行日志,获取节点执行过程中的更多细节。
此外,您还可以通过在应用流页面右上角单击更多 > 运行历史,选择指定运行记录,查看链路或日志。
循环(Loop)
定义
循环节点用于执行需要依赖前一轮结果的重复任务,直至满足退出条件或达到预设的最大循环次数。在循环节点内,可以配置一个子流程,系统会根据循环变量重复执行子流程中的逻辑,直到触发终止条件或达到执行次数上限。该节点需要启动运行时后才可配置,可在“更多工具”中选择。
配置界面
输入(Input)
循环变量:用于在循环的各个轮次间传递数据,并在循环结束后继续供下游节点使用。支持配置多个循环变量,其值可以手动输入或从上游节点的输出中选择。
循环退出条件:可基于循环变量进行配置,当指定的循环变量满足预设条件时,循环将终止。
最大循环次数:用于限制循环的最大执行次数,以防止出现无限循环。
输出(Output)
节点输出为当前循环执行之后循环变量的值。只有通过变量赋值节点才能更新循环变量,如果没有该节点,经过N轮循环后,循环节点的输出将仍然保持为初始输入。
相关节点
循环相关的节点仅限在循环内使用。您可以通过单击循环内指定节点右侧的“+”来添加以下相关节点:
退出循环(Break Loop)
退出循环,上游一般是条件分支(Condition)节点。
变量赋值(Variable Assigner)
将循环内子节点输出结果赋值给循环变量。
SerpAPI-联网搜索(SerpAPI-GenericSearch)
定义
使用SerpApi进行网络搜索,支持多个搜索引擎(如Bing、Google、Baidu、Yahoo以及自定义),可配置搜索位置和结果数量。该节点需要启动运行时后才可配置,可在“更多工具”中选择。
配置界面
输入(Input)
SerpApi连接:选择在LangStudio上已创建的SerpApi连接,详情请参见创建SerpApi连接。
搜索关键词:选择希望进行网络搜索的关键信息,需要引用上游节点的输出参数,格式为String。
搜索引擎:支持bing、google、baidu和yahoo搜索,也支持自定义的输入。
位置:搜索所在位置。如需使用,建议具体到城市,如
Shanghai, China
。搜索结果数量:返回的查询结果数量。
输出(Output)
联网搜索输出变量output, 类型为List[Dict],其中Dict的Key包含以下字段:
Key
说明
title
搜索结果的标题,通常是网页或文档的标题,简要概括了内容的主题。
link
搜索结果的链接,即URL。用户可以通过这个链接访问完整的内容。
summary
搜索结果的摘要,通常是对内容的简要介绍或概括,帮助用户快速了解内容的核心信息。
使用案例
阿里云IQS-联网搜索(IQS-GenericSearch)
定义
使用阿里云信息查询服务进行标准搜索,支持时间范围筛选。该节点需要启动运行时后才可配置,可在“更多工具”中选择。
配置界面
输入(Input)
搜索关键词:选择希望进行联网搜索的关键信息。长度必须在2到100个字符之间,若超过100个字符,将被截断至100个字符;若少于2个字符,则会引发错误。
时间范围:选择搜索数据的时间范围,支持选择NoLimit、OneDay、OneWeek、OneMonth和OneYear。
IQS连接:如果启动时没有配置有权限的角色,可选择已配置的IQS连接。关于如何配置IQS连接,请参见服务连接配置-自定义连接,并将键和值分别配置为
api_key
和相应的值,相应的值可通过信息查询服务-凭证管理查看。关于IQS连接使用详情,请参见基于LangStudio&阿里云信息查询服务搭建DeepSeek联网搜索应用流。
输出(Output)
output:联网搜索输出变量output, 类型为List[Dict],其中Dict的Key包含以下字段:
Key
说明
title
搜索结果的标题,通常是网页或文档的标题,简要概括了内容的主题。
link
搜索结果的链接,即URL。用户可以通过这个链接访问完整的内容。
summary
搜索结果的摘要,通常是对内容的简要介绍或概括,帮助用户快速了解内容的核心信息。
content
搜索结果的完整内容或正文,包含详细的信息。由于数据量可能很大,通常不在摘要中展示。
markdown_text
Markdown格式的搜索内容,可能返回为空。
score
搜索结果的评分,通常是一个数值,用于表示结果的相关性或质量。评分越高,结果通常越符合搜索意图。
publish_time
内容的发布时间,通常是一个时间戳或日期,帮助用户了解信息的时效性。
host_logo
内容来源网站的标志或图标,通常是一个图片URL,帮助用户识别信息来源。
hostname
内容来源网站的主机名或域名,指示信息的来源网站。
site_label
内容来源网站的标签或分类,用于指示网站的主题或类别,帮助用户了解信息的背景。
scene_items:用于增强搜索结果的辅助信息,在大多数通用搜索中,scene_items通常为空。然而,当通用搜索无法准确满足用户的需求时,尤其是涉及特定场景(如时间、天气、日历等)时,系统会尝试返回scene_items作为补充,确保用户在特定情境下能获取到更精确和有用的信息,详情请参见场景化调用SceneItem概览。
使用案例
结束(End)
定义
结束节点用于标识应用流(Workflow)的运行结束状态,以及应用流的输出参数。一个应用流Workflow中只能有一个结束节点。
输出参数配置
应用流输出可以引用所有上游节点产生的输出,作为应用流执行结果。例如,以下示例中应用流的answer输出使用了大模型节点的输出,search_results则是使用了搜索节点的输出。
说明对话型应用流默认有一个Chat输出字段,用于作为应用流的对话输出。
应用流程必须包含开始节点和结束节点,且只有连接在这两个节点之间的节点才会被执行,游离的节点则不会执行。