Első lépések az Azure OpenAI köteges üzembe helyezésével kapcsolatban

A Azure OpenAI Batch API hatékonyan kezeli a nagy léptékű és nagy mennyiségű feldolgozási feladatokat. A kérések aszinkron csoportjait külön kvótával dolgozza fel, és 24 órás célfordulót kínál 50% alacsonyabb költség mellett, mint a globális szabvány. A kötegelt feldolgozással nagy számú kérést küldhet egyetlen fájlba ahelyett, hogy egyszerre egyetlen kérést küldene. A globális kötegelt kérelmek külön sorba állított tokenkvótával rendelkeznek, így az online munkaterheléseket nem zavarják meg.

A kulcshasználati esetek a következők:

  • Large-Scale adatfeldolgozás: Gyorsan elemezheti a kiterjedt adathalmazokat párhuzamosan.

  • Tartalomlétrehozás: Hozzon létre nagy mennyiségű szöveget, például termékleírásokat vagy cikkeket.

  • Dokumentum áttekintése és összegzése: Automatizálhatja a hosszadalmas dokumentumok áttekintését és összegzését.

  • Ügyfélszolgálati automatizálás: Több lekérdezés egyidejű kezelése a gyorsabb válaszok érdekében.

  • Adatkinyerés és -elemzés: Adatok kinyerése és elemzése nagy mennyiségű strukturálatlan adatból.

  • Természetes nyelvi feldolgozással (NLP) kapcsolatos feladatok: Olyan feladatokat hajthat végre, mint a hangulatelemzés vagy a nagy adathalmazok fordítása.

  • Marketing és személyre szabás: Személyre szabott tartalmak és javaslatok létrehozása nagy méretekben.

Tipp

Ha a kötegfeladatai olyan nagyok, hogy még a telepítéséhez tartozó kvóta teljes kihasználása után is eléri a sorba állítható tokenek korlátját, bizonyos régiók mostantól támogatnak egy új funkciót, amely lehetővé teszi több kötegfeladat sorba állítását exponenciálisan növekvő várakozási idővel.

Miután elérhetővé válik a lekért jogkivonatkvóta, a következő kötegelt feladat automatikusan létrehozható és elindítható. További információ: nagy kötegelt feladatok újrapróbálkozásának automatizálása exponenciális visszalépéssel.

Fontos

A szolgáltatás arra törekszik, hogy a kötegelt kéréseket 24 órán belül feldolgozza, de nem tekinti lejártnak az ennél tovább tartó feladatokat. Bármikor lemondhatja a feladatot. Ha megszakítja a feladatot, a szolgáltatás megszakítja a hátralévő munkát, és visszaadja a már befejezett munkákat. Az elvégzett munkákért fizetnie kell.

A nyugalmi állapotban tárolt adatok a kijelölt Azure-földrajzi területen maradnak, míg az adatok következtetéshez bármely Azure OpenAI-helyen feldolgozhatók.  További információ az adatrezidenciáról. 

Batch-támogatás

A globális kötegelt modell rendelkezésre állása

Régió gpt-5.4-mini, 2026-03-17 gpt-5.4, 2026-03-05 gpt-5.1, 2025-11-13 gpt-5, 2025-08-07 o3, 2025-04-16 o4-mini, 2025-04-16 gpt-4.1, 2025-04-14 gpt-4.1 nano, 2025-04-14 gpt-4.1-mini, 2025-04-14 o3-mini, 2025-01-31 gpt-4o, 2024-05-13 gpt-4o, 2024-08-06 gpt-4o, 2024-11-20 gpt-4o-mini, 2024-07-18
australiaeast ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
brazilsouth ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
Kanadakelet ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
centralus ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
eastus ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
eastus2 ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
francecentral ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
Németország Közép-Nyugat ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
japaneast ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
koreacentral ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
northcentralus ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
norwayeast ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
polandcentral ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
southafricanorth ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
southcentralus ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
Dél-India ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
swedencentral ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
Észak-Svájc ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
uksouth ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
westeurope ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
westus ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
westus3 ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅

Megjegyzés

Bár a Global Batch támogatja a régebbi API-verziókat, egyes modellekhez újabb API-verziókra van szükség. Például a o3-mini nem támogatott a 2024-10-21-tel, mivel az a dátum után jelent meg. Ha újabb modelleket szeretne elérni a Global Batch használatával, használja a v1 API-t.

Funkciótámogatás

A következő funkciók jelenleg nem támogatottak:

  • Integráció az Assistants API-val.
  • Integráció Azure OpenAI On Your Data funkcióval.

Tételes üzembe helyezés

Megjegyzés

A Microsoft Foundry portálon a kötegelt üzembe helyezési típusok Global-Batch és Data Zone Batch formában jelennek meg. Az Azure OpenAI üzembe helyezési típusairól további információt a deployment-típusok útmutatójában talál.

Tipp

Javasoljuk, hogy engedélyezze a dinamikus kvótát az összes globális kötegmodell-üzembe helyezéshez, hogy elkerülje a nem megfelelő jogkivonatkvóta miatti feladathibákat. A dinamikus kvóta használata lehetővé teszi, hogy az üzembe helyezés opportunista módon kihasználja a további kvóta előnyeit, ha további kapacitás áll rendelkezésre. Ha a dinamikus kvóta ki van kapcsolva, az üzemelő példány csak az üzembe helyezés létrehozásakor meghatározott lekéréses jogkivonat-korlátig tudja feldolgozni a kéréseket.

