MaxFrame AI Function

本文介绍如何在阿里云MaxCompute中使用MaxFrame AI Function,结合典型案例快速上手大模型离线推理应用。

功能概述

MaxFrame AI Function是阿里云MaxCompute平台针对大模型离线推理场景推出的端到端解决方案,旨在无缝集成数据处理与AI能力,实现大模型智能在大数据平台中的普适性,简化数据处理流程并提升处理结果的质量。降低利用人工智能进行数据处理和分析的门槛,简化企业级大模型应用的开发。

  • 设计理念:“数据即模型输入,结果即数据输出”。允许用户基于MaxFrame Python开发框架与Pandas风格API,直接在MaxCompute生态中完成从数据准备、数据处理、模型推理到结果存储的完整流程。

  • 核心特性

    • 海量数据处理:可以处理海量结构化数据(如日志分析、用户行为日志)或非结构化数据(如文本翻译、文档摘要),支持单次任务处理PB级数据规模。

    • 低延迟与线性扩展:通过分布式计算架构实现低延迟与线性扩展能力。

    • 大模型集成:MaxFrame以开箱即用的方式支持Qwen 3Qwen 2.5Deepseek-R1-Distill-Qwen等系列大模型,模型均离线托管在MaxCompute平台内部。无需考虑模型下载、分发以及API调用的并发上限问题,仅需通过 API 调用即可使用,充分利用MaxCompute海量的计算资源,以较高的总体Token吞吐率和并发完成基于大模型推理能力的文本处理任务。

  • 应用场景:可应用于从文本数据中提取结构化信息、整理总结内容、生成摘要、翻译语言,以及文本质量评估、情感分类等多项任务场景,极大地简化大模型数据处理流程并提升处理结果的质量。

  • 优势总结

    维度

    MaxFrame AI Function

    易用性

    熟悉的 Python API,开箱即用的模型库,零部署成本。

    扩展性

    依托 MaxCompute CU、GU计算资源,支持大规模并行处理,提升整体 token 吞吐率。

    Data + AI一体化

    在统一平台内完成数据读取、数据处理、AI 推理与结果存储,减少数据迁移成本,提升开发效率。

    场景覆盖

    覆盖翻译、结构化抽取、向量化等十多个高频场景。

  • 整体架构

    MaxFrame AI Function提供了灵活的generate接口,允许用户选择模型种类,输入参数为MaxCompute表和Prompts。

    在接口执行中,MaxFrame会先切分表数据,根据数据规模设置合适的并发度并启动Worker组执行计算任务。每个Worker以用户传入的Prompts参数为模板,基于输入的数据行渲染并构建模型,并将推理结果和成功状态写入MaxCompute。

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

    image

适用范围

  • 支持地域

    华东1(杭州)、华东2(上海)、华北2(北京)、华北6(乌兰察布)、华南1(深圳)、西南1(成都)、中国香港、华东 1 金融云、华南 1 金融云、新加坡、印度尼西亚(雅加达)。

  • 支持Python3.11版本

  • 支持SDK版本:需确保MaxFrame SDK版本为V2.3.0 或以上版本。可以通过以下方式查看版本:

    // Windows系统
    pip list | findstr maxframe
    
    // Linux系统
    pip list | grep maxframe

    若版本过低,直接执行安装指令pip install --upgrade maxframe;安装最新版本。

  • 安装MaxFrame最新的客户端。

模型支持体系

目前,MaxFrame以开箱即用的方式支持Qwen 3Qwen 2.5Deepseek-R1-Distill-Qwen等系列大模型,模型均离线托管在MaxCompute平台内部。无需考虑模型下载、分发以及API调用的并发上限问题,仅需通过 API 调用即可使用,充分利用MaxCompute海量的计算资源,以较高的总体Token吞吐率和并发完成大模型离线推理任务。

  • Qwen 3 系列:基于 Qwen-3 模型优化的推理版本,支持多语言翻译、复杂文本生成及代码生成任务,适用于需要高精度输出的场景。

  • Qwen Embedding 模型:专为向量化任务设计,支持文本到向量的高效转换,适用于语义搜索、相似度匹配等场景。

  • Deepseek-R1-Distill-Qwen 系列:通过知识蒸馏技术压缩的轻量化模型,适用于资源受限环境下的快速推理。

模型调用建议首先从小模型开始,如果输出结果未能达到预期,可以再切换到较大的模型。由于更大的模型会消耗更多资源并需要更长的处理时间,优先采用小模型可以有效提升效率和降低成本,从而满足输出期望。

支持模型(持续更新)

