创建管道连接多个函数节点,提供完整的数据处理能力。Towhee提供了各种用于一般应用的内置节点,但您也可以根据自己的需求定义节点。
本教程将指导您如何创建一个管道并提供一些示例。
有关节点类型的更多信息,请参阅节点类型。
创建简单的管道
以下示例演示了如何使用Lambda函数创建一个简单的管道。
from towhee import pipe
add_one = (
pipe.input('x')
.map('x', 'y', lambda x: x + 1)
.output('y')
)
res = add_one(0).get()
在上面的示例中,我们定义了一个名为 add_one
的管道,它将输入的值增加1并返回结果。此管道包含三个节点。
input('x')
输入节点定义了管道的输入模式,其中包含一个名为 ‘x’ 的变量。
map('x', 'y', lambda x: x+1)
Map节点将 lambda x: x + 1 应用于每个输入值。
output('y')
输出节点定义了管道的输出模式并结束了管道的定义。一旦调用,将创建并返回管道实例。
在第9行,我们将输入值0传递给管道,并将得到输出值1。
当然,您也可以在管道定义中使用函数,如下所示:
from towhee import pipe
def my_func(x):
return x + 1
add_one = (
pipe.input('x')
.map('x', 'y', my_func)
.output('y')
)
res = add_one(0).get()
使用 Towhee 运算符创建更复杂的管道
在实际应用中,管道要求节点具有比上面示例更复杂的函数。 Towhee提供以下三种类型的内置运算符,帮助您快速创建更复杂的管道。
- 数据处理运算符,例如图像转换、图像/音频/视频解码、分词器、矢量标准化等。
- 神经网络模型或库,如CLIP4Clip预训练模型、HuggingFace模型适配器、OpenAI嵌入API包装器等。
- 连接器,如Milvus连接器、HBase连接器等。
以下示例演示了如何使用TIMM(Torch Image Model)模型生成图像嵌入。
第一次运行管道时,可能需要几分钟来下载运算符和模型。
from towhee import pipe, ops
img_embedding = (
pipe.input('url')
.map('url', 'img', ops.image_decode.cv2())
.map('img', 'embedding', ops.image_embedding.timm(model_name='resnet50'))
.output('embedding')
)
url = 'https://github.com/towhee-io/towhee/raw/main/towhee_logo.png'
res = img_embedding(url).get()
此管道包含四个节点。
input('url')
输入节点定义了管道的输入模式,其中包含一个名为url的变量。
map('url', 'img', ops.image_decode.cv2())
此Map节点将每个url作为输入。此节点获取图像并使用OpenCV进行图像解码。输出img是解码后的图像数据。
map('img', 'embedding', ops.image_embedding.timm(model_name='resnet50'))
此Map节点将每个img作为输入。此节点使用Timm的resnet50模型生成特征向量。输出embedding是每个输入图像的嵌入向量。
output('embedding')
输出节点定义了管道的输出模式并结束了管道的定义。