次の方法で共有


Azure OpenAI Batch デプロイの入門

Azure OpenAI Batch API は、大規模で大量の処理タスクを効率的に処理するように設計されています。 個別のクォータを持つ要求の非同期グループを、24時間以内のターンアラウンドで、グローバル標準よりも50%低いコストで処理します。 バッチ処理では、一度に 1 つの要求を送信するのではなく、1 つのファイル内で多数の要求を送信します。 グローバル バッチ要求には、オンライン ワークロードの中断を回避する個別のエンキュー トークン クォータがあります。

主なユース ケースは次のとおりです。

  • 大規模なデータ処理: 広範なデータセットを並列ですばやく分析します。

  • コンテンツ生成: 製品の説明や記事など、大量のテキストを作成します。

  • ドキュメントの校閲と要約: 長いドキュメントの校閲と要約を自動化します。

  • カスタマー サポートの自動化: 多数の問い合わせを同時に処理して迅速な対応を実現します。

  • データの抽出と分析: 膨大な量の非構造化データから情報を抽出して分析します。

  • 自然言語処理 (NLP) タスク: 大規模なデータセットに対して感情分析や翻訳などのタスクを実行します。

  • マーケティングとパーソナル化: パーソナル化されたコンテンツとレコメンデーションを大規模に生成します。

ヒント

バッチ ジョブが非常に大きいため、デプロイのクォータを最大にした後でもエンキュートークンの制限に達する場合、一部のリージョンでは、指数バックオフを使用して複数のバッチ ジョブをキューに格納できる新機能がサポートされるようになりました。

エンキューされたトークン クォータが使用可能になると、次のバッチ ジョブを自動的に作成して開始できます。 詳細については、 指数バックオフを使用した大規模なバッチ ジョブの再試行の自動化に関するページを参照してください。

重要

24 時間以内にバッチ要求を処理することを目指しています。時間がかかるジョブは期限切れになりません。 ジョブはいつでもキャンセルできます。 ジョブを取り消すと、残りの作業はすべて取り消され、既に完了した作業が返されます。 完了した作業があればそれに対する課金が行われます。

保存されたデータは指定された Azure の地理的な場所に留まりますが、推論のためのデータ処理は任意の Azure OpenAI の場所で実行される可能性があります。 データ所在地の詳細を確認する。 

Batch のサポート

グローバル バッチ モデルの可用性

リージョン o32025-04-16 o4-mini2025-04-16 gpt-4.12025-04-14 gpt-4.1-nano2025-04-14 gpt-4.1-mini2025-04-14 o3-mini2025-01-31 gpt-4o2024 年 5 月 13 日 gpt-4o2024-08-06 gpt-4o2024-11-20 gpt-4o-mini2024-07-18
オーストラリアイースト
ブラジル南部
カナダ東部
イーストアス
eastus2
francecentral
ドイツ中西部
japaneast
コリアセントラル
ノースセントラルUS
norwayeast(ノルウェー東部)
polandcentral
southafricanorth
サウスセントラル
南インド
swedencentral
スイスノース
ウクサウス
西ヨーロッパ
ウェストユーエス
westus3

o3-mini にアクセスするには、登録が必要です。 詳細については、Microsoft の推論モデル ガイドを参照してください。

以下のモデルがグローバル バッチをサポートしています。

モデル バージョン 入力形式
o3-mini 2025年1月31日 テキスト
gpt-4o 2024-08-06 テキストと画像
gpt-4o-mini 2024年07月18日 テキストと画像
gpt-4o 2024年5月13日 テキストと画像

API のサポート

API バージョン
最新の GA API リリース: 2024-10-21
サポートされている最新のプレビュー API リリース: 2025-04-01-preview

Global Batch では古い API バージョンがサポートされていますが、一部のモデルでは新しいプレビュー API バージョンが必要です。 たとえば、 o3-mini は、この日付より後にリリースされたため、 2024-10-21 ではサポートされていません。 グローバル バッチを使用して新しいモデルにアクセスするには、最新のプレビュー API バージョンを使用します。

機能のサポート

現在、以下はサポートされていません。

  • Assistants API との統合。
  • Azure OpenAI On Your Data 機能との統合。

一括展開

Azure AI Foundry ポータルでは、バッチ デプロイの種類がGlobal-BatchおよびData Zone Batchとして表示されます。 Azure OpenAI のデプロイの種類の詳細については、デプロイの種類に関するガイドを参照してください。

Global-Batch デプロイ タイプが強調表示されている Azure AI Foundry ポータルのモデル デプロイ ダイアログを示すスクリーンショット。

ヒント

エンキューされたトークン クォータ が不足することによるジョブの失敗を回避するために、すべてのグローバル バッチ モデル デプロイに対して動的クォータを有効 にすることをお勧めします。 動的クォータを使用すると、追加の容量が使用可能になったときに、デプロイでより多くのクォータを日和見的に利用できます。 動的クォータがオフに設定されている場合、デプロイは、デプロイの作成時に定義されたエンキューされたトークン制限までの要求のみを処理できます。

前提条件

バッチ ファイルの準備

ファインチューニングと同様に、グローバル バッチは JSON 行 (.jsonl) 形式のファイルを使用します。 さまざまな種類のサポートされるコンテンツのファイル例を以下に示します。

入力形式

{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}

custom_id は、個々のバッチ要求の内どれが特定の応答に対応するのかを識別できるようにするために必要です。 応答は、.jsonl バッチ ファイル内で定義されている順序と同じ順序では返されません。

model 属性は、推論応答のターゲットにしたいグローバル バッチ デプロイの名前と一致するように設定する必要があります。

重要

model 属性は、推論応答のターゲットにしたいグローバル バッチ デプロイの名前と一致するように設定する必要があります。 バッチ ファイルの各行に存在するグローバル バッチ モデル デプロイ名はいずれも同じである必要があります。別のデプロイをターゲットにする場合は、別のバッチ ファイルまたはジョブでそれを行う必要があります。

