跳到主要内容

逻辑组件

Langflow的逻辑组件提供路由、条件处理和流程管理功能。

If-Else (条件路由器)

If-Else组件是一个通过比较两个字符串来路由消息的条件路由器。 它通过使用指定的运算符比较两个文本输入来评估条件,然后根据评估结果将消息路由到true_resultfalse_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输出不同的响应。

连接到两个OpenAI组件的条件路由器

  1. 向你的流程添加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时,组件不会发出消息。

  2. 根据你希望在结果为True时发生的情况,向你的流程添加组件来执行该逻辑:

    1. 向你的流程添加Language ModelPrompt TemplateChat Output组件。

    2. Language Model组件中,输入你的OpenAI API密钥或选择不同的提供商和模型。

    3. If-Else组件的True输出端口连接到Language Model组件的Input端口。

    4. Prompt Template组件中,输入一个提示以在true条件事件中指导模型,例如发送一条消息,表示收到了新的警告、注意或紧急消息

    5. Prompt Template组件连接到Language Model组件的System Message端口。

    6. Language Model组件的输出连接到Chat Output组件。

  3. False结果重复相同的过程,使用另一组Language ModelPrompt TemplateChat Output组件。

    If-Else组件的False输出端口连接到第二个Language Model组件的Input端口。

    确保配置第二个Prompt Template组件以在false条件事件中指导模型,例如发送一条消息,表示收到了新的低优先级消息

  4. 要测试流程,打开Playground,然后向流程发送一些包含和不包含你的正则表达式字符串的消息。 聊天输出应该根据正则表达式评估反映你的提示中的指令。


    _10
    User: A new user was created.
    _10
    _10
    AI: A new low-priority message was received.
    _10
    _10
    User: Sign-in warning: new user locked out.
    _10
    _10
    AI: A new warning, caution, or urgent message was received. Please review it at your earliest convenience.

If-Else参数

一些If-Else组件输入参数在视觉编辑器中默认隐藏。 你可以通过组件标题菜单中的 Controls切换参数。

名称类型描述
input_textString输入参数。操作的主要文本输入。
match_textString输入参数。要比较的文本。
operatorDropdown输入参数。用于比较文本的运算符。选项包括equalsnot equalscontainsstarts withends withregex。默认为equals
case_sensitiveBoolean输入参数。设置为true时,比较区分大小写。默认为false。此设置不适用于regex比较。
messageMessage输入参数。通过任一路由传递的消息。
max_iterationsInteger输入参数。条件路由器允许的最大迭代次数。默认为10。
default_routeDropdown输入参数。达到最大迭代次数时采取的路由。选项包括true_resultfalse_result。默认为false_result
true_resultMessage输出参数。条件为true时生成的输出。
false_resultMessage输出参数。条件为false时生成的输出。

Loop

Loop组件遍历输入列表,将单个项目传递给连接在Item输出端口的其他组件,直到没有更多项目要处理。然后,Loop组件将所有循环的聚合结果传递给连接到Done端口的组件。

Loop组件就像你的流程中的一个微型流程。 以下是循环过程的分解:

  1. 通过Loop组件的Inputs端口接受DataDataFrame对象的列表,例如CSV文件。

  2. 将输入分割为单个项目。例如,CSV文件按行分解。

    具体来说,Loop组件重复通过DataDataFrame对象中的text键提取项目,直到没有更多项目要提取。 每个item输出都是Data对象。

  3. 通过将它们传递到Item输出端口来迭代每个item

    此端口连接到对每个项目执行操作的一个或多个组件。 Item循环中的最终组件连接回Loop组件的Looping端口以处理下一个项目。

    只有一个组件连接到Item端口,但你可以根据需要将数据传递给任意数量的组件,只要链中的最后一个组件连接回Looping端口。

  4. 处理所有项目后,结果聚合为单个Data对象,从Loop组件的Done端口传递到流程中的下一个组件。

在简化代码方面,Loop组件的工作方式如下:


_10
for i in input: # 接收输入数据作为列表
_10
process_item(i) # 通过连接在Item端口的组件处理每个项目
_10
if has_more_items():
_10
continue # 循环回到Looping端口处理下一个项目
_10
else:
_10
break # 没有更多项目时退出循环
_10
_10
done = aggregate_results() # 编译所有返回的项目
_10
_10
print(done) # 从Done端口发送聚合结果到另一个组件

Loop示例