模型类型

模型名称

支持资源类型

Qwen 3系列模型

  • Qwen3-0.6B

  • Qwen3-1.7B

  • Qwen3-4B

  • Qwen3-8B

  • Qwen3-14B

CU

  • Qwen3-4B-Instruct-2507-FP8

  • Qwen3-30B-A3B-Instruct-2507-FP8

GU

Qwen Embedding模型

  • Qwen3-Embedding-8B

CU

  • Qwen3-Embedding-0.6

GU

Qwen 2.5文本系列模型

  • Qwen2.5-0.5B-instruct

  • Qwen2.5-1.5B-instruct

  • Qwen2.5-3B-instruct

  • Qwen2.5-7B-instruct

CU

Deepseek-R1-Distill-Qwen系列模型

  • DeepSeek-R1-Distill-Qwen-1.5B

  • DeepSeek-R1-Distill-Qwen-7B

  • DeepSeek-R1-Distill-Qwen-14B

CU

Deepseek-R1-0528-Qwen3模型

  • DeepSeek-R1-0528-Qwen3-8B

CU

接口说明

MaxFrame AI Function 通过generateTask双接口平衡灵活性与易用性:

通用接口:generate

支持自定义 Prompt 模板与参数配置,适用于需要高度控制推理逻辑的场景。例如:

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

llm = ManagedTextLLM(name="<model_name>")

# Prompts 模板
messages = [
  {"role": "system", "content": "system_messages"},
  {"role": "user", "content": "user_messages"},
]

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

参数说明

  • model_name :必填。模型名称。

  • df:必填。封装在DataFrame中需要分析的文本或数据。

  • prompt_template:必填。消息列表,格式与OpenAI文本Chat Format Messages兼容,在Content中可以使用f-string引用表的列的内容。

特定场景接口:Task - 仅GU计算资源支持

预设标准化任务接口,简化常见场景的开发流程。当前支持的task接口有:translateextract

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

llm = ManagedTextLLM(name="<model_name>")

# 文本翻译  
translated_df = llm.translate(  
    df["english_column"],  
    source_language="english",
    target_language="Chinese",
    examples=[("Hello", "你好"), ("Goodbye", "再见")],
)  

translated_df.execute()

语法示例

初次使用MaxFrame进行数据处理等相关业务时,可通过MaxFrame快速开始了解相关功能。

本文通过本地模式运行,完整运行代码和说明如下:

import os
from maxframe import new_session
from odps import ODPS
import pandas as pd
import maxframe.dataframe as md
from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM

o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='<maxcompute_project_name>',
    endpoint='https://service.cn-hangzhou.maxcompute.aliyun.com/api',
)

# 1. 使用MaxFrame SDK创建Session
session = new_session(odps_entry=o)

# 取消列文本截断,显示完整内容
pd.set_option("display.max_colwidth", None)
# 显示所有列(避免中间的列被省略)
pd.set_option("display.max_columns", None)

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

# 3. 创建ManagedTextLLM对象,并指定要使用的模型为qwen3-14b
llm = ManagedTextLLM(name="qwen3-14b")

# 4. 定义Prompts模板,其中包含一个系统消息和一个用户消息
# 在用户消息中,预留f-string形式的变量{query},这些占位符将会被替换为DataFrame中的query列,占位符支持使用来自DataFrame的多个列,均通过对应的列名来引用。
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "请回答如下问题:{query}"},
]

# 5. 对LLM对象调用generate方法,传入DataFrame和Prompts模板,即可获得每个问题答案
result_df = llm.generate(df, prompt_template=messages)

# 6. 使用execute触发对结果DataFrame的计算
#   所有计算都会发生在MaxCompute集群上,最后将自动根据计算规模对输入的DataFrame进行数据分片和并行计算。
print(result_df.execute())

输出结果如下所示:

行号

response_json

success

0

