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