在以下示例中,Loop组件遍历CSV文件,直到没有更多行要处理。 在这种情况下,Item端口将每行传递给Type Convert组件以将行转换为Message对象,将Message传递给Structured Output组件以处理为结构化数据,然后传递回Loop组件的Looping端口。 处理所有行后,Loop组件通过连接到Done端口的Chroma DB组件将聚合的结构化数据列表加载到Chroma DB数据库中。

Loop CSV parser

提示

有关Loop组件的更多示例,请尝试Langflow中的Research Translation Loop模板,或按照此视频教程创建带有循环和代理RAG的流程:Mastering the Loop Component & Agentic RAG in Langflow

Notify and Listen

NotifyListen组件一起使用。

Notify组件从当前流程的上下文构建通知,包括特定的数据内容和状态标识符。

生成的通知发送到Listen组件。 然后通知数据可以传递给流程中的其他组件,例如If-Else组件。

Run flow

Run Flow组件将另一个Langflow流程作为当前流程的子进程运行。

你可以使用此组件将流程链接在一起,有条件地运行流程,并将流程附加到Agent组件作为智能体工具以根据需要运行。

当与智能体一起使用时,智能体用于注册工具的namedescription元数据会自动创建。

当你为Run Flow组件选择流程时,它使用目标流程的图结构在Run Flow组件上动态生成输入和输出字段。

Run Flow参数

一些Run Flow组件输入参数在视觉编辑器中默认隐藏。 你可以通过组件标题菜单中的 Controls切换参数。

名称类型描述
flow_name_selectedDropdown输入参数。要运行的流程名称。
session_idString输入参数。流程运行的会话ID,如果你想为子流程传递自定义会话ID。
flow_tweak_dataDict输入参数。用于自定义流程行为的调整字典。可用的调整取决于选定的流程。
dynamic inputsVarious输入参数。根据选定的流程生成其他输入。
run_outputsA List of types (Data, Message, or DataFrame)输出参数。从运行流程生成的所有输出。

遗留逻辑组件

以下逻辑组件是遗留组件。 你仍然可以在流程中使用它们,但它们不再受支持,可能在未来版本中被移除。

尽快用建议的替代方案替换这些组件。 标记为已弃用和遗留的组件应立即替换。

Condition/Data Conditional Router

作为此遗留组件的替代方案,请参见If-Else组件

Condition组件基于应用于指定键的条件路由Data对象,包括布尔验证。 它支持true_outputfalse_output,用于根据条件评估路由结果。

此组件在需要复杂数据结构条件路由的工作流中很有用,支持基于数据内容的动态决策。

它可以处理单个Data对象或Data对象列表。 处理Data对象列表时会发生以下操作:

  • 列表中的每个对象都单独评估。
  • 满足条件的对象进入true_output
  • 不满足条件的对象进入false_output
  • 如果所有对象都进入一个输出,另一个输出为空。

Condition组件接受以下参数:

名称类型描述
data_inputData输入参数。要处理的Data对象或Data对象列表。此输入可以处理单个项目和列表。
key_nameString输入参数。要检查的Data对象中的键名。
operatorDropdown输入参数。要应用的运算符。选项:equalsnot equalscontainsstarts withends withboolean validator。默认:equals
compare_valueString输入参数。要比较的值。当运算符为boolean validator时不显示/使用。

operator选项具有以下行为:

  • equals:键的值和compare_value之间的精确匹配比较。
  • not equals:精确匹配的逆操作。
  • contains:检查compare_value是否在键的值中找到。
  • starts with:检查键的值是否以compare_value开头。
  • ends with:检查键的值是否以compare_value结尾。
  • boolean validator:将键的值视为布尔值。以下值被认为是true:
    • 布尔值true
    • 字符串:true1yesyon(不区分大小写)
    • 任何其他值使用Python的bool()函数转换
Pass

作为此遗留组件的替代方案,使用If-Else组件来传递不修改的消息。

Pass组件转发输入消息而不修改。

它接受以下参数:

名称显示名称信息
input_messageInput Message输入参数。要转发的消息。
ignored_messageIgnored Message输入参数。被忽略的第二条消息。用作连续性的解决方法。
output_messageOutput Message输出参数。来自输入的转发消息。
Flow As Tool (已弃用)

此组件从运行已加载流程的函数构造工具。

它在Langflow版本1.1.2中被弃用,并被Run Flow组件替换。

Sub Flow (已弃用)

此组件将整个流程作为组件集成到更大的工作流中。 它基于选定的流程动态生成输入,并使用提供的参数执行流程。

它在Langflow版本1.1.2中被弃用,并被Run Flow组件替换。

Search