パフォーマンスを最大限に高めるには、各ファイルに数行しかない多数の小さなファイルではなく、バッチ処理用に大きなファイルを送信することをお勧めします。

入力ファイルを作成する

この記事では、test.jsonl という名前のファイルを作成し、上記の標準入力コード ブロックからファイルに内容をコピーします。 グローバル バッチ デプロイ名を変更してファイルの各行に追加する必要があります。

バッチ ファイルをアップロードする

入力ファイルが準備されたら、まずファイルをアップロードして、バッチ ジョブを開始できるようにする必要があります。 ファイルのアップロードは、プログラムまたは Azure AI Foundry ポータルの両方を使用して実行できます。 この例では、ファイルを Azure OpenAI リソースに直接アップロードする方法を示します。 または、 Azure OpenAI Batch 用に Azure Blob Storage を構成することもできます。

  1. Azure AI Foundry ポータルにサインインします。

  2. グローバル バッチ モデル デプロイを利用できる Azure OpenAI リソースを選択します。

  3. [バッチ ジョブ]>[+ バッチ ジョブの作成] を選択します。

    Azure AI Foundry ポータルのバッチ ジョブ作成エクスペリエンスを示すスクリーンショット。

  4. [バッチ データ]>[ファイルのアップロード] の下のドロップダウンから >[ファイルのアップロード] を選択して前の手順で作成した test.jsonl ファイルのパスを指定 >[次へ]

    ファイルのアップロード エクスペリエンスを示すスクリーンショット。

バッチ ジョブを作成する

[作成] を選択してバッチ ジョブを開始します。

Azure AI Foundry ポータル エクスペリエンスの [バッチ ジョブの作成] のスクリーンショット。

バッチ ジョブの進行状況を追跡する

ジョブが作成されたら、最後に作成されたジョブのジョブ ID を選択することで、ジョブの進行状況を監視できます。 既定では、最後に作成したバッチ ジョブの状態ページが表示されます。

現在検証中のジョブのバッチ ジョブ ID を示すスクリーンショット。

右側のペインでジョブの状態を追跡できます。

Azure AI Foundry ポータルのバッチ ジョブ状態エクスペリエンスを示すスクリーンショット。

バッチ ジョブの出力ファイルを取得する

ジョブが完了するか、終了状態に達すると、エラー ファイルと出力ファイルが生成されます。このファイルは、下矢印アイコンが付いたそれぞれのボタンを選択して、ダウンロードして確認できます。

ダウンロード可能なバッチ ジョブの出力ファイルとエラー ファイルを示すスクリーンショット。

バッチをキャンセルする

進行中のバッチをキャンセルします。 バッチは、最大 10 分間状態 cancelling に留まった後 cancelled に変化し、出力ファイルには部分的な結果 (存在する場合) が出力されます。

Azure AI Foundry ポータルのバッチ ジョブ [キャンセル] ボタンを示すスクリーンショット。

前提条件

この記事の手順は、Jupyter Notebook で順番に実行することを意図したものです。 このため、Azure OpenAI クライアントは、例の最初に 1 回だけインスタンス化します。 順番を守らずに手順を実行したい場合は、多くの場合、その呼び出しの一環として Azure OpenAI クライアントを設定する必要が生じます。

OpenAI Python ライブラリが既にインストールされている場合でも、以下のようにインストールを最新バージョンにアップグレードする必要があるかもしれません。

!pip install openai --upgrade

バッチ ファイルの準備

ファインチューニングと同様に、グローバル バッチは JSON 行 (.jsonl) 形式のファイルを使用します。 さまざまな種類のサポートされるコンテンツのファイル例を以下に示します。

入力形式

{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}

custom_id は、個々のバッチ要求の内どれが特定の応答に対応するのかを識別できるようにするために必要です。 応答は、.jsonl バッチ ファイル内で定義されている順序と同じ順序では返されません。

model 属性は、推論応答のターゲットにしたいグローバル バッチ デプロイの名前と一致するように設定する必要があります。

重要

model 属性は、推論応答のターゲットにしたいグローバル バッチ デプロイの名前と一致するように設定する必要があります。 バッチ ファイルの各行に存在するグローバル バッチ モデル デプロイ名はいずれも同じである必要があります。別のデプロイをターゲットにする場合は、別のバッチ ファイルまたはジョブでそれを行う必要があります。

パフォーマンスを最大限に高めるには、各ファイルに数行しかない多数の小さなファイルではなく、バッチ処理用に大きなファイルを送信することをお勧めします。

入力ファイルを作成する

この記事では、test.jsonl という名前のファイルを作成し、上記の標準入力コード ブロックからそのファイルに内容をコピーします。 グローバル バッチ デプロイ名を変更してファイルの各行に追加する必要があります。 このファイルは、Jupyter Notebook を実行しているのと同じディレクトリに保存します。

バッチ ファイルをアップロードする

入力ファイルが準備されたら、まずファイルをアップロードして、バッチ ジョブを開始できるようにする必要があります。 ファイルのアップロードは、プログラムまたは Azure AI Foundry ポータルの両方を使用して実行できます。 この例では、ファイルを Azure OpenAI リソースに直接アップロードする方法を示します。 または、 Azure OpenAI Batch 用に Azure Blob Storage を構成することもできます。

import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  azure_ad_token_provider=token_provider,
  api_version="2025-04-01-preview"
)

# Upload a file with a purpose of "batch"
file = client.files.create(
  file=open("test.jsonl", "rb"), 
  purpose="batch",
  extra_body={"expires_after":{"seconds": 1209600, "anchor": "created_at"}} # Optional you can set to a number between 1209600-2592000. This is equivalent to 14-30 days
)


print(file.model_dump_json(indent=2))

print(f"File expiration: {datetime.fromtimestamp(file.expires_at) if file.expires_at is not None else 'Not set'}")

file_id = file.id

コメントを解除して extra_body={"expires_after":{"seconds": 1209600, "anchor": "created_at"}} を追加すると、アップロード ファイルの有効期限が 14 日後に切れるよう設定されます。 有効期限が設定されていない場合、リソースごとに 500 個のバッチ ファイルの上限があります。 有効期限の値を設定すると、リソースあたりのバッチ ファイル数がリソースあたり 10,000 ファイルに増やされます。