Előfeltételek

  • Egy Azure-előfizetés – Hozzon létre egyet ingyen.
  • Az üzembe helyezési típusú GlobalBatch vagy DataZoneBatch üzembe helyezett modellel rendelkező erőforrás.

A kötegfájl előkészítése

A finomhangoláshoz hasonlóan a batch JSON-sorok (.jsonl) formátumban is használ fájlokat. Az alábbiakban néhány példafájlt láthat, amelyek különböző típusú támogatott tartalmakat tartalmaznak:

Bemeneti formátum

Responses API (Válaszok API)

{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}

Csevegés befejezése API

{"custom_id": "task-0", "method": "POST", "url": "/v1/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": "/v1/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": "/v1/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?"}]}}

Ez custom_id szükséges ahhoz, hogy megállapíthassa, melyik kötegkérelem felel meg egy adott válasznak. A válaszok nem lesznek azonos sorrendben visszaadva a .jsonl kötegfájlban meghatározott sorrenddel.

model az attribútumot úgy kell beállítani, hogy megfeleljen a következtetési válaszokhoz megcélzott globális Batch-telepítés nevének.

Fontos

Az model attribútumot úgy kell beállítani, hogy megfeleljen annak a globális batch-telepítésnek a nevére, amely a következtetési válaszokra irányul. A kötegelt fájl minden sorában ugyanazzal a globális Batch-modell üzembehelyezési nevével kell rendelkeznie. Ha másik üzembe helyezést szeretne megcélzni, ezt egy külön kötegfájlban/feladatban kell elvégeznie.

A legjobb teljesítmény érdekében javasoljuk, hogy nagy méretű fájlokat küldjön kötegelt feldolgozásra, nem pedig nagy számú kis fájlt, és csak néhány sort tartalmaz mindegyik fájl.

Bemeneti fájl létrehozása

Ebben a cikkben létrehozunk egy nevű test.jsonl fájlt, és átmásoljuk a fenti szabványos bemeneti kódblokk tartalmát a fájlba. Módosítania kell és hozzá kell adnia a globális kötegtelepítés nevét a fájl minden sorához.

Batch-feladat létrehozása

A bemeneti fájl előkészítése után először fel kell töltenie a fájlt, hogy aztán elindíthasson egy kötegelt feladatot. A fájlfeltöltés programozott módon vagy a Microsoft Foundry portálon keresztül is elvégezhető. Ez a példa bemutatja, hogy közvetlenül feltölt egy fájlt a Azure OpenAI-erőforrásba. Másik lehetőségként konfigurálhatja az Azure Blob Storage-t az Azure OpenAI Batch-hez.

  1. Jelentkezzen be Microsoft Foundry. Győződjön meg arról, hogy a New Foundry kapcsoló be van kapcsolva. Ezek a lépések a Foundryre (új) vonatkoznak.

  2. A jobb felső sarokban válassza a Build lehetőséget

  3. A bal oldali panelen válassza a Modellek lehetőséget

  4. Válassza a Batch-feladatokat>, és hozzon létre batch-feladatot

    Képernyőkép az új Foundry köteg létrehozási felületről.

Kötegelt feladat előrehaladásának nyomon követése

A feladat létrehozása után a legutóbb létrehozott feladat feladatazonosítójának kiválasztásával figyelheti a feladat előrehaladását. Alapértelmezés szerint a rendszer a legutóbb létrehozott kötegelt feladat állapotlapjára kerül.

A feladat állapotát a jobb oldali panelen követheti nyomon:

Batch-feladat kimeneti fájlának lekérése

Miután a feladat befejeződött vagy elérte a terminálállapotot, egy hibafájlt és egy kimeneti fájlt hoz létre, amelyet a megfelelő gombra kattintva, a lefelé mutató nyíl ikonnal tölthet le felülvizsgálatra.

Köteg megszakítása

Folyamatban lévő köteg megszakítása. A köteg legfeljebb 10 percig cancelling állapotban lesz, mielőtt cancelled-ra vált, ekkor a részleges eredmények (ha vannak) lesznek elérhetők a kimeneti fájlban.

Előfeltételek

A cikkben szereplő lépések a Jupyter Notebooksban történő szekvenciális futtatásra szolgálnak. Ezért a példák elején csak egyszer fogjuk példányosítani az Azure OpenAI-ügyfelet. Ha egy rendelésen kívüli lépést szeretne futtatni, gyakran be kell állítania egy Azure OpenAI-ügyfelet a hívás részeként.

Még ha már telepítve van az OpenAI Python kódtár, előfordulhat, hogy frissítenie kell a telepítést a legújabb verzióra:

!pip install openai --upgrade

A kötegfájl előkészítése

A finomhangoláshoz hasonlóan a globális köteg JSON-sorok (.jsonl) formátumban is használ fájlokat. Az alábbiakban néhány példafájlt láthat, amelyek különböző típusú támogatott tartalmakat tartalmaznak:

Bemeneti formátum

Responses API (Válaszok API)

{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}

Csevegés befejezése API

{"custom_id": "task-0", "method": "POST", "url": "/v1/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": "/v1/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": "/v1/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?"}]}}

