Структурированные выходные данные в Azure Databricks

Структурированные выводы на Azure Databricks позволяют генерировать ответы в определённом формате JSON в рамках рабочих процессов вашего AI-приложения. Они работают с любой поддерживаемой моделью чата через определённую response_format область. Вы используете один и тот же формат запроса независимо от поставщика базовой модели. Azure Databricks обрабатывает любой перевод, специфичный для провайдера, поэтому вам не нужно использовать встроенный формат структурированных выводов провайдера.

Tip

Код Genie (режим агента) может сделать это для вас. Попробуйте следующий пример запроса:

Query the databricks-gpt-oss-20b model with a JSON schema response format to extract title, authors, abstract, and keywords from a research paper description. Note: this model returns content as a list of blocks; extract the block with type "text" and parse it.

Что такое структурированные выходные данные?

Структурированные выходные данные позволяют создавать структурированные данные в виде объектов JSON из входных данных. Вы можете создать текст, неструктурированные объекты JSON и объекты JSON, которые соответствуют определенной схеме JSON. Поддерживаются структурированные результаты для моделей чата, поставляемых с помощью API Foundation Model с оплатой за токен и конфигурируемых конечных точек с пропускной способностью.

Databricks рекомендует использовать структурированные выходные данные для следующих сценариев:

  • Извлечение данных из больших объемов документов. Например, определение и классификация отзывов о продукте как отрицательные, положительные или нейтральные.
  • Задачи пакетного вывода, требующие выходных данных в указанном формате.
  • Обработка данных, например преобразование неструктурированных данных в структурированные данные.

Использование структурированных выходных данных

Укажите в запросе чата структурированные выходные данные, используя response_format. См. справочник по REST API модели Foundation.

Ниже приведен пример извлечения данных исследовательских статей в определенную схему JSON.

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-gpt-oss-20b",
    messages=messages,
    response_format=response_format
)

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

Ниже приведен пример извлечения JSON, но схема JSON неизвестна заранее.

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-gpt-oss-20b",
    messages=messages,
    response_format=response_format
)

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

Схема JSON

API модели foundation широко поддерживают структурированные выходные данные, принятые OpenAI. Однако использование более простой схемы JSON для определений схем JSON приводит к повышению качества создания JSON. Чтобы повысить качество генерации, API базовой модели поддерживают только ограниченный набор спецификаций схемы JSON .

Следующие ключи определения вызова функции не поддерживаются:

  • Регулярные выражения, использующие pattern.
  • Сложная компоновка или валидация вложенных схем с помощью: anyOf, oneOf, allOf, prefixItemsили $ref.
  • Списки типов, за исключением особых случаев [type, “null”], где один тип в списке является допустимым типом JSON, а другой — "null"

Структурированные выходы с моделями Anthropic Claude

Следующий пример извлекает данные в конкретную схему JSON с помощью модели Клода. Единственное отличие от предыдущих примеров — это значение model значения.

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-claude-sonnet-4-5",
    messages=messages,
    response_format=response_format
)

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

Модели Клода имеют дополнительные ограничения для структурированных выходов. См. раздел «Ограничения».

Использование токенов

Внедрение запросов и другие методы используются для повышения качества структурированных выходных данных. Это влияет на количество входных и выходных маркеров, потребляемых моделью, что в свою очередь приводит к последствиям выставления счетов.

Ограничения

  • Максимальное количество ключей, указанных в схеме JSON, равно 64.
  • API-интерфейсы модели Foundation не применяют ограничения длины или размера для объектов и массивов.
    • Это включает такие ключевые слова, как maxProperties, minPropertiesи maxLength.
  • Сильно вложенные схемы JSON приводят к снижению качества генерации. Попробуйте по возможности упростить структуру схемы JSON для улучшения результатов.

Anthropic Claude модели имеют следующие дополнительные ограничения для структурированных выходов:

  • Поддерживается только json_schema структурированный выходной тип. Функция json_object не поддерживается. Для неограниченного выхода опускайте response_format.
  • Структурированные выходы не поддерживаются при стриминге. Установите stream на false , когда вы указываете .response_format
  • Параметр response_format для структурированных выходов Клода нельзя комбинировать с tools или tool_choice.