{"id": "chatcmpl-1765181488", "object": "chat.completion", "created": 1765181488, "model": "qwen3-14b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "地球距离太阳的平均距离约为 **1.496亿公里**(即 **1.496 × 10⁸ 公里**),这个距离被定义为 **1个天文单位(AU)**。 \n\n地球的公转轨道是一个椭圆,因此实际距离会因位置不同而略有变化: \n- **近日点**(地球最接近太阳时):约 **1.471亿公里**(约1.471 AU) \n- **远日点**(地球最远离太阳时):约 **1.521亿公里**(约1.521 AU) \n\n平均距离采用的是轨道的**半长轴**(椭圆轨道的长轴的一半),这是天文学中计算行星轨道的标准方式。", "reasoning_content": "嗯,用户问的是地球和太阳的平均距离是多少。这个问题看起来挺基础的,但我得确认一下准确的数字。首先,我记得地球绕太阳公转的轨道是椭圆形的,所以平均距离可能指的是半长轴,也就是所谓的天文单位。不过具体数值是多少呢?是不是大约1.5亿公里?或者更精确的话,可能用科学计数法?\n\n对了,天文单位(AU)通常被定义为地球到太阳的平均距离,而1 AU大约等于1.496亿公里,也就是1.496×10^8公里。不过有时候也会四舍五入成1.5亿公里,或者更精确的数值可能有小数点后几位的变化。比如,精确值是约1.4959787亿公里,不过一般情况下,使用1.5亿公里或者1.496亿公里都是可以接受的。\n\n另外,可能需要确认一下单位是否需要转换成其他形式,比如公里或者米,但用户的问题里没有特别说明,应该用公里比较合适。同时,是否需要提到这个距离的定义,比如基于轨道的半长轴,而不是近日点或远日点的距离?因为地球的轨道是椭圆,所以平均距离应该用半长轴来计算,而不是简单的算术平均,虽然两者数值接近。\n\n还要考虑用户可能的背景,如果是学生或者一般读者,可能需要一个简洁明确的答案,而不用过于深入天文学术语。不过,如果有必要,可以简要说明为什么是这个数值,比如基于椭圆轨道的半长轴。这样用户不仅得到数据,还能理解背后的原理。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 32, "completion_tokens": 621, "total_tokens": 653}}

True

1

{"id": "chatcmpl-1765181584", "object": "chat.completion", "created": 1765181584, "model": "qwen3-14b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "美国独立战争开始于**1775年**。 \n具体标志性事件是**1775419日**的**列克星敦和康科德战役**(又称“列克星敦枪声”),这是英国与北美13个殖民地之间的首次大规模军事冲突,标志着独立战争的正式爆发。 \n\n尽管《独立宣言》于177674日发表,但战争的军事行动早在1775年已全面展开。", "reasoning_content": "嗯,用户问的是美国独立战争是从哪一年开始的。我需要确认这个时间点。首先,我记得美国独立战争开始的标志是列克星敦和康科德的战斗,也就是所谓的“列克星敦枪声”。那是在1775419日。不过,有时候人们可能会提到更早的事件,比如波士顿倾茶事件或者莱克星顿的枪声,但正式的战争开始应该是在1775年。\n\n不过,用户可能想知道的是更准确的日期,或者是否有其他可能的年份。比如,有些人可能认为独立战争开始于1776年,因为《独立宣言》是在那一年发表的,但其实战争是在此之前就开始了。需要区分战争的开始和正式宣布独立的时间。\n\n另外,还要注意用户是否可能混淆了其他战争的年份,比如美国内战或者其他事件。不过问题明确提到的是独立战争,所以应该没问题。确认一下历史资料,列克星敦和康科德的战斗确实是美国独立战争的开始,因此正确的答案应该是1775年。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 33, "completion_tokens": 349, "total_tokens": 382}}

True

2

{"id": "chatcmpl-1765181766", "object": "chat.completion", "created": 1765181766, "model": "qwen3-14b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "水的沸点是指在标准大气压(1个大气压,即约101.325千帕)下,水从液态转变为气态(水蒸气)时的温度。在标准条件下,**水的沸点是100摄氏度(℃)**。\n\n需要注意的是:\n1. **气压影响**:沸点会随气压变化。例如,在高海拔地区(气压较低),水的沸点会低于100℃;而在高压环境中(如高压锅),沸点会升高。\n2. **杂质影响**:若水中含有溶质(如盐),其沸点会略微升高(沸点升高现象)。\n3. **单位换算**:100℃相当于212华氏度(℉)。\n\n这一现象是水分子获得足够能量克服液态间作用力、逃逸为气体的关键温度点。", "reasoning_content": "好的,用户问的是“什么是水的沸点?”。首先,我需要确定用户的需求是什么。可能他们是在做科学作业,或者在烹饪时遇到问题,比如水烧开的温度。不过通常来说,沸点是一个基础的物理概念,可能用户是学生或者刚开始学习这个知识点。\n\n接下来,我要确保回答准确。水的沸点在标准大气压下是100摄氏度,但可能需要补充说明标准大气压的定义,也就是1个大气压,约等于101.325千帕。此外,沸点会随着气压变化而变化,比如在高海拔地区气压低,沸点也会降低,这可能对烹饪有影响,比如煮鸡蛋需要更长时间。\n\n还要考虑是否需要提到其他因素,比如水中溶解的物质可能会影响沸点,比如盐水的沸点会比纯水高。不过用户的问题比较基础,可能不需要太深入,但简要提到这些可以增加回答的全面性。\n\n另外,用户可能对单位有疑问,比如是否用华氏度或其他单位。虽然问题中使用了中文,但可能需要指出不同单位的情况,不过通常在中文环境中,摄氏度更常用,所以可以主要回答摄氏度,再简要提及其他单位。\n\n最后,要确保回答清晰简洁,避免使用过于专业的术语,让所有读者都能理解。可能需要分点说明标准情况、影响因素等,但保持口语化,不需要太正式。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 30, "completion_tokens": 513, "total_tokens": 543}}