Ez custom_id szükséges ahhoz, hogy megállapíthassa, melyik kötegkérelem felel meg egy adott válasznak. A válaszok nem lesznek azonos sorrendben visszaadva a .jsonl kötegfájlban meghatározott sorrenddel.

model az attribútumot úgy kell beállítani, hogy megfeleljen a következtetési válaszokhoz megcélzott globális Batch-telepítés nevének.

Fontos

Az model attribútumot úgy kell beállítani, hogy megfeleljen annak a globális batch-telepítésnek a nevére, amely a következtetési válaszokra irányul. A kötegelt fájl minden sorában ugyanazzal a globális Batch-modell üzembehelyezési nevével kell rendelkeznie. Ha másik üzembe helyezést szeretne megcélzni, ezt egy külön kötegfájlban/feladatban kell elvégeznie.

A legjobb teljesítmény érdekében javasoljuk, hogy nagy méretű fájlokat küldjön kötegelt feldolgozásra, nem pedig nagy számú kis fájlt, és csak néhány sort tartalmaz mindegyik fájl.

Bemeneti fájl létrehozása

Ebben a cikkben létrehozunk egy elnevezett test.jsonl fájlt, és átmásoljuk a fenti szabványos bemeneti kódblokk tartalmát a fájlba. Módosítania kell és hozzá kell adnia a globális kötegtelepítés nevét a fájl minden sorához. Mentse a fájlt ugyanabba a könyvtárba, ahol a Jupyter Notebookot futtatja.

Kötegfájl feltöltése

A bemeneti fájl előkészítése után először fel kell töltenie a fájlt, hogy aztán elindíthasson egy kötegelt feladatot. A fájlfeltöltés programozott módon vagy a Microsoft Foundry portálon keresztül is elvégezhető. Ez a példa bemutatja, hogy közvetlenül feltölt egy fájlt a Azure OpenAI-erőforrásba. Másik lehetőségként konfigurálhatja az Azure Blob Storage-t az Azure OpenAI Batch-hez.

import os
from datetime import datetime
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

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

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

# 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

A(z) expires_after objektum a létrehozását követő 14. napon lejárttá teszi a bemeneti fájlt. A 14–30 napos lejárati idő kiválasztásához állítsa a(z) seconds értékét 1209600 és 2592000 közötti értékre. A lejárat beállítása a bemeneti fájl korlátját is növeli. További részletekért lásd a Batch korlátait.

Kimeneti:

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

Batch-feladat létrehozása

Miután sikeresen feltöltötte a fájlt, elküldheti a fájlt kötegelt feldolgozásra.

# Submit a batch job with the file
batch_response = client.batches.create(
    input_file_id=file_id,
    endpoint="/chat/completions", # While passing this parameter is required, the system will read your input file to determine if the chat completions or responses API is needed.  
    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))

Megjegyzés

A befejezési ablakot jelenleg 24h értékre kell állítani. Ha bármilyen más értéket állít be, mint 24h, a feladat sikertelen lesz. A 24 óránál hosszabb ideig tartó feladatok végrehajtása a megszakításig folytatódik.

Kimeneti:

{
  "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
  }
}

Ha a kötegfeladatok olyan nagyok, hogy az üzembe helyezés kvótájának maximális kihasználása után is eléri a várakozó jogkivonat korlátját, bizonyos régiók mostantól támogatnak egy új gyors hibakezelés funkciót, amely lehetővé teszi több kötegelt feladat várólistára helyezését exponenciális visszavonulással, így amikor egy nagy kötegelt feladat befejeződik, a következő automatikusan elindítható. Ha többet szeretne megtudni arról, hogy mely régiók támogatják ezt a funkciót, és hogyan alakíthatja át a kódot annak előnyeihez, tekintse meg a kötegelt feladatok sorba állítását.

Kötegelt feladat előrehaladásának nyomon követése

Miután sikeresen létrehozta a batch-feladatot, monitorozhatja annak állapotát a Studióban vagy programozott módon. A kötegelt feladat előrehaladásának ellenőrzésekor javasoljuk, hogy minden állapothívás között legalább 60 másodpercet várjon.

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}")

Kimeneti:

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

A következő állapotértékek lehetségesek:

Állapot Leírás
validating A bemeneti fájl ellenőrzése még a kötegfeldolgozás megkezdése előtt megtörténik.
failed A bemeneti fájl nem felelt meg az érvényesítési folyamatnak.
in_progress A bemeneti fájl ellenőrzése sikeresen megtörtént, és a köteg jelenleg fut.
finalizing A köteg befejeződött, és az eredmények előkészítése folyamatban van.
completed A köteg elkészült, és az eredmények készen állnak.
expired A feladat nem készült el a 24 órás időkereten belül.
cancelling A feldolgozás alatt cancelled van (A hatályba lépése akár 10 percet is igénybe vehet.)
cancelled a tétel volt cancelled.

A futtatható feladat állapotadatainak vizsgálatához:

print(batch_response.model_dump_json(indent=2))

Kimeneti:

{
  "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
  }
}

Figyelje meg, hogy mindkettő error_file_id és külön output_file_id is van. error_file_id A segítségével hibakeresési segítséget nyújthat a kötegelt feladattal kapcsolatos problémák elhárításához.

