本文档涵盖了 Langflow 中的自定义组件系统,它允许用户通过编写 Python 代码来创建可重用的 AI 组件。自定义组件通过继承提供的基类并实现特定的方法来处理输入、输出和处理逻辑,从而扩展了 Langflow 的基本功能。
有关更广泛的组件系统架构的信息,请参阅 组件架构与执行。有关输入字段定义和验证的详细信息,请参阅 输入类型与字段系统。
Langflow 中的自定义组件遵循分层类结构,用户通过继承基类并实现所需方法来创建组件。
来源: src/backend/base/langflow/custom/custom_component/custom_component.py35-51 src/backend/base/langflow/custom/custom_component/component.py94-98 src/backend/base/langflow/interface/initialize/loading.py24-50 src/backend/base/langflow/custom/utils.py445-500
CustomComponent 类是用户创建组件的主要基类。它提供了组件生命周期管理和状态处理的关键功能。
| 方法 | 目的 | 返回类型 |
|---|---|---|
build(**params) | 主要执行方法 | 任意 |
update_state(name, value) | 更新图状态 | 无 |
get_state(name) | 检索图状态 | 任意 |
stop(output_name) | 停止组件执行 | 无 |
start(output_name) | 开始组件执行 | 无 |
CustomComponent 中定义的关键属性
来源: src/backend/base/langflow/custom/custom_component/custom_component.py35-178
Component 类扩展了 CustomComponent,增加了输入/输出处理、组件连接和图集成的高级功能。
| 方法 | 目的 | 参数 |
|---|---|---|
set(**kwargs) | 连接组件或设置参数 | **kwargs: 任何 |
get_input(name) | 检索输入值 | name: str |
get_output(name) | 检索输出定义 | name: str |
run() | 执行组件 | 无 |
Component 类维护着几个内部集合
_inputs: dict[str, InputTypes] - 输入字段定义_outputs_map: dict[str, Output] - 输出字段映射_results: dict[str, Any] - 执行结果_edges: list[EdgeData] - 组件连接来源: src/backend/base/langflow/custom/custom_component/component.py94-162 src/backend/base/langflow/custom/custom_component/component.py343-361
创建和集成自定义组件的过程涉及从代码评估到前端集成的多个阶段。
来源: src/backend/base/langflow/custom/eval.py src/backend/base/langflow/interface/initialize/loading.py24-50 src/backend/base/langflow/custom/utils.py445-500 src/backend/base/langflow/template/frontend_node/custom_components.py45-85
自定义组件通过输入和输出规范定义其接口。系统会自动处理这些定义,以创建前端表单界面。
输入字段使用 add_new_custom_field() 函数进行处理,该函数创建具有适当验证和类型信息的 Input 对象。
输出类型通过使用 _extract_return_type() 和 post_process_type() 函数分析组件的方法返回类型注解来确定。
来源: src/backend/base/langflow/custom/utils.py142-200 src/backend/base/langflow/template/field/base.py34-160 src/backend/base/langflow/type_extraction/type_extraction.py
组件执行生命周期涉及多个阶段,从实例化到结果生成。
来源: src/backend/base/langflow/interface/initialize/loading.py140-194 src/backend/base/langflow/graph/vertex/base.py380-413 src/backend/base/langflow/api/v1/endpoints.py593-700
自定义组件通过 ComponentFrontendNode 系统与前端集成,该系统将 Python 组件定义转换为 JSON 模板供可视化编辑器使用。
前端模板包括
| 字段 | 描述 | 来源 |
|---|---|---|
template | 输入字段定义 | Template.fields |
outputs | 输出类型规范 | component.outputs |
base_classes | 组件继承链 | get_base_classes() |
display_name | 人类可读的名称 | component.display_name |
description | 组件描述 | component.description |
字段配置支持高级功能
来源: src/backend/base/langflow/template/frontend_node/custom_components.py45-85 src/backend/base/langflow/custom/utils.py142-200 src/backend/base/langflow/template/field/base.py34-160
自定义组件通过专门的 API 端点进行管理,这些端点负责创建、更新和验证。
| 端点 | 方法 | 目的 |
|---|---|---|
/custom_component | POST | 创建/验证自定义组件 |
/custom_component/update | POST | 更新组件字段 |
/run/{flow_id} | POST | 执行包含自定义组件的流程 |
CustomComponentRequest 和 UpdateCustomComponentRequest 模式处理 API 请求。
来源: src/backend/base/langflow/api/v1/schemas.py193-212 src/backend/base/langflow/api/v1/endpoints.py593-700
自定义组件系统包括对常见问题的全面错误处理。
ComponentBuildError 类提供结构化的错误报告,并带有格式化的回溯信息,用于调试自定义组件问题。
来源:src/backend/base/langflow/exceptions/component.py src/backend/base/langflow/api/utils.py213-234 src/backend/base/langflow/custom/utils.py35-37