背景介绍

当下,以大语言模型为代表的人工智能(AI)正在快速演进,这将深刻改变我们分析、处理与使用数据的方式,推动各行各业迎来新的发展机遇。但另一方面,选取、部署和使用好大模型具备一定的技术要求和开发成本,限制了用户利用AI批量处理和分析海量数据的能力。

MaxFrame 产品是阿里云自研大数据平台 MaxCompute 提供的面向Data + AI领域的分布式计算方案。依托于MaxCompute业界领先的查询处理引擎、大规模弹性计算能力,以及存储的海量数据,MaxFrame提供了兼容 Pandas API的 DataFrame 表示层语义,旨在支持用户利用熟悉的Python生态进行敏捷、高效的数据清洗、机器学习训练和离线模型推理等计算任务,并在一些典型的用户场景中展现了明显的性能和性价比优势。

为了让大模型的智能在大数据平台中普适化,降低用户利用AI处理和分析数据的门槛,MaxFrame正式推出了AI Function功能。我们引入了开箱即用的Qwen 2.5 和 Deepseek-R1-Distill-Qwen 等系列大模型,用户不再需要去关心和解决复杂繁琐的模型部署问题,直接调用AI Function中提供的简单易用的编程接口,就可以对 MaxCompute表中的海量数据使用大模型进行离线处理。AI Function的典型使用场景包括从文本数据中提取结构化信息、整理总结内容、生成摘要、翻译语言,以及文本质量评估,情感分类等多项任务,可以极大地简化数据处理流程并提升处理结果的质量。


AI Function功能概览

AI Function提供了简单的的 generate 接口,允许用户选择模型种类,并以表和 prompts 作为参数输入执行。在接口执行中,MaxFrame 会先对表数据进行切分,根据数据规模设置合适的并发度并启动worker组执行计算任务,每个worker对输入的数据行使用用户传入的 prompts 参数为模板进行渲染并构建模型输入数据,来调用 worker 中本地启动的大模型进行推理,并将推理结果和成功状态写入 MaxCompute 表中。

整体架构和流程如图所示:

目前,MaxFrame 以开箱即用的方式支持如下 Qwen2.5 和 Deepseek-R1-Distill-Qwen 系列模型:

  • Qwen 2.5 文本系列模型

    • Qwen2.5-7B-instruct
    • Qwen2.5-3B-instruct
    • Qwen2.5-1.5B-instruct
    • Qwen2.5-0.5B-instruct
  • Deepseek-R1-Distill-Qwen 系列模型

    • DeepSeek-R1-Distill-Qwen-14B
    • DeepSeek-R1-Distill-Qwen-7B
    • DeepSeek-R1-Distill-Qwen-1.5B

这些模型均离线托管在 MaxCompute平台内部,用户不再需要去考虑模型下载、分发以及API调用的并发上限问题。因此,调用AI Function的MaxFrame作业能够充分利用MaxCompute海量的计算资源,以较高的总体token吞吐率和并发完成基于大模型推理能力的文本处理任务。

除了支持MaxCompute离线托管的内置模型,对于需要处理和理解复杂文本数据的场景,AI Function 也支持调用阿里云灵积平台 (DashScope) 提供的 LLM API。DashScope 提供了参数规模更大和种类更丰富的大模型,如 QwenMax,DeepSeek R1 满血版等,用户可自行申请 DashScope ApiKey,确定灵积 API 的限流策略,并在AI Function中设置和使用。


使用方式

大模型对文本的处理有许多有趣的用例,下面提供一个简单的问答案例来理解在 AI Function 接口是如何使用的。

前置需求:

  • 开通 MaxCompute
  • 安装 MaxFrame 最新的客户端pip install maxframe -U

从零开始使用 MaxFrame 可以查看 快速开始,这里以本地运行作为参考,通常你需要从使用MaxFrame SDK创建一个 Session 开始:

import os
from maxframe import new_session
from odps import ODPS

import logging
logging.basicConfig(level=logging.INFO)

# 使用MaxFrame相关账号初始化ODPS
o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

# 初始化MaxFrame会话
session = new_session(odps_entry=o)
import maxframe.dataframe as md

# 创建 dataframe
query_list = [
    "地球距离太阳的平均距离是多少?",
    "美国独立战争是从哪一年开始的?",
    "什么是水的沸点?",
    "如何快速缓解头痛?",
    "谁是《哈利·波特》系列中的主角?",
]
df = md.DataFrame({"query": query_list})

在上面的代码中,我们创建了一个包含五个问题的 DataFrame。接下来,我们将使用 AI Function 来生成每个问题的答案。

from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM

