
Daft 多模态数据引擎完全指南Read-Transform-Write 管线、内置 AI 算子与五大数据处理范式【免费下载链接】DaftHigh-performance data engine for AI and multimodal workloads. Process images, audio, video, and structured data at any scale项目地址: https://gitcode.com/GitHub_Trending/da/DaftDaft 是专为 AI 与多模态负载设计的高性能数据引擎用同一套 Python API 原生处理图像、音频、视频、文本与结构化表格数据。本篇以官方 Introduction 文档docs/index.md为主体结合仓库源码完整讲解 Daft 的 READ → TRANSFORM → WRITE 三段式管线范式、五大数据模态的处理映射、设计理念、核心特性与源码级实现细节读完后你将掌握 Daft 的定位、适用场景、AI 函数体系与快速上手路径。Daft 是什么面向 AI 与多模态负载的数据引擎Daft 是一个高性能数据引擎专为 AI 和多模态工作负载设计为任意规模的图像、音频、视频和结构化数据提供简单、可靠的数据处理能力。与仅擅长表格数据的传统 DataFrame 引擎不同Daft 将非结构化与多模态数据作为一等公民通过单一 Python API 统一处理表格、图片、文本与向量嵌入。从官方文档的定位出发Daft 的核心工作流可以概括为一条清晰的三段式数据管线READ ANYTHING读取任意数据Daft 读取从应用系统采集的原始非结构化与多模态数据覆盖对象存储AWS S3、GCS、R2、事件总线Kafka、数据湖Iceberg、Delta Lake等来源。EXPENSIVE TRANSFORMATIONS重负载转换构建包含重转换的高效 Daft 数据管线转换负载来自 GPU 模型、用户自写的 Python 代码、外部 LLM API。WRITE写入落地Daft 将数据落地到面向下游场景的专用数据系统包括搜索全文检索与向量数据库、应用SQL/NoSQL 数据库、分析数据仓库以及模型训练S3 对象存储。五大模态的完整映射关系官方文档为 Daft 定义了五大数据模态并给出了每种模态下数据来源 → 转换方式 → 写入目的地的完整映射这是理解 Daft 能力边界的最佳入口模态典型数据来源典型转换典型写入目的地图片ImagesS3 中的 *.jpeg、数据库中的 URL、Hugging Face 上的 *.parquetOCR 文本提取Tesseract / Azure Computer VisionLLM 图片描述H100 GPU 上的 qwen目标检测GPU 上的 YOLOv8 / Azure 目标检测 APIEmbedding 生成GPU 上的 CLIP / OpenAI text-embedding-3Elasticsearch全文检索PostgreSQL、MongoDB、MySQLWeb 应用查询Turbopuffer、LanceDB向量检索文档DocumentsS3 中的 *.pdf、GCS 中的 *.docx、R2 中的 *.html、Hugging Face 上的 *.parquetOCR 文本提取Tesseract / EasyOCR GPU / Azure Computer Vision结构化数据抽取OpenAI gpt-4o / Azure Form RecognizerEmbedding 生成text-embedding-3 / GPU 上 sentence-transformersPII 检测spaCy NER / Azure PII detection切块与去重daft 默认切分Elasticsearch全文检索BigQuery、Snowflake、Databricks分析Turbopuffer、LanceDB向量检索Parquet数据湖存储视频VideoS3 中的 *.mp4、CSV 中的 URL、Hugging Face 上的 *.parquet视频描述自定义 Python抽音频并转写场景检测OpenCV / PySceneDetect音频转写GPU 上 Whisper / Azure Speech ServicesEmbedding 生成CPU 或 GPU 上 CLIPPostgreSQL、MongoDBWeb 应用查询Elasticsearch全文检索AWS S3对象存储Turbopuffer、LanceDB向量检索音频Audio WAV/MP3/FLACS3 中的 *.wav、数据库中的 URL、Hugging Face 上的 *.parquetWhisper 转写CPU 上 Whisper.cpp / Azure Speech Services说话人识别pyannote.audio 自定义 Python / Azure Speaker Recognition情感检测wav2vec2 自定义 Python / Azure Emotion APIEmbedding 生成wav2vec2 / OpenAI text-embedding-3PostgreSQL、MongoDB、MySQLWeb 应用查询Elasticsearch全文检索BigQuery、Snowflake、Databricks分析Turbopuffer、LanceDB向量检索AI Agent 日志AI Agent LogsKafka 中的 JSON 日志、S3 中的 JSON-linesLLM 摘要OpenAI gpt-4o / Claude 3.5 Sonnet / 自建 GPU 摘要模型Embedding 生成text-embedding-3 / GPU 上 sentence-transformers / GPU 上 BERTPostgreSQL、MySQLWeb 应用查询Turbopuffer、LanceDB向量检索这张映射表揭示了一个关键事实Daft 的典型用法不是孤立的计算而是非结构化数据 → AI 转换 → 下游系统的完整流水线。无论你的数据是电商图片、合同文档、监控视频、客服录音还是 Agent 推理日志都可以用同一套引擎完成摄取、AI 处理和落地。为什么选择 Daft三大设计理念官方文档从三个角度回答了Daft 与其它数据处理框架有何不同。统一的多模态数据处理传统 DataFrame 面对表格以外的数据力不从心用户往往需要为不同数据类型拼接多个专用工具。Daft 则通过单一 Python API 原生处理表格、图像、文本和嵌入向量消除了多工具拼接的复杂度。仓库中的数据类型体系印证了这一点daft/datatype.py导出DataType、TimeUnit、MediaTypedaft/__init__.py顶层同时导出ImageFormat、ImageMode、ImageProperty等多媒体类型见 daft/init.py说明图片等媒体类型是引擎的一等公民而非后挂的扩展。Python 原生无需 JVMDaft 为现代 AI/ML 工作流而生以 Python 为核心、Rust 为底层引擎。用户无需面对 JVM 的复杂性、版本冲突和内存调优官方文档指出这带来约 20 倍的启动速度提升。从仓库结构看src/下是数十个 Rust cratedaft-core、daft-local-execution、daft-recordbatch、daft-parquet等Python 侧通过daft/daft扩展模块from daft.daft import version as _version见 daft/init.py与 Rust 核心交互是典型的Python 接口 Rust 内核架构。从笔记本到集群的无缝扩展本地起步、全球扩展且不修改一行代码是 Daft 的扩展承诺Rust 引擎在单机上提供高性能执行需要更强算力时无缝扩展到分布式集群。仓库中 daft/runners/ 目录同时提供native_runner.py本地执行与ray_runner.py分布式执行并配套 daft/runners/ray_compat.pydocs/distributed/index.md 进一步说明了在 Ray 与 Kubernetes 集群上运行的方式。核心特性逐项解读官方文档列出了六大核心特性下面结合仓库源码逐一展开。原生多模态处理从结构化表格到非结构化文本、再到富媒体Daft 在统一框架内原生支持图片、音频、视频与向量嵌入。daft/io/__init__.py的导出列表展示了这种原生性既有read_parquet、read_csv、read_json、read_sql等传统格式读取器也有read_video_frames视频帧、read_audio级别的多媒体读取能力见 daft/io/init.pydaft/functions/目录下则对应有 image.py、audio.py、video.py 等专用函数模块。内置 AI 操作Daft 原生支持用 AI 转换数据带结构化输出的 LLM Prompt、Embedding 生成、图像/文本分类模型来源涵盖 OpenAI、Hugging Face Transformers 或自定义 Provider全部针对批处理优化。仓库中daft/functions/ai/__init__.py是这一能力的核心入口导出五个函数daft/functions/ai/init.pyembed_text文本嵌入返回Embedding表达式embed_image图像嵌入返回Embedding表达式classify_text文本分类返回最可能标签的字符串表达式classify_image图像分类返回最可能标签的字符串表达式prompt向 LLM 发起 Prompt支持 Pydantic 结构化输出与多模态消息。这些函数在实现上有一个共同模式先通过_resolve_provider解析 Provider默认值分别为transformers与openai见 daft/functions/ai/init.py获取对应的模型描述符如TextEmbedderDescriptor再通过daft.method.batch装饰器指定返回类型、批大小并包装为类式 UDFdaft_cls以配置并发度、GPU 数、重试次数与错误处理策略——这正是针对批处理优化的源码级体现。Rust 驱动的性能官方文档将 Daft 的性能优势概括为Rust 底层提供向量化执行与非阻塞 I/O以约 5 倍更少的内存处理相同查询。仓库中src/daft-local-execution/src/与src/daft-core/src/是执行引擎与核心数据结构的 Rust 实现src/common/下还包含metrics、runtime、tracing等基础设施 crate。需要说明的是5 倍内存与一个数量级性能等数字为官方文档的市场表述具体数值会随硬件、查询与数据规模变化实际使用中建议结合 benchmarking/ 目录下的 TPCH/TPCDS/ClickBench 等基准脚本自行验证。通用数据连接Daft 支持访问任意位置的数据——云存储S3、Azure、GCS、Hugging Face、现代表格式Apache Iceberg、Delta Lake、Apache Hudi、企业级目录Unity Catalog、AWS Glue且宣称零配置。仓库中 daft/io/ 目录下有_parquet.py、_csv.py、_json.py、_kafka.py、_sql.py、_warc.py、_mcap.py、_blob.py、_text.py、_files.py、_range.py等格式读取器以及iceberg/、delta_lake/、hudi/、paimon/、lance/、bigtable/、clickhouse/、turbopuffer/、webdataset/、huggingface/等连接器子包daft/io/aws_config.py与daft/catalog/目录含__glue.py、__iceberg.py、__unity/、__gravitino/等则承载了云配置与企业目录接入能力。详细的连接器用法可参考 docs/connectors/index.md。把代码推送到数据旁零拷贝 UDFDaft 支持将 Python 函数直接带到数据所在位置执行基于 Apache Arrow 实现零拷贝 UDF消除数据移动开销。仓库中 daft/udf/ 目录集中实现了 UDF 体系execution.py、legacy.py、udaf.py、udf_v2.py、agg_execution.py等daft/runners/ray_actor_pool_udf.py 与 daft/execution/udf_worker.py 则展示了 UDF 在本地与 Ray 集群中的执行形态。这也是昂贵转换阶段的通用机制——无论是 GPU 模型还是用户自写 Python 代码都通过 UDF 通道在数据所在处执行。开箱即用的可靠性官方文档强调 Daft 的可靠性设计智能内存管理避免 OOM合理默认值消除配置负担。仓库中src/common/daft-config/提供配置项基础daft/context.py暴露set_planning_config、set_execution_config、execution_config_ctx等运行时配置入口见 daft/init.pydocs/optimization/memory.md 对内存管理策略有专门论述。从源码看 AI 函数与 Provider 体系内置 AI 操作是 Daft 区别于传统 DataFrame 引擎的最大亮点值得深入一层。Provider 抽象统一的模型接入层daft/ai/provider.py定义了Provider抽象基类与五种内建 Provider 的加载器daft/ai/provider.pyProvider 类型加载器对应实现googleload_googledaft.ai.google.provider.GoogleProviderlm_studioload_lm_studiodaft.ai.lm_studio.provider.LMStudioProvideropenaiload_openaidaft.ai.openai.provider.OpenAIProvidertransformersload_transformersdaft.ai.transformers.provider.TransformersProvidervllm-prefix-cachingload_vllm_prefix_cachingdaft.ai.vllm.provider.VLLMPrefixCachingProviderProvider 之上是协议层daft/ai/protocols.py定义了TextEmbedder、ImageEmbedder、TextClassifier、ImageClassifier、Prompter等 Protocol 及其 Descriptor使得同一套embed_text/classify_image调用可以透明地在 OpenAI API、本地 Transformers 模型、vLLM 服务之间切换。若未安装对应 Provider 的依赖ProviderImportError会提示pip install daft[extra]见 daft/ai/provider.py。AI 函数调用链以embed_text为例其完整调用链为daft/functions/ai/init.py_resolve_provider(provider, transformers)解析 Providerprovider.get_text_embedder(model, dimensions)获取嵌入器描述符根据描述符的is_async()选择同步或异步调用实现用method.batch(return_dtype...)声明输出为Embedding类型并指定批大小用daft_cls(..., max_concurrency..., gpus..., max_retries..., on_error...)包装为类式 UDF配置并发与容错返回一个列表达式接入df.with_column(...)参与惰性执行。这意味着 AI 推理天然继承了 Daft 的分布式、批处理与容错能力而不是一个孤立的外部调用。快速上手一条真实的多模态流水线官方 Quickstartdocs/quickstart.md用电商场景演示了读取 → AI 推理 → 写入的完整闭环这里提炼其核心流程与上文三大阶段一一对应。安装与读取Daft 要求Python 3.10 及以上安装方式pip install -U daft[openai] # 含 OpenAI 扩展Quickstart 所需 pip install numpy pillow # 图像处理所需读取 Hugging Face 上的电商数据集10,000 条 Amazon 商品记录含名称、价格、描述与商品图片import daft df_original daft.read_huggingface(calmgoose/amazon-product-data-2020)Daft 默认惰性执行直接打印 DataFrame 只会显示 schema列名与类型而不会加载数据直到显式触发执行。查看数据有两种方式df_original.show(2) # 仅物化并展示前 2 行适合快速检查 # df_original.collect() # 物化整个 DataFrame 到内存图片处理转换用select(...).limit(5)截取小数据集后依次用 Rust 正则提取首个图片 URL、下载图片字节、解码为 Daft 图像类型df df.with_column( first_image_url, daft.functions.regexp_extract(df[Image], r^([^|]), 1) # 提取首个 URL ) df df.with_column(image_data, daft.functions.download(df[first_image_url], on_errornull)) df df.with_column(image, daft.functions.decode_image(df[image_data], on_errornull)) df.select(Product Name, first_image_url, image_data, image).show(3)在 Jupyter 笔记本中image列会直接显示缩略图而非Image文本。这一步演示了 Daft 多模态能力的三个侧面原生正则Rust 驱动、URL 处理download()直接拉取、图像解码decode_image()转二进制为图像类型。批量 AI 推理借助prompt函数对商品图片做是否木制分析并输出结构化结果from pydantic import BaseModel, Field from daft.functions import prompt class WoodAnalysis(BaseModel): is_wooden: bool Field(descriptionWhether the product appears to be made of wood) df df.with_column( wood_analysis, prompt( [Is this product made of wood? Look at the material., df[image]], return_formatWoodAnalysis, # Pydantic 结构化输出 modelgpt-4o-mini, # 成本优先 provideropenai, # 使用 OPENAI_API_KEY 环境变量 ) ) df df.with_column(is_wooden, df[wood_analysis][is_wooden]) df df.collect() # 物化触发全部转换Daft 会自动在本地多核上并行执行这批推理把limit(5)换成limit(100)即可无缝扩展到 100 个商品再结合 docs/distributed/index.md 中的分布式指南同一段代码可在 Ray 或 Kubernetes 集群上处理数百万条记录。写入与回读分析结果写入本地 ParquetUUID 命名自动避免冲突write_modeoverwrite覆盖旧数据df_large.write_parquet(product_analysis, write_modeoverwrite) df_loaded daft.read_parquet(product_analysis/*.parquet) df_loaded.show(5)与读取一样写入同样支持 S3、Iceberg、Delta Lake 等多种目的地。进一步学习与参与官方文档推荐了三条上手路径10 分钟 Quickstart直接运行 Daft 代码快速建立体感Examples 示例库覆盖文本、图像、音频等多模态真实用例仓库对应的代码示例可在 examples/ 与 tutorials/ 中找到API 文档可检索的公开 API 参考。此外docs/modalities/ 按模态images、audio、videos、documents、embeddings、tensors、text、json、files提供了深入指南docs/connectors/index.md 汇总了全部数据源连接器。若想深入了解 Daft 内部机制并参与开源贡献可查看标记了good first issue的问题或通过仓库的 CONTRIBUTING.md 了解开发流程。总结Daft 以读取任意数据 → 昂贵转换 → 写入目标系统的三段式管线为核心范式用统一 Python API 覆盖图片、文档、视频、音频与 AI Agent 日志五大模态其内置 AI 操作prompt/embed_text/embed_image/classify_text/classify_image通过 Provider 抽象屏蔽了 OpenAI、Transformers、vLLM 等模型来源的差异并以 Rust 引擎承载批处理、分布式执行与智能内存管理。无论是构建 RAG 向量库、处理海量文档、分析视频音频还是治理 AI Agent 日志Daft 都提供了一条从数据摄取到 AI 转换再到系统落地的完整技术路径。【免费下载链接】DaftHigh-performance data engine for AI and multimodal workloads. Process images, audio, video, and structured data at any scale项目地址: https://gitcode.com/GitHub_Trending/da/Daft创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考