すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:OpenAI 互換 - バッチ

最終更新日:Dec 04, 2025

Alibaba Cloud Model Studio は、OpenAI 互換の Batch API を提供しています。この API を使用すると、ファイルを使ってバッチジョブを送信し、非同期で実行できます。このサービスは、オフピーク時に大規模なデータをオフラインで処理し、ジョブが完了するか最大待機時間に達した後に結果を返します。コストはリアルタイム呼び出しの 50% です。

コンソールでこの操作を実行するには、「バッチ推論」をご参照ください。

前提条件

  • Alibaba Cloud Model Studio を有効化し、API キーを取得していること。

    API キーを環境変数として設定することで、API キー漏洩のリスクを低減できます。
  • OpenAI Python SDK を使用して Batch API を呼び出す場合は、次のコマンドを実行して最新バージョンの OpenAI SDK をインストールします。

    pip3 install -U openai

クイックスタート

正式なバッチジョブを開始する前に、テストモデル batch-test-model を使用してフルリンクのクローズドループテストを実行できます。このテストには、入力データの検証、ジョブの作成、ジョブの照会、および結果ファイルのダウンロードが含まれます。注:

  • テストファイルは入力ファイルの要件を満たす必要があります。また、サイズが 1 MB を超えたり、行数が 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":"Hello! How can I help you?"}]}}
      {"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="sk-xxx" に置き換えて、ご自身の Model Studio API キーを使用できます。ただし、漏洩のリスクを減らすため、本番環境では API キーをコードにハードコーディングすることは推奨しません。
          # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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"  # Alibaba Cloud Model Studio サービスの base_url
      )
      
      def upload_file(file_path):
          print(f"Uploading the JSONL file that contains request information...")
          file_object = client.files.create(file=Path(file_path), purpose="batch")
          print(f"File uploaded successfully. File ID: {file_object.id}\n")
          return file_object.id
      
      def create_batch_job(input_file_id):
          print(f"Creating a batch job based on the file ID...")
          # 注:ここの endpoint パラメーターの値は、入力ファイルの url フィールドと同じでなければなりません。テストモデル (batch-test-model) の場合は /v1/chat/ds-test を、テキスト埋め込みモデルの場合は /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 job created successfully. Batch job ID: {batch.id}\n")
          return batch.id
      
      def check_job_status(batch_id):
          print(f"Checking the batch job status...")
          batch = client.batches.retrieve(batch_id=batch_id)
          print(f"Batch job status: {batch.status}\n")
          return batch.status
      
      def get_output_id(batch_id):
          print(f"Getting the output file ID for successful requests in the batch job...")
          batch = client.batches.retrieve(batch_id=batch_id)
          print(f"Output file ID: {batch.output_file_id}\n")
          return batch.output_file_id
      
      def get_error_id(batch_id):
          print(f"Getting the error file ID for failed requests in the batch job...")
          batch = client.batches.retrieve(batch_id=batch_id)
          print(f"Error file ID: {batch.error_file_id}\n")
          return batch.error_file_id
      
      def download_results(output_file_id, output_file_path):
          print(f"Printing and downloading the results of successful requests from the batch job...")
          content = client.files.content(output_file_id)
          # テスト用に一部のコンテンツを出力します
          print(f"Printing the first 1,000 characters of the successful results: {content.text[:1000]}...\n")
          # 結果ファイルをローカルマシンに保存します
          content.write_to_file(output_file_path)
          print(f"The complete output results have been saved to the local output file result.jsonl\n")
      
      def download_errors(error_file_id, error_file_path):
          print(f"Printing and downloading the information for failed requests from the batch job...")
          content = client.files.content(error_file_id)
          # テスト用に一部のコンテンツを出力します
          print(f"Printing the first 1,000 characters of the failed request information: {content.text[:1000]}...\n")
          # エラー情報ファイルをローカルマシンに保存します
          content.write_to_file(error_file_path)
          print(f"The complete failed request information has been saved to the local error file error.jsonl\n")
      
      def main():
          # ファイルパス
          input_file_path = "test_model.jsonl"  # ご自身の入力ファイルパスに置き換えてください
          output_file_path = "result.jsonl"  # ご自身の出力ファイルパスに置き換えてください
          error_file_path = "error.jsonl"  # ご自身のエラーファイルパスに置き換えてください
          try:
              # ステップ 1:リクエスト情報を含む JSONL ファイルをアップロードして、入力ファイル ID を取得します
              input_file_id = upload_file(input_file_path)
              # ステップ 2:入力ファイル ID に基づいてバッチジョブを作成します
              batch_id = create_batch_job(input_file_id)
              # ステップ 3:バッチジョブが完了するまでステータスを確認します
              status = ""
              while status not in ["completed", "failed", "expired", "cancelled"]:
                  status = check_job_status(batch_id)
                  print(f"Waiting for the job to complete...")
                  time.sleep(10)  # 10 秒待ってから再度ステータスを確認します
              # ジョブが失敗した場合は、エラーメッセージを出力して終了します
              if status == "failed":
                  batch = client.batches.retrieve(batch_id)
                  print(f"Batch job failed. Error information: {batch.errors}\n")
                  print(f"詳細については、エラーコードのドキュメント https://www.alibabacloud.com/help/model-studio/developer-reference/error-code をご参照ください")
                  return
              # ステップ 4:結果をダウンロードします。出力ファイル ID が存在する場合、成功した結果の最初の 1,000 文字を出力し、完全な結果をローカルの出力ファイルにダウンロードします。
              # エラーファイル ID が存在する場合、失敗したリクエスト情報の最初の 1,000 文字を出力し、完全な情報をローカルのエラーファイルにダウンロードします。
              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/model-studio/developer-reference/error-code をご参照ください")
          except Exception as e:
              print(f"An error occurred: {e}")
              print(f"詳細については、エラーコードのドキュメント https://www.alibabacloud.com/help/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}
      エラーが発生した場合は、「エラーメッセージ」を参照して解決してください。

テストを検証した後、以下の手順に従って正式なバッチジョブを実行できます。

  1. 入力ファイルの要件に従って入力ファイルを準備します。ファイル内の model パラメーターをサポートされているモデルに設定し、url パラメーターを次のように設定します:/v1/chat/completions

  2. 上記の Python スクリプトの endpoint を置き換えます。

    重要

    スクリプト内の endpoint が入力ファイル内の url パラメーターと一致していることを確認してください。

  3. スクリプトを実行し、ジョブが完了するまで待ちます。ジョブが成功した場合、同じディレクトリに result.jsonl という出力ファイルが生成されます。

    ジョブが失敗した場合、プログラムは終了し、エラーメッセージが表示されます。
    エラーファイル ID が存在する場合、確認用に同じディレクトリに error.jsonl という名前のエラーファイルが生成されます。
    プロセス中に発生した例外はキャッチされ、エラーメッセージが表示されます。

データファイル形式

入力ファイル

バッチ推論ジョブを作成する前に、以下の仕様を満たすファイルを準備してください:

  • フォーマット:UTF-8 でエンコードされた JSONL (1 行に 1 つの独立した JSON オブジェクト)。

  • サイズ制限:1 つのファイルには最大 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?"}]}}

リクエストパラメーター

フィールド

タイプ

必須

説明

custom_id

String

はい

カスタムリクエスト ID です。各行はリクエストを表し、各リクエストには一意の custom_id があります。バッチジョブが完了した後、結果ファイルで対応する custom_id の結果を見つけることができます。

method

String

はい

リクエストメソッド。現在、POST のみがサポートされています。

url

String

はい

API に関連付けられた URL。バッチジョブの作成時に使用される endpoint フィールドと同じでなければなりません。

  • テストモデル batch-test-model には、/v1/chat/ds-test を入力します。

  • その他のモデルでは、/v1/chat/completions を入力します。

body

Object

はい

モデル呼び出しのリクエストボディです。これには、modelmessages など、モデルを呼び出すために必要なすべてのパラメーターが含まれます。

リクエストボディのパラメーターは、リアルタイム推論 API でサポートされているものと一致します。パラメーターの詳細については、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":"Who are you?"}],"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

はい

このバッチジョブで使用されるモデル。

重要

同じジョブ内のすべてのバッチリクエストは、同じモデルを使用する必要があります。思考モードがサポートされている場合は、それも一貫している必要があります。

body.messages

Array

はい

メッセージのリスト。

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

CSV ファイルを JSONL ファイルに変換

最初の列がリクエスト ID (custom_id) で、2 番目の列がコンテンツである CSV ファイルがある場合、以下の Python コードを使用してバッチジョブ用の JSONL ファイルをすばやく作成できます。CSV ファイルは、以下の Python スクリプトと同じディレクトリにある必要があります。

このトピックで提供されているテンプレートファイルを使用することもできます。手順は以下の通りです:

  1. テンプレートファイルをローカルマシンにダウンロードし、以下の Python スクリプトと同じディレクトリに配置します。

  2. この CSV テンプレートファイルでは、最初の列がリクエスト ID (custom_id) で、2 番目の列がコンテンツです。このファイルにビジネス上の質問を貼り付けることができます。

次の Python スクリプトを実行すると、バッチジョブ用の JSONL ファイル input_demo.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 オブジェクトです。

レスポンス例

1 行のコンテンツの例:

{"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":"Hello! Of course. I am here to support you, whether you need to query information, find learning materials, get solutions to problems, or need any other help. Please tell me what you need help with."}}],"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

