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.
Strukturalne wyjścia w Azure Databricks pozwalają generować odpowiedzi w określonym formacie JSON jako część workflow aplikacji AI. Pracują z dowolnym obsługiwanym modelem czatu przez pole response_format operacyjne. 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 strukturalnych wyjść danego dostawcy.
Tip
Kod Genie (tryb agenta) 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"
Strukturalne 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 dla wyników strukturalnych. 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
json_schemajest tylko typ strukturalnego wyjścia.json_objectnie jest obsługiwana. Dla wyjścia bez ograniczeń pomijamyresponse_format. - Strukturalne wyjścia nie są wspierane przez streaming. Ustaw
streamtak, żefalsegdy określasz .response_format - Parametr
response_formatdla wyjść strukturalnych Claude'a nie może być połączony ztoolslubtool_choice.