逻辑组件
Langflow的逻辑组件提供路由、条件处理和流程管理功能。
If-Else (条件路由器)
If-Else组件是一个通过比较两个字符串来路由消息的条件路由器。
它通过使用指定的运算符比较两个文本输入来评估条件,然后根据评估结果将消息路由到true_result
或false_result
。
运算符基于运算符和匹配文本(match_text
)在输入(input_text
)中查找单个字符串,但它也可以通过匹配正则表达式来搜索多个单词。
可用的运算符包括:
- equals:精确匹配比较
- not equals:精确匹配的逆操作
- contains:检查
match_text
是否在input_text
中找到 - starts with:检查
input_text
是否以match_text
开头 - ends with:检查
input_text
是否以match_text
结尾 - regex:在区分大小写的模式上匹配
默认情况下,除regex外,所有运算符都不区分大小写。 regex始终区分大小写,你可以在If-Else参数中为所有其他运算符启用区分大小写。
在流程中使用If-Else组件
以下示例使用If-Else组件通过正则表达式匹配检查传入的聊天 消息,然后根据匹配是否评估为true或false输出不同的响应。
-
向你的流程添加If-Else组件,然后按以下方式配置:
-
Text Input:将Text Input端口连接到Chat Input组件。
-
Match Text:输入
.*(urgent|warning|caution).*
,以便组件在传入输入中查找这些值。正则表达式匹配区分大小写,因此如果你需要查找warning
的所有排列,输入warning|Warning|WARNING
。 -
Operator:选择regex。
-
Case True:在组件标题菜单中,点击 Controls,启用Case True参数,点击Close,然后在字段中输入
New Message Detected
。当匹配条件评估为true时,Case True消息从True输出端口发送。
没有为Case False设置消息,因此当条件评估为false时,组件不会发出消息。
-
-
根据你希望在结果为True时发生的情况,向你的流程添加组件来执行该逻辑:
-
向你的流程添加Language Model、Prompt Template和Chat Output组件。
-
在Language Model组件中,输入你的OpenAI API密钥或选择不同的提供商和模型。
-
将If-Else组件的True输出端口连接到Language Model组件的Input端口。
-
在Prompt Template组件中,输入一个提示以在
true
条件事件中指导模型,例如发送一条消息,表示收到了新的警告、注意或紧急消息
。 -
将Prompt Template组件连接到Language Model组件的System Message端口。
-
将Language Model组件的输出连接到Chat Output组件。
-
-
对False结果重复相同的过程,使用另一组Language Model、Prompt Template和Chat Output组件。
将If-Else组件的False输出端口连接到第二个Language Model组件的Input端口。
确保配置第二个Prompt Template组件以在
false
条件事件中指导模型,例如发送一条消息,表示收到了新的低优先级消息
。 -
要测试流程,打开Playground,然后向流程发送一些包含和不包含你的正则表达式字符串的消息。 聊天输出应该根据正则表达式评估反映你的提示中的指令。
_10User: A new user was created._10_10AI: A new low-priority message was received._10_10User: Sign-in warning: new user locked out._10_10AI: A new warning, caution, or urgent message was received. Please review it at your earliest convenience.
If-Else参数
一些If-Else组件输入参数在视觉编辑器中默认隐藏。 你可以通过组件标题菜单中的 Controls切换参数。
名称 | 类型 | 描述 |
---|---|---|
input_text | String | 输入参数。操作的主要文本输入。 |
match_text | String | 输入参数。要比较的文本。 |
operator | Dropdown | 输入参数。用于比较文本的运算符。选项包括equals 、not equals 、contains 、starts with 、ends with 和regex 。默认为equals 。 |
case_sensitive | Boolean | 输入参数。设置为true时,比较区分大小写。默认为false。此设置不适用于regex比较。 |
message | Message | 输入参数。通过任一路由传递的消息。 |
max_iterations | Integer | 输入参数。条件路由器允许的最大迭代次数。默认为10。 |
default_route | Dropdown | 输入参数。达到最大迭代次数时采取的路由。选项包括true_result 或false_result 。默认为false_result 。 |
true_result | Message | 输出参数。条件为true时生成的输出。 |
false_result | Message | 输出参数。条件为false时生成的输出。 |
Loop
Loop组件遍历输入列表,将单个项目传递给连接在Item输出端口的其他组件,直到没有更多项目要处理。然后,Loop组件将所有循环的聚合结果传递给连接到Done端口的组件。
Loop组件就像你的流程中的一个微型流程。 以下是循环过程的分解:
-
将输入分割为单个项目。例如,CSV文件按行分解。
具体来说,Loop组件重复通过
Data
或DataFrame
对象中的text
键提取项目,直到没有更多项目要提取。 每个item
输出都是Data
对象。 -
通过将它们传递到Item输出端口来迭代每个
item
。此端口连接到对每个项目执行操作的一个或多个组件。 Item循环中的最终组件连接回Loop组件的Looping端口以处理下一个项目。
只有一个组件连接到Item端口,但你可以根据需要将数据传递给任意数量的组件,只要链中的最后一个组件连接回Looping端口。
-
处理所有项目后,结果聚合为单个
Data
对象,从Loop组件的Done端口传递到流程中的下一个组件。
在简化代码方面,Loop组件的工作方式如下:
_10for i in input: # 接收输入数据作为列表_10 process_item(i) # 通过连接在Item端口的组件处理每个项目_10 if has_more_items():_10 continue # 循环回到Looping端口处理下一个项目_10 else:_10 break # 没有更多项目时退出循环_10_10done = aggregate_results() # 编译所有返回的项目_10_10print(done) # 从Done端口发送聚合结果到另一个组件
Loop示例
在以下示例中,Loop组件遍历CSV文件,直到没有更多行要处理。
在这种情况下,Item端口将每行传递给Type Convert组件以将行转换为Message
对象,将Message
传递给Structured Output组件以处理为结构化 数据,然后传递回Loop组件的Looping端口。
处理所有行后,Loop组件通过连接到Done端口的Chroma DB组件将聚合的结构化数据列表加载到Chroma DB数据库中。
有关Loop组件的更多示例,请尝试Langflow中的Research Translation Loop模板,或按照此视频教程创建带有循环和代理RAG的流程:Mastering the Loop Component & Agentic RAG in Langflow。
Notify and Listen
Notify和Listen组件一起使用。
Notify组件从当前流程的上下文构建通知,包括特定的数据内容和状态标识符。
生成的通知发送到Listen组件。 然后通知数据可以传递给流程中的其他组件,例如If-Else组件。
Run flow
Run Flow组件将另一个Langflow流程作为当前流程的子进程运行。
你可以使用此组件将流程链接在一起,有条件地运行流程,并将流程附加到Agent组件作为智能体工具以根据需要运行。
当与智能体一起使用时,智能体用于注册工具的name
和description
元数据会自动创建。
当你为Run Flow组件选择流程时,它使用目标流程的图结构在Run Flow组件上动态生成输入和输出字段。
Run Flow参数
一些Run Flow组件输入参数在视觉编辑器中默认隐藏。 你可以通过组件标题菜单中的 Controls切换参数。
名称 | 类型 | 描述 |
---|---|---|
flow_name_selected | Dropdown | 输入参数。要运行的流程名称。 |
session_id | String | 输入参数。流程运行的会话ID,如果你想为子流程传递自定义会话ID。 |
flow_tweak_data | Dict | 输入参数。用于自定义流程行为的调整字典。可用的调整取决于选定的流程。 |
dynamic inputs | Various | 输入参数。根据选定的流程生成其他输入。 |
run_outputs | A List of types (Data , Message , or DataFrame ) | 输出参数。从运行流程生成的所有输出。 |
遗留逻辑组件
以下逻辑组件是遗留组件。 你仍然可以在流程中使用它们,但它们不再受支持,可能在未来版本中被移除。
尽快用建议的替代方案替换这些组件。 标记为已弃用和遗留的组件应立即替换。
Condition/Data Conditional Router
作为此遗留组件的替代方案,请参见If-Else组件。
Condition组件基于应用于指定键的条件路由Data
对象,包括布尔验证。
它支持true_output
和false_output
,用于根据条件评估路由结果。
此组件在需要复杂数据结构条件路由的工作流中很有用,支持基于数据内容的动态决策。
它可以处理单个Data
对象或Data
对象列表。
处理Data
对象列表时会发生以下操作:
- 列表中的每个对象都单独评估。
- 满足条件的对象进入
true_output
。 - 不满足条件的对象进入
false_output
。 - 如果所有对象都进入一个输出,另一个输出为空。
Condition组件接受以下参数:
名称 | 类型 | 描述 |
---|---|---|
data_input | Data | 输入参数。要处理的Data对象或Data对象列表。此输入可以处理单个项目和列表。 |
key_name | String | 输入参数。要检查的Data对象中的键名。 |
operator | Dropdown | 输入参数。要应用的运算符。选项:equals 、not equals 、contains 、starts with 、ends with 、boolean validator 。默认:equals 。 |
compare_value | String | 输入参数。要比较的值。当运算符为boolean validator 时不显示/使用。 |
operator
选项具有以下行为:
equals
:键的值和compare_value之间的精确匹配比较。not equals
:精确匹配的逆操作。contains
:检查compare_value是否在键的值中找到。starts with
:检查键的值是否以compare_value开头。ends with
:检查键的值是否以compare_value结尾。boolean validator
:将键的值视为布尔值。以下值被认为是true:- 布尔值
true
。 - 字符串:
true
、1
、yes
、y
、on
(不区分大小写) - 任何其他值使用Python的
bool()
函数 转换
- 布尔值
Pass
作为此遗留组件的替代方案,使用If-Else组件来传递不修改的消息。
Pass组件转发输入消息而不修改。
它接受以下参数:
名称 | 显示名称 | 信息 |
---|---|---|
input_message | Input Message | 输入参数。要转发的消息。 |
ignored_message | Ignored Message | 输入参数。被忽略的第二条消息。用作连续性的解决方法。 |
output_message | Output Message | 输出参数。来自输入的转发消息。 |
Flow As Tool (已弃用)
此组件从运行已加载流程的函数构造工具。
它在Langflow版本1.1.2中被弃用,并被Run Flow组件替换。
Sub Flow (已弃用)
此组件将整个流程作为组件集成到更大的工作流中。 它基于选定的流程动态生成输入,并使用提供的参数执行流程。
它在Langflow版本1.1.2中被弃用,并被Run Flow组件替换。