いいえ

生成を完了するために必要なトークン数。

prompt_tokens

Integer

いいえ

プロンプト内のトークン数。

model

String

いいえ

このジョブの推論に使用されたモデル。

JSONL ファイルを CSV ファイルに変換

JSONL ファイルと比較して、CSV ファイルは通常、余分なキーやメタデータなしで必要なデータ値のみを含んでいるため、自動化スクリプトやバッチジョブに最適です。バッチジョブからの 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 ファイルを作成し、データをインポートする際に正しいエンコード形式である UTF-8 を指定することもできます。

操作手順

1. ファイルの準備とアップロード

バッチジョブを作成する前に、入力ファイルの要件を満たす JSONL ファイルを準備します。ファイルアップロード API 操作を使用してファイルをアップロードし、file_id を取得します。`purpose` パラメーターを使用して、ファイルの目的を batch として指定します。

バッチジョブ用にアップロードできる単一ファイルの最大サイズは 500 MB です。Alibaba Cloud アカウントの Model Studio ストレージスペースに許可されるファイルの最大数は 10,000 で、合計サイズは 100 GB を超えることはできません。現在、ファイルに有効期限はありません。

OpenAI Python SDK

リクエスト例

import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    # 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換えて、ご利用の Model Studio API キーを使用できます。ただし、本番環境では、漏洩のリスクを減らすために API キーをコードにハードコーディングすることは推奨しません。
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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",  # Alibaba Cloud Model Studio サービスの 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":"Hello! How can I help you?"}]}}
{"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 キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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. バッチジョブの作成

input_file_id パラメーターを ファイルの準備とアップロード API 操作によって返されるファイル ID に設定することで、バッチジョブを作成できます。

API レート制限:各 Alibaba Cloud アカウントは、1 分あたり最大 1,000 回の呼び出しを行うことができます。実行中のジョブの最大数は 1,000 です (すべての未完了ジョブを含む)。最大数を超えた場合は、新しいジョブを作成する前にジョブが完了するのを待つ必要があります。

OpenAI Python SDK

リクエスト例

import os
from openai import OpenAI

client = OpenAI(
    # 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換えて、ご利用の Model Studio API キーを使用できます。ただし、本番環境では、漏洩のリスクを減らすために API キーをコードにハードコーディングすることは推奨しません。
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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",  # Alibaba Cloud Model Studio サービスの 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':"Job Name",'ds_description':'Job Description'} # メタデータ、オプションのフィールド、ジョブ名と説明を作成するために使用されます
)
print(batch)

curl

リクエスト例

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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":"Job Name","ds_description":"Job Description"}
  }'