Batch-feladat kimeneti fájlának lekérése

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)

Kimeneti:

A rövidség kedvéért csak a kimenet egyetlen csevegés-befejezési válaszát vesszük figyelembe. Ha a cikkben leírt lépéseket követi, három, az alábbihoz hasonló válasznak kell lennie:

Csevegés befejezése

{
  "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
}

Responses API (Válaszok API)

{
  "custom_id": "task-0",
  "response": {
    "body": {
      "id": "resp_0e5c78eb05ee70cf00690cc6d988e4819587556df17436a206",
      "created_at": 1762445017.0,
      "error": null,
      "incomplete_details": null,
      "instructions": null,
      "metadata": {},
      "model": "gpt-4.1-batch",
      "object": "response",
      "output": [
        {
          "id": "msg_0e5c78eb05ee70cf00690cc6da3c548195aae483031113df16",
          "content": [
            {
              "annotations": [],
              "text": "Microsoft was founded on **April 4, 1975** by **Bill Gates** and **Paul Allen**.",
              "type": "output_text",
              "logprobs": []
            }
          ],
          "role": "assistant",
          "status": "completed",
          "type": "message"
        }
      ],
      "parallel_tool_calls": true,
      "temperature": 1.0,
      "tool_choice": "auto",
      "tools": [],
      "top_p": 1.0,
      "background": false,
      "max_output_tokens": null,
      "max_tool_calls": null,
      "previous_response_id": null,
      "prompt_cache_key": null,
      "reasoning": {
        "effort": null,
        "summary": null
      },
      "safety_identifier": null,
      "service_tier": "default",
      "status": "completed",
      "text": {
        "format": {
          "type": "text"
        },
        "verbosity": "medium"
      },
      "top_logprobs": 0,
      "truncation": "disabled",
      "usage": {
        "input_tokens": 16,
        "input_tokens_details": {
          "cached_tokens": 0
        },
        "output_tokens": 25,
        "output_tokens_details": {
          "reasoning_tokens": 0
        },
        "total_tokens": 41
      },
      "user": null,
      "content_filters": null,
      "store": true
    },
    "request_id": "809b30c2-fa0b-4613-b5cc-c30f6b780c9a",
    "status_code": 200
  },
  "error": null
}

További kötegparancsok

Köteg megszakítása

Folyamatban lévő köteg megszakítása. A köteg legfeljebb 10 percig cancelling állapotban lesz, mielőtt cancelled-ra vált, ekkor a részleges eredmények (ha vannak) lesznek elérhetők a kimeneti fájlban.

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

Kötegek listázása

Kötegelt feladatok listázása egy adott Azure OpenAI-erőforráshoz.

client.batches.list()

A Python könyvtárban található lista metódusok oldalra bontva vannak.

Az összes feladat listázása:

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)

Lista köteg (előzetes verzió)

A REST API-val további rendezési/szűrési lehetőségekkel listázhatja az összes kötegelt feladatot.

Az alábbi példákban biztosítjuk a generate_time_filter függvényt, hogy megkönnyítsük a szűrő összeállítását. Ha nem szeretné használni ezt a függvényt, a szűrősztring formátuma a következőképpen created_at gt 1728860560 and status eq 'Completed'nézne ki.

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

token_credential = DefaultAzureCredential()
token = token_credential.get_token('https://ai.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)  

Kimeneti:

{
  "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"
}

Kötegelt feladatok várólistára helyezése

Ha a kötegfeladatok olyan nagyok, hogy az üzembe helyezés során a kvótát maximálisan kihasználva is eléri a sorba állított token korlátját, bizonyos régiók mostantól támogatnak egy új, gyors hibakezelési funkciót, amely lehetővé teszi több kötegelt feladat várólistára helyezését exponenciálisan növekvő késleltetéssel. Miután egy nagy kötegelt feladat befejeződik, és a várólistás token kvóta ismét elérhetővé válik, a következő kötegelt feladat automatikusan létrehozható és elindítható.

Régi viselkedés:

  1. A nagy Batch-feladatok már futnak, és az üzembe helyezéshez rendelkezésre álló összes jogkivonatot használják.
  2. Új csoportos feladat beadva.
  3. Az új batch feladat a validációs fázisba kerül, amely akár néhány percig is eltarthat.
  4. Az új munka tokenmennyiségét a jelenleg elérhető kvótával vetik össze.
  5. Az új kötegelt feladat meghiúsul, mert túllépte a hibajelentési token korlátját.

Új viselkedés:

  1. A nagy Batch-feladatok már futnak, és az üzembe helyezéshez rendelkezésre álló összes jogkivonatot használják
  2. Új kötegelt feladat elküldve
  3. A jelenleg elérhető kötegkvóta-feladathoz képest azonnal összehasonlított új feladat hozzávetőleges tokenszáma gyorsan meghiúsul, így könnyebben kezelheti az újrapróbálkozásokat programozott módon.

Régiótámogatás

A következő régiók támogatják az új, gyors hiba kezelést:

  • australiaeast
  • eastus
  • Németország Közép-Nyugat
  • italynorth
  • northcentralus
  • polandcentral
  • swedencentral
  • Észak-Svájc
  • eastus2
  • westus

Az alábbi kód bemutatja a hibagyors működés kezelésének alapvető mechanikáit, amelyek lehetővé teszik az újrapróbálkozások és a kötegelt feladatok sorba állításának exponenciális hátratétellel történő automatizálását.

A kötegelt feladatok méretétől függően szükség lehet a max_retries jelentős növelésére vagy a példa további módosítására.

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

Kimeneti:

⏳ 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
  }
}

