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“. Im Python-Code werden das OpenAI SDK und Pydantic-Objekte verwendet, 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')
]
)
JSON-Objektantworten erhalten
Sie können das Modell so einschränken, dass es nur syntaktisch gültige JSON-Objekte ausgibt, indem Sie das Feld response_format
auf { "type": "json_object" }
setzen. Dies wird häufig als JSON-Modus bezeichnet. Der JSON-Modus ist nützlich, wenn Sie JSON für die Verwendung mit Funktionsaufrufen oder anderen Downstream-Aufgaben generieren, die eine JSON-Eingabe erfordern.
Wenn der JSON-Modus aktiviert ist, darf das Modell nur Strings generieren, die in gültige JSON-Objekte geparst werden können. In diesem Modus wird zwar sichergestellt, dass die Ausgabe syntaktisch korrektes JSON ist, es wird jedoch kein bestimmtes Schema erzwungen. Damit das Modell JSON ausgibt, das einem bestimmten Schema entspricht, müssen Sie Anweisungen in den Prompt aufnehmen, wie im folgenden Beispiel gezeigt.
Die folgenden Beispiele zeigen, wie Sie den JSON-Modus aktivieren und das Modell anweisen, ein JSON-Objekt mit einer bestimmten Struktur zurückzugeben:
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Python-Einrichtungsschritten in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Python API.
Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Bevor Sie dieses Beispiel ausführen, müssen Sie die Umgebungsvariable OPENAI_BASE_URL
festlegen.
Weitere Informationen finden Sie unter Authentifizierung und Anmeldedaten.
from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="MODEL", response_format={ "type": "json_object" }, messages=[ {"role": "user", "content": "List 5 rivers in South America. Your response must be a JSON object with a single key \"rivers\", which has a list of strings as its value."}, ] ) print(response.choices[0].message.content)
Ersetzen Sie MODEL
durch den Modellnamen, den Sie verwenden möchten, z. B. meta/llama3-405b-instruct-maas
.
REST
Nachdem Sie Ihre Umgebung eingerichtet haben, können Sie mit REST einen Text-Prompt testen. Im folgenden Beispiel wird eine Anfrage an den Publisher gesendet Modellendpunkt zu erstellen.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- PROJECT_ID: Ihre Google Cloud-Projekt-ID.
- LOCATION: Eine Region, die offene Modelle unterstützt.
- MODEL: Der Modellname, den Sie verwenden möchten, z. B.
meta/llama3-405b-instruct-maas
.
HTTP-Methode und URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions
JSON-Text der Anfrage:
{ "model": "MODEL", "response_format": { "type": "json_object" }, "messages": [ { "role": "user", "content": "List 5 rivers in South America. Your response must be a JSON object with a single key \"rivers\", which has a list of strings as its value." } ] }
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"
PowerShell
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
Nächste Schritte
- Weitere Informationen zu Funktionsaufrufen
- Weitere Informationen zum Denkprozess
- Weitere Informationen zu Batchvorhersagen