input_file_id の値を実際の値で置き換えます。

入力パラメーターの設定

フィールド

タイプ

パラメーター渡し方法

必須

説明

input_file_id

String

Body

はい

バッチジョブの入力ファイルとして使用するファイル ID を指定します。

ファイルを準備してアップロードする API 操作によって返される、file-batch-xxx などのファイル ID を使用します。

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 Job"

制限:最大 100 文字。

このフィールドが複数回定義された場合、最後に渡された値が使用されます。

metadata.ds_description

String

Body

いいえ

ジョブの説明。

例: "ds_description":"Batch inference job test"

制限:最大 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": "Job Name",
        "ds_description": "Job Description"
    }
}

レスポンスパラメーター

フィールド

タイプ

説明

id

String

バッチジョブ 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

ジョブが cancelling に設定されたときのタイムスタンプ (秒単位)。

cancelled_at

Integer

ジョブがキャンセルされたときのタイムスタンプ (秒単位)。

request_counts

Map

異なる状態にあるリクエストの数。

metadata

Map

キーと値のペアとしての追加情報。

metadata.ds_name

String

現在のジョブの名前。

metadata.ds_description

String

現在のジョブの説明。

3. バッチジョブのクエリと管理

バッチジョブの詳細のクエリ

バッチジョブの作成によって返されたバッチジョブ ID を渡して、特定のバッチジョブに関する情報をクエリします。過去 30 日以内に作成されたバッチジョブのみをクエリできます。

API レート制限:各 Alibaba Cloud アカウントは、1 分あたり最大 1,000 回の呼び出しを行うことができます。バッチジョブの実行には時間がかかるため、バッチジョブを作成した後、このクエリ API 操作を 1 分に 1 回呼び出してジョブ情報を取得することを推奨します。