出力:

{
  "id": "file-655111ec9cfc44489d9af078f08116ef",
  "bytes": 176064,
  "created_at": 1743391067,
  "filename": "test.jsonl",
  "object": "file",
  "purpose": "batch",
  "status": "processed",
  "expires_at": 1744600667,
  "status_details": null
}
File expiration: 2025-04-13 23:17:47

バッチ ジョブを作成する

ファイルが正常にアップロードされたら、バッチ処理のためにファイルを送信できます。

# Submit a batch job with the file
batch_response = client.batches.create(
    input_file_id=file_id,
    endpoint="/chat/completions",
    completion_window="24h",
    extra_body={"output_expires_after":{"seconds": 1209600, "anchor": "created_at"}} # Optional you can set to a number between 1209600-2592000. This is equivalent to 14-30 days
)


# Save batch ID for later use
batch_id = batch_response.id

print(batch_response.model_dump_json(indent=2))

リソースあたりの既定の 500 個の最大ファイル制限は、出力ファイルにも適用されます。 ここでは、出力ファイルの有効期限が 14 日以内になるように、この行のコメントを解除して extra_body={"output_expires_after":{"seconds": 1209600, "anchor": "created_at"}} を追加できます。 有効期限の値を設定すると、リソースあたりのバッチ ファイル数がリソースあたり 10,000 ファイルに増やされます。

現在、完了ウィンドウは 24hに設定する必要があります。 24h以外の値を設定すると、ジョブは失敗します。 24 時間を超えるジョブは、取り消されるまで引き続き実行されます。

出力:

{
  "id": "batch_6caaf24d-54a5-46be-b1b7-518884fcbdde",
  "completion_window": "24h",
  "created_at": 1722476583,
  "endpoint": null,
  "input_file_id": "file-655111ec9cfc44489d9af078f08116ef",
  "object": "batch",
  "status": "validating",
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "error_file_id": null,
  "errors": null,
  "expired_at": null,
  "expires_at": 1722562983,
  "failed_at": null,
  "finalizing_at": null,
  "in_progress_at": null,
  "metadata": null,
  "output_file_id": null,
  "request_counts": {
    "completed": 0,
    "failed": 0,
    "total": 0
  }
}

バッチ ジョブが非常に大きいため、デプロイのクォータを上限に達した後でもエンキュートークンの制限に達する場合、一部のリージョンでは、指数バックオフを使用して複数のバッチ ジョブをキューに格納できる新しい 失敗高速 機能がサポートされるようになりました。そのため、1 つの大きなバッチ ジョブが完了したら、次のジョブを自動的に開始できます。 この機能をサポートするリージョンと、それを利用するようにコードを調整する方法の詳細については、 バッチ ジョブのキューを参照してください。

バッチ ジョブの進行状況を追跡する

バッチ ジョブを正常に作成したら、Studio またはプログラムで進行状況を監視できます。 バッチ ジョブの進行状況を確認するときは、各状態呼び出しの間に少なくとも 60 秒待機することをお勧めします。

import time
import datetime 

status = "validating"
while status not in ("completed", "failed", "canceled"):
    time.sleep(60)
    batch_response = client.batches.retrieve(batch_id)
    status = batch_response.status
    print(f"{datetime.datetime.now()} Batch Id: {batch_id},  Status: {status}")

if batch_response.status == "failed":
    for error in batch_response.errors.data:  
        print(f"Error code {error.code} Message {error.message}")

出力:

2024-07-31 21:48:32.556488 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: validating
2024-07-31 21:49:39.221560 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: in_progress
2024-07-31 21:50:53.383138 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: in_progress
2024-07-31 21:52:07.274570 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: in_progress
2024-07-31 21:53:21.149501 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:54:34.572508 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:55:35.304713 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:56:36.531816 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:57:37.414105 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: completed

以下の状態の値があり得ます。

地位 説明
validating バッチ処理を開始する前に、入力ファイルの検証が行われています。
failed 入力ファイルが検証プロセスに失敗しました。
in_progress 入力ファイルの検証が成功し、バッチが現在実行中です。
finalizing 処理が完了し、結果の準備が進んでいます。
completed バッチが完了し、結果の準備が整いました。
expired バッチを 24 時間の時間枠内で完了できませんでした。
cancelling バッチが cancelled されています (これが有効になるには最大で 10 分かかる場合があります。)
cancelled バッチは cancelled です。

ジョブ状態の詳細を確認するには、次のコマンドを実行します。

print(batch_response.model_dump_json(indent=2))

出力:

{
  "id": "batch_6caaf24d-54a5-46be-b1b7-518884fcbdde",
  "completion_window": "24h",
  "created_at": 1722476583,
  "endpoint": null,
  "input_file_id": "file-9f3a81d899b4442f98b640e4bc3535dd",
  "object": "batch",
  "status": "completed",
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": 1722477429,
  "error_file_id": "file-c795ae52-3ba7-417d-86ec-07eebca57d0b",
  "errors": null,
  "expired_at": null,
  "expires_at": 1722562983,
  "failed_at": null,
  "finalizing_at": 1722477177,
  "in_progress_at": null,
  "metadata": null,
  "output_file_id": "file-3304e310-3b39-4e34-9f1c-e1c1504b2b2a",
  "request_counts": {
    "completed": 3,
    "failed": 0,
    "total": 3
  }
}

error_file_id と個別の output_file_id の両方があることを確認します。 error_file_id を使用して、バッチ ジョブで発生する問題のデバッグを支援します。

バッチ ジョブの出力ファイルを取得する

import json

output_file_id = batch_response.output_file_id

if not output_file_id:
    output_file_id = batch_response.error_file_id

if output_file_id:
    file_response = client.files.content(output_file_id)
    raw_responses = file_response.text.strip().split('\n')  

    for raw_response in raw_responses:  
        json_response = json.loads(raw_response)  
        formatted_json = json.dumps(json_response, indent=2)  
        print(formatted_json)