Előfeltételek

A kötegfájl előkészítése

A finomhangoláshoz hasonlóan a globális köteg JSON-sorok (.jsonl) formátumban is használ fájlokat. Az alábbiakban néhány példafájlt láthat, amelyek különböző típusú támogatott tartalmakat tartalmaznak:

Bemeneti formátum

Responses API (Válaszok API)

{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}

Csevegés befejezése API

{"custom_id": "task-0", "method": "POST", "url": "/v1/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": "/v1/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": "/v1/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?"}]}}

Ez custom_id szükséges ahhoz, hogy megállapíthassa, melyik kötegkérelem felel meg egy adott válasznak. A válaszok nem lesznek azonos sorrendben visszaadva a .jsonl kötegfájlban meghatározott sorrenddel.

model az attribútumot úgy kell beállítani, hogy megfeleljen a következtetési válaszokhoz megcélzott globális Batch-telepítés nevének.

Fontos

Az model attribútumot úgy kell beállítani, hogy megfeleljen annak a globális batch-telepítésnek a nevére, amely a következtetési válaszokra irányul. A kötegelt fájl minden sorában ugyanazzal a globális Batch-modell üzembehelyezési nevével kell rendelkeznie. Ha másik üzembe helyezést szeretne megcélzni, ezt egy külön kötegfájlban/feladatban kell elvégeznie.

A legjobb teljesítmény érdekében javasoljuk, hogy nagy méretű fájlokat küldjön kötegelt feldolgozásra, nem pedig nagy számú kis fájlt, és csak néhány sort tartalmaz mindegyik fájl.

Bemeneti fájl létrehozása

Ebben a cikkben létrehozunk egy elnevezett test.jsonl fájlt, és átmásoljuk a fenti szabványos bemeneti kódblokk tartalmát a fájlba. Módosítania kell és hozzá kell adnia a globális kötegtelepítés nevét a fájl minden sorához.

Kötegfájl feltöltése

A bemeneti fájl előkészítése után először fel kell töltenie a fájlt, hogy aztán elindíthasson egy kötegelt feladatot. A fájlfeltöltés programozott módon vagy a Microsoft Foundry portálon keresztül is elvégezhető. Ez a példa bemutatja, hogy közvetlenül feltölt egy fájlt a Azure OpenAI-erőforrásba. Másik lehetőségként konfigurálhatja az Azure Blob Storage-t az Azure OpenAI Batch-hez.

Fontos

Óvatosan használja az API-kulcsokat. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan. Ha API-kulcsot használ, tárolja azt biztonságosan az Azure Key Vault-ban. További információ az API-kulcsok biztonságos használatáról az alkalmazásokban: API-kulcsok Azure Key Vault.

További információ az AI-szolgáltatások biztonságáról, olvassa el az Azure AI-szolgáltatások kéréseinek hitelesítése című részt.

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/files \
  -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"

A fenti kód egy adott fájl elérési útját feltételezi a test.jsonl fájlhoz. Módosítsa ezt a fájl elérési útját a helyi rendszer számára szükséges módon.

Az opcionális expires_after.seconds és expires_after.anchor a paraméterek úgy állítják be a bemeneti fájlt, hogy a létrehozás után 14 nappal lejárjon. A 14 és 30 nap közötti lejárati időszak kiválasztásához állítsa a(z) expires_after.seconds értékét 1209600 és 2592000 közötti értékre. A lejárati dátum beállítása a bemeneti fájl korlátját is növeli. További részletekért lásd a Batch korlátait.

Kimeneti:

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

Fájlfeltöltés állapotának nyomon követése

A feltöltési fájl méretétől függően eltarthat egy ideig, amíg a fájl teljesen fel lesz töltve és feldolgozva. A fájlfeltöltés állapotának ellenőrzéséhez futtassa a következőt:

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/files/{file-id} \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Kimeneti:

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

Batch-feladat létrehozása

Miután sikeresen feltöltötte a fájlt, elküldheti a fájlt kötegelt feldolgozásra.

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches \
  -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": {
      "anchor": "created_at",
      "seconds": 1209600
    }
  }'

Az opcionális output_expires_after objektum úgy állítja be a kimeneti fájlokat, hogy a létrehozásuk után 14 nappal lejárjanak. A 14 és 30 nap közötti lejárati idő kiválasztásához állítsa a seconds értékét 1209600 és 2592000 közötti értékre. Az anchor értéknek meg kell lennie created_at.

Megjegyzés

A befejezési ablakot jelenleg 24h értékre kell állítani. Ha bármilyen más értéket állít be, mint 24h, a feladat sikertelen lesz. A 24 óránál hosszabb ideig tartó feladatok végrehajtása a megszakításig folytatódik.

Kimeneti:

{
  "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"
}

Kötegelt feladat előrehaladásának nyomon követése

