全部產品
Search
文件中心

Alibaba Cloud Model Studio:OpenAI相容-Batch

更新時間:Dec 03, 2025

阿里雲百鍊提供與OpenAI相容的Batch介面,支援以檔案方式批量提交任務並非同步執行,在非高峰時段離線處理大規模資料,任務完成或達到最長等待時間時返回結果,費用僅為即時調用的50%。

如需在控制台操作,請參見批量推理

前提條件

  • 已開通阿里雲百鍊服務,並已擷取 API Key

    建議您配置API Key到環境變數中以降低API Key的泄露風險。
  • 如果您使用OpenAI Python SDK調用Batch介面,請通過以下命令安裝最新版OpenAI SDK。

    pip3 install -U openai

適用範圍

北京地區

支援的模型

  • 文本產生模型:通義千問 Max、Plus、Flash、Long 的穩定版本及其部分 latest 版本,以及 QwQ 系列(qwq-plus)和部分第三方模型(deepseek-r1、deepseek-v3)。

  • 多模態模型:通義千問 VL Max、Plus、Flash的穩定版本及其部分 latest 版本,以及通義千問 OCR 模型。

  • 文本向量模型: text-embedding-v4 模型。

支援的模型名稱清單

新加坡地區

支援的模型:qwen-max、qwen-plus、qwen-turbo。

快速開始

在正式Batch任務開始之前,您可使用測試模型batch-test-model進行全鏈路閉環測試,包括驗證輸入資料、建立任務、查詢任務及下載結果檔案等流程。請注意:

  • 測試檔案不僅需滿足輸入檔案要求,還需滿足單檔案大小不超過1MB,且檔案行數不超過100行的要求;

  • 並發限制:最大並行任務數2個;

  • 資源使用:測試模型不走推理流程,因此不產生模型推理費用。

