菜单

自定义组件

相关源文件

本文档涵盖了 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 类

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 类

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 集成

自定义组件通过专门的 API 端点进行管理,这些端点负责创建、更新和验证。

关键端点

端点方法目的
/custom_componentPOST创建/验证自定义组件
/custom_component/updatePOST更新组件字段
/run/{flow_id}POST执行包含自定义组件的流程

请求处理

CustomComponentRequestUpdateCustomComponentRequest 模式处理 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