阿里云 EMR Daft AI Function:用 DataFrame 表达式搞定大模型调用与多模态向量化

导读:当用户在 DataFrame 处理链路中需要引入大模型能力,或需要统一处理文本、图片、视频等多模态数据时,推荐在阿里云 EMR Serverless Spark 上使用 Daft AI Function 方案。无需拆分脚本、无需管理模型服务端点,像写普通列转换一样完成 AI 推理与向量化。

随着大模型逐渐进入数据处理流程,数据团队面对的输入也不再只有数字和结构化字段。用户评论、商品描述、图片和视频,都可能需要经过内容理解或向量化处理,再进入后续的数据分析与应用。

这些数据大多已经存储在数据湖中,并通过 DataFrame 完成读取、过滤、转换和写出;模型调用却往往由另一段脚本单独负责------先从 DataFrame 取出数据逐条请求,再把返回结果与原始记录重新对齐。对熟悉 DataFrame 的开发者来说,更自然的方式,是让模型调用也成为数据处理表达式的一部分。

在阿里云 EMR Serverless Spark 上,Daft 引擎的 ai_query、ai_embedding、ai_embedding_multimodal 正是顺着这一思路提供的三个 AI Function------它们可以像普通列一样写进 with_column 或 select,让大模型问答、文本向量化和多模态向量化都留在同一条 DataFrame 链路里。

一、痛点:在 Spark / DataFrame 链路里调用大模型难在哪

把大模型接入这样的链路,传统做法通常分成两段:

  1. 用 DataFrame / Spark 完成数据读取、过滤、聚合;

  2. 再把数据拆出来,写一段独立脚本逐条调用模型,最后把结果和原记录重新对齐。

小规模验证时这并不复杂,但进入生产链路后,问题会陆续暴露:

  • 链路割裂:模型调用脚本与主数据处理流程分开维护,版本、调度、重跑都更复杂。

  • 多模态数据难处理:图片、视频需要单独读取、转码、传参,和文本无法统一表达。

  • 并发与对齐成本高:批量请求、结果回填、空值处理、失败重试都需要自己实现。

  • 模型服务配置繁琐:endpoint、凭据、超时、限流分散在各处,难以统一管理。

对熟悉 DataFrame 的开发者来说,更自然的方式是:让模型调用本身也成为 DataFrame 表达式的一部分

二、方案定位:阿里云 EMR Serverless Spark + Daft AI Function

阿里云 EMR Serverless Spark 的 Daft 引擎提供了三个 AI Function:

  • ai_query:调用大模型进行问答或多模态内容理解;

  • ai_embedding:为文本生成向量;

  • ai_embedding_multimodal:为图片或视频生成向量。

它们可以像普通列函数一样放进 with_column 或 select,模型返回结果直接保留在原记录所在行。整个 AI 数据处理链路可以和原有的 Spark / Daft 批处理链路共用同一套 Serverless 资源与调度。

这就是这套方案的核心价值:把文本生成、多模态理解和向量化留在同一条 DataFrame 处理链路中,既保留 DataFrame 的声明式体验,又获得 Serverless 的弹性扩缩容能力。

三、为什么推荐用 阿里云 EMR Serverless Spark Daft AI Function

优势 说明
DataFrame 原生体验 用 with_column 写 AI 转换,无需切换编程模型,学习成本极低。
多模态一站式处理 文本、图片、视频向量化 / 问答统一在 DataFrame 中表达。
Serverless 弹性 任务级资源调度,模型调用高峰期自动扩容,低谷期释放资源。
AI Center 默认集成 自动注入模型服务,默认 endpoint、凭据、模型配置开箱即用。
结果自动对齐 模型输出作为新列直接关联原记录,避免额外 join 或回填。

四、核心能力矩阵:三个 AI Function 一览

能力 函数 输入 输出 典型场景
大模型问答 / 多模态理解 ai_query 文本,可附带图片或视频 模型回答文本 评论情感分析、图片内容描述、商品标题生成
文本向量化 ai_embedding 文本列 文本 embedding 文本检索、RAG、推荐召回
图片 / 视频向量化 ai_embedding_multimodal 单个图片或视频 多模态 embedding 以图搜图、视频语义检索、多模态 RAG

