Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ustrukturyzowane dane wyjściowe w Azure Databricks pozwalają generować odpowiedzi w określonym formacie JSON jako część workflow aplikacji AI. Pracują z dowolnym obsługiwanym modelem czatu za pomocą pola response_format. Używasz tego samego formatu żądania niezależnie od dostawcy modelu. Azure Databricks obsługuje wszelkie tłumaczenia specyficzne dla dostawcy, więc nie musisz używać natywnego formatu ustrukturyzowanych danych wyjściowych danego dostawcy.
Tip
Genie Code może to zrobić za Ciebie. Wypróbuj ten przykładowy monit:
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.
Co to są dane wyjściowe strukturyzowane?
Dane wyjściowe ze strukturą umożliwiają generowanie danych strukturalnych w postaci obiektów JSON na podstawie danych wejściowych. Możesz wygenerować tekst, obiekty JSON bez struktury i obiekty JSON zgodne z określonym schematem JSON. Dane wyjściowe o ustalonej strukturze są obsługiwane przez modele czatu korzystające z interfejsów API modeli bazowych, które działają na zasadzie opłat za token oraz przez aprowizowane punkty końcowe wydajności.
Usługa Databricks zaleca używanie danych wyjściowych ze strukturą w następujących scenariuszach:
- Wyodrębnianie danych z dużych ilości dokumentów. Na przykład identyfikowanie i klasyfikowanie opinii o recenzji produktu jako negatywne, pozytywne lub neutralne.
- Zadania wnioskowania wsadowego, które wymagają danych wyjściowych w określonym formacie.
- Przetwarzanie danych, takie jak przekształcanie danych bez struktury na dane ustrukturyzowane.
Używanie danych wyjściowych ze strukturą
Określ ustrukturyzowane dane wyjściowe przy użyciu response_format w żądaniu czatu. Zobacz Odniesienie do modelu Foundation API REST.
Poniżej przedstawiono przykład wyodrębniania danych dokumentów badawczych do określonego schematu 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-gpt-oss-20b",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
Poniżej przedstawiono przykład wyodrębniania JSON, ale schemat JSON nie jest znany wcześniej.
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))
Schemat JSON
Interfejsy API modeli bazowych szeroko wspierają ustrukturyzowane dane wyjściowe akceptowane przez OpenAI. Jednak użycie prostszego schematu JSON dla definicji schematu JSON powoduje generowanie JSON o wyższej jakości. Aby podwyższyć jakość generowania, interfejsy API modelu fundacyjnego obsługują tylko podzestaw specyfikacji schematu JSON .
Następujące klucze definicji wywołań funkcji nie są obsługiwane:
- Wyrażenia regularne wykorzystujące
pattern. - Złożone zagnieżdżanie lub komponowanie schematów i ich walidacja przy użyciu:
anyOf,oneOf,allOf,prefixItemslub$ref. - Listy typów z wyjątkiem specjalnego przypadku
[type, “null”], w którym jeden typ na liście jest prawidłowym typem JSON, a drugi jest"null"
Ustrukturyzowane wyniki z modelami Anthropic Claude
Poniższy przykład wyodrębnia dane do konkretnego schematu JSON za pomocą modelu Claude'a. Jedyną zmianą względem poprzednich przykładów jest wartość model .
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))
Modele Claude'a mają dodatkowe ograniczenia dotyczące ustrukturyzowanych danych wyjściowych. Zobacz sekcję Ograniczenia.
Użycie tokenu
Iniekcja monitów i inne techniki są używane w celu zwiększenia jakości ustrukturyzowanych danych wyjściowych. Ma to wpływ na liczbę tokenów wejściowych i wyjściowych używanych przez model, co z kolei powoduje implikacje dotyczące rozliczeń.
Ograniczenia
- Maksymalna liczba kluczy określonych w schemacie JSON wynosi
64. - Interfejsy API modelu foundation nie wymuszają ograniczeń dotyczących długości ani rozmiaru obiektów i tablic.
- Obejmuje to słowa kluczowe, takie jak
maxProperties,minPropertiesimaxLength.
- Obejmuje to słowa kluczowe, takie jak
- Silnie zagnieżdżone schematy JSON powodują generowanie niższej jakości. Jeśli to możliwe, spróbuj spłaszczać schemat JSON, aby uzyskać lepsze wyniki.
Modele Anthropic Claude mają następujące dodatkowe ograniczenia dla wyników strukturalnych:
- Obsługiwany jest tylko typ
json_schemaustrukturyzowanego wyjścia.json_objectnie jest obsługiwana. Dla wyjścia bez ograniczeń pomijamyresponse_format. - Ustrukturyzowane dane wyjściowe nie są obsługiwane przez streaming. Ustaw
streamnafalse, gdy określiszresponse_format - Parametr
response_formatdla wyjść strukturalnych Claude'a nie może być połączony ani ztools, ani ztool_choice. -
databricks-claude-opus-5-5,databricks-claude-sonnet-5-5,databricks-claude-haiku-5-5orazdatabricks-claude-fable-5-1nie obsługująresponse_formatw interfejsie API Chat Completions. Żądanie określająceresponse_formatdla tych modeli zwraca błąd HTTP400. Dla Opus 5.5, Sonnet 5.5 i Haiku 5.5 użyj zamiast tego polaformatoutput_configz API Anthropic Messages. - Przy
databricks-claude-opus-5żądanie może zwrócić odpowiedź zfinish_reasonustawioną nacontent_filter, jeśli model odrzuci żądanie wyjścia strukturalnego. W takim przypadku wyjście może nie być zgodne ze schematem. Sprawdźfinish_reasonzanim przeanalizujesz wynik.