Partilhar via


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, prefixItemsou $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, minPropertiese maxLength.
  • Esquemas JSON fortemente aninhados resultam em geração de qualidade inferior. Se possível, tente nivelar o esquema JSON para obter melhores resultados.