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-1-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-1-70b-instruct",
    messages=messages,
    response_format=response_format
)

print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))

Esquema do 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 de Base suportam apenas um subconjunto de 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 em [type, “null”] 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.