True

3

{"id": "chatcmpl-1765182120", "object": "chat.completion", "created": 1765182120, "model": "qwen3-14b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "快速缓解头痛的方法可根据头痛类型和原因有所不同,以下是一些常见且有效的措施:\n\n---\n\n### **1. 基础缓解方法**\n- **休息与放松** \n - 找一个安静、光线柔和的环境,闭目养神10-15分钟,避免持续用眼或精神紧张。 \n - **深呼吸**:缓慢吸气4秒,屏住呼吸4秒,再缓慢呼气6秒,重复5-10次,有助于缓解紧张性头痛。\n\n- **补充水分** \n - 脱水是头痛的常见诱因。喝一杯温水或淡盐水,观察是否缓解。\n\n- **冷敷或热敷** \n - **偏头痛**:用冷敷袋敷在额头或后颈(每次10-15分钟),可收缩血管,减轻疼痛。 \n - **紧张性头痛**:用热敷袋敷在颈部或肩部,促进血液循环,放松肌肉。\n\n- **轻柔按摩** \n - 用指腹从额头中央向两侧轻轻推压,或按摩太阳穴、后颈(风池穴),可缓解局部肌肉紧张。\n\n---\n\n### **2. 药物缓解(短期使用)**\n- **非处方药**:如布洛芬、对乙酰氨基酚等,按说明书剂量服用(注意避免过量)。 \n- **偏头痛专用药物**:如曲普坦类药物(需医生指导,不建议自行长期使用)。\n\n---\n\n### **3. 环境调整**\n- **避免刺激**:远离强光、噪音、烟雾等可能诱发头痛的因素。 \n- **调整坐姿**:保持正确的坐姿,避免长时间低头或头部姿势不正。\n\n---\n\n### **4. 预防性措施**\n- **规律作息**:保证充足睡眠,避免熬夜。 \n- **饮食管理**:避免过量咖啡因、酒精、巧克力、奶酪等可能诱发头痛的食物。 \n- **压力管理**:通过冥想、瑜伽、运动等方式缓解压力。\n\n---\n\n### **5. 何时就医?**\n若头痛出现以下情况,需及时就医: \n- 突然剧烈头痛(如“雷击样头痛”); \n- 伴随发热、呕吐、意识模糊、视力改变等症状; \n- 头痛频率增加或持续时间延长; \n- 头痛由外伤、感染或其他疾病引发。\n\n---\n\n**提示**:若头痛频繁发作(如每周多次),建议咨询医生排查潜在病因(如高血压、颅内压异常、颈椎病等)。", "reasoning_content": "好的,用户问如何快速缓解头痛,我需要给出实用的建议。首先,我应该考虑常见的头痛原因,比如紧张性头痛、偏头痛或者脱水等。用户可能希望得到简单有效的方法,不需要复杂步骤。\n\n接下来,要确保信息准确,不能有错误。比如,建议休息、冷敷或热敷,但要说明适用的情况。比如,冷敷适合偏头痛,热敷适合紧张性头痛。用户可能不知道这些区别,需要明确说明。\n\n还要考虑用户可能没有提到的潜在问题,比如是否应该就医。如果头痛频繁或剧烈,可能需要专业帮助,这点也要提到,避免用户忽视严重情况。\n\n另外,用户可能希望方法快速见效,所以需要列出几种常见的快速方法,如深呼吸、喝水、按摩等,按优先级排列,让用户能迅速尝试。同时,避免推荐可能有害的方法,比如过度使用药物,除非必要。\n\n还要注意语言简洁,条理清晰,分点列出,方便阅读。可能需要用数字或项目符号,但用户要求不要使用Markdown,所以用自然分段。\n\n最后,检查是否有遗漏的重要点,比如避免触发因素,如咖啡因、压力等,这也是预防头痛的重要部分。但用户问的是缓解,所以重点在缓解方法,预防可以作为补充建议。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 29, "completion_tokens": 828, "total_tokens": 857}}

True

4

{"id": "chatcmpl-1765182284", "object": "chat.completion", "created": 1765182284, "model": "qwen3-14b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "《哈利·波特》系列的主角是**哈利·波特**(Harry Potter)。他是J.K.罗琳创作的奇幻小说系列的核心人物,故事围绕他从一名普通孤儿成长为对抗邪恶巫师伏地魔(Voldemort)的英雄展开。哈利被赋予“被选中的人”(The Chosen One)的称号,因为他一出生就与伏地魔的命运紧密相连,并最终成为拯救魔法世界的关键人物。\n\n虽然赫敏·格兰杰(Hermione Granger)和罗恩·韦斯莱(Ron Weasley)是哈利最亲密的朋友,且在系列中扮演重要角色,但哈利始终是故事的中心人物。", "reasoning_content": "嗯,用户问的是《哈利·波特》系列中的主角是谁。首先,我得确认用户指的是哪个版本,因为可能有电影、小说或者其他衍生作品。不过一般来说,大家通常指的是J.K.罗琳写的原著小说,或者是对应的电影系列。\n\n首先,哈利·波特这个名字是系列的核心,整个故事都是围绕他的成长展开的。不过,有时候用户可能会混淆其他重要角色,比如赫敏·格兰杰或者罗恩·韦斯莱,他们虽然重要,但并不是主角。不过,可能有人会认为他们也是主角之一,尤其是在某些分析中,但通常主角还是哈利。\n\n另外,需要确认是否有其他可能的主角,比如在后续的《被诅咒的孩子》舞台剧中,哈利的儿子阿不思·西弗勒斯·波特,但用户的问题应该是指整个系列,而不仅仅是舞台剧部分。\n\n可能用户的问题比较简单,但作为回答者,需要明确指出哈利·波特是主角,同时可以补充一些信息,比如他的身份、在故事中的角色,以及为什么他是主角,比如他与伏地魔的对抗,以及他作为“被选中的人”的地位。\n\n还要注意是否需要提到其他可能的主角,比如在某些衍生作品中,但根据常见的问题,应该以原著和电影为主。另外,要确保回答准确,避免错误,比如确认哈利确实是主角,而不是其他角色。\n\n总结一下,回答应该是哈利·波特,同时可以简要说明他的角色和故事中的重要性,确保用户得到清晰准确的答案。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 35, "completion_tokens": 463, "total_tokens": 498}}

