Saídas estruturadas no Azure Databricks
Importante
Esse recurso está em Visualização Pública e tem suporte em pontos de extremidade de taxa de transferência provisionada e de pagamento por token das APIs do Foundation Model.
Este artigo descreve as saídas estruturadas no Azure Databricks e como usá-las como parte de seus fluxos de trabalho de aplicativo de IA generativa. 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 têm suporte para modelos de chat atendidos usando APIs do Foundation Model, pay-per-token e endpoints de taxa de transferência provisionada.
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
em sua solicitação de chat. Consulte Referência da API REST do modelo Foundation.
Veja a seguir um exemplo de extração de dados de trabalhos 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-1-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
Veja a seguir 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-1-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
JSON schema
As APIs do Foundation Model oferecem suporte amplo a saídas estruturadas aceitas pela OpenAI. No entanto, o uso de um esquema JSON mais simples para definições de esquema JSON resulta em uma geração JSON de maior qualidade. Para promover uma geração de maior qualidade, as APIs do modelo de base só dão suporte a um subconjunto de especificações de esquema JSON.
As seguintes chaves de definição de chamada de função não têm suporte:
- Expressões regulares que usam
pattern
. - Composição e validação de esquemas ou aninhadas e complexas que usam
anyOf
,oneOf
,allOf
,prefixItems
ou$ref
. - Listas de tipos, exceto para o 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 das saídas estruturadas. Isso afeta o número de tokens de entrada e saída consumidos pelo modelo, o que resulta em implicações na cobrança.
Limitações
- O número máximo de chaves especificadas 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 simplificar o esquema JSON para obter melhores resultados.