出力:

簡潔にするために、出力の 1 つのチャット完了応答のみを含めます。 この記事の手順に従うと、以下に類似する応答が 3 つ得られるはずです。

{
  "custom_id": "task-0",
  "response": {
    "body": {
      "choices": [
        {
          "content_filter_results": {
            "hate": {
              "filtered": false,
              "severity": "safe"
            },
            "self_harm": {
              "filtered": false,
              "severity": "safe"
            },
            "sexual": {
              "filtered": false,
              "severity": "safe"
            },
            "violence": {
              "filtered": false,
              "severity": "safe"
            }
          },
          "finish_reason": "stop",
          "index": 0,
          "logprobs": null,
          "message": {
            "content": "Microsoft was founded on April 4, 1975, by Bill Gates and Paul Allen in Albuquerque, New Mexico.",
            "role": "assistant"
          }
        }
      ],
      "created": 1722477079,
      "id": "chatcmpl-9rFGJ9dh08Tw9WRKqaEHwrkqRa4DJ",
      "model": "gpt-4o-2024-05-13",
      "object": "chat.completion",
      "prompt_filter_results": [
        {
          "prompt_index": 0,
          "content_filter_results": {
            "hate": {
              "filtered": false,
              "severity": "safe"
            },
            "jailbreak": {
              "filtered": false,
              "detected": false
            },
            "self_harm": {
              "filtered": false,
              "severity": "safe"
            },
            "sexual": {
              "filtered": false,
              "severity": "safe"
            },
            "violence": {
              "filtered": false,
              "severity": "safe"
            }
          }
        }
      ],
      "system_fingerprint": "fp_a9bfe9d51d",
      "usage": {
        "completion_tokens": 24,
        "prompt_tokens": 27,
        "total_tokens": 51
      }
    },
    "request_id": "660b7424-b648-4b67-addc-862ba067d442",
    "status_code": 200
  },
  "error": null
}

その他のバッチ コマンド

バッチをキャンセルする

進行中のバッチをキャンセルします。 バッチは、最大 10 分間状態 cancelling に留まった後 cancelled に変化し、出力ファイルには部分的な結果 (存在する場合) が出力されます。

client.batches.cancel("batch_abc123") # set to your batch_id for the job you want to cancel

バッチを一覧表示する

特定の Azure OpenAI リソースのバッチ ジョブを一覧表示します。

client.batches.list()

Python ライブラリのリスト メソッドでは、改ページされます。

すべてのジョブを一覧表示するには:

all_jobs = []
# Automatically fetches more pages as needed.
for job in client.batches.list(
    limit=20,
):
    # Do something with job here
    all_jobs.append(job)
print(all_jobs)

バッチの一覧表示 (プレビュー)

REST API を使用して、追加の並べ替え/フィルター処理オプションとともにすべてのバッチ ジョブを一覧表示します。

次の例では、フィルターの構築を容易にする generate_time_filter 関数を提供しています。 この関数を使用しない場合、フィルター文字列の形式は created_at gt 1728860560 and status eq 'Completed' のようになります。

import requests
import json
from datetime import datetime, timedelta
from azure.identity import DefaultAzureCredential

token_credential = DefaultAzureCredential()
token = token_credential.get_token('https://cognitiveservices.azure.com/.default')

endpoint = "https://{YOUR_RESOURCE_NAME}.openai.azure.com/"
api_version = "2025-03-01-preview"
url = f"{endpoint}openai/batches"
order = "created_at asc"
time_filter =  lambda: generate_time_filter("past 8 hours")

# Additional filter examples:
#time_filter =  lambda: generate_time_filter("past 1 day")
#time_filter =  lambda: generate_time_filter("past 3 days", status="Completed")

def generate_time_filter(time_range, status=None):
    now = datetime.now()
    
    if 'day' in time_range:
        days = int(time_range.split()[1])
        start_time = now - timedelta(days=days)
    elif 'hour' in time_range:
        hours = int(time_range.split()[1])
        start_time = now - timedelta(hours=hours)
    else:
        raise ValueError("Invalid time range format. Use 'past X day(s)' or 'past X hour(s)'")
    
    start_timestamp = int(start_time.timestamp())
    
    filter_string = f"created_at gt {start_timestamp}"
    
    if status:
        filter_string += f" and status eq '{status}'"
    
    return filter_string

filter = time_filter()

headers = {'Authorization': 'Bearer ' + token.token}

params = {
    "api-version": api_version,
    "$filter": filter,
    "$orderby": order
}

response = requests.get(url, headers=headers, params=params)

json_data = response.json()

if response.status_code == 200:
    print(json.dumps(json_data, indent=2))
else:
    print(f"Request failed with status code: {response.status_code}")
    print(response.text)  

出力:

{
  "data": [
    {
      "cancelled_at": null,
      "cancelling_at": null,
      "completed_at": 1729011896,
      "completion_window": "24h",
      "created_at": 1729011128,
      "error_file_id": "file-472c0626-4561-4327-9e4e-f41afbfb30e6",
      "expired_at": null,
      "expires_at": 1729097528,
      "failed_at": null,
      "finalizing_at": 1729011805,
      "id": "batch_4ddc7b60-19a9-419b-8b93-b9a3274b33b5",
      "in_progress_at": 1729011493,
      "input_file_id": "file-f89384af0082485da43cb26b49dc25ce",
      "errors": null,
      "metadata": null,
      "object": "batch",
      "output_file_id": "file-62bebde8-e767-4cd3-a0a1-28b214dc8974",
      "request_counts": {
        "total": 3,
        "completed": 2,
        "failed": 1
      },
      "status": "completed",
      "endpoint": "/chat/completions"
    },
    {
      "cancelled_at": null,
      "cancelling_at": null,
      "completed_at": 1729016366,
      "completion_window": "24h",
      "created_at": 1729015829,
      "error_file_id": "file-85ae1971-9957-4511-9eb4-4cc9f708b904",
      "expired_at": null,
      "expires_at": 1729102229,
      "failed_at": null,
      "finalizing_at": 1729016272,
      "id": "batch_6287485f-50fc-4efa-bcc5-b86690037f43",
      "in_progress_at": 1729016126,
      "input_file_id": "file-686746fcb6bc47f495250191ffa8a28e",
      "errors": null,
      "metadata": null,
      "object": "batch",
      "output_file_id": "file-04399828-ae0b-4825-9b49-8976778918cb",
      "request_counts": {
        "total": 3,
        "completed": 2,
        "failed": 1
      },
      "status": "completed",
      "endpoint": "/chat/completions"
    }
  ],
  "first_id": "batch_4ddc7b60-19a9-419b-8b93-b9a3274b33b5",
  "has_more": false,
  "last_id": "batch_6287485f-50fc-4efa-bcc5-b86690037f43"
}