OpenAI Python SDK

リクエスト例

import os
from openai import OpenAI

client = OpenAI(
    # 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換えて、ご利用の Model Studio API キーを使用できます。ただし、本番環境では、漏洩のリスクを減らすために API キーをコードにハードコーディングすることは推奨しません。
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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",  # Alibaba Cloud Model Studio サービスの base_url
)
batch = client.batches.retrieve("batch_id")  # batch_id をバッチジョブの ID に置き換えてください
print(batch)

curl

リクエスト例

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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

はい

クエリするバッチジョブの ID (バッチジョブの作成によって返されるバッチジョブ ID)。"batch" で始まります (例:"batch_xxx")。

レスポンス例

詳細については、「バッチジョブの作成」のレスポンス例をご参照ください。

レスポンスパラメーター

詳細については、「バッチジョブの作成」のレスポンスパラメーターをご参照ください。

レスポンスパラメーターの output_file_iderror_file_id の内容は、「バッチ結果ファイルのダウンロード」の手順で取得できます。

バッチジョブリストのクエリ

batches.list() メソッドを使用してバッチジョブリストをクエリし、ページングメカニズムを使用して完全なジョブリストを取得できます。

  • after パラメーターを使用します: 前のページの最後のバッチジョブの ID を渡して、次のページのデータを取得します。

  • limit パラメーター: 返すジョブの数を設定します。

  • input_file_ids などのパラメーターを使用して、クエリをフィルタリングできます。

API レート制限:各 Alibaba Cloud アカウントは、1 分あたり最大 100 回の呼び出しを行うことができます。

OpenAI Python SDK

リクエスト例

import os
from openai import OpenAI

client = OpenAI(
    # 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換えて、ご利用の Model Studio API キーを使用できます。ただし、本番環境では、漏洩のリスクを減らすために API キーをコードにハードコーディングすることは推奨しません。
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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",  # Alibaba Cloud Model Studio サービスの base_url
)
batches = client.batches.list(after="batch_xxx", limit=2,extra_query={'ds_name':'Job Name','input_file_ids':'file-batch-xxx,file-batch-xxx','status':'completed,expired','create_after':'20250304000000','create_before':'20250306123000'})
print(batches)

curl

リクエスト例

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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"
batch_idafter=batch_id 内で実際の値に置き換えます。limit パラメーターに、返されるジョブの数を設定します。ds_name にジョブ名の一部を設定します。input_file_ids の値には、複数のファイル ID を入力できます。status に複数のバッチジョブステータスを設定します。create_aftercreate_before の値に特定の時点を設定します。

入力パラメーターの設定

フィールド

タイプ

パラメーター渡し方法

必須

説明

after

String

Query

いいえ

ページング用のカーソルです。after パラメーターの値はバッチジョブ ID で、この ID の後のデータをクエリすることを示します。ページングクエリを実行する際、返された結果の最後のバッチジョブ ID (last_id) をこのパラメーターに割り当てることで、データの次のページを取得できます。

たとえば、現在のクエリが 20 行のデータを返し、最後のバッチジョブ ID (last_id) が batch_xxx の場合、後続のクエリで after=batch_xxx を設定して、リストの次のページを取得できます。

limit

Integer

Query

いいえ

クエリごとに返すバッチジョブの数。範囲は [1, 100] です。デフォルト値は 20 です。

ds_name

String

Query

いいえ

ジョブ名に基づいてあいまい検索を実行します。連続する任意の文字の断片を入力して、それを含むジョブ名を照合します。たとえば、「Batch」と入力すると、「Batch Job」と「Batch Job_20240319」が照合されます。

input_file_ids

String

Query

いいえ

複数のファイル ID でフィルタリングし、カンマで区切ります。最大 20 個の ID を入力できます。ファイルの準備とアップロードによって返されるファイル ID。

status

String

Query

いいえ

複数のステータスでフィルタリングし、カンマで区切ります。ステータスには、validating、failed、in_progress、finalizing、completed、expired、cancelling、cancelled が含まれます。

create_after

String

Query

いいえ

指定した時刻以降に作成されたジョブをフィルターします。フォーマットは yyyyMMddHHmmss です。たとえば、2025 年 3 月 4 日 00:00:00 以降に作成されたジョブをフィルターにかけるには、20250304000000 と入力します。

create_before

String

Query

いいえ

この時間より前に作成されたジョブをフィルターします。フォーマットは yyyyMMddHHmmss です。たとえば、2025 年 3 月 4 日 12:30:00 より前に作成されたジョブをフィルターするには、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

