Saídas estruturadas em Databricks

Prévia

Esse recurso está em Public Preview e é compatível com o Foundation Model APIs pay-per-tokens e com o provisionamento Taxa de transferência endpoint.

Este artigo descreve os resultados estruturados em Databricks e como usá-los como parte do fluxo de trabalho de seu aplicativo generativo AI. As saídas estruturadas são compatíveis com o OpenAI e só estão disponíveis durante o servindo modelo como parte do Foundation Model APIs.

O que são saídas estruturadas?

As saídas estruturadas oferecem uma maneira de gerar dados estruturados na forma de objetos JSON a partir de seus dados de entrada. O senhor 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 compatíveis com os modelos de bate-papo atendidos usando o Foundation Model APIs pay-per-tokens e o endpoint de provisionamento da Taxa de transferência.

A 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.

  • A tarefa de inferência de lotes que exige que os resultados estejam em um formato específico.

  • Processamento de dados, como transformar dados não estruturados em dados estruturados.

Use saídas estruturadas

Especifique suas saídas estruturadas usando response_format em sua solicitação de bate-papo. Consulte a referência da API REST do modelo Foundation.

A seguir, 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, um exemplo de extração de 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 JSON

As APIs do Foundation Model suportam amplamente as 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 de JSON de maior qualidade. Para promover uma geração de maior qualidade, as APIs do Foundation Model suportam apenas um subconjunto de especificações de esquema JSON.

A seguinte chave de definição de chamada de função não é suportada:

  • Expressões regulares usando pattern.

  • Composição e validação complexas aninhadas ou de esquemas 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 tokens

A injeção rápida 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, 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 Foundation Model não impõem restrições de comprimento ou tamanho para objetos e matrizes.

    • Isso inclui palavras-chave como maxProperties, minProperties e maxLength.

  • Os esquemas JSON muito aninhados resultam em uma geração de qualidade inferior. Se possível, tente achatar o esquema JSON para obter melhores resultados.