バッチ ジョブをキューに入れる

バッチ ジョブが非常に大きいため、デプロイのクォータを上限に達した後でもエンキューされたトークンの制限に達する場合、一部のリージョンでは、指数バックオフを使用して複数のバッチ ジョブをキューに登録できる新しいフェイル ファスト機能がサポートされるようになりました。 1 つの大規模なバッチ ジョブが完了し、エンキューされたトークン クォータが再び使用可能になったら、次のバッチ ジョブを自動的に作成して開始できます。

以前の動作:

  1. 大規模な Batch ジョブは既に実行されており、デプロイで使用可能なすべてのトークンを使用しています。
  2. 新しいバッチ処理が送信されました。
  3. 新しいバッチ ジョブは検証フェーズに入り、最大で数分続く可能性があります。
  4. 新しいジョブのためのトークン数が、現在利用可能なクォータに対して確認されます。
  5. 新しいバッチ ジョブが失敗し、エラー報告トークンの制限を超えました。

新しい動作:

  1. 大規模な Batch ジョブが既に実行されており、デプロイで使用可能なすべてのトークンを使用している
  2. 新しいバッチ処理が送信されました
  3. 新しいジョブのおおよそのトークン数が現在利用可能なバッチ クォータと迅速に比較され、ジョブがすぐに失敗するため、プログラムによって簡単に再試行を処理できます。

リージョンのサポート

次のリージョンが新しいフェイルファスト機能をサポートしています。

  • オーストラリアイースト
  • イーストアス
  • ドイツ中西部
  • italynorth
  • ノースセントラルUS
  • polandcentral
  • swedencentral
  • スイスノース
  • eastus2
  • ウェストユーエス

次のコードは、指数バックオフを使用して再試行とバッチ ジョブ キューを自動化できるように、失敗した高速動作を処理する基本的な仕組みを示しています。

バッチ ジョブのサイズによっては、 max_retries を大幅に増やすか、この例をさらに変更する必要があります。

import time
from openai import BadRequestError

max_retries = 10
retries = 0
initial_delay = 5
delay = initial_delay

while True:
    try:
        batch_response = client.batches.create(
            input_file_id=file_id,
            endpoint="/chat/completions",
            completion_window="24h",
        )
        
        # Save batch ID for later use
        batch_id = batch_response.id
        
        print(f"✅ Batch created successfully after {retries} retries")
        print(batch_response.model_dump_json(indent=2))
        break  
        
    except BadRequestError as e:
        error_message = str(e)
        
        # Check if it's a token limit error
        if 'token_limit_exceeded' in error_message:
            retries += 1
            if retries >= max_retries:
                print(f"❌ Maximum retries ({max_retries}) reached. Giving up.")
                raise
            
            print(f"⏳ Token limit exceeded. Waiting {delay} seconds before retry {retries}/{max_retries}...")
            time.sleep(delay)
            
            # Exponential backoff - increase delay for next attempt
            delay *= 2
        else:
            # If it's a different error, raise it immediately
            print(f"❌ Encountered non-token limit error: {error_message}")
            raise

出力:

⏳ Token limit exceeded. Waiting 5 seconds before retry 1/10...
⏳ Token limit exceeded. Waiting 10 seconds before retry 2/10...
⏳ Token limit exceeded. Waiting 20 seconds before retry 3/10...
⏳ Token limit exceeded. Waiting 40 seconds before retry 4/10...
⏳ Token limit exceeded. Waiting 80 seconds before retry 5/10...
⏳ Token limit exceeded. Waiting 160 seconds before retry 6/10...
⏳ Token limit exceeded. Waiting 320 seconds before retry 7/10...
✅ Batch created successfully after 7 retries
{
  "id": "batch_1e1e7b9f-d4b4-41fa-bd2e-8d2ec50fb8cc",
  "completion_window": "24h",
  "created_at": 1744402048,
  "endpoint": "/chat/completions",
  "input_file_id": "file-e2ba4ccaa4a348e0976c6fe3c018ea92",
  "object": "batch",
  "status": "validating",
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "error_file_id": "",
  "errors": null,
  "expired_at": null,
  "expires_at": 1744488444,
  "failed_at": null,
  "finalizing_at": null,
  "in_progress_at": null,
  "metadata": null,
  "output_file_id": "",
  "request_counts": {
    "completed": 0,
    "failed": 0,
    "total": 0
  }
}

前提条件

バッチ ファイルの準備

ファインチューニングと同様に、グローバル バッチは JSON 行 (.jsonl) 形式のファイルを使用します。 さまざまな種類のサポートされるコンテンツのファイル例を以下に示します。

入力形式

{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}

custom_id は、個々のバッチ要求の内どれが特定の応答に対応するのかを識別できるようにするために必要です。 応答は、.jsonl バッチ ファイル内で定義されている順序と同じ順序では返されません。

model 属性は、推論応答のターゲットにしたいグローバル バッチ デプロイの名前と一致するように設定する必要があります。

重要

model 属性は、推論応答のターゲットにしたいグローバル バッチ デプロイの名前と一致するように設定する必要があります。 バッチ ファイルの各行に存在するグローバル バッチ モデル デプロイ名はいずれも同じである必要があります。別のデプロイをターゲットにする場合は、別のバッチ ファイルまたはジョブでそれを行う必要があります。