llm = ManagedTextLLM(name="qwen2.5-1.5b-instruct")

# prompts 模板
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "请回答如下问题:{query}"},
]

result_df = llm.generate(df, prompt_template=messages)
print(result_df.execute())

我们创建了一个 ManagedTextLLM 对象,并指定了要使用的模型为 qwen2.5-1.5b-instruct。我们还定义了一个 prompts 模板,其中包含一个系统消息和一个用户消息,用户消息中,预留了 f-string 形式的变量 {query},这些占位符将会被替换为 DataFrame 中的 query 列,占位符支持使用来自 DataFrame 的多个列,均通过对应的列名来引用。

在 MaxFrame 中,对 llm 对象调用 generate 方法,传入 DataFrame 和 prompts 模板,即可获得每个问题的答案,使用 execute 将触发对结果 DataFrame 的计算,所以的计算都会发生在 MaxCompute 集群上,将自动根据计算规模对输入的 DataFrame 进行数据分片和并行计算。


应用案例

为了更直观地展示 MaxFrame AI Function 的强大功能和应用场景,我们将通过三个应用案例来深入了解这些技术是如何为用户解决实际问题的。

文本风控分类 - 使用 DeekSeek-R1-Distill-Qwen模型

Deepseek-R1-Distill-Qwen 模型具备深度推理能力,在推理过程中,能够对文本进行分类、情感分析、文本质量评估等多项任务,在推理时能够详细输出思维链和逻辑推理过程,这种能力使得在深度理解得文本分类任务时具备更大得优势,特别是在风控这种涉及复杂语义和上下文关联的场景。

在 AI Function 中,可以使用 DeepSeek-R1-Distill-Qwen-14B 模型对文本进行风控分类,演示使用的数据集为 google/civil_comments,这是 Civil comments 平台存档的公开评论,来自全球大约 50 个英文新闻网站上。

df = md.read_odps_table("civil_comments", index_col="index").head(10)
print(df.execute())

以演示为目的,civil_comments 中已经存放了该数据集中的文本,我们直接读取该数据集的前 10 行。

接下来,我们将进行分控分类,判断对应的评论是否是安全的。相比于单独训练模型,Deepseek-R1-Distill-Qwen 系列模型只需要使用 prompts,即可完成对应的推理任务。


from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM

llm = ManagedTextLLM(name="DeepSeek-R1-Distill-Qwen-14B")

# Deepseek 模型不应当提供 system prompts
messages = [
    {
        "role": "user",
        "content": """请作为文本风控评估员,对以下互联网文本进行健康程度评估,并给出理由,且需满足以下要求:

1. **需识别的违规类型**(优先级从高到低):
   - 涉政/宗教敏感内容
   - 暴力血腥描述
   - 色情低俗表述
   - 疑似诈骗信息
   - 不实谣言
   - 违反社会公序良俗的内容
   - 安全

2. **输出格式**:
    以如下纯JSON表示形式,并确保输出中不包含```或任何其他Markdown格式符号
    "reason": "简要说明评分依据(100字内)",
    "category": "主要违规类型(无则填'安全')"

以下是你要判断的文本:
{text}
""",
    },
]

result_df = llm.generate(
    df,
    prompt_template=messages,
)

result_df.execute()

Deepseek-R1-Distill-Qwen 相比于普通模型,会有额外的推理过程,因此时间上会比普通模型完成一次推理需要更长的时间,但能够获得质量更高的推理结果。

在 reasoning 模型中,推理过程可能是人工复查结果的重要依据,因此 MaxFrame 也支持提取推理思维链的内容,单独存放在 reasoning_content 中,可以使用 flatjson 访问。

这里直接将原始文本的 DataFrame 和推理结果的 DataFrame 进行合并,并提出 reasoning_content 输出。

# 合并原始文本和推理结果
merged_df = md.merge(df, result_df, left_index=True, right_index=True)
# 提取推理结果
merged_df["content"] = merged_df.response.mf.flatjson(
    ["$.choices[0].message.content"], dtype=np.dtype(np.str_)
)
# 提取推理思维链
merged_df["reasoning_content"] = merged_df.response.mf.flatjson(
    ["$.choices[0].message.reasoning_content"], dtype=np.dtype(np.str_)
)

# 输出结果
print(merged_df[["text", "content", "reasoning_content"]].execute())

健康的:

不健康的:

在这个风控场景中,我们可以看到 Deepseek-R1-Distill-Qwen 模型在文本分类和逻辑推理中的强大表现。它不仅提供高度准确的分类结果,还揭示了推理的思考过程,使用户对模型的决策和分析有更全面的了解。这种透明度对于满足合规要求和提高信任度是至关重要的。借助MaxFrame AI Function,用户可以海量的对文本进行风控,更好地应对复杂的风险控制问题,并快速识别潜在威胁。

