Strukturált kimenetek az Azure Databricksben

Az Azure Databricks strukturált kimenetei lehetővé teszik, hogy válaszokat generálj egy meghatározott JSON formátumban, az AI alkalmazási munkafolyamatok részeként. Bármely támogatott csevegőmodelllel dolgoznak együtt egy response_format mezőn keresztül. Ugyanazt a kérés formátumot használod, függetlenül attól, hogy melyik modell szolgáltató van. Az Azure Databricks bármilyen szolgáltató-specifikus fordítást kezel helyetted, így nem kell a szolgáltató natív strukturált kimeneti formátumát használnod.

Tip

Genie Code (ügynöki módban) meg tudja tenni ezt Ön helyett. Próbálja ki ezt a példaüzenetet:

Query the databricks-gpt-oss-20b model with a JSON schema response format to extract title, authors, abstract, and keywords from a research paper description. Note: this model returns content as a list of blocks; extract the block with type "text" and parse it.

Mik azok a strukturált kimenetek?

A strukturált kimenetekkel JSON-objektumok formájában hozhat létre strukturált adatokat a bemeneti adatokból. Létrehozhat szövegeket, strukturálatlan JSON-objektumokat és JSON-objektumokat, amelyek megfelelnek egy adott JSON-sémának. A strukturált kimenetek támogatottak az Alapmodell API-kkal kiszolgált csevegőmodellekhez, tokenenkénti fizetéssel és előre kiosztott átviteli sebességű végpontok használatával.

A Databricks strukturált kimenetek használatát javasolja a következő forgatókönyvekhez:

  • Adatok kinyerése nagy mennyiségű dokumentumból. A termékértékelési visszajelzések azonosítása és besorolása például negatív, pozitív vagy semleges.
  • Kötegelt következtetési feladatok, amelyek megkövetelik, hogy a kimenetek megadott formátumban legyenek.
  • Adatfeldolgozás, például strukturálatlan adatok strukturált adatokká alakításához.

Strukturált kimenetek használata

Adja meg a strukturált kimeneteket a csevegési kérelemben response_format használatával. Lásd Foundation modell REST API referenciája.

Az alábbi példa a kutatási dokumentumok egy adott JSON-sémába történő adatkinyerésére mutat be példát.

import os
import json
from openai import OpenAI

DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')

client = OpenAI(
  api_key=DATABRICKS_TOKEN,
  base_url=DATABRICKS_BASE_URL
  )

response_format = {
      "type": "json_schema",
      "json_schema": {
        "name": "research_paper_extraction",
        "schema": {
          "type": "object",
          "properties": {
            "title": { "type": "string" },
            "authors": {
              "type": "array",
              "items": { "type": "string" }
            },
            "abstract": { "type": "string" },
            "keywords": {
              "type": "array",
              "items": { "type": "string" }
            }
          },
        },
        "strict": True
      }
    }

messages = [{
        "role": "system",
        "content": "You are an expert at structured data extraction. You will be given unstructured text from a research paper and should convert it into the given structure."
      },
      {
        "role": "user",
        "content": "..."
      }]

response = client.chat.completions.create(
    model="databricks-gpt-oss-20b",
    messages=messages,
    response_format=response_format
)

print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))

Az alábbiakban egy példa látható a JSON-extrakcióra, de a JSON-séma nem ismert kéz előtt.

import os
import json
from openai import OpenAI

DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')

client = OpenAI(
  api_key=DATABRICKS_TOKEN,
  base_url=DATABRICKS_BASE_URL
  )

response_format = {
      "type": "json_object",
    }

messages = [
      {
        "role": "user",
        "content": "Extract the name, size, price, and color from this product description as a JSON object:\n<description>\nThe SmartHome Mini is a compact smart home assistant available in black or white for only $49.99. It's 5 inches wide.\n</description>"
      }]

response = client.chat.completions.create(
    model="databricks-gpt-oss-20b",
    messages=messages,
    response_format=response_format
)

print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))

JSON-séma

Az Alapmodell API-k széles körben támogatják az OpenAI által elfogadott strukturált kimeneteket. A JSON-sémadefiníciók egyszerűbb JSON-sémájának használata azonban jobb minőségű JSON-generációt eredményez. A jobb minőségű generáció előmozdítása érdekében az alapmodell API-k csak JSON-sémaspecifikációk egy részét támogatják.

A következő függvényhívás-definíciós kulcsok nem támogatottak:

  • Reguláris kifejezések használata pattern esetén.
  • Összetett beágyazott kompozíció vagy sémaösszetétel és -ellenőrzés a következők használatával: anyOf, oneOf, allOf, prefixItemsvagy $ref.
  • Típuslisták, kivéve a [type, “null”] speciális esetét, ahol a listában szereplő egyik típus érvényes JSON-típus, a másik pedig "null"

Strukturált kimenetek Anthropic Claude modellekkel

Az alábbi példa egy adott JSON sémára vonja ki az adatokat egy Claude-modell segítségével. Az egyetlen változás az előző példákhoz képest az model érték.

import os
import json
from openai import OpenAI

DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')

client = OpenAI(
  api_key=DATABRICKS_TOKEN,
  base_url=DATABRICKS_BASE_URL
  )

response_format = {
      "type": "json_schema",
      "json_schema": {
        "name": "research_paper_extraction",
        "schema": {
          "type": "object",
          "properties": {
            "title": { "type": "string" },
            "authors": {
              "type": "array",
              "items": { "type": "string" }
            },
            "abstract": { "type": "string" },
            "keywords": {
              "type": "array",
              "items": { "type": "string" }
            }
          },
        },
        "strict": True
      }
    }

messages = [{
        "role": "system",
        "content": "You are an expert at structured data extraction. You will be given unstructured text from a research paper and should convert it into the given structure."
      },
      {
        "role": "user",
        "content": "..."
      }]

response = client.chat.completions.create(
    model="databricks-claude-sonnet-4-5",
    messages=messages,
    response_format=response_format
)

print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))

A Claude-modellek további korlátokat szabnak a strukturált kimenetekre. Lásd a Korlátozások szekciót.

Token használat

A gyorsinjektálást és más technikákat a strukturált kimenetek minőségének javítására használják. Ez hatással van a modell által használt bemeneti és kimeneti tokenek számára, ami számlázási következményekkel jár.

Korlátozások

  • A JSON-sémában megadott kulcsok maximális száma 64.
  • Az alapmodell API-k nem kényszerítik ki az objektumokra és tömbökre vonatkozó hossz- és méretkorlátozásokat.
    • Ide tartoznak az olyan kulcsszavak, mint a maxProperties, minPropertiesés maxLength.
  • Az erősen beágyazott JSON-sémák alacsonyabb minőségű generációt eredményeznek. Ha lehetséges, próbálja meg elsimítani a JSON-sémát a jobb eredmények érdekében.

Az Anthropic Claude modellek a strukturált kimenetekre vonatkozó további korlátokat alkalmazzák:

  • Csak a json_schema strukturált kimeneti típus támogatott. json_object nem támogatott. Korlátlan kimenethez hagyd response_formatki .
  • A strukturált kimeneteket streaminggel nem támogatják. Állítsd stream be, false amikor megadod a .response_format
  • response_format A Claude strukturált kimenetek paramétere nem kombinálható vagy tools-vel tool_choice kombinálható.