パフォーマンスを最大限に高めるには、各ファイルに数行しかない多数の小さなファイルではなく、バッチ処理用に大きなファイルを送信することをお勧めします。

入力ファイルを作成する

この記事では、test.jsonl という名前のファイルを作成し、上記の標準入力コード ブロックからそのファイルに内容をコピーします。 グローバル バッチ デプロイ名を変更してファイルの各行に追加する必要があります。

バッチ ファイルをアップロードする

入力ファイルが準備されたら、まずファイルをアップロードして、バッチ ジョブを開始できるようにする必要があります。 ファイルのアップロードは、プログラムまたは Azure AI Foundry ポータルの両方を使用して実行できます。 この例では、ファイルを Azure OpenAI リソースに直接アップロードする方法を示します。 または、 Azure OpenAI Batch 用に Azure Blob Storage を構成することもできます。

重要

API キーは慎重に使用してください。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。 API キーを使う場合は、Azure Key Vault に格納してセキュリティで保護してください。 アプリで API キーを安全に使用する方法の詳細については、Azure Key Vault を使用した API キーに関する記事を参照してください。

AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files?api-version=2025-03-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=batch" \
  -F "file=@C:\\batch\\test.jsonl;type=application/json" \
  -F "expires_after.seconds=1209600" \
  -F "expires_after.anchor=created_at"

上記のコードでは、test.jsonl ファイルの特定のファイル パスを想定しています。 ローカル システムでの必要性に応じて、このファイル パスを調整してください。

オプションの "expires_after.seconds=1209600""expires_after.anchor=created_at" パラメーターを追加することで、アップロード ファイルを 14 日以内に期限切れに設定します。 有効期限が設定されていない場合、リソースごとに 500 個のバッチ ファイルの上限があります。 有効期限の値を設定すると、リソースあたりのバッチ ファイル数がリソースあたり 10,000 ファイルに増やされます。 1209600 から 2592000 までの数値を設定できます。 これは 14 ~ 30 日に相当します。

出力:

{
  "status": "processed",
  "bytes": 817,
  "purpose": "batch",
  "filename": "test.jsonl",
  "expires_at": 1744607747,
  "id": "file-7733bc35e32841e297a62a9ee50b3461",
  "created_at": 1743398147,
  "object": "file"
}

ファイル アップロード状態を追跡する

アップロード ファイルのサイズによっては、完全にアップロードされて処理されるのに時間がかかる場合があります。 ファイル アップロード状態を確認するには、次を実行します。

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{file-id}?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

出力:

{
  "status": "processed",
  "bytes": 686,
  "purpose": "batch",
  "filename": "test.jsonl",
  "expires_at": 1744607747,
  "id": "file-7733bc35e32841e297a62a9ee50b3461",
  "created_at": 1721408291,
  "object": "file"
}

バッチ ジョブを作成する

ファイルが正常にアップロードされたら、バッチ処理のためにファイルを送信できます。

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input_file_id": "file-abc123",
    "endpoint": "/chat/completions",
    "completion_window": "24h",
    "output_expires_after": {
        "seconds": 1209600
    },
    "anchor": "created_at"
  }'

リソースあたりの既定の 500 個の最大ファイル制限は、出力ファイルにも適用されます。 ここでは、必要に応じて "output_expires_after":{"seconds": 1209600},"anchor": "created_at" を追加して、出力ファイルの有効期限が 14 日以内になるようにすることができます。 有効期限の値を設定すると、リソースあたりのバッチ ファイル数がリソースあたり 10,000 ファイルに増やされます。

現在、完了ウィンドウは 24hに設定する必要があります。 24h以外の値を設定すると、ジョブは失敗します。 24 時間を超えるジョブは、取り消されるまで引き続き実行されます。

出力:

{
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "completion_window": "24h",
  "created_at": "2024-07-19T17:13:57.2491382+00:00",
  "error_file_id": null,
  "expired_at": null,
  "expires_at": "2024-07-20T17:13:57.1918498+00:00",
  "failed_at": null,
  "finalizing_at": null,
  "id": "batch_fe3f047a-de39-4068-9008-346795bfc1db",
  "in_progress_at": null,
  "input_file_id": "file-21006e70789246658b86a1fc205899a4",
  "errors": null,
  "metadata": null,
  "object": "batch",
  "output_file_id": null,
  "request_counts": {
    "total": null,
    "completed": null,
    "failed": null
  },
  "status": "Validating"
}

バッチ ジョブの進行状況を追跡する

バッチ ジョブを正常に作成したら、Studio またはプログラムで進行状況を監視できます。 バッチ ジョブの進行状況を確認するときは、各状態呼び出しの間に少なくとも 60 秒待機することをお勧めします。

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

出力:

{
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "completion_window": "24h",
  "created_at": "2024-07-19T17:33:29.1619286+00:00",
  "error_file_id": null,
  "expired_at": null,
  "expires_at": "2024-07-20T17:33:29.1578141+00:00",
  "failed_at": null,
  "finalizing_at": null,
  "id": "batch_e0a7ee28-82c4-46a2-a3a0-c13b3c4e390b",
  "in_progress_at": null,
  "input_file_id": "file-c55ec4e859d54738a313d767718a2ac5",
  "errors": null,
  "metadata": null,
  "object": "batch",
  "output_file_id": null,
  "request_counts": {
    "total": null,
    "completed": null,
    "failed": null
  },
  "status": "Validating"
}

以下の状態の値があり得ます。

地位 説明
validating バッチ処理を開始する前に、入力ファイルの検証が行われています。
failed 入力ファイルが検証プロセスに失敗しました。
in_progress 入力ファイルの検証が成功し、バッチが現在実行中です。
finalizing 処理が完了し、結果の準備が進んでいます。
completed バッチが完了し、結果の準備が整いました。
expired バッチを 24 時間の時間枠内で完了できませんでした。
cancelling バッチが cancelled を処理中です (これが有効になるには最大で 10 分かかる場合があります。)
cancelled バッチは cancelled です。

