跳到主要内容

逻辑

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

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 组件或其他 Message 输入。

      如果您的输入不是 Message 格式,您可以使用其他组件进行转换,例如 Type Convert 组件Parser 组件。 如果您的输入不适合 Message 格式,请考虑使用其他组件进行条件路由,例如 Data Operations 组件

    • 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 时模型的指令,例如 Send a message that a new warning, caution, or urgent message was received

    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 时模型的指令,例如 Send a message that a new low-priority message was received

  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 参数

在可视化编辑器中,部分参数默认情况下是隐藏的。 您可以通过组件的头部菜单中的 控件 来修改所有参数。

NameTypeDescription
input_textString输入参数。操作的主要文本输入。
match_textString输入参数。要比较的文本。
operatorDropdown输入参数。用于比较文本的操作符。选项包括 equalsnot equalscontainsstarts withends withregex。默认为 equals
case_sensitiveBoolean输入参数。当为 true 时,比较区分大小写。默认为 false。此设置不适用于正则表达式比较。
max_iterationsInteger输入参数。条件路由器允许的最大迭代次数。默认为 10。
default_routeDropdown输入参数。达到最大迭代次数时采取的路由。选项包括 true_resultfalse_result。默认为 false_result
true_resultMessage输出参数。条件为 true 时产生的输出。
false_resultMessage输出参数。条件为 false 时产生的输出。

循环

循环组件通过将单个项目传递到连接到项目输出端口的其它组件来遍历输入列表,直到没有更多项目需要处理。 然后,循环组件将所有循环的聚合结果传递到连接到完成端口的组件。

循环过程

循环组件就像您流程中的微型流程。 以下是循环过程的详细说明:

  1. 通过循环组件的输入端口接受DataDataFrame对象的列表,例如 CSV 文件。

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

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

  3. 通过将每个item传递到项目输出端口来遍历它们。

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

    只有一个组件连接到项目端口,但您可以根据需要将数据传递到任意多个组件,只要链中的最后一个组件连接回循环端口即可。

    If-Else组件与循环组件不兼容。 有关更多信息,请参阅条件循环

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

以下简化的 Python 代码总结了循环组件的工作原理。 这_不是_实际的组件代码;仅旨在帮助您理解一般过程。


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

循环示例

在以下示例中,循环组件遍历 CSV 文件,直到没有更多行需要处理。 在这种情况下,项目端口将每一行传递到类型转换组件,将行转换为Message对象,然后将Message传递到结构化输出组件处理为结构化数据,然后传递回循环组件的循环端口。 处理完所有行后,循环组件通过连接到完成端口的Chroma DB组件将聚合的结构化数据列表加载到 Chroma DB 数据库中。

Loop CSV parser

提示

有关循环组件的更多示例,请尝试 Langflow 中的研究翻译循环模板,或观看视频教程掌握 Langflow 中的循环组件 & 智能检索增强生成

条件循环

If-Else 组件与 Loop 组件不兼容。 如果您需要条件循环事件,请重新设计您的流程,在循环之前处理条件。 例如,如果您正在循环遍历 DataFrame,可以使用多个 DataFrame Operations 组件 来条件性地过滤数据,然后在每组过滤后的数据上运行单独的循环。

带有条件循环的流程图。

通知与监听

NotifyListen 组件一起使用。

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

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

运行流程

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

您可以使用此组件将流程链接在一起,条件性地运行流程,并将流程附加到 Agent 组件 作为 代理工具 按需运行。

与代理一起使用时,代理用于注册工具的 namedescription 元数据会自动创建。

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

Run Flow 参数

在可视化编辑器中,部分参数默认情况下是隐藏的。 您可以通过组件的头部菜单中的 控件 来修改所有参数。

名称类型描述
flow_name_selected下拉菜单输入参数。要运行的流程的名称。
session_id字符串输入参数。流程运行的会话ID,如果您想为子流程传递自定义会话ID。
flow_tweak_data字典输入参数。用于自定义流程行为的调整字典。可用调整取决于所选流程。
dynamic inputs各种类型输入参数。根据所选流程生成的额外输入。
run_outputs类型为 DataMessageDataFrameList输出参数。所有输出都通过运行流程生成。

传统逻辑组件

以下逻辑组件是传统组件。 您仍然可以在工作流中使用它们,但它们已不再受支持,并且可能在未来的版本中被移除。

请尽快用建议的替代组件替换这些组件。 除了传统标记外,还被标记为已弃用的组件应立即替换。

条件/数据条件路由器

作为此传统组件的替代方案,请参阅If-Else组件

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

此组件适用于需要条件路由复杂数据结构的工作流,能够基于数据内容实现动态决策。

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

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

条件组件接受以下参数:

NameTypeDescription
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()函数进行转换
传递

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

传递组件会转发输入消息而不进行任何修改。

它接受以下参数:

NameDisplay NameInfo
input_message输入消息输入参数。要转发的消息。
ignored_message忽略的消息输入参数。被忽略的第二个消息。用作连续性的变通方法。
output_message输出消息输出参数。从输入转发而来的消息。
流程作为工具(已弃用)

此组件通过运行已加载流程的函数来构建工具。

它在Langflow 1.1.2版本中被弃用,并由运行流程组件替代。

子流程(已弃用)

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

它在Langflow 1.1.2版本中被弃用,并由运行流程组件替代。

Search