Dane wyjściowe ze strukturą w usłudze Azure Databricks
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej i jest obsługiwana zarówno w interfejsach API modelu foundation pay-per-token, jak i w punktach końcowych aprowizowanej przepływności.
W tym artykule opisano ustrukturyzowane dane wyjściowe w usłudze Azure Databricks i sposób ich używania w ramach przepływów pracy aplikacji generowania sztucznej inteligencji. Dane wyjściowe ze strukturą są zgodne z technologią OpenAI i są dostępne tylko podczas korzystania z modelu w ramach interfejsów API modelu foundation.
Co to są dane wyjściowe ze strukturą?
Dane wyjściowe ze strukturą umożliwiają generate danych strukturalnych w postaci obiektów JSON z danych wejściowych. Możesz wybrać generate tekst, obiekty JSON bez struktury i obiekty JSON zgodne z określonym schemaJSON. Dane wyjściowe ze strukturą są obsługiwane w przypadku modeli czatów obsługiwanych przy użyciu interfejsów API modelu foundation pay-per-token i aprowizowanych punktów końcowych przepływnoś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 Dokumentacja interfejsu API REST modelu programu Foundation.
Poniżej przedstawiono przykład wyodrębniania danych z dokumentów badawczych do określonego schemaJSON.
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-1-70b-instruct",
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 JSON schema nie jest znany z góry.
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-1-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
schema JSON
Interfejsy API modelu foundation obsługują ogólnie ustrukturyzowane dane wyjściowe akceptowane przez interfejs OpenAI. Jednak użycie prostszego schema JSON dla definicji schema JSON powoduje generowanie JSON o wyższej jakości. Aby podwyższyć jakość generowania, interfejsy API modelu bazowego obsługują tylko podzestaw specyfikacji JSON schema.
Następujące klucze definicji wywołań funkcji nie są obsługiwane:
- Wyrażenia regularne używające polecenia
pattern
. - Kompleksowe zagnieżdżenie lub kompozycja schema i walidacja przy użyciu:
anyOf
,oneOf
,allOf
,prefixItems
lub$ref
. - Listy typów z wyjątkiem specjalnego przypadku
[type, “null”]
where jeden typ w list jest prawidłowym typem JSON, a drugi jest"null"
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 w JSON schema została określona jako
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
,minProperties
imaxLength
.
- 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ć schema JSON, aby uzyskać lepsze wyniki.