バッチ ジョブの出力ファイルを取得する

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{output_file_id}/content?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" > batch_output.jsonl

その他のバッチ コマンド

バッチをキャンセルする

進行中のバッチをキャンセルします。 バッチは、最大 10 分間状態 cancelling に留まった後 cancelled に変化し、出力ファイルには部分的な結果 (存在する場合) が出力されます。

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}/cancel?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

バッチを一覧表示する

特定の Azure OpenAI リソースの既存のバッチ ジョブを一覧表示します。

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

リスト API 呼び出しでは、改ページされます。 応答には、反復処理する、より多くの結果があることを示すブール値 has_more が含まれます。

バッチの一覧表示 (プレビュー)

REST API を使用して、追加の並べ替え/フィルター処理オプションとともにすべてのバッチ ジョブを一覧表示します。

curl "YOUR_RESOURCE_NAME.openai.azure.com/batches?api-version=2025-03-01-preview&$filter=created_at%20gt%201728773533%20and%20created_at%20lt%201729032733%20and%20status%20eq%20'Completed'&$orderby=created_at%20asc" \
  -H "api-key: $AZURE_OPENAI_API_KEY"

URL rejected: Malformed input to a URL function エラーを回避するために、スペースが %20 に置き換えられます。

バッチの制限

制限名 制限値
リソースあたりの最大ファイル数 500
最大入力ファイル サイズ 200 MB
ファイルあたりの最大要求数 100,000

バッチ クォータ

次の表はバッチのクォータ制限を示したものです。 グローバル バッチのクォータ値は、エンキューされたトークンの数で表されます。 バッチ処理用のファイルを送信すると、ファイル内に存在するトークンの数がカウントされます。 バッチジョブが最終状態に達するまで、これらのトークンはエンキューされたトークンの合計制限に対して計上されます。

グローバルバッチ

モデル エンタープライズ契約 既定値 月単位のクレジット カード ベースのサブスクリプション MSDN サブスクリプション Microsoft Azure for Students、無料試用版
gpt-4.1 5 B 200メートル 50メートル 90 K 該当なし
gpt-4.1 mini 15 B 1 B 50 M 90k 該当なし
gpt-4.1-nano 15 B 1 B 50メートル 90 K 該当なし
gpt-4o 5 B 200メートル 50メートル 90 K 該当なし
gpt-4o-mini 15 B 1 B 50メートル 90 K 該当なし
gpt-4-turbo 300 メートル 80百万 40 M 90 K 該当なし
gpt-4 150 M 30 M 5百万 100 キロ 該当なし
gpt-35-turbo 10 B 1 B 100 M 2メガ 5万
o3-mini 15 B 1 B 50メートル 90 K 該当なし
o4-mini 15 B 1 B 50メートル 90 K 該当なし

B = 10 億 | M = 100万 | K = 1,000

データ ゾーン バッチ

モデル エンタープライズ契約 既定値 月単位のクレジット カード ベースのサブスクリプション MSDN サブスクリプション Microsoft Azure for Students、無料試用版
gpt-4.1 500メートル 30 M 30 M 90 K 該当なし
gpt-4.1-mini 1.5 B 100 M 50メートル 90 K 該当なし
gpt-4o 500メートル 30 M 30 M 90 K 該当なし
gpt-4o-mini 1.5 B 100 M 50メートル 90 K 該当なし
o3-mini 1.5 B 100 M 50メートル 90 K 該当なし

バッチ オブジェクト

プロパティ 定義
id ひも
object ひも batch
endpoint ひも バッチによって使用される API エンドポイント
errors オブジェクト
input_file_id ひも バッチの入力ファイルの ID
completion_window ひも バッチを処理する時間枠
status ひも バッチの現在の状態。 指定できる値: validatingfailedin_progressfinalizingcompletedexpiredcancellingcancelled
output_file_id ひも 正常に実行された要求の出力を含むファイルの ID。
error_file_id ひも エラーが発生した要求の出力を含むファイルの ID。
created_at 整数 このバッチが作成された時点のタイムスタンプ(UNIXエポック)。
in_progress_at 整数 このバッチが進行状態になった時点のタイムスタンプ (UNIX エポック)。
expires_at 整数 このバッチの有効期限が切れる時点のタイムスタンプ (unix エポック)。
finalizing_at 整数 このバッチが終了処理を開始した時点のタイムスタンプ (UNIX エポック)。
completed_at 整数 このバッチが終了処理を開始した時点のタイムスタンプ (UNIX エポック)。
failed_at 整数 このバッチが失敗した時点のタイムスタンプ (unix エポック)
expired_at 整数 このバッチの有効期限が切れた時点のタイムスタンプ (unix エポック)。
cancelling_at 整数 このバッチが cancelling を開始した時点のタイムスタンプ (unix エポック)。
cancelled_at 整数 このバッチが cancelled された時点のタイムスタンプ (unix エポック)。
request_counts オブジェクト オブジェクト構造:

total整数
バッチ内の要求の合計数。
completed整数
バッチ内で正常に完了した要求の数。
failed整数
バッチ内の失敗した要求の数。
metadata 地図 バッチにアタッチできるキーと値のペアのセット。 これは、バッチに関する追加情報を構造化された形式で保存する上で役立ちます。

よく寄せられる質問 (FAQ)

バッチ API では画像を使用できますか?

この機能は、一部のマルチモーダル モデルに限定されます。 現在、バッチ要求の一部として画像をサポートしているのは GPT-4o だけです。 画像は、画像 URL または画像の base64 エンコード表現のどちらかを介して入力として指定できます。 バッチでの画像は、GPT-4 Turbo では現在サポートされていません。

ファインチューニングされたモデルでバッチ API を使用できますか?

現在これはサポートされていません。

埋め込みモデルに対してバッチ API を使用できますか?

現在これはサポートされていません。

コンテンツ フィルタリングはグローバル バッチ デプロイで機能しますか?

