Sdílet prostřednictvím


Strukturované výstupy v Azure Databricks

Důležité

Tato funkce je ve verzi Public Preview a je podporovaná v rozhraních API základního modelu s průběžnými platbami za token i ve zřízených koncových bodech propustnosti.

Tento článek popisuje strukturované výstupy v Azure Databricks a jejich použití jako součást pracovních postupů generující aplikace AI. Strukturované výstupy jsou kompatibilní s OpenAI a jsou k dispozici pouze během modelování, které slouží jako součást rozhraní API pro základní modely.

Co jsou strukturované výstupy?

Strukturované výstupy poskytují způsob generování strukturovaných dat ve formě objektů JSON ze vstupních dat. Můžete se rozhodnout generovat text, nestrukturované objekty JSON a objekty JSON, které odpovídají určitému schématu JSON. Strukturované výstupy jsou podporované pro modely chatu obsluhované pomocí rozhraní API pro základní modely plateb za token a zřízené koncové body propustnosti.

Databricks doporučuje používat strukturované výstupy pro následující scénáře:

  • Extrahování dat z velkých objemů dokumentů Například identifikace a klasifikace zpětné vazby k produktu jako negativní, pozitivní nebo neutrální.
  • Dávkové odvozovací úkoly, které vyžadují, aby výstupy byly v zadaném formátu.
  • Zpracování dat, jako je například přeměna nestrukturovaných dat na strukturovaná data.

Použití strukturovaných výstupů

Zadejte strukturované výstupy, které používáte response_format v žádosti o chat. Viz referenční informace k rozhraní REST API základního modelu.

Následuje příklad extrakce dat z výzkumných studií do konkrétního schématu JSON.

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-meta-llama-3-3-70b-instruct",
    messages=messages,
    response_format=response_format
)

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

Následuje příklad extrakce JSON, ale schéma JSON není předem známo.

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-meta-llama-3-3-70b-instruct",
    messages=messages,
    response_format=response_format
)

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

Schéma JSON

Rozhraní API základního modelu široce podporují strukturované výstupy přijaté openAI. Použití jednoduššího schématu JSON pro definice schématu JSON ale vede k vyšší kvalitě generování JSON. Aby bylo možné zvýšit úroveň generování kvality, rozhraní API modelu Foundation podporují pouze podmnožinu specifikací schématu JSON .

Následující klíče definic volání funkce nejsou podporovány:

  • Regulární výrazy používající pattern.
  • Složité vnořené složení nebo ověřování schématu pomocí: anyOf, oneOf, allOf, prefixItemsnebo $ref.
  • Seznamy typů s výjimkou speciálních případů [type, “null”], kdy je jeden typ v seznamu platným typem JSON a druhý typ je "null"

Využití tokenů

Injektáž výzvy a další techniky se používají ke zvýšení kvality strukturovaných výstupů. To má vliv na počet vstupních a výstupních tokenů spotřebovaných modelem, což zase vede k důsledkům fakturace.

Omezení

  • Maximální počet klíčů zadaných ve schématu JSON je 64.
  • Rozhraní API základního modelu nevynucují omezení délky nebo velikosti objektů a polí.
    • To zahrnuje klíčová slova jako maxProperties, minPropertiesa maxLength.
  • Silně vnořené schémata JSON vedou ke generování nižší kvality. Pokud je to možné, zkuste zploštět schéma JSON, aby se zlepšily výsledky.