Alibaba Cloud Model Studio は、OpenAI 互換の Batch API を提供しています。この API を使用すると、ファイルを使ってバッチジョブを送信し、非同期で実行できます。このサービスは、オフピーク時に大規模なデータをオフラインで処理し、ジョブが完了するか最大待機時間に達した後に結果を返します。コストはリアルタイム呼び出しの 50% です。
コンソールでこの操作を実行するには、「バッチ推論」をご参照ください。
前提条件
クイックスタート
正式なバッチジョブを開始する前に、テストモデル batch-test-model を使用してフルリンクのクローズドループテストを実行できます。このテストには、入力データの検証、ジョブの作成、ジョブの照会、および結果ファイルのダウンロードが含まれます。注:
テストファイルは入力ファイルの要件を満たす必要があります。また、サイズが 1 MB を超えたり、行数が 100 行を超えたりしてはなりません。
同時実行数制限:最大 2 つの並列ジョブ。
リソース使用量:テストモデルは推論プロセスを経由しないため、モデル推論料金は発生しません。
手順は以下の通りです:
テストファイルの準備
リクエスト情報を含むサンプルファイル 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?"}]}}
スクリプトの実行
この 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()
テスト結果の検証
ジョブのステータスに
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}エラーが発生した場合は、「エラーメッセージ」を参照して解決してください。
テストを検証した後、以下の手順に従って正式なバッチジョブを実行できます。
入力ファイルの要件に従って入力ファイルを準備します。ファイル内の model パラメーターをサポートされているモデルに設定し、url パラメーターを次のように設定します:/v1/chat/completions
上記の Python スクリプトの endpoint を置き換えます。
重要スクリプト内の endpoint が入力ファイル内の url パラメーターと一致していることを確認してください。
スクリプトを実行し、ジョブが完了するまで待ちます。ジョブが成功した場合、同じディレクトリに
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 です。各行はリクエストを表し、各リクエストには一意の |
method | String | はい | リクエストメソッド。現在、POST のみがサポートされています。 |
url | String | はい | API に関連付けられた URL。バッチジョブの作成時に使用される endpoint フィールドと同じでなければなりません。
|
body | Object | はい | モデル呼び出しのリクエストボディです。これには、 リクエストボディのパラメーターは、リアルタイム推論 API でサポートされているものと一致します。パラメーターの詳細については、OpenAI 互換 API をご参照ください。 これをさらに拡張するには、 例: |
body.model | String | はい | このバッチジョブで使用されるモデル。 重要 同じジョブ内のすべてのバッチリクエストは、同じモデルを使用する必要があります。思考モードがサポートされている場合は、それも一貫している必要があります。 |
body.messages | Array | はい | メッセージのリスト。 |
CSV ファイルを JSONL ファイルに変換
最初の列がリクエスト ID (custom_id) で、2 番目の列がコンテンツである CSV ファイルがある場合、以下の Python コードを使用してバッチジョブ用の JSONL ファイルをすばやく作成できます。CSV ファイルは、以下の Python スクリプトと同じディレクトリにある必要があります。
このトピックで提供されているテンプレートファイルを使用することもできます。手順は以下の通りです:
テンプレートファイルをローカルマシンにダウンロードし、以下の Python スクリプトと同じディレクトリに配置します。
この 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 操作によって返される、 |
endpoint | String | Body | はい | アクセスパス。入力ファイルの url フィールドと同じでなければなりません。
|
completion_window | String | Body | はい | 待機時間。最小待機時間は 24h、最大は 336h です。整数のみがサポートされています。 サポートされている単位は "h" と "d" です (例:"24h" または "14d")。 |
metadata | Map | Body | いいえ | ジョブの拡張メタデータ。キーと値のペアとして情報を添付します。 |
metadata.ds_name | String | Body | いいえ | ジョブの名前。 例: 制限:最大 100 文字。 このフィールドが複数回定義された場合、最後に渡された値が使用されます。 |
metadata.ds_description | String | Body | いいえ | ジョブの説明。 例: 制限:最大 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 | オブジェクトタイプ。値は |
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_id と error_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_idをafter=batch_id内で実際の値に置き換えます。limitパラメーターに、返されるジョブの数を設定します。ds_nameにジョブ名の一部を設定します。input_file_ids の値には、複数のファイル ID を入力できます。statusに複数のバッチジョブステータスを設定します。create_afterとcreate_beforeの値に特定の時点を設定します。
入力パラメーターの設定
フィールド | タイプ | パラメーター渡し方法 | 必須 | 説明 |
after | String | Query | いいえ | ページング用のカーソルです。 たとえば、現在のクエリが 20 行のデータを返し、最後のバッチジョブ ID (last_id) が 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 | いいえ | 指定した時刻以降に作成されたジョブをフィルターします。フォーマットは |
create_before | String | Query | いいえ | この時間より前に作成されたジョブをフィルターします。フォーマットは |
レスポンス例
{
"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_idはfile-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 は、バッチジョブ詳細の照会 または バッチジョブリストの照会 によって返される |
返される結果
バッチジョブの結果の JSONL ファイル。形式の詳細については、「出力ファイル」をご参照ください。
拡張機能
課金
単価:成功したすべての入力トークンと出力トークンの単価は、対応するモデルのリアルタイム推論価格の 50% です。詳細については、「モデルリスト」をご参照ください。
課金範囲:
ジョブ内で正常に実行されたリクエストのみが課金されます。
ファイルの解析失敗、ジョブの実行失敗、または行レベルのエラーリクエストは課金されません。
キャンセルされたジョブについては、キャンセル前に正常に完了したリクエストは通常通り課金されます。
バッチ推論は別の課金項目であり、サブスクリプション (節約プラン)、新規ユーザー向けの無料クォータ、またはコンテキストキャッシュなどの機能の割引はサポートしていません。
エラーコード
呼び出しが失敗し、エラーメッセージが返された場合は、「エラーメッセージ」を参照して問題を解決してください。
よくある質問
バッチ呼び出しを使用するには注文する必要がありますか?もしそうなら、どこで?
A:バッチは呼び出し方法であり、追加の注文は必要ありません。この呼び出し方法は従量課金モデルを使用しており、バッチ API 操作の呼び出しに対して直接支払います。
送信されたバッチ呼び出しリクエストはバックグラウンドでどのように処理されますか?送信された順に実行されますか?
A:キューイングメカニズムではなく、スケジューリングメカニズムです。バッチリクエストジョブは、リソースの可用性に基づいてスケジュールされ、実行されます。
送信されたバッチ呼び出しリクエストが完了するまでに実際にかかる時間はどのくらいですか?
A:バッチジョブの実行時間は、システムのリソース割り当てに依存します。
システムリソースが逼迫している場合、設定された最大待機時間内にジョブが完全に完了しないことがあります。
したがって、モデル推論の適時性に厳しい要件があるシナリオでは、リアルタイム呼び出しを使用することを推奨します。大規模なデータの処理を伴い、適時性にある程度の許容度があるシナリオでは、バッチ呼び出しを使用することを推奨します。