Miután sikeresen létrehozta a batch-feladatot, monitorozhatja annak állapotát a Studióban vagy programozott módon. A kötegelt feladat előrehaladásának ellenőrzésekor javasoljuk, hogy minden állapothívás között legalább 60 másodpercet várjon.

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches/{batch_id} \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Kimeneti:

{
  "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"
}

A következő állapotértékek lehetségesek:

Állapot Leírás
validating A bemeneti fájl ellenőrzése még a kötegfeldolgozás megkezdése előtt megtörténik.
failed A bemeneti fájl nem felelt meg az érvényesítési folyamatnak.
in_progress A bemeneti fájl ellenőrzése sikeresen megtörtént, és a köteg jelenleg fut.
finalizing A köteg befejeződött, és az eredmények előkészítése folyamatban van.
completed A köteg elkészült, és az eredmények készen állnak.
expired A feladat nem készült el a 24 órás időkereten belül.
cancelling A köteg feldolgozás alatt cancelled van (Ez akár 10 percet is igénybe vehet, hogy hatályba lépjen.)
cancelled a tétel volt cancelled.

Batch-feladat kimeneti fájlának lekérése

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/files/{output_file_id}/content \
  -H "api-key: $AZURE_OPENAI_API_KEY" > batch_output.jsonl

További kötegparancsok

Köteg megszakítása

Folyamatban lévő köteg megszakítása. A köteg legfeljebb 10 percig cancelling állapotban lesz, mielőtt cancelled-ra vált, ekkor a részleges eredmények (ha vannak) lesznek elérhetők a kimeneti fájlban.

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches/{batch_id}/cancel \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Kötegek listázása

Egy adott Azure OpenAI-erőforrás meglévő kötegelt feladatainak listázása.

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Az API-hívás listája lapozható. A válasz tartalmaz egy logikai has_more értéket, amely jelzi, hogy mikor van több eredmény az iterációhoz.

Lista köteg (előzetes verzió)

A REST API-val további rendezési/szűrési lehetőségekkel listázhatja az összes kötegelt feladatot.

curl "YOUR_RESOURCE_NAME.openai.azure.com/batches?api-version=2025-04-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"

Az URL rejected: Malformed input to a URL function helyeken található szóközök %20-re cserélése elkerüli a hibát.

Kötegkorlátok

Korlát megnevezés Korlátérték
Kötegbemeneti fájlok maximális száma (lejárat nélkül) 500
Kötegelt bemeneti fájlok maximális száma (lejárat beállítva) 10 000
Bemeneti fájl maximális mérete 200 MB
A bemeneti fájl maximális mérete – Saját tároló használata (BYOS) 1 GB
Fájlonkénti kérelmek maximális száma 100,000

Megjegyzés

Állítsa be a bemeneti fájlok lejáratát az erőforrásonkénti korlát növeléséhez és a tárolt fájlok kezeléséhez. A kötegbemeneti fájlkorlátok nem vonatkoznak a kimeneti fájlokra, például result.jsonl a .error.jsonl A Files API bemenetifájl-korlátainak elkerülése érdekében használja a Batch with Azure Blob Storage lehetőséget.

Kötegkvóta

A táblázat a kötegkvótakorlátot mutatja. A globális batch kvótaértékei sorba állított tokenek szempontjából jelennek meg. Amikor kötegelt feldolgozás céljából beküld egy fájlt, a rendszer megszámolja a fájlban lévő tokenek számát. Amíg a kötegfeladat el nem éri a terminálállapotot, ezek a jogkivonatok a teljes lekérdezett jogkivonat-korláttal számolnak.

Globális tétel

Modell Nagyvállalati és MCA-E Alapértelmezett Havi hitelkártya-alapú előfizetések MSDN-előfizetések Azure diákoknak, ingyenes próbaverziók
gpt-4.1 5B 200 millió 50M 90K N/A
gpt-4.1 mini 15B 1B 50M 90K N/A
gpt-4.1-nano 15B 1B 50M 90K N/A
gpt-4o 5B 200 millió 50M 90K N/A
gpt-4o-mini 15B 1B 50M 90K N/A
gpt-4-turbo 300 millió 80M 40M 90K N/A
gpt-4 150 millió 30M 5M 100K N/A
o3-mini 15B 1B 50M 90K N/A
o4-mini 15B 1B 50M 90K N/A
gpt-5 5B 200 millió 50M 90K N/A
gpt-5.1 5B 200 millió 50M 90K N/A
gpt-5.2 5B 200 millió 50M N/A N/A
gpt-5.4 5B 200 millió 50M N/A N/A
gpt-5.4-mini 5B 200 millió 50M N/A N/A
gpt-5.4-nano 5B 200 millió 50M N/A N/A
gpt-5.5 5B 200 millió 50M 90K N/A

B = milliárd | M = millió | K = ezer

Adatzóna köteg

Modell Nagyvállalati és MCA-E Alapértelmezett Havi hitelkártya-alapú előfizetések MSDN-előfizetések Azure diákoknak, ingyenes próbaverziók
gpt-4.1 500 millió 30M 30M 90K N/A
gpt-4.1-mini 1,5B 100 millió 50M 90K N/A
gpt-4o 500 millió 30M 30M 90K N/A
gpt-4o-mini 1,5B 100 millió 50M 90K N/A
o3-mini 1,5B 100 millió 50M 90K N/A
gpt-5 5B 200 millió 50M 90K N/A
gpt-5.1 5B 200 millió 50M 90K N/A
gpt-5.4 5B 200 millió 50M N/A N/A
gpt-5.4-mini 5B 200 millió 50M N/A N/A
gpt-5.5 5B 200 millió 50M 90K N/A

