Saídas estruturadas no Azure Databricks
Importante
Esse recurso está na visualização pública e é suportado em APIs do Foundation Model pay-per-token e pontos de extremidade de taxa de transferência provisionada.
Este artigo descreve saídas estruturadas no Azure Databricks e como usá-las como parte de seus fluxos de trabalho de aplicativos de IA generativos. As saídas estruturadas são compatíveis com OpenAI e só estão disponíveis durante o modelo que serve como parte das APIs do Foundation Model.
O que são saídas estruturadas?
As saídas estruturadas fornecem uma maneira de gerar dados estruturados na forma de objetos JSON a partir de seus dados de entrada. Você pode optar por gerar texto, objetos JSON não estruturados e objetos JSON que aderem a um esquema JSON específico. As saídas estruturadas são suportadas para modelos de chat servidos usando APIs do Modelo de Base, pagamento por token e pontos de extremidade de taxa de transferência provisionados.
O Databricks recomenda o uso de saídas estruturadas para os seguintes cenários:
- Extração de dados de grandes quantidades de documentos. Por exemplo, identificar e classificar o feedback da avaliação do produto como negativo, positivo ou neutro.
- Tarefas de inferência em lote que exigem que as saídas estejam em um formato especificado.
- Processamento de dados, como transformar dados não estruturados em dados estruturados.
Usar saídas estruturadas
Especifique suas saídas estruturadas usando response_format
sua solicitação de chat. Consulte Referência da API REST do modelo de fundação.
A seguir está um exemplo de extração de dados de artigos de pesquisa para um esquema JSON específico.
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))
A seguir está um exemplo de extração JSON, mas o esquema JSON não é conhecido de antemão.
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))
Esquema JSON
As APIs do Modelo de Fundação suportam amplamente saídas estruturadas aceitas pela OpenAI. No entanto, o uso de um esquema JSON mais simples para definições de esquema JSON resulta na geração de JSON de maior qualidade. Para promover a geração de maior qualidade, as APIs do Modelo Fundamental suportam apenas um subconjunto das especificações de esquema JSON .
As seguintes teclas de definição de chamada de função não são suportadas:
- Expressões regulares usando
pattern
. - Composição e validação complexas aninhadas ou de esquema usando:
anyOf
,oneOf
,allOf
,prefixItems
ou$ref
. - Listas de tipos, exceto no caso especial de
[type, “null”]
em que um tipo na lista é um tipo JSON válido e o outro é"null"
Uso de token
A injeção imediata e outras técnicas são usadas para melhorar a qualidade dos resultados estruturados. Isso afeta o número de tokens de entrada e saída consumidos pelo modelo, o que, por sua vez, resulta em implicações de faturamento.
Limitações
- O número máximo de chaves especificado no esquema JSON é
64
. - As APIs do Modelo de Base não impõem restrições de comprimento ou tamanho para objetos e matrizes.
- Isso inclui palavras-chave como
maxProperties
,minProperties
emaxLength
.
- Isso inclui palavras-chave como
- Esquemas JSON fortemente aninhados resultam em geração de qualidade inferior. Se possível, tente nivelar o esquema JSON para obter melhores resultados.