True

应用场景一:语言翻译

场景描述:某跨国企业需将 10 万份英文合同翻译成中文,并标注关键条款。

示例代码如下:

  1. 测试数据

    CREATE TABLE IF NOT EXISTS raw_contracts (
        id BIGINT,
        en STRING
    );
    
    -- 插入测试数据。
    INSERT INTO raw_contracts VALUES
    (1, 'This Agreement is made and entered into as of the Effective Date by and between Party A and Party B.'),
    (2, 'The Contractor shall perform the Services in accordance with the terms and conditions set forth herein.'),
    (3, 'All payments shall be made in US Dollars within thirty (30) days of receipt of invoice.'),
    (4, 'Either party may terminate this Agreement upon thirty (30) days written notice to the other party.'),
    (5, 'Confidential Information shall not be disclosed to any third party without prior written consent.');
  2. 调用模型执行

    from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM
    
    # 1. 使用Qwen3 4B模型 
    llm = ManagedTextLLM(name="Qwen3-1.7B")
    
    # 2. 数据准备,需要先创建MaxComputeraw_contracts,并准备待翻译数据
    df = md.read_odps_table("raw_contracts") 
    
    # 3.定义Prompts模板
    messages = [
        {
            "role": "system",
            "content": "你是一个文档翻译专家,能够将用户给定的英文流畅的翻译成中文",
        },
        {
            "role": "user",
            "content": "请将以下英文翻译成中文,直接输出翻译后的文本,不要输出任何其他内容。\n\n 例如:\n输入:Hi\n输出:你好。\n\n 以下是你要处理的文本:\n\n{en}",
        },
    ]
    
    # 4.直接使用 `generate` 接口,定义提示词,引用对应的数据列。
    result_df = llm.generate(
        df,
        prompt_template=messages,
        params={
            "temperature": 0.7,
            "top_p": 0.8,
        },
    ).execute()
    
    # 5.结果数据写入MaxCompute表
    result_df.to_odps_table("raw_contracts_result").execute()
  3. 返回结果如下:

    +------------+------------+---------+
    | index      | response   | success | 
    +------------+------------+---------+
    | 0          | {"id": "chatcmpl-1765195462", "object": "chat.completion", "created": 1765195462, "model": "qwen3-1.7b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "本协议由当事人AB于生效日期签订。", "reasoning_content": "好的,我需要把用户提供的英文句子翻译成中文。首先看句子结构:“This Agreement is made and entered into as of the Effective Date by and between Party A and Party B.” \n\n首先,“This Agreement”翻译成“本协议”比较合适。“is made and entered into”这里有两个动词,通常“made”指的是签订协议,而“entered into”可能指正式签署。但根据法律术语,可能更常用“签订”或者“达成协议”。不过“entered into”在法律文件中常用于正式签署,所以可能需要调整。比如“本协议经双方于有效日期签订”。\n\n然后“as of the Effective Date”翻译成“自生效日期起”或者“自有效日期起”。这里“Effective Date”通常翻译为“生效日期”,所以整句可能需要调整结构,比如“本协议由双方于生效日期签订”。\n\n最后“by and between Party A and Party B”翻译成“由当事人AB之间签订”或者“由当事人AB签署”。根据法律术语,可能更常用“由当事人AB签署”或者“由AB之间签订”。\n\n综合起来,可能的翻译是:“本协议由当事人AB于生效日期签署。” 或者“本协议由双方于生效日期签订。” 但需要确保动词的使用正确。比如“entered into”可能更准确的是“签订”而不是“进入”,所以可能需要调整。\n\n再检查一下,用户给的例子是“Hi”翻译成“你好”,所以直接翻译即可。可能需要保持正式的法律术语,比如“签订”而不是“进入”。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 90, "completion_tokens": 356, "total_tokens": 446}} | true    | 
    | 1          | {"id": "chatcmpl-1765195487", "object": "chat.completion", "created": 1765195487, "model": "qwen3-1.7b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "承包商应按照本协议中列明的条款和条件提供服务。", "reasoning_content": "好的,我需要把用户提供的英文句子翻译成中文。首先,看看句子结构。原句是:“The Contractor shall perform the Services in accordance with the terms and conditions set forth herein.” \n\n首先,确定专有名词。“Contractor”在这里应该翻译为“承包商”或“承包人”,根据上下文可能需要更具体的术语,但这里可能直接使用“承包商”更合适。“Services”是“服务”或“工作”,但根据上下文可能需要更准确的翻译,比如“服务”或“工作”。“in accordance with”翻译为“按照”或“依照”。“terms and conditions”是“条款和条件”。“set forth herein”是“此处列出”或“此处规定”。 \n\n所以整句的大意是:“承包商应按照本协议中列明的条款和条件提供服务。” \n\n需要检查是否有更自然的表达方式。例如,“perform the Services”中的“Services”可能指的是具体的任务或工作,所以“提供服务”比较合适。另外,“set forth herein”可能更自然地翻译为“此处列明”或者“此处规定”。 \n\n综合起来,翻译应该是:“承包商应按照本协议中列明的条款和条件提供服务。” \n\n确认没有遗漏或误译,确保专业术语准确,比如“Contractor”是否需要更具体的职位名称,但根据常见用法,这里用“承包商”即可。最后,保持句子简洁流畅。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 86, "completion_tokens": 325, "total_tokens": 411}} | true    | 
    | 2          | {"id": "chatcmpl-1765195505", "object": "chat.completion", "created": 1765195505, "model": "qwen3-1.7b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "所有付款应在收到发票后30天内以美元支付。", "reasoning_content": "好的,我需要把用户提供的英文句子翻译成中文。首先,看看句子结构:“All payments shall be made in US Dollars within thirty (30) days of receipt of invoice.” \n\n首先,“All payments”翻译成“所有付款”比较合适。“shall be made”是“将被作出”或者“将被支付”,这里可能用“将被支付”更正式一些。“in US Dollars”是“以美元计付”或者“以美元支付”,但“US Dollars”通常翻译为“美元”即可,不需要加“以”。“within thirty (30) days”是“在收到发票后的30天内”。“of receipt of invoice”是“收到发票之日”。 \n\n所以整个句子可以翻译为:“所有付款应在收到发票后30天内以美元支付。” \n\n需要检查是否有更自然的表达方式,比如“收到发票后30天内”是否准确,或者是否需要调整语序。比如“within thirty days of receipt of invoice”可能更自然的说法是“收到发票后30天内”。 \n\n确认没有错误后,直接输出翻译结果。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 89, "completion_tokens": 256, "total_tokens": 345}} | true    | 
    | 3          | {"id": "chatcmpl-1765195538", "object": "chat.completion", "created": 1765195538, "model": "qwen3-1.7b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "任何一方有权在三十天书面通知后终止本协议。", "reasoning_content": "好的,我需要把用户提供的英文句子翻译成中文。首先看句子结构:“Either party may terminate this Agreement upon thirty (30) days written notice to the other party.” \n\n首先分解句子成分。“Either party”指的是任何一方,“may terminate”表示可以终止,“this Agreement”是本协议,“upon thirty (30) days written notice”是三十天的书面通知,“to the other party”是通知给另一方。\n\n翻译时要注意法律术语的准确性。比如“Either party”通常翻译为“任何一方”或“任一方”。“may terminate”是“有权终止”或“可以终止”。“this Agreement”是“本协议”。“upon thirty (30) days written notice”需要准确表达“三十天的书面通知”。“to the other party”是“通知另一方”或“通知另一方”。\n\n然后考虑句子的流畅性。原句是复合句,需要确保中文翻译后的句子结构合理。例如,“Either party may terminate this Agreement upon thirty (30) days written notice to the other party.” 可以翻译为“任何一方有权在书面通知另一方三十天后终止本协议。”或者更简洁的“任何一方有权在三十天书面通知后终止本协议。”\n\n再检查是否有更自然的表达方式。比如“upon”在这里可能用“在……之后”更合适。另外,“written notice”是“书面通知”,而“days”是“天数”。\n\n最终确定翻译为:“任何一方有权在三十天书面通知后终止本协议。” 或者更简洁的“任何一方有权在三十天书面通知后终止本协议。” 需要确保没有遗漏信息,比如“terminate”是“终止”而不是“终止或解除”。\n\n确认无误后,直接输出翻译结果。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 89, "completion_tokens": 394, "total_tokens": 483}} | true    | 
    | 4          | {"id": "chatcmpl-1765195574", "object": "chat.completion", "created": 1765195574, "model": "qwen3-1.7b", "choices": [{"index": 0, "message": {"role": "assistant", "content": "机密信息不得向任何第三方披露,除非获得事先书面同意。", "reasoning_content": "好的,用户让我把一段英文翻译成中文,而且要直接输出,不能有其他内容。首先,我需要确认用户提供的英文句子是什么。用户给的例句是“Confidential Information shall not be disclosed to any third party without prior written consent.”,然后用户给出的示例是输入“Hi”输出“你好”。现在用户提供的文本是“Confidential Information shall not be disclosed to any third party without prior written consent.”,需要翻译成中文。\n\n首先,我需要准确理解这句话的意思。\"Confidential Information\" 应该是“机密信息”或者“保密信息”。“shall not be disclosed” 是“不得泄露”。“to any third party” 是“任何第三方”。“without prior written consent” 是“未经事先书面同意”。所以整句的中文翻译应该是“机密信息不得以任何第三方未经事先书面同意而泄露。”\n\n不过,用户可能希望更正式一些的翻译,比如在法律文件中常用的表达。比如“机密信息不得向任何第三方披露,除非获得事先书面同意。”这样更符合法律术语。但用户没有特别说明,所以可能需要保持直译,但确保准确。\n\n另外,要注意句子的结构。原句中的“shall not be disclosed”是“不得被披露”,所以翻译时要确保动词的时态和语态正确。同时,“to any third party”翻译成“任何第三方”是正确的,但有时候“任何第三方”可能需要调整,比如“任何第三方或任何其他个人”?不过用户提供的例句是“任何第三方”,所以可能保持原样。\n\n再检查是否有更自然的表达方式。比如“机密信息不得未经事先书面同意向任何第三方披露”可能更符合中文的表达习惯。但用户可能希望直译,所以需要权衡。不过用户给的例句是“机密信息不得向任何第三方泄露,除非获得事先书面同意。”,所以可能需要保持类似的结构。\n\n最后,确保翻译后的句子通顺,符合中文语法,没有遗漏信息。确认无误后,直接输出翻译结果。"}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 85, "completion_tokens": 454, "total_tokens": 539}} | true    | 
    +------------+------------+---------+

应用场景二:关键词提取

场景描述:该场景展示MaxFrame AI Function在非结构化数据处理上的能力。非结构化数据中占据较高比例的文本和图像,在大数据分析中带来了巨大的处理挑战。以下是利用AI Function简化这一过程的示例。

如下代码演示如何使用AI Function从简历中提取候选人的工作经验,示例使用数据为随机生成的简历文本。

示例代码如下:

  1. 测试数据

    CREATE TABLE IF NOT EXISTS traditional_chinese_medicine (
        index BIGINT,
        text STRING
    );
    
    -- 插入测试数据。
    INSERT INTO traditional_chinese_medicine VALUES
    (1, '患者张某,男,45岁,主诉反复咳嗽2周。现症见:咳嗽痰多,色白质黏,胸闷气促,纳呆便溏。舌苔白腻,脉滑。诊断:痰湿阻肺证。治法:燥湿化痰,理气止咳。方药:二陈汤加减。'),
    (2, '李某,女,32岁,因“失眠多梦1月”就诊。伴有心悸健忘,神疲乏力,面色萎黄。舌淡,苔薄白,脉细弱。诊断:心脾两虚证。处方:归脾汤加减,每日一剂,水煎服。'),
    (3, '王某,68岁,主诉腰膝酸软、夜尿频多半年。伴畏寒肢冷,耳鸣如蝉,精神萎靡。舌淡胖有齿痕,苔白滑,脉沉细。中医辨证:肾阳虚衰证。治以温补肾阳,方用金匮肾气丸加减。'),
    (4, '患儿赵某,5岁,发热3天,体温最高39.5℃,微恶风寒,鼻塞流浊涕,咽喉红肿疼痛。舌尖红,苔薄黄,脉浮数。诊断:风热犯肺证。治法:疏风清热,宣肺止咳。方选银翘散加减。'),
    (5, '刘某,男,50岁,胃脘胀痛反复发作3年,加重1周。症见:胃脘痞满,嗳气频作,情绪波动时加重,大便不调。舌红,苔薄黄,脉弦。辨证:肝胃不和证。治法:疏肝和胃,理气止痛。方用柴胡疏肝散合左金丸加减。');
  2. 调用模型执行

    from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM
    from pydantic import BaseModel
    from typing import List, Optional
    
    # 1. 使用Qwen3 4B模型 
    llm = ManagedTextLLM(name="Qwen3-4B-Instruct-2507-FP8")
    
    df = md.read_odps_table("traditional_chinese_medicine", index_col="index")
    
    # 四个并发
    parallel_partitions = 4
    df = df.mf.rebalance(num_partitions=parallel_partitions)
    
    
    class MedicalRecord(BaseModel):# 方剂名称
      """
        中医就诊记录结构化 Schema
      """
      patient_name: Optional[str] = None          # 患者姓名(如“张某”)
      age: Optional[int] = None                   # 年龄
      gender: Optional[str] = None                # 性别("男"/"女")
      chief_complaint: str                        # 主诉
      symptoms: List[str]                         # 症状列表
      tongue: str                                 # 舌象(如“舌淡红,苔白腻”)
      pulse: str                                  # 脉象(如“脉弦滑”)
      diagnosis: str                              # 中医证型诊断
      treatment_principle: str                    # 治法
      prescription: str                           # 方剂名称
    
    # 使用 extract 预设任务接口  
    result_df = llm.extract(
      df["text"],
      description="请从以下就诊记录中按顺序抽取结构化数据,最终按照schema以严格的JSON格式返回",
      schema=MedicalRecord
    )
    result_df.execute()
    
    result_df.to_odps_table("result").execute()

资源管理与性能优化

异构资源调度策略

MaxFrame支持两种资源类型:

  • CU(Compute Unit):通用CPU计算资源,适用于小尺寸模型、小规模数据量推理任务。

  • GU(GPU Unit):GPU计算资源,针对大模型推理优化,支持更多尺寸模型规模。

针对大尺寸模型(如 8B 及以上模型),CPU推理效率较低,可切换至GU计算资源执行推理。

可通过 session 配置动态选择资源:

# 配置使用 CU/GU 资源

# 使用CU计算资源
options.session.quota_name = "mf_cpu_quota"

# 使用GU计算资源
options.session.gu_quota_name = "mf_gpu_quota"

并行推理

MaxFrame采用并行计算机制实现大规模数据离线推理:

  1. 数据切分:通过 rebalance 接口将输入数据表按指定分区数(num_partitions)均匀分配至多个Worker节点。

  2. 模型并行加载:每个Worker独立加载模型并进行预热,避免因模型加载导致的冷启动延迟。

  3. 结果聚合:输出结果按分区写入MaxCompute表,支持后续的数据分析。

针对大规模数据推理作业,可根据数据情况通过rebalance 接口提前切分并发,从而实现对数据的并行处理。