Kötegelt feladat rekordjainak megőrzése

A batch-feladatrekordok legfeljebb 365 napig maradnak meg, miután a feladat elérte a terminálállapotot, például completed: , expiredfailedvagy cancelled. Ez idő alatt listázhatja és lekérdezheti a feladatot, illetve megszakíthatja, ha az még megszakítható állapotban van.

A létrehozott kimeneti és hibafájlok nem rendelkeznek alapértelmezett lejárati idővel. Ezek mindaddig elérhetők maradnak, amíg ön nem törli őket, vagy nem állít be explicit lejárati dátumot. Állítsa be a expires_after értéket, amikor feltölt egy bemeneti fájlt, vagy a output_expires_after értéket, amikor kötegelt feladatot hoz létre. Mindkét explicit lejárati beállítás 14–30 napot fogad el, és horgonyként használható created_at . Példaként tekintse meg a Batch-fájl feltöltése és a Kötegelt feladat létrehozása szakaszt a Python vagy a REST API lapon.

Batch-objektum

Tulajdonság Típus Meghatározás
id karakterlánc A köteg azonosítója.
object karakterlánc batch
endpoint karakterlánc Az API végpont, amelyet a batch használ.
errors objektum Hibainformációk a tételhez, amennyiben vannak ilyenek.
input_file_id karakterlánc A bemeneti fájl azonosítója a batchhez.
completion_window karakterlánc A köteg feldolgozásának célideje. Ezt az értéket jelenleg a következőre kell állítania 24h: . A 24 órán belüli befejezés nem garantált, és a feladat addig folytatódhat, amíg be nem fejeződik, vagy ön megszakítja azt.
status karakterlánc A köteg aktuális állapota. Lehetséges értékek: validating, failed, in_progress, finalizing, completedexpired, , cancellingcancelled.
output_file_id karakterlánc A sikeresen végrehajtott kérések kimeneteit tartalmazó fájl azonosítója.
error_file_id karakterlánc A hibákkal rendelkező kérések kimeneteit tartalmazó fájl azonosítója.
created_at egész szám Időbélyeg a köteg létrehozásakor (Unix epoch másodpercben).
in_progress_at egész szám Időbélyeg, amikor ez a feladatcsomag elindult (Unix idő másodperc formátumban).
expires_at egész szám Időbélyeg, amikor ez a csomag lejár (Unix epoch másodpercben).
finalizing_at egész szám Időbélyeg, amikor ez az adag megkezdte a véglegesítést (Unix epoch másodpercben).
completed_at egész szám "Egy időbélyeg, amikor ez a csomag befejeződött (Unix-epoch másodpercben)."
failed_at egész szám Időbélyeg, amikor ez a munkafolyamat meghiúsult (Unix időbélyeg másodpercben).
expired_at egész szám Időbélyeg, amikor ez a csomag lejárt (Unix idő másodpercben).
cancelling_at egész szám Időbélyeg, amikor a feldolgozási folyamat elindult cancelling (Unix epoch másodpercekben).
cancelled_at egész szám Időbélyeg (Unix-korszak másodpercben), amikor ez a köteg cancelled volt.
request_counts objektum Objektumstruktúra:

total Egész szám
A kötegben lévő kérelmek teljes száma.
completed Egész szám
A kötegben sikeresen befejezett kérelmek száma.
failed Egész szám
A kötegben meghiúsult kérelmek száma.
metadata leképez Kulcs-érték párok készlete, amelyeket a köteghez csatolhat. Ez a tulajdonság hasznos lehet a köteg további információinak strukturált formátumban való tárolásához.

Gyakori kérdések (GYIK)

Használhatók képek a batch API-val?

Ez a képesség bizonyos multimodális modellekre korlátozódik. A képeket bemenetként a kép URL-címén vagy a kép base64 kódolású ábrázolásán keresztül is megadhatja.

Használhatom a batch API-t finomhangolt modellekkel?

A batch API jelenleg nem támogatja a finomhangolt modelleket.

Használhatom a batch API-t a modellek beágyazásához?

A batch API jelenleg nem támogatja a finomhangolt modelleket.

Működik a tartalomszűrés a Global Batch üzembe helyezésével?

Igen. A többi üzembehelyezési típushoz hasonlóan tartalomszűrőket is létrehozhat, és társíthatja őket a Global Batch központi telepítési típusával.

Kérhetek további kvótát?

Igen, az Foundry portál kvótaoldaláról. Az alapértelmezett kvótafoglalás a kvóta és a korlátok című cikkben található.

Mi történik, ha az API nem teljesíti a kérésemet a 24 órás időkereten belül?

Célunk, hogy ezeket a kéréseket 24 órán belül feldolgozzuk; nem járnak le azok a feladatok, amelyek hosszabb időt vesznek igénybe. Bármikor lemondhatja a feladatot. A feladat megszakítása után a fennmaradó munka megszűnik, és a már befejezett munka vissza lesz adva. Az elvégzett munkákért díjat számítunk fel.

