贡献组件
新组件作为 Component
类的对象添加。
依赖项被添加到 pyproject.toml 文件中。
为 Langflow 贡献示例组件
任何人都可以贡献示例组件。例如,要创建一个名为 DataFrame processor 的新数据组件,请按照以下步骤将其贡献给 Langflow。
- 创建一个名为
dataframe_processor.py
的 Python 文件。 - 将你的处理器编写为
Component
类的对象。你将创建一个新类DataFrameProcessor
,它将继承自Component
并重写基类的方法。
_10from typing import Any, Dict, Optional_10import pandas as pd_10from langflow.custom import Component_10_10class DataFrameProcessor(Component):_10 """一个处理 pandas DataFrames 的组件,支持各种操作。"
- 定义类属性以提供有关你的自定义组件的信息:
_13from typing import Any, Dict, Optional_13import pandas as pd_13from langflow.custom import Component_13_13class DataFrameProcessor(Component):_13 """一个处理 pandas DataFrames 的组件,支持各种操作。"""_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
: 在可视化编辑器中显示的用户友好名称。description
: 对你的组件功能的简要描述。documentation
: 指向详细文档的链接。icon
: 用于视觉表示的表情符号或图标标识符。 有关更多信息,请参阅 贡献捆绑包。priority
: 一个可选的整数,用于控制显示顺序。数字较小的组件会优先显示。name
: 一个可选的内部标识符,默认为类名。
- 通过指定组件的输入、输出以及处理它们的方法来定义组件的接口。方法名必须与输出列表中的
method
字段匹配,因为这是 Langflow 知道调用哪个方法来生成 每个输出的方式。 此示例创建了一个最小的自定义组件骨架。 有关创建自定义组件的更多信息,请参阅 创建自定义 Python 组件。
_21from typing import Any, Dict, Optional_21import pandas as pd_21from langflow.custom import Component_21_21class DataFrameProcessor(Component):_21 """一个处理 pandas DataFrames 的组件,支持各种操作。"""_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 ...
-
将
dataframe_processor.py
保存到src > backend > base > langflow > components
目录。 此示例添加了一个数据组件,因此请将其添加到/data
目录。 -
将组件依赖项添加到
src > backend > base > langflow > components > data > __init__.py
,格式为from .DataFrameProcessor import DataFrameProcessor
。 你可以在 Langflow 仓库中查看 /data/init.py。 -
将任何新的依赖项添加到 pyproject.toml 文件。
-
为你的组件提交文档。对于此示例组件,你应将文档提交到 数据组件页面。
-
将你的更改作为拉取请求提交。Langflow 团队将进行审查、提出修改建议,并将你的组件添加到 Langflow 中。
修改组件的最佳实践
在创建或更新组件时,请遵循以下最佳实践,以保持向后兼容性并确保用户获得流畅的体验。
不要重命名类或 name
属性
更改类名或 name
属性会破坏所有现有用户的组件。这是因为前端会测试 type
属性,该属性被设置为类名或 name
属性。如果这些名称发生变化,组件实际上就变成了一个新组件,而旧组件就会消失。
相反,请执行以下操作:
- 如果旧名称不清晰,只更改显示名称。
- 如果功能发生变化但仍然相关,只更改显示名称。
- 如果需要新的内部名称,请将旧组件标记为
legacy=true
并创建一个新组件。
例如:
_10class MyCustomComponent(BaseComponent):_10 name = "my_custom_component_internal"_10 legacy = True
不要删除字段和输出
删除字段或输出可能导致边断开并改变组件的行为。
相反,请将字段标记为 deprecated
并保持在同一位置。如果绝对需要删除,您必须定义并记录迁移计划。始终向用户清楚地传达字段信息的任何变更。
将过时的组件保留为传统版本
更新组件时,将它们创建为完全独立的实体,同时将旧组件保留为传统版本。始终确保向后兼容性,并且永远不要从基类(如 LCModelComponent
)中删除方法和属性。
优先使用异步方法
在组件中始终优先使用异步方法和函数。与文件交互时,使用 aiofile
和 anyio.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- 异步支持无需任何操作 - 它是向后兼容的。
示例拉取请求流程
- 创建或更新组件。
如果目的保持不变,请保持类名和
name
属性。 否则,创建一个新组件并将旧组件移动到legacy
。 - 添加测试。
使用
ComponentTestBase
类之一创建测试。 有关更多信息,请参阅贡献组件测试。 - 将过时的字段和输出标记为
deprecated
并保持在同一位置以确保向后兼容性。 - 记录您的更改。 如果发生破坏性更改,请包含迁移说明。