创建自定义组件
创建您自己的组件,并将其独立使用或在管道中使用。
通过 Haystack,您可以轻松创建用于各种任务的任何自定义组件,从过滤结果到与外部软件集成。然后,您可以将这些组件插入、重用和共享到 Haystack 中,甚至通过将其打包并提交到Haystack 集成与外部受众共享!
要求
以下是所有自定义组件的要求
@component
:此装饰器将一个类标记为组件,允许它在管道中使用。run()
:这是每个组件中必需的方法。它接受输入参数并返回一个dict
。输入可以来自管道执行时,也可以来自另一个组件通过connect()
连接时的输出。run()
方法应与为组件声明的输入/输出定义兼容。请参阅下面的扩展示例以了解其工作原理。run()
方法应与为组件声明的输入/输出定义兼容。请参阅下面的扩展示例以了解其工作原理。
输入和输出
接下来,定义组件的输入和输出。
输入
您可以选择三种输入选项
set_input_type
:此方法为组件实例定义或更新单个输入插槽。它非常适合在运行时添加或修改特定输入而不影响其他输入。当您需要根据特定条件动态设置或修改单个输入时,请使用此方法。set_input_types
:此方法允许您一次定义多个输入插槽,替换任何现有输入。当您知道组件将需要的所有输入并希望批量配置它们时,此方法很有用。当您希望在初始化期间定义多个输入时,请使用此方法。- 直接在
run()
方法中声明参数。当组件的输入是静态的并且在类定义时已知时,请使用此方法。
输出
您可以选择两种输出选项
@component.output_types
:此装饰器在类定义时定义输出类型和名称。输出名称和类型必须与dict
返回的run()
方法匹配。当输出类型是静态且已知时,请使用此方法。此装饰器对于静态组件更简洁易读。set_output_types
:此方法在运行时定义或更新组件实例的多个输出插槽。当您需要灵活地动态配置输出时,此方法很有用。当需要为更大的灵活性在运行时设置输出类型时,请使用此方法。
简短示例
以下是一个简单最小组件设置的示例
from haystack import component
@component
class WelcomeTextGenerator:
"""
A component generating personal welcome message and making it upper case
"""
@component.output_types(welcome_text=str, note=str)
def run(self, name:str):
return {"welcome_text": f'Hello {name}, welcome to Haystack!'.upper(), "note": "welcome message is ready"}
在这里,自定义组件WelcomeTextGenerator
接受一个输入name
字符串并返回两个输出welcome_text
和注意
.
扩展示例
点击下面的食谱,查看如何在 Haystack 管道中创建并连接两个自定义组件。
🔨
管道中的自定义组件
打开食谱
扩展现有组件
要扩展 Haystack 中已有的组件,请子类化现有组件并使用@component
装饰器进行标记。重写或扩展run()
方法以处理输入和输出。从派生类的 init 中调用带有派生类名称的super()
以避免初始化问题。
class DerivedComponent(BaseComponent):
def __init__(self):
super(DerivedComponent, self).__init__()
# ...
dc = DerivedComponent() # ok
一个扩展组件的示例是 Haystack 的 FaithfulnessEvaluator,它派生自 LLMEvaluator。
其他参考资料
🧑🍳食谱
更新于 7 个月前