Towhee

Towhee是一个开源的AI框架,支持处理多种数据类型,通过预定义和自定义流水线实现数据处理与大模型应用。其PythonAPI提供灵活的算子和高效的ETL功能,结合高性能后端,助力开发者快速构建和部署AI应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


关于 Towhee

Towhee 是一个开源的 embedding 框架,包含丰富的数据处理算法与神经网络模型。通过 Towhee,能够轻松地处理非结构化数据(如图片、视频、音频、长文本等),完成原始数据到向量的转换。

同时,Towhee 也是一个开放的算法与模型交流社区。


在这里插入图片描述


Towhee 可以让用户像搭积木一样,轻松地完成 AI 应用程序的构建和落地。通过使用大语言模型(LLM)以及其他SOTA深度学习模型,从各种未加工过的非结构化数据中(长文本、图像、音频和视频)提取信息,并将这些信息存储到合适的存储系统中,比如可以将提取出的向量数据存储到向量数据库中。开发人员能够通过Towhee提供的Pythonic API来完成各种 AI 流水线和 AI 应用的原型设计,享受自动代码优化,低成本实现生产环境的应用性能优化。



相关文章


✨ 项目特点

🎨 多模态 Towhee 能够处理各种数据类型。无论是图像数据、视频片段、文本、音频文件还是分子结构,Towhee 都可以处理。

📃 LLM 管道编排 Towhee 具有灵活性,可以适应不同的大语言模型(LLM)。此外,它允许在本地托管开源大模型。此外,Towhee 提供了prompt管理和知识检索等功能,使与这些 LLM 的交互更加高效和有效。

🎓 丰富的算子 Towhee 提供了五个领域内众多最先进的现成模型:计算机视觉、自然语言处理、多模态、音频和医疗领域。拥有超过 140 个模型,如 BERT 和 CLIP,以及丰富的功能,如视频解码、音频切片、帧采样和降维,它有助于高效地搭建数据处理流水线。

🔌 预构建的 ETL 管道 Towhee 提供现成的 ETL(提取、转换、加载)管道用于常见任务,如增强生成检索、文本图像搜索和视频副本检测。这意味着您不需要成为 AI 专家即可使用这些功能构建应用程序。

⚡️ 高性能后端 利用 Triton 推理服务器的计算能力,Towhee 可以使用 TensorRT、Pytorch 和 ONNX 等平台加速 CPU 和 GPU 上的模型服务。此外,您可以用几行代码将 Python 管道转换为高性能的 Docker 容器,实现高效部署和扩展。

🐍 Python 风格的 API Towhee 包含一个 Python 风格的方法链 API,用于描述自定义数据处理流水线。我们还支持模式,这使得处理非结构化数据就像处理表格数据一样简单。


🎓 快速入门

Towhee 需要 Python 3.7 及以上的运行环境,可以通过 pip 来完成快速安装:

pip install towhee towhee.models

流水线

预定义流水线

Towhee 提供了一些预定义流水线,可以帮助用户快速实现一些功能。 目前已经实现的有:


所有的流水线均能在Towhee Hub上找到,下面是sentence_embedding流水线的使用示例:

from towhee import AutoPipes, AutoConfig
# get the built-in sentence_similarity pipeline
config = AutoConfig.load_config('sentence_embedding')
config.model = 'paraphrase-albert-small-v2'
config.device = 0
sentence_embedding = AutoPipes.pipeline('sentence_embedding', config=config)

# generate embedding for one sentence
embedding = sentence_embedding('how are you?').get()
# batch generate embeddings for multi-sentences
embeddings = sentence_embedding.batch(['how are you?', 'how old are you?'])
embeddings = [e.get() for e in embeddings]

自定义流水线

通过Towhee python API,可以实现自定义的流水线, 下面示例中,我们来创建一个基于 CLIP 的跨模态检索流水线。

from towhee import ops, pipe, DataCollection
# create image embeddings and build index
p = (
    pipe.input('file_name')
    .map('file_name', 'img', ops.image_decode.cv2())
    .map('img', 'vec', ops.image_text_embedding.clip(model_name='clip_vit_base_patch32', modality='image'))
    .map('vec', 'vec', ops.towhee.np_normalize())
    .map(('vec', 'file_name'), (), ops.ann_insert.faiss_index('./faiss', 512))
    .output()
)

for f_name in ['https://raw.githubusercontent.com/towhee-io/towhee/main/assets/dog1.png',
               'https://raw.githubusercontent.com/towhee-io/towhee/main/assets/dog2.png',
               'https://raw.githubusercontent.com/towhee-io/towhee/main/assets/dog3.png']:
    p(f_name)

# Flush faiss data into disk. 
p.flush()
# search image by text
decode = ops.image_decode.cv2('rgb')
p = (
    pipe.input('text')
    .map('text', 'vec', ops.image_text_embedding.clip(model_name='clip_vit_base_patch32', modality='text'))
    .map('vec', 'vec', ops.towhee.np_normalize())
    # faiss op result format:  [[id, score, [file_name], ...]
    .map('vec', 'row', ops.ann_search.faiss_index('./faiss', 3))
    .map('row', 'images', lambda x: [decode(item[2][0]) for item in x])
    .output('text', 'images')
)