文本结构化信息提取 - 使用 Qwen 2.5 模型

接下来的场景展示 MaxFrame AI Function 在非结构化数据处理上的强大能力。在大数据分析中,非结构化数据如文本和图像往往占据主导地位,带来了巨大的处理挑战。让我们深入探讨如何利用 AI Function 简化这一过程。

我们演示如何使用 AI Function 从简历中提取候选人的工作经验,使用随机生成的简历文本进行演示。

resumes = [
    "138-xxxx-xxxx zhangwei@example.com 希望在一家创新型科技公司担任软件开发工程师 运用我的编程技能和团队协作能力推动产品落地 某大学 计算机科学与技术 本科 2018.09 - 2022.06 某大学 软件工程 硕士 2022.09 - 至今 A 公司 后端开发实习生 2021.07 - 2021.12 参与推荐系统后端服务的开发与优化 提升系统响应速度约20% 使用Go语言重构了部分代码模块 提高了代码可维护性 B 公司 全栈开发工程师 2022.06 - 至今 负责电商平台核心功能模块的开发 完成用户登录、支付等功能的实现 主导了前端性能优化项目 页面加载时间减少了30% 编程语言: Python Go JavaScript 框架: Django React Vue.js 数据库: MySQL MongoDB 工具: Docker Git Jenkins",
    "159-xxxx-xxxx lina@example.com 致力于成为数据领域的专家 通过数据分析与挖掘帮助企业制定更精准的商业决策 某大学 统计学 本科 2016.09 - 2020.06 某大学 数据科学 硕士 2020.09 - 2022.06 C 公司 数据分析师 2022.07 - 至今 负责电商平台用户行为数据的分析 提出多项优化建议并被采纳 构建机器学习模型预测用户购买意向 准确率达到85%以上 D 公司 咨询顾问 2020.07 - 2022.06 协助客户进行财务数据清洗与可视化分析 输出高质量报告 支持多个大型项目的实施 涉及零售、金融等行业 数据分析工具: Excel Tableau Power BI 编程语言: Python R SQL 机器学习框架: Scikit-learn TensorFlow",
    "135-xxxx-xxxx wangqiang@example.com 期望在市场营销领域发挥创意与执行力 为企业品牌建设贡献力量 某大学 市场营销 本科 2017.09 - 2021.06 E 公司 市场专员 2021.07 - 2023.03 策划并执行了多场线上线下推广活动 累计吸引超过10万用户参与 分析竞品动态 为新产品上市提供市场调研支持 F 公司 广告策划 2023.04 - 至今 负责大客户广告投放策略制定 单季度广告收入增长15% 创作多支短视频广告脚本 点击率高于行业平均水平20% 营销工具: Google Analytics SEMrush Hootsuite 设计软件: Photoshop Illustrator 社交媒体运营经验: 微信公众号、抖音等平台"
]
df = md.DataFrame({"text": resumes})

接下来我们使用 prompts 要求 LLM 从其中提取简历信息,并以 json 结构返回。

from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM

llm = ManagedTextLLM(name="qwen2.5-7b-instruct")

messages = [
    {
        "role": "system",
        "content": "你是一个简历信息提取专家,从简历中提取结构化信息,以 json 格式返回,包括姓名,教育经历,工作经历,请不要遗漏任何一段经历",
    },
    {
        "role": "user",
        "content": "从如下简历中抽取信息\n```{text}```",
    },
]

为了能够约束模型以预期的 json format 输出,AI Function 支持使用 json_mode,允许使用 response_format 提供预期的 json 格式。

result = llm.generate(
    df,
    prompt_template=messages,
    params={
        "response_format": {
            "type": "json_object",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "The individual's name",
                    },
                    "education": {
                        "type": ["string", "array"],
                        "description": "The individual's educational background, can be a string or an array. If not provided, it might be empty or contain explanatory text.",
                    },
                    "workExperience": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "position": {
                                    "type": "string",
                                    "description": "The job title of the position held",
                                },
                                "company": {
                                    "type": "string",
                                    "description": "The name of the company where the individual was employed",
                                },
                                "duration": {
                                    "type": "string",
                                    "description": "The period during which the individual worked at the company",
                                },
                            },
                            "required": [
                                "position",
                                "company",
                                "duration",
                            ],
                        },
                    },
                },
                "required": ["education", "education", "workExperience"],
            },
        },
        "repeat_penalty": 1.2,
    },
)

result.execute()

