Output-output terstruktur pada Azure Databricks

Output terstruktur di Azure Databricks memungkinkan Anda menghasilkan respons dalam format JSON yang telah ditentukan sebagai bagian dari alur kerja aplikasi AI Anda. Mereka bekerja dengan model chat yang didukung melalui sebuah response_format field. Anda menggunakan format permintaan yang sama tanpa memandang penyedia model dasarnya. Azure Databricks menangani terjemahan spesifik penyedia untuk Anda, sehingga Anda tidak perlu menggunakan format output terstruktur asli dari penyedia tersebut.

Tip

Genie Code (mode Agen) dapat melakukan ini untuk Anda. Coba perintah contoh ini:

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.

Apa itu output terstruktur?

Output terstruktur menyediakan cara untuk menghasilkan data terstruktur dalam bentuk objek JSON dari data input Anda. Anda dapat memilih untuk menghasilkan teks, objek JSON yang tidak terstruktur, dan objek JSON yang mematuhi skema JSON tertentu. Output terstruktur didukung untuk model obrolan yang menggunakan API Model Foundation dengan sistem bayar per token dan endpoint throughput yang dipersiapkan.

Databricks merekomendasikan penggunaan output terstruktur untuk skenario berikut:

  • Mengekstrak data dari sejumlah besar dokumen. Misalnya, mengidentifikasi dan mengklasifikasikan umpan balik ulasan produk sebagai negatif, positif, atau netral.
  • Tugas inferensi batch yang memerlukan output dalam format tertentu.
  • Pemrosesan data, seperti mengubah data yang tidak terstruktur menjadi data terstruktur.

Menggunakan output terstruktur

Tentukan output terstruktur Anda menggunakan response_format dalam permintaan obrolan Anda. Lihat Referensi REST API untuk model dasar.

Berikut ini adalah contoh ekstraksi data makalah penelitian ke skema JSON tertentu.

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

Berikut ini adalah contoh ekstraksi JSON, tetapi skema JSON tidak diketahui sebelumnya.

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

Skema JSON

API Model Foundation secara luas mendukung output terstruktur yang diterima oleh OpenAI. Namun, menggunakan skema JSON yang lebih sederhana untuk definisi skema JSON menghasilkan generasi JSON berkualitas lebih tinggi. Untuk mempromosikan pembuatan kualitas yang lebih tinggi, API Model Foundation hanya mendukung subset spesifikasi skema JSON .

Kunci definisi panggilan fungsi berikut tidak didukung:

  • Ekspresi reguler menggunakan pattern.
  • Komposisi dan validasi berlapis atau skema kompleks menggunakan: anyOf, oneOf, allOf, prefixItems, atau $ref.
  • Daftar jenis kecuali untuk kasus khusus [type, “null”] di mana satu jenis dalam daftar adalah jenis JSON yang valid dan yang lainnya "null"

Output terstruktur dengan model Anthropic Claude

Contoh berikut mengekstrak data ke skema JSON tertentu menggunakan model Claude. Satu-satunya perubahan dari contoh sebelumnya adalah nilainya 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))

Model Claude memiliki batasan tambahan untuk output terstruktur. Lihat bagian Keterbatasan.

Penggunaan token

Injeksi prompt dan teknik lain digunakan untuk meningkatkan kualitas output terstruktur. Melakukannya berdampak pada jumlah token input dan output yang digunakan oleh model, yang pada gilirannya menghasilkan implikasi penagihan.

Batasan

  • Jumlah maksimum kunci yang ditentukan dalam skema JSON adalah 64.
  • API Model Foundation tidak memberlakukan batasan panjang atau ukuran untuk objek dan array.
    • Ini termasuk kata kunci seperti maxProperties, minProperties, dan maxLength.
  • Skema JSON yang sangat berlapis menghasilkan pembuatan kualitas yang lebih rendah. Jika memungkinkan, cobalah meratakan skema JSON untuk hasil yang lebih baik.

Model Anthropic Claude memiliki kendala tambahan berikut untuk output terstruktur:

  • Hanya tipe json_schema output terstruktur yang didukung. json_object tidak didukung. Untuk output tanpa batasan, hilangkan .response_format
  • Output terstruktur tidak didukung dengan streaming. Atur stream ke false saat Anda menentukan .response_format
  • Parameter response_format untuk keluaran terstruktur Claude tidak dapat digabungkan dengan tools atau tool_choice.