はい。 他のデプロイ タイプと同様に、コンテンツ フィルターを作成し、それらをグローバル バッチ デプロイ タイプに関連付けることができます。

追加のクォータを要求できますか?

はい。 Azure AI Foundry ポータルのクォータ ページから。 既定のクォータ割り当ては、クォータと制限に関する記事で確認できます。

API が 24 時間の時間枠内に要求を完了しなかった場合は何が起きますか?

Microsoft はこれらの要求を 24 時間以内に処理することを目指します。それ以上の時間がかかるジョブを期限切れにすることはありません。 作業はいつでもキャンセルできます。 ジョブを取り消すと、残りの作業はすべて取り消され、既に完了した作業が返されます。 完了した作業があればそれに対する課金が行われます。

バッチを使用してエンキューできる要求の数はいくつですか?

バッチ処理できる要求の数には固定の制限はなく、この数はエンキューされたトークン クォータによって決まります。 エンキューされたトークン クォータには、一度にエンキューできる入力トークンの最大数が含まれます。

バッチ要求が完了すると、入力トークンがクリアされるため、バッチ レート制限がリセットされます。 この制限は、キュー内のグローバル要求の数によって決まります。 Batch API キューがバッチを迅速に処理する場合、バッチ レート制限はより迅速にリセットされます。

トラブルシューティング

statusCompleted である場合、ジョブは成功しています。 成功したジョブが error_file_id を生成することもありますが、これは 0 バイトの空ファイルに関連付けられます。

ジョブの失敗が発生した場合は、以下のように errors プロパティ内で失敗の詳細を確認できます。

"value": [
        {
          "id": "batch_80f5ad38-e05b-49bf-b2d6-a799db8466da",
          "completion_window": "24h",
          "created_at": 1725419394,
          "endpoint": "/chat/completions",
          "input_file_id": "file-c2d9a7881c8a466285e6f76f6321a681",
          "object": "batch",
          "status": "failed",
          "cancelled_at": null,
          "cancelling_at": null,
          "completed_at": 1725419955,
          "error_file_id": "file-3b0f9beb-11ce-4796-bc31-d54e675f28fb",
          "errors": {
                "object": “list”,
                "data": [
                {
               "code": "empty_file",
               "message": "The input file is empty. Please ensure that the batch contains at least one   request."
                    }
                ]
          },
          "expired_at": null,
          "expires_at": 1725505794,
          "failed_at": null,
          "finalizing_at": 1725419710,
          "in_progress_at": 1725419572,
          "metadata": null,
          "output_file_id": "file-ef12af98-dbbc-4d27-8309-2df57feed572",

            "request_counts": {
                "total": 10,
                "completed": null,
                "failed": null
            },
        }

エラー コード

エラー コード 定義
invalid_json_line 入力ファイル内の 1 つ (または複数) の行が有効な JSON として解析できませんでした。

JSON 標準に従って入力ミス、適切な開始角かっこ、終わり角かっこ、引用符がないことを確認し、要求を再送信してください。
too_many_tasks 入力ファイル内の要求の数が、許容される最大値である 100,000 を超えています。

要求の合計が 100,000 以下であることを確認し、ジョブを再送信してください。
url_mismatch 入力ファイル内に他の行と一致しない URL を持つ行が存在するか、入力ファイル内で指定された URL が想定されるエンドポイント URL と一致しません。

すべての要求 URL が同じであり、それが Azure OpenAI デプロイに関連付けられているエンドポイント URL と一致することを確認してください。
model_not_found 入力ファイルの model プロパティで指定された Azure OpenAI モデルのデプロイ名が見つかりませんでした。

この名前が有効な Azure OpenAI モデル デプロイを指していることを確認してください。
duplicate_custom_id この要求のカスタム ID は、別の要求のカスタム ID と重複しています。
empty_batch 入力ファイルをチェックして、バッチ内の各要求のカスタム ID パラメーターが一意であることを確認してください。
model_mismatch 入力ファイルのこの要求の model プロパティで指定された Azure OpenAI モデルのデプロイ名が、ファイルの残りの部分のものと一致しません。

要求のmodel プロパティで、バッチ内のすべての要求が同じ Azure AI Foundry Models のモデル展開における Azure OpenAI を指していることを確認してください。
invalid_request 入力行のスキーマが無効であるか、デプロイ SKU が無効です。

入力ファイル内の要求のプロパティが想定される入力プロパティと一致していること、および Azure OpenAI デプロイ SKU がバッチ API 要求に対する globalbatch であることを確認してください。
input_modified バッチ ジョブが送信された後、BLOB 入力が変更されました。
input_no_permissions 入力 BLOB にアクセスすることはできません。 Azure OpenAI アカウントと Azure Storage アカウントの間の アクセス許可 とネットワーク アクセスを確認してください。

既知の問題

  • Azure CLI を使用してデプロイされたリソースは、そのままでは Azure OpenAI グローバル バッチで機能しません。 この原因は、このメソッドを使用してデプロイされたリソースは https://your-resource-name.openai.azure.com パターンに従わないエンドポイント サブドメインを持つという問題にあります。 この問題の回避策は、デプロイ プロセスの一環としてサブドメインのセットアップを適切に処理する他の一般的なデプロイ方法のいずれかを使用して、新しい Azure OpenAI リソースをデプロイすることです。

  • UTF-8-BOM でエンコードされた jsonl ファイルはサポートされていません。 JSON 行ファイルは UTF-8 を使用してエンコードする必要があります。 バイトOrder-Mark (BOM) でエンコードされたファイルの使用は、JSON RFC 仕様では正式にはサポートされていません。現在、Azure OpenAI では BOM でエンコードされたファイルが無効として扱われます。 現在、UTF-8-BOM でエンコードされたファイルは、"検証に失敗しました: 有効なモデル デプロイ名を入力ファイルから抽出できませんでした" という一般的なエラー メッセージを返します。 入力ファイルの各行に、'model' フィールドで指定された有効なデプロイ名があり、デプロイ名がすべての行で一貫していることを確認してください。"

関連項目