DataCollection(p('puppy Corgi')).show()

在这里插入图片描述


🚀 核心概念

Towhee 由四个主要模块组成:“算子(Operators)”、“流水线(Pipelines)”、“数据处理 API(DataCollection API)”和“执行引擎(Engine)”。

  • 算子(Operator):算子是构成神经网络数据处理水流线(neural data processing pipeline)的“积木块”(基础组件)。这些基础组件按照任务类型进行组织,每种任务类型都具有标准的调用接口。一个算子可以是某种神经网络模型,某种数据处理方法,或是某个 Python 函数。
  • 流水线(Pipeline):流水线是由若干个算子组成的 DAG(有向无环图)。流水线可以实现比单个算子更复杂的功能,诸如特征向量提取、数据标记、跨模态数据理解等。
  • 数据处理 API(DataCollection): DataCollection API 是用于描述流水线的编程接口。提供多种数据转换接口:map, filter, flat_map, concat, window, time_window以及window_all,通过这些接口,可以快速构建复杂的数据处理管道,处理视频,音频,文本,图像等非结构化数据。
  • 执行引擎(Engine): 执行引擎负责实例化流水线、任务调度、资源管理,以及运行期性能优化。面向快速原型构建,Towhee 提供了轻量级的本地执行引擎;面向生产环境需求,Towhee 提供了基于 Nvidia Triton 的高性能执行引擎。

2024-03-27(三)

<think>嗯,用户想了解 Towhee 的入门,我需要先回忆一下 Towhee 的基本信息。首先,Towhee 是一个处理非结构化数据的开源框架,对吧?主要用于机器学习任务,比如嵌入向量生成。用户可能是开发者,想快速上手,所以需要给出明确的步骤和示例。 用户可能对非结构化数据不太熟悉,可能需要简单解释一下。但用户直接问入门,所以重点应放在安装和使用方法上。得确保步骤清晰,避免太技术化的术语,但又要足够详细,让开发者能跟着操作。 安装部分,应该用 pip 安装,这是最常见的。然后举一个简单的例子,比如图像嵌入生成。代码示例需要正确,并且有注释说明每一步的作用。可能还要提醒安装依赖库,比如towhee.models,用户可能不知道需要额外安装。 接下来,用户可能需要了解核心概念,比如Pipe和Pipeline,这时候要区分两者的不同,用简单的例子说明。比如Pipe是单任务处理,Pipeline多个任务串联。这部分可能需要用代码对比,帮助用户理解。 然后,应用场景,用户可能想知道能用Towhee做什么,比如搜索、推荐,或者跨模态任务。举例说明每个场景下的用途,比如图片转文本搜索,或者视频内容分析,这样用户能联想到自己的项目需求。 最后,学习资源部分,给出官方文档和GitHub链接,方便用户进一步查阅。可能还要提到社区,比如Slack或论坛,遇到问题可以寻求帮助。 需要检查是否符合系统级指令,比如数学公式是否正确,但这里可能用不上太多数学。主要确保代码格式正确,中文回答,结构清晰。有没有遗漏的部分?比如版本要求,或者常见问题?可能用户会遇到安装问题,比如依赖冲突,但入门指南可能不需要深入这些,除非用户问起。 总的来说,步骤应该是安装、示例代码、核心概念、应用场景、学习资源。保持语言简洁,分点说明,让用户一步步跟着操作就能跑通第一个例子,建立信心。然后介绍更高级的概念,帮助他们扩展使用。最后提供资源,让他们可以自行深入学习。</think>Towhee 是一个面向非结构化数据(如图像、视频、文本等)处理的开源机器学习框架,专注于提供高效的**嵌入向量生成**和**跨模态数据检索**能力。以下是入门指南: --- ### 一、安装 Towhee ```bash pip install towhee # 基础库 pip install towhee.models # 模型扩展(可选) ``` --- ### 二、快速示例:生成图像嵌入 ```python import towhee # 使用预训练模型生成图像特征向量 result = ( towhee.glob('./*.jpg') # 读取本地图片 .image_decode() # 解码图片 .image_embedding.timm(model_name='resnet50') # 使用ResNet50提取特征 .show() # 展示结果 ) ``` --- ### 三、核心概念 1. **Pipe(管道)** - 单任务处理单元,如解码图片、提取特征 ```python pipe = towhee.dummy_input().image_decode().image_normalize() ``` 2. **Pipeline(流水线)** - 多任务串联处理,例如构建搜索系统: ```python pipeline = ( towhee.dc['path']('./dataset') .image_decode() .image_embedding.timm(model_name='vit_base_patch16_224') .to_vectordb['path', 'vec'](index=my_index) ) ``` --- ### 四、典型应用场景 1. **跨模态搜索** - 图片 → 文本 / 文本 → 音频 2. **推荐系统** - 用向量相似度匹配用户偏好 3. **内容分析** - 视频关键帧提取、文本情感分析 --- ### 五、学习资源 1. [官方文档](https://towhee.io/) 2. [GitHub仓库](https://github.com/towhee-io/towhee) 3. 社区支持:Slack/GitHub Discussions --- 通过以上步骤,您可快速实现非结构化数据处理。实际开发时建议从简单Pipeline开始,逐步扩展功能模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EAI工程笔记

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值