Hány kérést tudok kötegelt feldolgozással sorba állítani?

A kötegelhető kérések számának nincs rögzített korlátja, de ez a sorban álló token kvótájától függ. A sorba állított tokenkvóta tartalmazza az egyszerre ütemezhető bemeneti tokenek maximális számát.

A kötegkérelem befejezése után a kötegelt kérések sebességkorlátja alaphelyzetbe áll, mivel a bemeneti tokenek törlődnek. A korlát a várólistán lévő globális kérések számától függ. Ha a Batch API-üzenetsor gyorsan feldolgozza a kötegeket, a kötegsebesség-korlát gyorsabban alaphelyzetbe áll.

Hibaelhárítás

A feladat akkor sikeres, ha statuscompleted. A sikeres feladatok továbbra is létrehoznak egy error_file_id, de nulla bájtot tartalmazó üres fájlhoz lesz társítva.

Feladathiba esetén a tulajdonságban megtalálja a errors hiba részleteit:

{
  "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
      }
    }
  ]
}

Hibakódok

Hibakód Meghatározás
invalid_json_line A bemeneti fájl egy sora (vagy több) nem elemezhető érvényes jsonként.

Győződjön meg arról, hogy nincsenek elírások, megfelelő nyitó és záró zárójelek és idézőjelek a JSON szabványnak megfelelően, és küldje el újra a kérést.
too_many_tasks A bemeneti fájlban lévő kérelmek száma meghaladja a maximálisan megengedett 100 000 értéket.

Győződjön meg arról, hogy a kérelmek száma 100 000 alatt van, és küldje el újra a feladatot.
url_mismatch A bemeneti fájl egyik sora olyan URL-címvel rendelkezik, amely nem felel meg a többi sornak, vagy a bemeneti fájlban megadott URL-cím nem egyezik meg a várt végpont URL-címével.

Győződjön meg arról, hogy az összes kérelem URL-címe megegyezik, és megegyezik a Azure OpenAI-telepítéshez társított végpont URL-címével.
model_not_found A bemeneti fájl model tulajdonságában megadott Azure OpenAI-modell üzembehelyezési neve nem található.

Győződjön meg arról, hogy ez a név érvényes Azure OpenAI-modell üzembe helyezésére mutat.
duplicate_custom_id A kérés egyéni azonosítója egy másik kérelemben szereplő egyéni azonosító duplikálása.
empty_file A bemeneti fájl üres. Győződjön meg arról, hogy a csoport legalább egy kérést tartalmaz.
model_mismatch A kérelem model tulajdonságában megadott Azure OpenAI-modell üzembehelyezési neve nem egyezik meg a fájl többi részével.

Győződjön meg arról, hogy a köteg minden kérése ugyanarra a Azure OpenAI in Foundry Models modell üzembe helyezésére mutat a kérelem model tulajdonságában.
invalid_request A bemeneti sor sémája érvénytelen, vagy az üzembehelyezési termékváltozat érvénytelen.

Győződjön meg arról, hogy a kérelem tulajdonságai a bemeneti fájlban megegyeznek a várt bemeneti tulajdonságokkal, és hogy az Azure OpenAI üzembe helyezési SKU-ja globalbatch kötegelt API-kérésekhez.
input_modified A Blob-adatot módosították, miután a kötegelt feladatot elküldték.
input_no_permissions A bemeneti blob nem érhető el. Ellenőrizze az engedélyeket és a hálózati hozzáférést az Azure OpenAI-fiók és az Azure Storage-fiók között.

Ismert problémák

  • Az Azure CLI-vel telepített erőforrások alapértelmezés szerint nem fognak működni az Azure OpenAI globális kötegével. Ennek oka egy olyan probléma, amely miatt az ezzel a módszerrel üzembe helyezett erőforrások végponti altartományai nem követik a https://your-resource-name.openai.azure.com mintát. A probléma megoldásának módja egy új Azure OpenAI-erőforrás telepítése a többi gyakori üzembehelyezési módszer egyikének alkalmazásával, amely az altartomány beállítását megfelelően kezeli az üzembe helyezés folyamatának részeként.

  • Az UTF-8-BOM kódolású jsonl fájlok nem támogatottak. A JSON-sorok fájljait az UTF-8 használatával kell kódolni. A Byte-Order-Mark (BOM) kódolású fájlok használatát hivatalosan nem támogatja a JSON RFC-specifikáció, és Azure Az OpenAI jelenleg érvénytelenként kezeli a BOM-kódolt fájlokat. Az UTF-8-BOM kódolt fájl jelenleg a következő általános hibaüzenetet adja vissza: "Az ellenőrzés nem sikerült: Érvényes modelltelepítési név nem nyerhető ki a bemeneti fájlból. Győződjön meg arról, hogy a bemeneti fájl minden sorában érvényes üzembehelyezési név van megadva a "modell" mezőben, és hogy az üzembe helyezés neve minden sorban konzisztens."

  • Ha saját tárolót használ a kötegelt bemeneti adatokhoz, a kötegelt feladat elküldése után, ha a bemeneti blob módosul, a pontozási feladatot a szolgáltatás nem fogja végrehajtani.

Lásd még:

  • További információ Azure OpenAI deployment típusokról
  • Tudjon meg többet az Azure OpenAI kvóták és korlátok részleteiről.