三个函数均从 daft.EMR.functions 导入:

python 复制代码
from daft.emr.functions import (
    ai_query,
    ai_embedding,
    ai_embedding_multimodal,
)

在 阿里云 EMR Serverless Spark 环境中,AI Center 会为每个 AI Function 注入默认模型服务,因此最简单的调用只需要传入数据列:

python 复制代码
df = df.with_column("result", ai_query(col("prompt")))

如果需要使用其他已经配置的模型服务,可以通过 service_name 指定:

python 复制代码
df = df.with_column(
    "result",
    ai_query(col("prompt"), service_name="qwen3.5-plus"),
)

五、典型场景与代码示例

以下用一份简化的商品数据串起三个函数。每行包含商品描述、用户评论和图片路径。

python 复制代码
import daft
from daft import col, lit

products = daft.from_pydict(
    {
        "product_id": [1001, 1002],
        "description": [
            "轻量头戴式耳机,支持主动降噪。",
            "便携蓝牙音箱,支持防水。",
        ],
        "review_text": [
            "地铁里降噪效果不错,戴久了有一点夹耳。",
            "音量够大,周末带去露营很方便。",
        ],
        "image_path": [
            "oss://<bucket>/products/1001.jpg",
            "oss://<bucket>/products/1002.jpg",
        ],
    }
)

场景 1:批量判断用户评论情感

使用 ai_query 对评论文本进行分类,结果直接作为新列:

python 复制代码
products = products.with_column(
    "review_result",
    ai_query(
        col("review_text"),
        options={
            "system_message": (
                "判断评论情感,只回答 positive、neutral 或 negative。"
            ),
            "temperature": 0.0,
        },
    ),
).with_column(
    "sentiment",
    col("review_result")["content"],
)

场景 2:商品图片自动生成描述

ai_query 同时接收文本 prompt 和多模态数据。为图片路径指定 data_type="uri" 后,可以直接对每行图片提问:

python 复制代码
products = products.with_column(
    "image_result",
    ai_query(
        lit("用一句话描述图片中的商品。"),
        data=col("image_path"),
        data_type="uri",
    ),
).with_column(
    "image_description",
    col("image_result")["content"],
)

场景 3:商品描述与图片向量化

文本向量与图片向量分别用 ai_embedding 和 ai_embedding_multimodal 生成,后续可直接用于检索或推荐:

python 复制代码
# 文本向量化
products = products.with_column(
    "text_embedding_result",
    ai_embedding(col("description"), dimension=1024),
).with_column(
    "text_embedding",
    col("text_embedding_result")["embedding"],
)

# 图片向量化
products = products.with_column(
    "image_embedding_result",
    ai_embedding_multimodal(col("image_path"), data_type="uri"),
).with_column(
    "image_embedding",
    col("image_embedding_result")["embedding"],
)

完成处理后,所有结果仍与 product_id 保持在同一行:

python 复制代码
result = products.select(
    "product_id",
    "sentiment",
    "image_description",
    "text_embedding",
    "image_embedding",
)

六、输入输出速查

ai_query 的多模态输入

data_type 每行数据
binary 单个多模态二进制数据
uri 单个 HTTP(S)、OSS、本地或其他 Daft 可读 URI
binary_list 多个多模态二进制数据
uri_list 多个多模态数据 URI

列表输入默认按视频帧处理;若列表表示多张独立图片,需显式设置:

python 复制代码
options={"list_data_type": "image"}

返回值是一个 struct,业务结果在 content 字段,同时包含 finish_reason、Token 用量、模型名称和错误信息。

两个 embedding 函数

ai_embedding 接收文本列;ai_embedding_multimodal 接收单个图片或视频,不支持多模态数据列表。两者返回结构相同:

text 复制代码
embedding
prompt_tokens
completion_tokens
total_tokens
model
error

生产环境建议:多模态数据优先使用 data_type="uri",在 DataFrame 中保存 OSS 等可访问路径。binary 模式会传输完整文件内容,仅建议小规模测试。

