Strukturerade utdata på Azure Databricks

Strukturerade utdata på Azure Databricks låter dig generera svar i ett definierat JSON-format som en del av dina AI-applikationsflöden. De arbetar med alla stödda chattmodeller inom ett response_format fält. Du använder samma förfrågningsformat oavsett vilken leverantör som ligger under modellen. Azure Databricks hanterar all leverantörsspecifik översättning åt dig, så du behöver inte använda en leverantörs inbyggda strukturerade utdataformat.

Tips/Råd

Genie Code (agentläge) kan göra detta åt dig. Prova den här exempelprompten:

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.

Vad är strukturerade utdata?

Strukturerade utdata är ett sätt att generera strukturerade data i form av JSON-objekt från dina indata. Du kan välja att generera text, ostrukturerade JSON-objekt och JSON-objekt som följer ett specifikt JSON-schema. Strukturerade utdata stöds för chattmodeller som hanteras via Foundation Model API:er med betalning per använd token och allokerade genomflödesändpunkter.

Databricks rekommenderar att du använder strukturerade utdata för följande scenarier:

  • Extrahera data från stora mängder dokument. Du kan till exempel identifiera och klassificera feedback om produktgranskning som negativ, positiv eller neutral.
  • Batch-slutsatsdragningsuppgifter som kräver att utdata är i ett angivet format.
  • Databearbetning, som att omvandla ostrukturerade data till strukturerade data.

Använda strukturerade utdata

Ange dina strukturerade utdata med hjälp av response_format i chattbegäran. Se referens för Foundation-modellens REST API.

Följande är ett exempel på dataextrahering av forskningsrapporter till ett specifikt JSON-schema.

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

Följande är ett exempel på JSON-extrahering, men JSON-schemat är inte känt före hand.

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-schema

API:er för Foundation Model stöder i stort sett strukturerade utdata som godkänts av OpenAI. Men om du använder ett enklare JSON-schema för JSON-schemadefinitioner resulterar det i JSON-generering av högre kvalitet. För att främja generering av högre kvalitet stöder Foundation Model-API:er endast en delmängd av JSON-schemaspecifikationer.

Följande definitionsnycklar för funktionsanrop stöds inte:

  • Reguljära uttryck med pattern.
  • Komplexa kapslade strukturer samt schemasammansättning och validering med: anyOf, oneOf, allOf, prefixItemseller $ref.
  • Listor med typer förutom specialfallet [type, “null”] där en typ i listan är en giltig JSON-typ och den andra är "null"

Strukturerade utdata med Anthropic Claude-modeller

Följande exempel extraherar data till ett specifikt JSON-schema med hjälp av en Claude-modell. Den enda förändringen från de tidigare exemplen är model värdet.

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

Claude-modeller har ytterligare begränsningar för strukturerade utdata. Se avsnittet Begränsningar.

Tokenanvändning

Snabbinmatning och andra tekniker används för att förbättra kvaliteten på strukturerade utdata. Detta påverkar antalet indata- och utdatatoken som används av modellen, vilket i sin tur resulterar i faktureringskonsekvenser.

Begränsningar

  • Det maximala antalet nycklar som anges i JSON-schemat är 64.
  • Foundation Model-API:er tillämpar inte längd- eller storleksbegränsningar för objekt och matriser.
    • Detta inkluderar nyckelord som maxProperties, minPropertiesoch maxLength.
  • Starkt kapslade JSON-scheman resulterar i lägre kvalitet. Om möjligt kan du prova att platta ut JSON-schemat för bättre resultat.

Anthropic Claude-modeller har följande ytterligare begränsningar för strukturerade utdata:

  • Endast den strukturerade json_schema utdatatypen stöds. json_object stöds inte. För obegränsad utdata, utelämna response_format.
  • Strukturerade utdata stöds inte med streaming. Sätt stream till false när du anger en response_format.
  • Parametern response_format för Claude-strukturerade utdata kan inte kombineras med tools eller tool_choice.