跳到主要内容

组件概述

组件是流的基础构建块。 就像应用程序中的类一样,每个组件都针对特定的用例或集成而设计。

提示

Langflow 为工作区提供了键盘快捷键。

在 Langflow 页眉中,点击您的个人资料图标,选择 设置 (Settings),然后点击 快捷键 (Shortcuts) 以查看可用快捷键。

向流中添加组件

要向流中添加组件,请将组件从 核心组件 (Core components) 捆绑包 (Bundles) 菜单拖动到 工作区 (Workspace) 中。

组件按类型或提供商进行分组,某些组件默认处于隐藏状态:

  • 核心组件 (Core components):Langflow 的基础组件按用途分组,例如 输入和输出 (Inputs and Outputs)数据 (Data)。 这些组件要么提供通用功能(如循环和解析),要么提供支持多种第三方集成的单一组件。

  • 捆绑包 (Bundles):捆绑包包含一个或多个支持特定第三方集成的组件,按服务提供商分组。

  • 遗留组件 (Legacy):这些组件默认隐藏。 更多信息请参阅 遗留组件

配置组件

向流中添加组件后,配置组件的参数并将其连接到流中的其他组件。

每个组件都有与其用途相关的输入、输出、参数和控制项。 默认情况下,组件仅显示必填项和常用选项。 要访问其他设置和控制(包括元设置),请使用 组件的页眉菜单

组件页眉菜单

要访问组件的页眉菜单,请在工作区中点击该组件。

代理组件

一些选项直接在页眉菜单上可用。 例如:

  • 代码 (Code):通过直接编辑组件的 Python 代码来修改组件设置。
  • 控制 (Controls):调整所有组件参数,包括默认隐藏的可选设置。
  • 工具模式 (Tool Mode):将组件与 代理 (Agent) 组件结合使用时启用此选项。

对于所有其他选项(包括 删除 (Delete)复制 (Duplicate) 控制),点击 显示更多 (Show More)

重命名组件

要修改组件的名称或描述,请在工作区中点击该组件,然后点击 编辑 (Edit)。 组件描述支持 Markdown 语法。

运行组件

要运行单个组件,请点击 运行组件 (Run component)上次运行 (Last Run) 的值表示组件运行成功。

运行单个组件与运行整个流不同。在单个组件运行中,会调用 build_vertex 函数,该函数仅构建并运行通过可视化编辑器(inputs_dict 参数)提供直接输入的单个组件。VertexBuildResult 数据被传递给 build_and_run 方法,该方法调用组件的 build 方法并运行它。与运行整个流不同,运行单个组件不会自动执行其上游依赖项。

检查组件输出和日志

要查看单个组件的输出和日志,请点击 检查 (Inspect)

冻结组件

信息

冻结一个组件也会冻结该组件上游的所有组件。

如果您期望组件 及其所有上游组件 的输出保持一致,并且只需要运行这些组件一次,请使用冻结选项。

冻结组件会阻止该组件及其所有上游组件重新运行,并保留这些组件的最后输出状态。 未来的任何流运行都将使用保留的输出。

要冻结组件,请在工作区中点击该组件以显示组件页眉菜单,点击 显示更多 (Show More),然后选择 冻结 (Freeze)

组件端口

在每个组件的边界周围,有圆形的端口图标,例如 。 这些表示组件的 连接点 (connection point)端口 (port)

端口要么接受输入,要么产生特定数据类型的输出。 您可以从端口连接的字段或从 端口的颜色 推断数据类型。 例如,系统消息 (System Message) 字段接受 消息数据 (message data),如蓝色端口图标所示:

具有多个输入的提示词模板组件

构建流时,将输出端口连接到相同类型(颜色)的输入端口,以便在两个组件之间传输该类型的数据。 有关每种数据类型的程序化表示信息,请参阅 Langflow 数据类型

提示
  • 在工作区中,将鼠标悬停在端口上以查看该端口的连接详情。 点击端口以 搜索 兼容的组件。

  • 如果两个组件的数据类型不兼容,您可以使用处理组件(如 类型转换 (Type Convert) 组件)在组件之间转换数据。

