Azure Databricks'te yapılandırılmış çıkışlar

Bu makalede, Azure Databricks'te yapılandırılmış çıkışlar ve bunları üretken yapay zeka uygulaması iş akışlarınızın bir parçası olarak nasıl kullanacağınız açıklanmaktadır. Yapılandırılmış çıkışlar, yapılandırılmış modelleri destekleyen OpenAI modelleriyle çalışır.

Tip

Genie Code (Aracı modu) bunu sizin için yapabilir. Şu örnek istemi deneyin:

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.

Yapılandırılmış çıkışlar nedir?

Yapılandırılmış çıkışlar, giriş verilerinizden JSON nesneleri biçiminde yapılandırılmış veriler oluşturmanın bir yolunu sağlar. Belirli bir JSON şemasına uygun metin, yapılandırılmamış JSON nesneleri ve JSON nesneleri oluşturmayı seçebilirsiniz. Yapılandırılmış çıkışlar, Temel Model API'leri aracılığıyla belirteç başına ödeme modeli ve sağlanan aktarım hızı uç noktaları kullanılarak sunulan sohbet modelleri için desteklenir.

Databricks, aşağıdaki senaryolar için yapılandırılmış çıkışların kullanılmasını önerir:

  • Büyük miktarlardaki belgelerden veri ayıklama. Örneğin, ürün gözden geçirme geri bildirimini negatif, pozitif veya nötr olarak tanımlama ve sınıflandırma.
  • Çıktıların belirtilen biçimde olmasını gerektiren toplu çıkarım görevleri.
  • Yapılandırılmamış verileri yapılandırılmış verilere dönüştürme gibi veri işleme.

Yapılandırılmış çıkışları kullanma

Sohbet isteğinizde response_format kullanarak yapılandırılmış çıktılarınızı belirtin. Bkz. Temel model REST API başvurusu.

Aşağıda, araştırma makalelerinin belirli bir JSON şemasına veri ayıklama örneği verilmiştir.

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))

Aşağıda bir JSON ayıklama örneği verilmiştir, ancak JSON şeması önceden bilinmez.

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 şeması

Temel Model API'leri, OpenAI tarafından kabul edilen yapılandırılmış çıkışları geniş ölçüde destekler. Ancak, JSON şema tanımları için daha basit bir JSON şeması kullanılması daha kaliteli JSON oluşturma ile sonuçlanır. Temel Model API'leri, daha yüksek kaliteli üretimi teşvik etmek için yalnızcaJSON şema belirtimlerinin bir alt kümesini destekler.

Aşağıdaki işlev çağrısı tanım anahtarları desteklenmez:

  • pattern kullanarak düzenli ifadeler.
  • Karmaşık iç içe veya şema bileşimi ve doğrulaması kullanımı: anyOf, oneOf, allOf, prefixItemsveya $ref.
  • [type, “null”] özel durumu dışında, listedeki türlerden birinin geçerli bir JSON türü olduğu ve diğerinin "null" olduğu tür listeleri.

Jeton kullanımı

Yapılandırılmış çıktıların kalitesini arttırmak için istem enjeksiyonu ve diğer teknikler kullanılır. Bunun yapılması model tarafından kullanılan giriş ve çıkış belirteçlerinin sayısını etkiler ve bu da faturalamanın sonuçlarına neden olur.

Sınırlamalar

  • JSON şemasında belirtilen en fazla anahtar sayısı 64.
  • Temel Model API'leri nesneler ve diziler için uzunluk veya boyut kısıtlamalarını zorlamaz.
    • Bu, , maxPropertiesve minPropertiesgibi maxLengthanahtar sözcükleri içerir.
  • Yoğun şekilde iç içe JSON şemaları daha düşük kalite üretimine neden oldu. Mümkünse daha iyi sonuçlar için JSON şemasını düzleştirmeyi deneyin.
  • Antropik Claude modelleri yalnızca yapılandırılmış çıkışları kabul json_schema edebilir. json_object desteklenmez.