generate 函数也接收通过 params 传入的模型推理参数,包括 response_format, max_tokens, repeat_penalty 等参数,避免在处理复杂 json 和长文本时出现重复输出的问题。下面的计算结果中,根据prompt传入的指令和response_format 的设置,模型的输出变成了结构化的 json 格式文本。

{
    "education": [
        {
            "degree": "本科",
            "major": "计算机科学与技术",
            "institution": "某大学",
            "start_year": "2018.09",
            "end_year": "2022.06"
        },
        {
            "degree": "硕士",
            "major": "软件工程",
            "institution": "某大学",
            "start_year": "2022.09"
        }
    ],
    "workExperience": [
        {
            "position": "后端开发实习生",
            "company": "A公司",
            "duration": "2021.07 - 2021.12"
        },
        {
            "position": "全栈开发工程师",
            "company": "B公司",
            "duration": "2022.06 - 至今"
        }
    ]
}

可以看到,MaxFrame 除了 AI Function 之外,还有大量的数据分析算子,在提前限定 json 结构的情况下,可以轻松地解析出结果。

文本摘要生成 - 使用 Qwen 2.5 模型

对于长文本进行摘要、大纲生成、关键词抽取也是常见的大模型文本处理的场景。LLM 能够用更少的文本和干净的内容来概括和提取原文的主要含义。这里演示如何使用 Qwen 2.5 模型对文本生成摘要和大纲,仍然以 HuggingFaceFW/FineWeb-EDU 数据集的部分数据进行演示。

from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM

llm = ManagedTextLLM(name="qwen2.5-7b-instruct")

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {
        "role": "user",
        "content": "请概括全文,总结为 200 字以内的摘要,并为文本生成大纲。",
    },
]

result = llm.generate(df, prompt_template=messages)
result.execute()

提取并打印可以获得摘要结果。

result_content = (
    result.response.mf.flatjson(
        [
            "$.output.choices[0].message.content",
        ],
        dtypes=pd.Series([np.str_], index=["content"]),
    )
    .execute()
    .fetch()
)
print(result_content.iloc[0][0])

通过上面三个应用案例的分析和展示,我们可以看到,MaxFrame AI Function具备以下优点:

  • 使用便捷。用户把数据导入MaxCompute 表之后,调用MaxFrame的read_odps_table接口就可以构建出DataFrame对象,把该对象和编写好的prompts通过llm.generate接口传入并调用execute来执行,得到推理后的DataFrame对象。开发者使用简单的几行代码来调用AI Function,就可以完成传统意义上非常复杂的模型部署、数据读取、任务分片和分布式模型推理执行的过程,极大提升了开发效率。
  • 低运维成本。上述案例中,模型完全由MaxCompute离线托管,用户不再需要花费精力去关心模型的选取、下载、部署、启动以及运行监控和错误处理等等复杂繁琐的过程,只需要聚焦在数据处理逻辑编写,以及prompts调优等业务最关键的方面即可,极大降低了使用大模型能力处理数据的学习和使用成本。

结语和展望

通过这些案例,我们可以清楚地看到 MaxFrame 提供的 AI Function 的强大能力,以及其在不同场景中的巨大应用潜力。从文本风控分类到结构化信息提取,再到文本摘要生成,AI Function 为用户提供了灵活、高效的解决方案。凭借其易于使用的接口和高效的分布式计算能力,用户可以快速实现 AI 驱动的数据处理任务,无需关注繁琐的模型管理、推理部署、高可用维护等细节。这种高效的工作流程不仅提高了生产力,还显著降低了成本,帮助企业和开发者从数据中获取更多价值。

AI Function的正式发布是MaxFrame探索大数据平台向智能化演进的开始。未来,我们将不断完善AI Function并增加更多的功能,包括:

  • 增加多模态内置模型,用户编写合适的prompt并调用AI Function就可以实现对图片、音频、视频等海量非结构化数据的处理。
  • 支持用户上传、管理和使用自定义的微调模型。
  • 集成阿里云PAI平台提供的服务,支持大参数模型(如DeepSeek V3, DeepSeek R1,Qwen Max)在高吞吐需求下的使用。
  • 更丰富易用的调试工具,帮忙用户更高效的编写和设置合适的prompt,并优化推理效果。

敬请期待!

感兴趣的用户可加入MaxFrame官方用户支持群的钉钉群号:37130012987

参考链接

[1] https://help.aliyun.com/zh/maxcompute/user-guide/maxframe-overview-1/

[2] https://dashscope.aliyun.com/

[3] https://github.com/QwenLM/Qwen2.5

[4] https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B


阿里云大数据AI
12 声望11 粉丝

分享阿里云计算平台的大数据和AI方向的技术创新、实战案例、经验总结。