バッチジョブオブジェクト。詳細については、バッチジョブ作成のレスポンスパラメーターをご参照ください。

first_id

String

現在のページの最初のバッチジョブの ID。

last_id

String

現在のページの最後のバッチジョブの ID。

has_more

Boolean

次のページがあるかどうかを示します。

バッチジョブのキャンセル

バッチジョブの作成によって返されたバッチジョブ ID を渡して、指定されたバッチジョブをキャンセルします。

API レート制限:各 Alibaba Cloud アカウントは、1 分あたり最大 1,000 回の呼び出しを行うことができます。

OpenAI Python SDK

リクエスト例

import os
from openai import OpenAI

client = OpenAI(
    # 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換えて、ご利用の Model Studio API キーを使用できます。ただし、本番環境では、漏洩のリスクを減らすために API キーをコードにハードコーディングすることは推奨しません。
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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",  # Alibaba Cloud Model Studio サービスの base_url
)
batch = client.batches.cancel("batch_id")  # batch_id をバッチジョブの ID に置き換えてください
print(batch)

curl

リクエスト例

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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

はい

キャンセルするバッチジョブの ID。"batch" で始まります (例:"batch_xxx")。

レスポンス例

詳細については、「バッチジョブの作成」のレスポンス例をご参照ください。

レスポンスパラメーター

詳細については、「バッチジョブの作成」のレスポンスパラメーターをご参照ください。

4. バッチ結果ファイルのダウンロード

バッチ推論ジョブが完了した後、API 操作を使用して結果ファイルをダウンロードできます。

ファイルをダウンロードするための file_id は、バッチジョブ詳細の照会バッチジョブリストの照会output_file_id から取得できます。file_idfile-batch_output

OpenAI Python SDK

content メソッドを使用してバッチジョブの結果ファイルのコンテンツを取得し、write_to_file メソッドを使用してローカルマシンに保存できます。

リクエスト例

import os
from openai import OpenAI

client = OpenAI(
    # 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換えて、ご利用の Model Studio API キーを使用できます。ただし、本番環境では、漏洩のリスクを減らすために API キーをコードにハードコーディングすることは推奨しません。
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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":"Hello! Of course. I am here to support you, whether you need to query information, find learning materials, get solutions to problems, or need any other help. Please tell me what you need help with."}}],"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 を指定して、バッチジョブの結果ファイルをダウンロードできます。

リクエスト例

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/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 です。この ID は、バッチジョブ詳細の照会 または バッチジョブリストの照会 によって返される output_file_id パラメーターの値です。

返される結果

バッチジョブの結果の JSONL ファイル。形式の詳細については、「出力ファイル」をご参照ください。

拡張機能

課金

  • 単価:成功したすべての入力トークンと出力トークンの単価は、対応するモデルのリアルタイム推論価格の 50% です。詳細については、「モデルリスト」をご参照ください。

  • 課金範囲:

    • ジョブ内で正常に実行されたリクエストのみが課金されます。

    • ファイルの解析失敗、ジョブの実行失敗、または行レベルのエラーリクエストは課金されません

    • キャンセルされたジョブについては、キャンセル前に正常に完了したリクエストは通常通り課金されます。

重要

バッチ推論は別の課金項目であり、サブスクリプション (節約プラン)、新規ユーザー向けの無料クォータ、またはコンテキストキャッシュなどの機能の割引はサポートしていません。

エラーコード

呼び出しが失敗し、エラーメッセージが返された場合は、「エラーメッセージ」を参照して問題を解決してください。

よくある質問

  1. バッチ呼び出しを使用するには注文する必要がありますか?もしそうなら、どこで?

    A:バッチは呼び出し方法であり、追加の注文は必要ありません。この呼び出し方法は従量課金モデルを使用しており、バッチ API 操作の呼び出しに対して直接支払います。

  2. 送信されたバッチ呼び出しリクエストはバックグラウンドでどのように処理されますか?送信された順に実行されますか?

    A:キューイングメカニズムではなく、スケジューリングメカニズムです。バッチリクエストジョブは、リソースの可用性に基づいてスケジュールされ、実行されます。

  3. 送信されたバッチ呼び出しリクエストが完了するまでに実際にかかる時間はどのくらいですか?

    A:バッチジョブの実行時間は、システムのリソース割り当てに依存します。

    システムリソースが逼迫している場合、設定された最大待機時間内にジョブが完全に完了しないことがあります。

    したがって、モデル推論の適時性に厳しい要件があるシナリオでは、リアルタイム呼び出しを使用することを推奨します。大規模なデータの処理を伴い、適時性にある程度の許容度があるシナリオでは、バッチ呼び出しを使用することを推奨します。