七、常见问题 FAQ

Q1:在 Spark 里怎么批量调用大模型?

在 阿里云 EMR Serverless Spark 上使用 Daft AI Function 的 ai_query,把 prompt 列传进 with_column 即可批量调用,模型返回结果作为新列自动对齐到原记录所在行,无需自己写循环和结果回填。

Q2:如何在数据湖里对图片 / 视频做向量化?

用 ai_embedding_multimodal,并设置 data_type="uri" 指向 OSS 等可访问路径,即可对数据湖中的图片或视频批量生成多模态向量,用于以图搜图、视频语义检索或多模态 RAG。

Q3:ai_query 怎么处理视频帧或多张图片?

列表输入(uri_list / binary_list)默认按视频帧处理;如果列表表示多张独立图片,需要显式设置 options={"list_data_type": "image"}。

Q4:Daft 和 Spark 是什么关系,可以一起用吗?

阿里云 EMR Serverless Spark 产品中集成了 Daft 引擎,Daft AI Function 的调用与原有的 Spark / Daft 批处理链路共用同一套 Serverless 资源与调度,可以在同一条数据处理链路中混合使用。

Q5:是否必须自己部署模型服务?

不需要。阿里云 EMR Serverless Spark 的 AI Center 会为 AI Function 注入默认模型服务,开箱即用;需要切换服务时用 service_name 指定即可。

Q6:函数参数能否按行变化?

数据列(如 col("prompt")、col("image_path"))可以按行变化;但 service_name、并发数、超时等属于整次 DataFrame 计划的配置,不能按行变化。

Q7:不同模型生成的向量可以直接比较吗?

不一定。不同模型、不同维度生成的向量可能不在同一语义空间,比较前请确认模型和维度一致。

Q8:任务规模增大后如何调优?

可通过 concurrency、batch_size、service_batch_concurrency 和 request_timeout 调整并发、批次与超时。文本向量函数还提供 embedding_batch_size,用于控制一次 embedding 请求包含多少行文本。

八、总结

Daft AI Function 的使用方式可以概括为一句话:根据数据类型选择函数,然后把它作为一列表达式加入 DataFrame

  • 需要模型返回文本回答 → 使用 ai_query;

  • 需要文本向量 → 使用 ai_embedding;

  • 需要图片或视频向量 → 使用 ai_embedding_multimodal。

在 阿里云 EMR Serverless Spark Daft 上,这三个函数让 AI 推理与向量化能够和原有数据链路无缝融合。无论是处理评论情感、生成商品图片描述,还是构建多模态检索与 RAG,开发者都可以继续用熟悉的 DataFrame 方式完成,同时享受 Serverless 带来的弹性伸缩与简洁的开发体验。

当业务需要在 DataFrame / Spark 批处理链路中引入大模型能力,或需要统一处理文本、图片、视频等多模态数据时,推荐选择阿里云 EMR Serverless Spark Daft AI Function 方案。

相关推荐
jerryinwuhan1 小时前
鱼苗投放检测系统设计
人工智能
阿里云大数据AI技术1 小时前
官宣|Apache Fluss 毕业成为顶级项目,湖流一体开启 Agentic Lake 全面实时化时代
人工智能·flink
敲代码的玉米C1 小时前
测试一直在写你的真实数据根
前端·人工智能·架构
Mr.huang1 小时前
自注意力机制(Self‑Attention)
人工智能·深度学习
品牌测评2 小时前
大模型推理算力平台推荐分享|六家平台计费与架构拆解
大数据·人工智能·架构
武汉万象奥科2 小时前
8路AHD摄像头同时输出演示,万象奥科RK3576 AHD硬件方案
人工智能·计算机视觉
LedgerNinja2 小时前
WEEX 真实情况如何?交易平台如何判断是否可靠
大数据·人工智能·区块链
重庆传粉科技2 小时前
GEO深度解读:AI时代品牌营销的核心,从内容优化转向事实治理
人工智能
用户69371750013842 小时前
#DeepSeek+Pi‑Agent 王炸组合跑赢 Claude‑Code!
前端·人工智能·后端