跳到主要内容

贡献组件

新组件作为 Component 类的对象添加。

依赖项被添加到 pyproject.toml 文件中。

向 Langflow 贡献示例组件

任何人都可以贡献示例组件。例如,要创建一个名为 DataFrame processor 的新数据组件,请按照以下步骤将其贡献给 Langflow。

  1. 创建一个名为 dataframe_processor.py 的 Python 文件。
  2. 将处理器编写为 Component 类的对象。您将创建一个新类 DataFrameProcessor,它将继承自 Component 并重写基类的方法。

_10
from typing import Any, Dict, Optional
_10
import pandas as pd
_10
from langflow.custom import Component
_10
_10
class DataFrameProcessor(Component):
_10
"""A component that processes pandas DataFrames with various operations."""

  1. 定义类属性以提供有关自定义组件的信息:

_13
from typing import Any, Dict, Optional
_13
import pandas as pd
_13
from langflow.custom import Component
_13
_13
class DataFrameProcessor(Component):
_13
"""A component that processes pandas DataFrames with various operations."""
_13
_13
display_name: str = "DataFrame Processor"
_13
description: str = "Process and transform pandas DataFrames with various operations like filtering, sorting, and aggregation."
_13
documentation: str = "https://docs.langflow.org/components-dataframe-processor"
_13
icon: str = "DataframeIcon"
_13
priority: int = 100
_13
name: str = "dataframe_processor"

  • display_name:在 UI 中显示的用户友好名称。
  • description:对组件功能的简要描述。
  • documentation:详细文档的链接。
  • icon:用于视觉表示的表情符号或图标标识符。 更多信息请参见 贡献包
  • priority:控制显示顺序的可选整数。较小的数字优先显示。
  • name:可选的内部标识符,默认为类名。
  1. 通过指定输入、输出和处理它们的方法来定义组件的接口。方法名必须与输出列表中的 method 字段匹配,这样 Langflow 才知道调用哪个方法来生成每个输出。 此示例创建了一个最小的自定义组件骨架。 有关创建自定义组件的更多信息,请参见 创建自定义 Python 组件

_21
from typing import Any, Dict, Optional
_21
import pandas as pd
_21
from langflow.custom import Component
_21
_21
class DataFrameProcessor(Component):
_21
"""A component that processes pandas DataFrames with various operations."""
_21
_21
display_name: str = "DataFrame Processor"
_21
description: str = "Process and transform pandas DataFrames with various operations like filtering, sorting, and aggregation."
_21
documentation: str = "https://docs.langflow.org/components-dataframe-processor"
_21
icon: str = "DataframeIcon"
_21
priority: int = 100
_21
name: str = "dataframe_processor"
_21
_21
# input and output lists
_21
inputs = []
_21
outputs = []
_21
_21
# method
_21
def some_output_method(self):
_21
return ...

  1. dataframe_processor.py 保存到 src > backend > base > langflow > components 目录。 此示例添加了一个数据组件,因此将其添加到 /data 目录。

  2. 将组件依赖项添加到 src > backend > base > langflow > components > data > __init__.py,如 from .DataFrameProcessor import DataFrameProcessor。 您可以在 Langflow 仓库中查看 /data/init.py

  3. 将任何新的依赖项添加到 pyproject.toml 文件中。

  4. 为您的组件提交文档。对于此示例组件,您需要将文档提交到 数据组件页面

  5. 以拉取请求的形式提交您的更改。Langflow 团队将审查、建议更改并将您的组件添加到 Langflow。

修改组件的最佳实践

在创建或更新组件时,请遵循以下最佳实践以保持向后兼容性并确保用户的流畅体验。

不要重命名类或 name 属性

更改类名或 name 属性会破坏所有现有用户的组件。这是因为前端测试 type 属性,该属性设置为类名或 name 属性。如果这些名称发生更改,组件实际上会变成一个新组件,旧组件会消失。

相反,请执行以下操作:

  • 如果旧名称不清楚,只更改显示名称。
  • 如果功能发生变化但仍然相关,只更改显示名称。
  • 如果需要新的内部名称,将旧组件标记为 legacy=true 并创建新组件。

例如:


_10
class MyCustomComponent(BaseComponent):
_10
name = "my_custom_component_internal"
_10
legacy = True

不要删除字段和输出

删除字段或输出可能导致边缘断开连接并改变组件的行为。

相反,将字段标记为 deprecated 并将它们保留在相同位置。如果绝对必须删除,您必须定义并记录迁移计划。始终向用户清楚地传达字段信息的任何变化。

将过时的组件保持为遗留版本

更新组件时,将它们创建为完全独立的实体,同时将旧组件保持为遗留版本。始终确保向后兼容性,永远不要从基类(如 LCModelComponent)中删除方法和属性。

优先使用异步方法

在组件中始终优先使用异步方法和函数。与文件交互时,使用 aiofileanyio.Path 以获得更好的性能和兼容性。

为您的组件包含测试

使用 ComponentTestBase 类为您的更改包含测试。更多信息请参见 贡献组件测试

文档

在拉取请求中记录更改时,清楚地解释 什么 发生了变化(如显示名称更新或新字段),为什么 发生变化(如改进或错误修复),以及对现有用户的 影响

例如:

示例 PR

_22
# 对 Notify 组件更改的拉取请求
_22
_22
此拉取请求更新了 Notify 组件。
_22
_22
## 发生了什么变化
_22
- 添加了新的 `timeout` 字段来控制组件等待响应的时间。
_22
- 将 `message` 字段重命名为 `notification_text` 以便更清楚。
_22
- 添加了对异步操作的支持。
_22
- 弃用了 `retry_count` 字段,改为使用 `max_retries`。
_22
_22
## 为什么发生变化
_22
- `timeout` 字段解决了用户对更好控制等待时间的请求。
_22
- `message` 到 `notification_text` 的更改使字段的目的更清楚。
_22
- 异步支持提高了复杂流程中的性能。
_22
- `retry_count` 到 `max_retries` 的更改与常见的重试模式术语保持一致。
_22
_22
## 对用户的影响
_22
- 新的 `timeout` 字段是可选的(默认为 30 秒)。
_22
- 用户将看到 `retry_count` 的弃用警告。
_22
- 迁移:在现有流程中将 `retry_count` 替换为 `max_retries`。
_22
- 两个字段在版本 2.0 之前都将工作。
_22
- 异步支持无需任何操作 - 它是向后兼容的。

示例拉取请求流程

  1. 创建或更新组件。 如果目的保持不变,维护类名和 name 属性。 否则,创建新组件并将旧组件移至 legacy
  2. 添加测试。 使用其中一个 ComponentTestBase 类创建测试。 更多信息请参见 贡献组件测试
  3. 将过时的字段和输出标记为 deprecated 并将它们保留在相同位置以确保向后兼容性。
  4. 记录您的更改。 如果发生破坏性更改,请包含迁移说明。
Search