动态端口

某些组件具有动态添加或删除的端口。 例如,提示词模板 (Prompt Template) 组件接受 用大括号括起来的输入,当在 模板 (Template) 字段中检测到用大括号括起来的值时,会开启新的端口。

具有多个输入的提示词模板组件

选择输出类型

所有组件都会产生输出,这些输出要么发送到流中的另一个组件,要么作为最终流结果返回。

某些组件可以产生多种类型的输出:

  • 如果组件一次发出所有类型,则该组件在可视化编辑器中具有多个输出端口。在组件代码中,这由 group_outputs=True 表示。

  • 如果组件仅发出一种类型,您必须通过点击输出端口附近的输出标签,然后选择所需的输出类型来选择输出类型。在组件代码中,这由 group_outputs=False 或省略 group_outputs 参数表示。

例如,语言模型组件可以输出 模型响应 (Model Response) 语言模型 (Language Model)模型响应 输出产生 Message 数据,可以传递给另一个组件的 Message 端口。 语言模型 输出必须连接到具有 语言模型 输入的组件(如 结构化输出 (Structured Output) 组件),该组件使用连接的 LLM 来驱动接收组件的推理。

语言模型组件中的输出类型选择

端口颜色

组件端口颜色指示端口摄取或发出的数据类型。 例如,消息 (Message) 端口接受或发出 Message 数据。

下表列出了组件数据类型及其对应的端口颜色:

数据类型端口颜色端口图标示例
Data红色 (Red)
DataFrame粉色 (Pink)
Embeddings翠绿色 (Emerald)
LanguageModel品红色 (Fuchsia)
Memory橙色 (Orange)
Message靛蓝色 (Indigo)
Tool青色 (Cyan)
未知或多种类型灰色 (Gray)

组件代码

您可以在 工作区 (Workspace) 和代码中编辑组件。编辑流时,选择一个组件,然后点击 代码 (Code) 以查看和编辑组件底层的 Python 代码。

所有组件都有底层代码,决定了您如何配置它们以及它们可以执行哪些操作。 在创建和运行流的上下文中,组件代码执行以下操作:

  • 确定在可视化编辑器中显示哪些配置选项。
  • 根据组件定义的输入类型验证输入。
  • 使用配置的参数、方法和函数处理数据。
  • 将结果传递给流中的下一个组件。

所有组件都继承自一个基础 Component 类,该类定义了组件的接口和行为。 例如,递归字符文本分割器 (Recursive Character Text Splitter) 组件LCTextSplitterComponent 类的子类。

每个组件的代码都包含输入和输出的定义,这些定义在工作区中表示为 组件端口。 例如,RecursiveCharacterTextSplitter 有四个输入。每个输入定义指定了输入类型(例如 IntInput),以及该特定输入的编码名称、显示名称、描述和其他参数。 这些值决定了组件设置,例如可视化编辑器中的显示名称和工具提示。


_26
inputs = [
_26
IntInput(
_26
name="chunk_size",
_26
display_name="块大小",
_26
info="每个块的最大长度。",
_26
value=1000,
_26
),
_26
IntInput(
_26
name="chunk_overlap",
_26
display_name="块重叠",
_26
info="块之间的重叠量。",
_26
value=200,
_26
),
_26
DataInput(
_26
name="data_input",
_26
display_name="输入",
_26
info="要分割的文本。",
_26
input_types=["Document", "Data"],
_26
),
_26
MessageTextInput(
_26
name="separators",
_26
display_name="分隔符",
_26
info='要分割的字符。\n如果留空,默认值为 ["\\n\\n", "\\n", " ", ""]。',
_26
is_list=True,
_26
),
_26
]

此外,组件还有处理其功能的方法或函数。 例如,RecursiveCharacterTextSplitter 有两个方法:


_16
def get_data_input(self) -> Any:
_16
return self.data_input
_16
_16
def build_text_splitter(self) -> TextSplitter:
_16
if not self.separators:
_16
separators: list[str] | None = None
_16
else:
_16
# 检查分隔符列表是否有转义字符
_16
# 如果有转义字符,取消转义
_16
separators = [unescape_string(x) for x in self.separators]
_16
_16
return RecursiveCharacterTextSplitter(
_16
separators=separators,
_16
chunk_size=self.chunk_size,
_16
chunk_overlap=self.chunk_overlap,
_16
)

