全部產品
Search
文件中心

MaxCompute:MaxFrame AI Function

更新時間:Dec 12, 2025

本文介紹如何在阿里雲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具體標誌性事件是**1775年4月19日**的**列剋星敦和康科德戰役**(又稱“列剋星敦槍聲”),這是英國與北美13個殖民地之間的首次大規模軍事衝突,標誌著獨立戰爭的正式爆發。 \n\n儘管《獨立宣言》於1776年7月4日發表,但戰爭的軍事行動早在1775年已全面展開。", "reasoning_content": "嗯,使用者問的是美國獨立戰爭是從哪一年開始的。我需要確認這個時間點。首先,我記得美國獨立戰爭開始的標誌是列剋星敦和康科德的戰鬥,也就是所謂的“列剋星敦槍聲”。那是在1775年4月19日。不過,有時候人們可能會提到更早的事件,比如波士頓傾茶事件或者萊剋星頓的槍聲,但正式的戰爭開始應該是在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. 資料準備,需要先建立MaxCompute表raw_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": "本協議由當事人A和B於生效日期簽訂。", "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”翻譯成“由當事人A和B之間簽訂”或者“由當事人A和B簽署”。根據法律術語,可能更常用“由當事人A和B簽署”或者“由A和B之間簽訂”。\n\n綜合起來,可能的翻譯是:“本協議由當事人A和B於生效日期簽署。” 或者“本協議由雙方於生效日期簽訂。” 但需要確保動詞的使用正確。比如“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 介面提前切分並發,從而實現對資料的平行處理。