Output terstruktur untuk model terbuka

Output terstruktur memungkinkan model menghasilkan output yang selalu sesuai dengan skema tertentu. Misalnya, model dapat dilengkapi dengan skema respons untuk memastikan bahwa respons menghasilkan JSON yang valid. Semua model terbuka yang tersedia di Vertex AI Model as a Service (MaaS) mendukung output terstruktur.

Untuk mengetahui informasi konseptual selengkapnya tentang kemampuan output terstruktur, lihat Pengantar output terstruktur.

Menggunakan output terstruktur

Kasus penggunaan berikut menetapkan skema respons yang memastikan bahwa output model adalah objek JSON dengan properti berikut: name, date, dan participants. Kode Python menggunakan OpenAI SDK dan objek Pydantic untuk membuat skema JSON.

from pydantic import BaseModel
from openai import OpenAI

client = OpenAI()

class CalendarEvent(BaseModel):
    name: str
    date: str
    participants: list[str]

completion = client.beta.chat.completions.parse(
    model="MODEL_NAME",
    messages=[
        {"role": "system", "content": "Extract the event information."},
        {"role": "user", "content": "Alice and Bob are going to a science fair on Friday."},
    ],
    response_format=CalendarEvent,
)

print(completion.choices[0].message.parsed)

Output model akan mematuhi skema JSON berikut:

{ "name": STRING, "date": STRING, "participants": [STRING] }

Jika diberi perintah, "Alice dan Bob akan pergi ke pameran sains pada hari Jumat", model dapat menghasilkan respons berikut:

{
  "name": "science fair",
  "date": "Friday",
  "participants": [
    "Alice",
    "Bob"
  ]
}

Contoh mendetail

Kode berikut adalah contoh skema rekursif. Class UI berisi daftar children, yang juga dapat berupa class UI.

from pydantic import BaseModel
from openai import OpenAI
from enum import Enum
from typing import List

client = OpenAI()

class UIType(str, Enum):
  div = "div"
  button = "button"
  header = "header"
  section = "section"
  field = "field"
  form = "form"

class Attribute(BaseModel):
  name: str
  value: str

class UI(BaseModel):
  type: UIType
  label: str
  children: List["UI"]
  attributes: List[Attribute]

UI.model_rebuild() # This is required to enable recursive types

class Response(BaseModel):
  ui: UI

completion = client.beta.chat.completions.parse(
  model="MODEL_NAME",
  messages=[
    {"role": "system", "content": "You are a UI generator AI. Convert the user input into a UI."},
    {"role": "user", "content": "Make a User Profile Form"}
  ],
  response_format=Response,
)

print(completion.choices[0].message.parsed)

Output model akan mematuhi skema objek Pydantic yang ditentukan dalam cuplikan sebelumnya. Dalam contoh ini, model dapat menghasilkan formulir UI berikut:

Form
  Input
    Name
    Email
    Age

Responsnya dapat terlihat seperti berikut:

ui = UI(
    type=UIType.div,
    label='Form',
    children=[
        UI(
            type=UIType.div,
            label='Input',
            children=[],
            attributes=[
                Attribute(name='label', value='Name')
            ]
        ),
        UI(
            type=UIType.div,
            label='Input',
            children=[],
            attributes=[
                Attribute(name='label', value='Email')
            ]
        ),
        UI(
            type=UIType.div,
            label='Input',
            children=[],
            attributes=[
                Attribute(name='label', value='Age')
            ]
        )
    ],
    attributes=[
        Attribute(name='name', value='John Doe'),
        Attribute(name='email', value='john.doe@example.com'),
        Attribute(name='age', value='30')
    ]
)