get_data_input 方法从组件的输入中检索要分割的文本,使数据可供类使用。 build_text_splitter 方法通过调用其父类的 build 方法创建一个 RecursiveCharacterTextSplitter 对象。然后,文本使用创建的分割器进行分割,并传递给下一个组件。

组件版本

组件版本和状态存储在 Langflow 内部数据库中。向流中添加组件时,您会根据 Langflow 数据库中的信息创建一个组件的分离副本。 这些副本与主 Langflow 数据库分离,不会与您升级 Langflow 版本时可能发生的任何更新同步。

换句话说,组件的单个实例保留了您将其添加到特定流时的版本号和状态。例如,如果您在将组件添加到流时其版本为 1.0,那么除非您更新它,否则它在 该流 中将始终保持为版本 1.0。

更新组件版本

在工作区中编辑流时,如果组件的工作区版本落后于数据库版本,Langflow 会通知您,以便您可以更新组件的工作区版本:

  • 更新就绪 (Update ready):此通知表示组件更新不包含破坏性变更。

  • 有可用更新 (Update available):此通知表示组件更新可能包含破坏性变更。

    破坏性变更会修改组件的输入和输出,导致组件断开连接并破坏流。更新组件后,您可能需要编辑组件设置或重新连接组件端口。

有两种更新组件的方法:

  • 点击 更新 (Update) 更新单个组件。建议用于没有破坏性变更的更新。

  • 点击 查看 (Review) 查看所有可用更新并在更新前创建快照。建议用于包含破坏性变更的更新。

    要在更新组件之前保存流的快照,请启用 更新前创建备份流 (Create backup flow before updating)。备份流存储在与原始流相同的项目文件夹中,后缀为 (backup)

    要更新特定组件,请选择要更新的组件,然后点击 更新组件 (Update Components)

组件将根据您运行的 Langflow 版本更新到最新的可用版本。

组件分组

可以将多个组件组合成一个组件以便重复使用。这对于通过将相关组件组合在一起来组织大型流非常有用,例如 RAG 代理 (Agent) 组件及其相关的工具或向量库组件。

  1. 按住 Shift 键,然后点击并拖动以突出显示要合并的所有组件。组件必须完全位于选择区域内才能合并。

    或者,要逐个选择要合并的组件,请在 Windows 上按住 Ctrl 或在 Mac 上按住 Cmd,然后点击每个组件将其添加到组中。

  2. 松开鼠标和键盘,然后点击 分组 (Group) 将组件合并为单个组组件。

组组件作为一个整体进行配置和管理,包括组件名称、代码和设置。

要取消组件分组,请在工作区中点击该组件以显示组件页眉菜单,点击 显示更多 (Show More),然后选择 取消分组 (Ungroup)

如果您想在其他流中重用此分组,请在工作区中点击该组件以显示组件页眉菜单,点击 显示更多 (Show More),然后选择 保存 (Save),将该组件作为自定义组件保存到 核心组件 (Core components) 菜单中。

遗留组件

Legacy components are longer supported and can be removed in a future release. You can continue to use them in existing flows, but it is recommended that you replace them with supported components as soon as possible. Suggested replacements are included in the Legacy banner on components in your flows. They are also given in release notes and Langflow documentation whenever possible.

If you aren't sure how to replace a legacy component, Search for components by provider, service, or component name. The component may have been deprecated in favor of a completely new component, a similar component, or a new version of the same component in a different category.

If there is no obvious replacement, consider whether another component can be adapted to your use case. For example, many Core components provide generic functionality that can support multiple providers and use cases, such as the API Request component.

If neither of these options are viable, you could use the legacy component's code to create your own custom component, or start a discussion about the legacy component.

To discourage use of legacy components in new flows, these components are hidden by default. In the visual editor, you can click Component settings to toggle the Legacy filter.

Search