具體步驟如下:

  1. 準備測試檔案

    • 將包含請求資訊的樣本檔案test_model.jsonl下載到本地,並確保其與下方的Python指令碼置於同一目錄下。

    • 樣本內容:model參數設定為batch-test-model,url設定為/v1/chat/ds-test

      {"custom_id":"1","method":"POST","url":"/v1/chat/ds-test","body":{"model":"batch-test-model","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"你好!有什麼可以協助你的嗎?"}]}}
      {"custom_id":"2","method":"POST","url":"/v1/chat/ds-test","body":{"model":"batch-test-model","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}
  2. 運行指令碼

    • 執行此Python指令碼。

      如果需要調整檔案路徑或其他參數,請根據實際情況修改代碼。
      import os
      from pathlib import Path
      from openai import OpenAI
      import time
      
      # 初始化用戶端
      client = OpenAI(
          # 若沒有配置環境變數,可用阿里雲百鍊API Key將下行替換為:api_key="sk-xxx",但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險.
          # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
          api_key=os.getenv("DASHSCOPE_API_KEY"),
          # 以下是新加坡地區的base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
          base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"  # 阿里雲百鍊服務的base_url
      )
      
      def upload_file(file_path):
          print(f"正在上傳包含請求資訊的JSONL檔案...")
          file_object = client.files.create(file=Path(file_path), purpose="batch")
          print(f"檔案上傳成功。得到檔案ID: {file_object.id}\n")
          return file_object.id
      
      def create_batch_job(input_file_id):
          print(f"正在基於檔案ID,建立Batch任務...")
          # 請注意:此處endpoint參數值需和輸入檔案中的url欄位保持一致.測試模型(batch-test-model)填寫/v1/chat/ds-test,Embedding文本向量模型填寫/v1/embeddings,其他模型填寫/v1/chat/completions
          batch = client.batches.create(input_file_id=input_file_id, endpoint="/v1/chat/ds-test", completion_window="24h")
          print(f"Batch任務建立完成。 得到Batch任務ID: {batch.id}\n")
          return batch.id
      
      def check_job_status(batch_id):
          print(f"正在檢查Batch任務狀態...")
          batch = client.batches.retrieve(batch_id=batch_id)
          print(f"Batch任務狀態: {batch.status}\n")
          return batch.status
      
      def get_output_id(batch_id):
          print(f"正在擷取Batch任務中執行成功請求的輸出檔案ID...")
          batch = client.batches.retrieve(batch_id=batch_id)
          print(f"輸出檔案ID: {batch.output_file_id}\n")
          return batch.output_file_id
      
      def get_error_id(batch_id):
          print(f"正在擷取Batch任務中執行錯誤請求的輸出檔案ID...")
          batch = client.batches.retrieve(batch_id=batch_id)
          print(f"錯誤檔案ID: {batch.error_file_id}\n")
          return batch.error_file_id
      
      def download_results(output_file_id, output_file_path):
          print(f"正在列印並下載Batch任務的請求成功結果...")
          content = client.files.content(output_file_id)
          # 列印部分內容以供測試
          print(f"列印請求成功結果的前1000個字元內容: {content.text[:1000]}...\n")
          # 儲存結果檔案至本地
          content.write_to_file(output_file_path)
          print(f"完整的輸出結果已儲存至本地輸出檔案result.jsonl\n")
      
      def download_errors(error_file_id, error_file_path):
          print(f"正在列印並下載Batch任務的請求失敗資訊...")
          content = client.files.content(error_file_id)
          # 列印部分內容以供測試
          print(f"列印請求失敗資訊的前1000個字元內容: {content.text[:1000]}...\n")
          # 儲存錯誤資訊檔至本地
          content.write_to_file(error_file_path)
          print(f"完整的請求失敗資訊已儲存至本地錯誤檔案error.jsonl\n")
      
      def main():
          # 檔案路徑
          input_file_path = "test_model.jsonl"  # 可替換為您的輸入檔案路徑
          output_file_path = "result.jsonl"  # 可替換為您的輸出檔案路徑
          error_file_path = "error.jsonl"  # 可替換為您的錯誤檔案路徑
          try:
              # Step 1: 上傳包含請求資訊的JSONL檔案,得到輸入檔案ID
              input_file_id = upload_file(input_file_path)
              # Step 2: 基於輸入檔案ID,建立Batch任務
              batch_id = create_batch_job(input_file_id)
              # Step 3: 檢查Batch任務狀態直到結束
              status = ""
              while status not in ["completed", "failed", "expired", "cancelled"]:
                  status = check_job_status(batch_id)
                  print(f"等待任務完成...")
                  time.sleep(10)  # 等待10秒後重新查詢狀態
              # 如果任務失敗,則列印錯誤資訊並退出
              if status == "failed":
                  batch = client.batches.retrieve(batch_id)
                  print(f"Batch任務失敗。錯誤資訊為:{batch.errors}\n")
                  print(f"參見錯誤碼文檔: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code")
                  return
              # Step 4: 下載結果:如果輸出檔案ID不為空白,則列印請求成功結果的前1000個字元內容,並下載完整的請求成功結果到本地輸出檔案;
              # 如果錯誤檔案ID不為空白,則列印請求失敗資訊的前1000個字元內容,並下載完整的請求失敗資訊到本地錯誤檔案.
              output_file_id = get_output_id(batch_id)
              if output_file_id:
                  download_results(output_file_id, output_file_path)
              error_file_id = get_error_id(batch_id)
              if error_file_id:
                  download_errors(error_file_id, error_file_path)
                  print(f"參見錯誤碼文檔: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code")
          except Exception as e:
              print(f"An error occurred: {e}")
              print(f"參見錯誤碼文檔: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code")
      
      if __name__ == "__main__":
          main()
  3. 驗證測試結果

    • 任務狀態顯示completed

    • 結果檔案result.jsonl:包含固定響應{"content":"This is a test result."}

      {"id":"a2b1ae25-21f4-4d9a-8634-99a29926486c","custom_id":"1","response":{"status_code":200,"request_id":"a2b1ae25-21f4-4d9a-8634-99a29926486c","body":{"created":1743562621,"usage":{"completion_tokens":6,"prompt_tokens":20,"total_tokens":26},"model":"batch-test-model","id":"chatcmpl-bca7295b-67c3-4b1f-8239-d78323bb669f","choices":[{"finish_reason":"stop","index":0,"message":{"content":"This is a test result."}}],"object":"chat.completion"}},"error":null}
      {"id":"39b74f09-a902-434f-b9ea-2aaaeebc59e0","custom_id":"2","response":{"status_code":200,"request_id":"39b74f09-a902-434f-b9ea-2aaaeebc59e0","body":{"created":1743562621,"usage":{"completion_tokens":6,"prompt_tokens":20,"total_tokens":26},"model":"batch-test-model","id":"chatcmpl-1e32a8ba-2b69-4dc4-be42-e2897eac9e84","choices":[{"finish_reason":"stop","index":0,"message":{"content":"This is a test result."}}],"object":"chat.completion"}},"error":null}
      如遇到錯誤,請參考錯誤資訊進行解決。

通過測實驗證後,您可以通過以下步驟來執行正式的Batch任務流程。

  1. 參考輸入檔案要求準備輸入檔案,並將檔案中的model參數設定為支援的模型,url設定為:/v1/chat/completions;

  2. 替換上面Python指令碼中的endpoint;

    重要

    請確保指令碼中的endpoint與輸入檔案中的url參數保持一致。

  3. 運行指令碼,等待任務完成,若任務成功,將在同一目錄下產生輸出結果檔案result.jsonl

    若任務失敗,則程式退出並列印錯誤資訊。
    如果存在錯誤檔案ID,將在同一目錄下建置錯誤檔案error.jsonl以供檢查。
    在過程中發生的異常會被捕獲,並列印錯誤資訊。

資料檔案格式說明

輸入檔案

建立批量推理任務前,需先準備一個符合以下規範的檔案:

  • 格式:UTF-8 編碼的 JSONL(每行一個獨立 JSON 對象)。

  • 規模限制:單檔案 ≤ 50,000 個請求,且 ≤ 500 MB。

  • 單行限制:每個 JSON 對象 ≤ 6 MB,且不超過模型上下文長度。

  • 一致性要求:同一檔案內所有請求須使用相同模型及思考模式(如適用)。

  • 唯一標識:每個請求必須包含檔案內唯一的 custom_id 欄位,用於結果匹配。

請求樣本

{"custom_id":"1","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"Hello!"}]}}
{"custom_id":"2","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}

JSONL 批量產生工具

使用以下工具可快速產生 JSONL 檔案。為避免卡頓,建議單次處理的資料不超過 10,000 行,如果資料量較大,請分批操作。

JSONL 批量產生工具
請選擇地區:

請求參數

欄位

類型

必選

描述

custom_id

String

使用者自訂的請求ID,每一行表示一條請求,每一條請求有一個唯一的 custom_id。Batch任務結束後,可以在結果檔案中找到該 custom_id 對應的請求結果。

method

String

要求方法,當前只支援POST。

url

String

API關聯的URL,需和建立Batch任務時的endpoint欄位保持一致。

  • 測試模型batch-test-model填寫/v1/chat/ds-test

  • 其他模型填寫/v1/chat/completions

body

Object

模型調用的請求體,包含調用模型所需的全部參數,如modelmessages等。

請求體中的參數與即時推理介面所支援的參數保持一致。更多參數詳情請參考 OpenAI相容API

如果您需要進一步擴充,比如支援更多參數(如max_tokenstemperature等),也可以添加到 body 中,參數之間通過英文逗號隔開。

樣本:

{"custom_id":"1","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-turbo-latest","stream":true,"enable_thinking":true,"thinking_budget":50,"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"你是誰?"}],"max_tokens": 1000,"temperature":0.7}}
{"custom_id":"2","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-turbo-latest","stream":true,"enable_thinking":true,"thinking_budget":50,"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}],"max_tokens": 1000,"temperature":0.7}}

body.model

String

本次Batch任務使用的模型。

重要

同一任務的批量請求務必選擇同一模型,其思考模式(若支援)也須保持一致。

body.messages

Array

訊息列表。

[
  {"role": "system", "content": "You are a helpful assistant."},
  {"role": "user", "content": "What is 2+2?"}
]

CSV檔案轉換為JSONL檔案

如果您有一份第一列為請求id(custom_id)第二列為內容(content)的 CSV 檔案,您可以通過下方Python代碼快速建立一份符合Batch任務格式的JSONL檔案。此特定格式的 CSV 檔案應與下方的Python指令碼放置在同一目錄中。

也可以使用本文提供的模板檔案,具體步驟如下:

  1. 將模板檔案下載到本地,並與下方的Python指令碼置於同一目錄下;

  2. 這裡的CSV模板檔案格式是第一列為請求id(custom_id),第二列為內容(content),您可以將您的業務問題粘貼到這個檔案中。

運行下方 Python 指令碼代碼後,將在同一目錄下產生一個符合Batch任務檔案格式的名為input_demo.jsonl的JSONL檔案。

如果需要調整檔案路徑或其他參數,請根據實際情況修改代碼。
import csv
import json
def messages_builder_example(content):
    messages = [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": content}]
    return messages

with open("input_demo.csv", "r") as fin:
    with open("input_demo.jsonl", 'w', encoding='utf-8') as fout:
        csvreader = csv.reader(fin)
        for row in csvreader:
            body = {"model": "qwen-turbo", "messages": messages_builder_example(row[1])}
            # 預設填寫/v1/chat/completions
            request = {"custom_id": row[0], "method": "POST", "url": "/v1/chat/completions", "body": body}
            fout.write(json.dumps(request, separators=(',', ':'), ensure_ascii=False) + "\n", )

輸出檔案

JSONL檔案,每行一個JSON,對應一個請求結果。

返回樣本

一個單行內容樣本:

{"id":"73291560-xxx","custom_id":"1","response":{"status_code":200,"request_id":"73291560-7616-97bf-87f2-7d747bbe84fd","body":{"created":1742303743,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"qwen-max","id":"chatcmpl-73291560-7616-97bf-87f2-7d747bbe84fd","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}

一個多行內容樣本:

{"id":"c308ef7f-xxx","custom_id":"1","response":{"status_code":200,"request_id":"c308ef7f-0824-9c46-96eb-73566f062426","body":{"created":1742303743,"usage":{"completion_tokens":35,"prompt_tokens":26,"total_tokens":61},"model":"qwen-max","id":"chatcmpl-c308ef7f-0824-9c46-96eb-73566f062426","choices":[{"finish_reason":"stop","index":0,"message":{"content":"你好!當然可以。無論是需要資訊查詢、學習資料、解決問題的方法,還是其他任何協助,我都在這裡為你提供支援。請告訴我你需要什麼方面的協助?"}}],"object":"chat.completion"}},"error":null}
{"id":"73291560-xxx","custom_id":"2","response":{"status_code":200,"request_id":"73291560-7616-97bf-87f2-7d747bbe84fd","body":{"created":1742303743,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"qwen-max","id":"chatcmpl-73291560-7616-97bf-87f2-7d747bbe84fd","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}

返回參數

欄位

類型

必選

描述

id

String

請求ID。

custom_id

String

使用者自訂的請求ID。

response

Object

請求結果。

error

Object

異常響應結果。

error.code

String

錯誤碼。

error.message

String

錯誤資訊。

completion_tokens

Integer

完成組建所需的token數。

prompt_tokens

Integer

prompt的token數。

model

String

本次任務進行推理的模型。

JSONL檔案轉換為CSV檔案

相比於JSONL檔案,CSV檔案通常只包含必要的資料值,沒有額外的鍵名或其他中繼資料,非常適合用於自動化指令碼和Batch任務。如果您需要將Batch輸出的 JSONL 檔案轉換成 CSV 檔案,可以使用以下Python代碼實現。

請確保將 result.jsonl 檔案與下方的 Python 指令碼放在同一目錄下,運行下方指令碼代碼後會產生一個名為 result.csv 的 CSV 檔案。

如果需要調整檔案路徑或其他參數,請根據實際情況修改代碼。
import json
import csv
columns = ["custom_id",
           "model",
           "request_id",
           "status_code",
           "error_code",
           "error_message",
           "created",
           "content",
           "usage"]

def dict_get_string(dict_obj, path):
    obj = dict_obj
    try:
        for element in path:
            obj = obj[element]
        return obj
    except:
        return None

with open("result.jsonl", "r") as fin:
    with open("result.csv", 'w', encoding='utf-8') as fout:
        rows = [columns]
        for line in fin:
            request_result = json.loads(line)
            row = [dict_get_string(request_result, ["custom_id"]),
                   dict_get_string(request_result, ["response", "body", "model"]),
                   dict_get_string(request_result, ["response", "request_id"]),
                   dict_get_string(request_result, ["response", "status_code"]),
                   dict_get_string(request_result, ["error", "error_code"]),
                   dict_get_string(request_result, ["error", "error_message"]),
                   dict_get_string(request_result, ["response", "body", "created"]),
                   dict_get_string(request_result, ["response", "body", "choices", 0, "message", "content"]),
                   dict_get_string(request_result, ["response", "body", "usage"])]
            rows.append(row)
        writer = csv.writer(fout)
        writer.writerows(rows)
當CSV檔案中包含中文字元,並且使用Excel開啟時遇到亂碼問題時,可以使用文字編輯器(如Sublime)將CSV檔案的編碼轉換為GBK,然後再用Excel開啟。另一種方法是在Excel中建立一個Excel檔案,並在匯入資料時指定正確的編碼格式UTF-8。

具體流程

1. 準備與上傳檔案

建立Batch任務前,需要您將準備好的符合輸入檔案要求的JSONL檔案,通過以下的檔案上傳介面上傳後,擷取file_id,通過purpose參數指定上傳檔案的用途為batch

您可以上傳Batch任務的單個檔案最大為500 MB;當前阿里雲帳號下的百鍊儲存空間支援的最大檔案數為10000個,檔案總量不超過100 GB,檔案暫時沒有有效期間。

OpenAI Python SDK

請求樣本

import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    # 若沒有配置環境變數,可用阿里雲百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",  # 阿里雲百鍊服務的base_url
)

# test.jsonl 是一個本地樣本檔案,purpose必須是batch
file_object = client.files.create(file=Path("test.jsonl"), purpose="batch")

print(file_object.model_dump_json())

測試檔案test.jsonl內容:

{"custom_id":"1","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"你好!有什麼可以協助你的嗎?"}]}}
{"custom_id":"2","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}

返回樣本

{
    "id": "file-batch-xxx",
    "bytes": 437,
    "created_at": 1742304153,
    "filename": "test.jsonl",
    "object": "file",
    "purpose": "batch",
    "status": "processed",
    "status_details": null
}

curl

請求樣本

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/files
# === 執行時請刪除該注釋 ===
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"test.jsonl"' \
--form 'purpose="batch"'

測試檔案test.jsonl內容:

{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "qwen-turbo", "messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is 2+2?"}]}}

返回樣本

{
    "id": "file-batch-xxx",
    "bytes": 231,
    "created_at": 1729065815,
    "filename": "test.jsonl",
    "object": "file",
    "purpose": "batch",
    "status": "processed",
    "status_details": null
}

2. 建立Batch任務

您可以使用input_file_id參數建立Batch任務:傳入準備與上傳檔案介面返回的檔案ID。

介面限流:每個阿里雲主帳號每分鐘 1000 次,最大運行任務數 1000 個(包括所有未結束的任務,超過最大任務數,需要等任務結束後才能再建立)。

OpenAI Python SDK

請求樣本

import os
from openai import OpenAI

client = OpenAI(
    # 若沒有配置環境變數,可用阿里雲百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",  # 阿里雲百鍊服務的base_url
)

batch = client.batches.create(
    input_file_id="file-batch-xxx",  # 上傳檔案返回的id
    endpoint="/v1/chat/completions",  # 測試模型batch-test-model填寫/v1/chat/ds-test,其他模型填寫/v1/chat/completions
    completion_window="24h",
    metadata={'ds_name':"任務名稱",'ds_description':'任務描述'} # metadata資料,非必要欄位,用於建立任務名稱、描述
)
print(batch)

curl

請求樣本

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/files
# === 執行時請刪除該注釋 ===
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input_file_id": "file-batch-xxx",
    "endpoint": "/v1/chat/completions",
    "completion_window": "24h",
    "metadata":{"ds_name":"任務名稱","ds_description":"任務描述"}
  }'
input_file_id的值替換為實際值。

輸入參數配置

欄位

類型

傳參方式

必選

描述

input_file_id

String

Body

用於指定檔案ID,作為Batch任務的輸入檔案。

使用準備與上傳檔案介面返回的檔案ID,如file-batch-xxx

endpoint

String

Body

訪問路徑,需和輸入檔案中的url欄位保持一致。

  • 測試模型batch-test-model填寫/v1/chat/ds-test

  • 其他模型填寫/v1/chat/completions

completion_window

String

Body

等待時間,支援最短等待時間24h,最長等待時間336h,僅支援整數。

支援"h"和"d"兩個單位,如"24h"或"14d"。

metadata

Map

Body

任務擴充中繼資料,以索引值對形式附加資訊。

metadata.ds_name

String

Body

任務名稱。

樣本:"ds_name":"Batch任務"

限制:長度不超過100個字元。

若重複定義該欄位,以最後一次傳入的值為準。

metadata.ds_description

String

Body

任務描述。

樣本:"ds_description":"Batch推理任務測試"

限制:長度不超過200個字元。

若重複定義該欄位,以最後一次傳入的值為準。

返回樣本

{
    "id": "batch_xxx",
    "object": "batch",
    "endpoint": "/v1/chat/completions",
    "errors": null,
    "input_file_id": "file-batch-xxx",
    "completion_window": "24h",
    "status": "validating",
    "output_file_id": null,
    "error_file_id": null,
    "created_at": 1742367779,
    "in_progress_at": null,
    "expires_at": null,
    "finalizing_at": null,
    "completed_at": null,
    "failed_at": null,
    "expired_at": null,
    "cancelling_at": null,
    "cancelled_at": null,
    "request_counts": {
        "total": 0,
        "completed": 0,
        "failed": 0
    },
    "metadata": {
        "ds_name": "任務名稱",
        "ds_description": "任務描述"
    }
}

返回參數

欄位

類型

描述

id

String

Batch任務 ID。

object

String

物件類型,固定值batch

endpoint

String

訪問路徑。

errors

Map

錯誤資訊。

input_file_id

String

檔案ID。

completion_window

String

等待時間,支援最短等待時間24h,最長等待時間336h,僅支援整數。

支援"h"和"d"兩個單位,如"24h"或"14d"。

status

String

任務狀態,包括validating、failed、in_progress、finalizing、completed、expired、cancelling、cancelled。

output_file_id

String

執行成功請求的輸出檔案id。

error_file_id

String

執行錯誤請求的輸出檔案id。

created_at

Integer

任務建立的Unix 時間戳記(秒)。

in_progress_at

Integer

任務開始啟動並執行Unix時間戳記(秒)。

expires_at

Integer

任務開始逾時的時間戳記(秒)。

finalizing_at

Integer

任務最後開始時間戳(秒)。

completed_at

Integer

任務完成的時間戳記(秒)。

failed_at

Integer

任務失敗的時間戳記(秒)。

expired_at

Integer

任務逾時的時間戳記(秒)。

cancelling_at

Integer

任務設定為取消中的時間戳記(秒)。

cancelled_at

Integer

任務取消的時間戳記(秒)。

request_counts

Map

不同狀態的請求數量。

metadata

Map

附加資訊,索引值對。

metadata.ds_name

String

當前任務的任務名稱。

metadata.ds_description

String

當前任務的任務描述。

3. 查詢與管理Batch任務

查詢Batch任務詳情

通過傳入建立Batch任務返回的Batch任務ID,來查詢指定Batch任務的資訊。當前僅支援查詢30天之內建立的Batch任務。

介面限流:每個阿里雲主帳號每分鐘1000次(由於Batch任務執行需要一些時間,建議建立Batch任務之後,每分鐘調用1次該查詢介面擷取任務資訊)。

OpenAI Python SDK

請求樣本

import os
from openai import OpenAI

client = OpenAI(
    # 若沒有配置環境變數,可用阿里雲百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",  # 阿里雲百鍊服務的base_url
)
batch = client.batches.retrieve("batch_id")  # 將batch_id替換為Batch任務的id
print(batch)

curl

請求樣本

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/files
# === 執行時請刪除該注釋 ===
curl --request GET 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches/batch_id' \
 -H "Authorization: Bearer $DASHSCOPE_API_KEY"
batch_id替換為實際值。

輸入參數配置

欄位

類型

傳參方式

必選

描述

batch_id

String

Path

需要查詢的Batch任務的ID(建立Batch任務返回的Batch任務ID),以batch開頭,例如“batch_xxx”。

返回樣本

請參見建立Batch任務的返回樣本。

返回參數

請參見建立Batch任務的返回參數。

返回參數中output_file_iderror_file_id可以通過下載Batch結果檔案擷取內容。

查詢Batch工作清單

您可以使用 batches.list() 方法查詢 Batch 工作清單,並通過分頁機制逐步擷取完整的工作清單。

  • 使用 after 參數:傳入上一頁最後一個Batch任務的 ID,以擷取下一頁資料。

  • 使用 limit 參數:設定返回的任務數量。

  • 支援通過input_file_ids等參數進行過濾查詢。

介面限流:每個阿里雲主帳號每分鐘 100 次

OpenAI Python SDK

請求樣本

import os
from openai import OpenAI

client = OpenAI(
    # 若沒有配置環境變數,可用阿里雲百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",  # 阿里雲百鍊服務的base_url
)
batches = client.batches.list(after="batch_xxx", limit=2,extra_query={'ds_name':'任務名稱','input_file_ids':'file-batch-xxx,file-batch-xxx','status':'completed,expired','create_after':'20250304000000','create_before':'20250306123000'})
print(batches)

curl

請求樣本

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/batches?xxxxxx
# === 執行時請刪除該注釋 ===
curl --request GET  'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches?after=batch_xxx&limit=2&ds_name=Batch&input_file_ids=file-batch-xxx,file-batch-xxx&status=completed,failed&create_after=20250303000000&create_before=20250320000000' \
 -H "Authorization: Bearer $DASHSCOPE_API_KEY"
after=batch_id中的batch_id替換為實際值,limit參數設定為返回任務的數量,ds_name填寫為任務名稱片段,input_file_ids的值可填寫多個檔案ID,status填寫Batch任務的多個狀態,create_aftercreate_before的值填寫為時間點。

輸入參數配置

欄位

類型

傳參方式

必選

描述

after

String

Query

用於分頁的遊標,參數after的取值為Batch任務ID,表示查詢該ID之後的資料。分頁查詢時,可以將返回結果中的最後一個Batch任務ID(last_id)賦值給該參數,以擷取下一頁的資料。

例如,若本次查詢返回了20行資料,且最後一個Batch任務 ID(即last_id)是batch_xxx,則後續查詢時可以設定after=batch_xxx,以擷取列表的下一頁。

limit

Integer

Query

每次查詢返回的Batch任務數量,範圍[1,100],預設20。

ds_name

String

Query

根據任務名稱進行模糊篩選,輸入任意連續字元片段即可匹配包含該內容的任務名稱(如輸入“Batch”可匹配“ Batch任務”、“Batch任務_20240319”等)。

input_file_ids

String

Query

篩選多個檔案ID,以英文逗號分隔,最多可填寫20個。準備與上傳檔案返回的檔案ID。

status

String

Query

篩選多個狀態,以英文逗號分隔,包括validating、failed、in_progress、finalizing、completed、expired、cancelling、cancelled。

create_after

String

Query

篩選在此時間點之後建立的任務,格式:yyyyMMddHHmmss。例如,您想篩選2025年03月04日00點00分00秒時間點之後建立的任務,可寫為20250304000000

create_before

String

Query

篩選在此時間點之前建立的任務,格式:yyyyMMddHHmmss。例如,您想篩選2025年3月4日12點30分0秒時間點之前建立的任務,可寫為20250304123000

返回樣本

{
  "object": "list",
  "data": [
    {
      "id": "batch_xxx",
      "object": "batch",
      "endpoint": "/v1/chat/completions",
      "errors": null,
      "input_file_id": "file-batch-xxx",
      "completion_window": "24h",
      "status": "completed",
      "output_file_id": "file-batch_output-xxx",
      "error_file_id": null,
      "created_at": 1722234109,
      "in_progress_at": 1722234109,
      "expires_at": null,
      "finalizing_at": 1722234165,
      "completed_at": 1722234165,
      "failed_at": null,
      "expired_at": null,
      "cancelling_at": null,
      "cancelled_at": null,
      "request_counts": {
        "total": 100,
        "completed": 95,
        "failed": 5
      },
      "metadata": {}
    },
    { ... }
  ],
  "first_id": "batch_xxx",
  "last_id": "batch_xxx",
  "has_more": true
}

返回參數

欄位

類型

描述

object

String

類型,固定值list。

data

Array

Batch任務對象,參見建立Batch任務的返回參數。

first_id

String

當前頁第一個 Batch任務 ID。

last_id

String

當前頁最後一個Batch任務 ID。

has_more

Boolean

是否有下一頁。

取消Batch任務

通過傳入建立Batch任務返回的Batch任務ID,來取消指定的Batch任務。

介面限流:每個阿里雲主帳號每分鐘 1000 次

OpenAI Python SDK

請求樣本

import os
from openai import OpenAI

client = OpenAI(
    # 若沒有配置環境變數,可用阿里雲百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",  # 阿里雲百鍊服務的base_url
)
batch = client.batches.cancel("batch_id")  # 將batch_id替換為Batch任務的id
print(batch)

curl

請求樣本

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/batches/batch_id/cancel
# === 執行時請刪除該注釋 ===
curl --request POST 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches/batch_id/cancel' \
 -H "Authorization: Bearer $DASHSCOPE_API_KEY"
batch_id替換為實際值。

輸入參數配置

欄位

類型

傳參方式

必選

描述

batch_id

String

Path

需要取消的Batch任務的id,以batch開頭,例如“batch_xxx”。

返回樣本

請參見建立Batch任務的返回樣本。

返回參數

請參見建立Batch任務的返回參數。

4. 下載Batch結果檔案

在Batch推理任務結束後,您可以通過介面下載結果檔案。

您可以通過查詢Batch任務詳情或通過查詢Batch工作清單返回參數中的output_file_id擷取下載檔案的file_id。僅支援下載以file-batch_output開頭的file_id對應的檔案。

OpenAI Python SDK

您可以通過content方法擷取Batch任務結果檔案內容,並通過write_to_file方法將其儲存至本地。

請求樣本

import os
from openai import OpenAI

client = OpenAI(
    # 若沒有配置環境變數,可用阿里雲百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
content = client.files.content(file_id="file-batch_output-xxx")
# 列印結果檔案內容
print(content.text)
# 儲存結果檔案至本地
content.write_to_file("result.jsonl")

返回樣本

{"id":"c308ef7f-xxx","custom_id":"1","response":{"status_code":200,"request_id":"c308ef7f-0824-9c46-96eb-73566f062426","body":{"created":1742303743,"usage":{"completion_tokens":35,"prompt_tokens":26,"total_tokens":61},"model":"qwen-plus","id":"chatcmpl-c308ef7f-0824-9c46-96eb-73566f062426","choices":[{"finish_reason":"stop","index":0,"message":{"content":"你好!當然可以。無論是需要資訊查詢、學習資料、解決問題的方法,還是其他任何協助,我都在這裡為你提供支援。請告訴我你需要什麼方面的協助?"}}],"object":"chat.completion"}},"error":null}
{"id":"73291560-xxx","custom_id":"2","response":{"status_code":200,"request_id":"73291560-7616-97bf-87f2-7d747bbe84fd","body":{"created":1742303743,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"qwen-plus","id":"chatcmpl-73291560-7616-97bf-87f2-7d747bbe84fd","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}

curl

您可以通過GET方法,在URL中指定file_id來下載Batch任務結果檔案。

請求樣本

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下是新加坡地區base_url,如果使用北京地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/batches/batch_id/cancel
# === 執行時請刪除該注釋 ===
curl -X GET https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files/file-batch_output-xxx/content \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" > result.jsonl

輸入參數配置

欄位

類型

傳參方式

必選

描述

file_id

string

Path

需要下載的檔案的ID,查詢Batch任務詳情或通過查詢Batch工作清單返回參數中的output_file_id值。

返回結果

Batch任務結果的JSONL檔案,格式請參考輸出檔案

擴充功能

計費說明

  • 計費單價:所有成功請求的輸入和輸出Token,單價均為對應模型即時推理價格的50%,具體請參見模型列表

  • 計費範圍:

    • 僅對任務中成功執行的請求進行計費。

    • 檔案解析失敗、任務執行失敗、或行級錯誤請求均不產生費用

    • 對於被取消的任務,在取消操作前已成功完成的請求仍會正常計費。

重要

批量推理為獨立計費項目,不支援預付費(節省計劃)、新人免費額度等優惠,以及上下文緩衝等功能。

錯誤碼

如果調用失敗並返回報錯資訊,請參見錯誤資訊進行解決。

常見問題

  1. 使用Batch調用,是否需要下單,在哪裡下單?

    答:Batch是一種調用方式,無需額外下單。該調用方式為後付費計價模式,按照Batch介面調用直接付費。

  2. 提交的Batch調用請求,後台如何處理? 是根據提交請求的先後順序來執行嗎?

    答:不是排隊機制,是調度機制,根據資源情況來調度和執行Batch請求任務。

  3. 提交的Batch調用請求,實際執行完成需要多長時間?

    答:Batch任務的執行時間取決於系統的資源分派情況。

    在系統資源緊張時,任務可能無法在設定的最長等待時間內全部完成。

    因此,對模型推理的時效性有嚴格要求的情境,建議使用即時調用;而對於處理大規模資料且對時效性有一定容忍度的情境,推薦使用Batch調用。