创建管道连接多个函数节点,提供完整的数据处理能力。Towhee提供了各种用于一般应用的内置节点,但您也可以根据自己的需求定义节点。

本教程将指导您如何创建一个管道并提供一些示例。

有关节点类型的更多信息,请参阅节点类型。

创建简单的管道

以下示例演示了如何使用Lambda函数创建一个简单的管道。

  1. from towhee import pipe
  2. add_one = (
  3. pipe.input('x')
  4. .map('x', 'y', lambda x: x + 1)
  5. .output('y')
  6. )
  7. 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。

当然,您也可以在管道定义中使用函数,如下所示:

  1. from towhee import pipe
  2. def my_func(x):
  3. return x + 1
  4. add_one = (
  5. pipe.input('x')
  6. .map('x', 'y', my_func)
  7. .output('y')
  8. )
  9. res = add_one(0).get()

使用 Towhee 运算符创建更复杂的管道

在实际应用中,管道要求节点具有比上面示例更复杂的函数。 Towhee提供以下三种类型的内置运算符,帮助您快速创建更复杂的管道。

  • 数据处理运算符,例如图像转换、图像/音频/视频解码、分词器、矢量标准化等。
  • 神经网络模型或库,如CLIP4Clip预训练模型、HuggingFace模型适配器、OpenAI嵌入API包装器等。
  • 连接器,如Milvus连接器、HBase连接器等。

以下示例演示了如何使用TIMM(Torch Image Model)模型生成图像嵌入。

第一次运行管道时,可能需要几分钟来下载运算符和模型。

  1. from towhee import pipe, ops
  2. img_embedding = (
  3. pipe.input('url')
  4. .map('url', 'img', ops.image_decode.cv2())
  5. .map('img', 'embedding', ops.image_embedding.timm(model_name='resnet50'))
  6. .output('embedding')
  7. )
  8. url = 'https://github.com/towhee-io/towhee/raw/main/towhee_logo.png'
  9. 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')

    输出节点定义了管道的输出模式并结束了管道的定义。