Поделиться через


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

Внимание

Эта функция доступна в общедоступной предварительной версии и поддерживается как в API-интерфейсах модели Foundation за токен, так и в подготовленных конечных точках пропускной способности.

В этой статье описываются структурированные выходные данные в Azure Databricks и их использование в рамках рабочих процессов создания приложений ИИ. Структурированные выходные данные совместимы с OpenAI и доступны только во время работы модели в рамках API-интерфейсов модели Foundation.

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

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

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-meta-llama-3-3-70b-instruct",
    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-meta-llama-3-3-70b-instruct",
    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 моделей Foundation поддерживают лишь ограниченный набор спецификаций схемы JSON .

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

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

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

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

Ограничения

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