Strukturierte Ausgaben ermöglichen es einem Modell, Ausgaben zu generieren, die immer einem bestimmten Schema entsprechen. Einem Modell kann beispielsweise ein Antwortschema zur Verfügung gestellt werden, um sicherzustellen, dass die Antwort gültiges JSON enthält. Alle offenen Modelle, die in Vertex AI Model as a Service (MaaS) verfügbar sind, unterstützen strukturierte Ausgaben.
Weitere konzeptionelle Informationen zur Funktion für strukturierte Ausgaben finden Sie unter Einführung in strukturierte Ausgaben.
Strukturierte Ausgaben verwenden
Im folgenden Anwendungsbeispiel wird ein Antwortschema festgelegt, das dafür sorgt, dass die Modellausgabe ein JSON-Objekt mit den folgenden Attributen ist: „name“, „date“ und „participants“. Der Python-Code verwendet das OpenAI SDK und Pydantic-Objekte, um das JSON-Schema zu generieren.
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)
Die Modellausgabe entspricht dem folgenden JSON-Schema:
{ "name": STRING, "date": STRING, "participants": [STRING] }
Wenn das Modell den Prompt „Alice und Bob gehen am Freitag zu einer Wissenschaftsmesse“ erhält, könnte es die folgende Antwort generieren:
{
"name": "science fair",
"date": "Friday",
"participants": [
"Alice",
"Bob"
]
}
Detailliertes Beispiel
Der folgende Code ist ein Beispiel für ein rekursives Schema. Die Klasse UI
enthält eine Liste von children
, die auch zur Klasse UI
gehören können.
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)
Die Modellausgabe entspricht dem Schema des Pydantic-Objekts, das im vorherigen Snippet angegeben wurde. In diesem Beispiel könnte das Modell das folgende UI-Formular generieren:
Form
Input
Name
Email
Age
Eine Antwort könnte so aussehen:
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')
]
)