Sie können dafür sorgen, dass die generierte Ausgabe eines Modells immer einem bestimmten Schema entspricht, sodass Sie konsistent formatierte Antworten erhalten. Sie haben beispielsweise ein festgelegtes Datenschema, das Sie für andere Aufgaben verwenden. Wenn das Modell demselben Schema folgt, können Sie Daten direkt aus der Ausgabe des Modells ohne Nachbearbeitung extrahieren.
Definieren Sie zum Angeben der Struktur der Ausgabe eines Modells ein Antwortschema, das als Vorlage für Modellantworten fungiert. Wenn Sie einen Prompt einreichen und das Antwortschema angeben, folgt die Antwort des Modells immer dem von Ihnen definierten Schema.
Sie können die generierte Ausgabe mit den folgenden Modellen steuern:
- Gemini 1.5 Pro,
- Gemini 1.5 Flash
Informationen zu Funktionsaufrufen mit gesteuerter Generierung (auch erzwungene Funktionsaufrufe genannt) finden Sie unter Einführung in Funktionsaufrufe.
Beispielanwendungsfälle
Ein Anwendungsfall für die Anwendung eines Antwortschemas besteht darin, sicherzustellen, dass die Antwort eines Modells einen gültigen JSON-Code erzeugt und Ihrem Schema entspricht. Die Ausgaben eines generativen Modells können einen gewissen Grad an Variabilität aufweisen. Durch das Einbinden eines Antwortschemas wird sichergestellt, dass Sie immer gültige JSON-Daten erhalten. Folglich können Ihre nachgelagerten Aufgaben zuverlässig gültige JSON-Eingaben aus generierten Antworten erwarten.
Ein weiteres Beispiel ist die Einschränkung der Reaktion eines Modells. Sie können beispielsweise festlegen, dass ein Modell Text mit benutzerdefinierten Labels annotiert, nicht mit Labels, die vom Modell erstellt werden. Diese Einschränkung ist nützlich, wenn Sie eine bestimmte Gruppe von Labels wie positive
oder negative
erwarten und keine Mischung aus anderen Labels erhalten möchten, die vom Modell generiert werden könnten, z. B. good
, positive
, negative
oder bad
.
Hinweise
In den folgenden Abschnitten werden mögliche Einschränkungen bei der Verwendung eines Antwortschemas beschrieben:
- Sie müssen die API verwenden, um ein Antwortschema zu definieren und zu verwenden. Es gibt keinen Support für Konsolen.
- Die Größe des Antwortschemas wird auf das Eingabetokenlimit angerechnet.
- Es werden nur bestimmte Ausgabeformate unterstützt, z. B.
application/json
odertext/x.enum
. Weitere Informationen finden Sie im Abschnitt zum ParameterresponseMimeType
in der Gemini API-Referenz. Die gesteuerte Generierung unterstützt die folgenden Schemafelder, die einen Teil der von Vertex AI unterstützten Felder ausmachen:
enum
items
maxItems
nullable
properties
required
Wenn Sie ein nicht unterstütztes Feld verwenden, kann Vertex AI Ihre Anfrage zwar bearbeiten, ignoriert das Feld aber. Details zu den einzelnen Feldern finden Sie in der Vertex AI-Schemareferenz.
Vorbereitung
Definieren Sie ein Antwortschema, um die Struktur der Ausgabe eines Modells, die Feldnamen und den erwarteten Datentyp für jedes Feld anzugeben. Verwenden Sie nur die im Abschnitt Hinweise aufgeführten unterstützten Felder. Alle anderen Felder werden ignoriert.
Beispielschemas finden Sie im Abschnitt Beispielschemas und Modellantworten.
Modellverhalten und Antwortschema
Wenn ein Modell eine Antwort generiert, verwendet es den Feldnamen und den Kontext aus dem Prompt. Daher empfehlen wir Ihnen, eine klare Struktur und eindeutige Feldnamen zu verwenden, damit Ihr Zweck klar ist.
Standardmäßig sind Felder optional, d. h., das Modell kann die Felder ausfüllen oder überspringen. Sie können Felder nach Bedarf festlegen, um das Modell zu zwingen, einen Wert anzugeben. Wenn in der zugehörigen Eingabeaufforderung nicht genügend Kontext vorhanden ist, generiert das Modell Antworten hauptsächlich anhand der Daten, mit denen es trainiert wurde.
Wenn die erwarteten Ergebnisse nicht angezeigt werden, fügen Sie Ihren Eingabe-Prompts weiteren Kontext hinzu oder überarbeiten Sie Ihr Antwortschema. Überprüfen Sie beispielsweise die Antwort ohne gesteuerte Generierung, um zu sehen, wie das Modell reagiert. Sie können dann Ihr Antwortschema aktualisieren, das besser zur Ausgabe des Modells passt.
Prompt mit einem Antwortschema senden
Standardmäßig sind alle Felder optional. Das bedeutet, dass ein Modell eine Antwort auf ein Feld generieren kann. Wenn Sie erzwingen möchten, dass das Modell immer eine Antwort für ein Feld generiert, legen Sie das Feld entsprechend fest.
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.
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- GENERATE_RESPONSE_METHOD: Der Antworttyp, den das Modell generieren soll.
Wählen Sie eine Methode aus, mit der generiert wird, wie die Antwort des Modells zurückgegeben werden soll:
streamGenerateContent
: Die Antwort wird während der Generierung gestreamt, um die Wahrnehmung der Latenz für menschliche Zielgruppen zu reduzieren.generateContent
: Die Antwort wird zurückgegeben, nachdem sie vollständig generiert wurde.
- LOCATION: Die Region, in der die Anfrage verarbeitet werden soll.
- PROJECT_ID: Ihre Projekt-ID.
- MODEL_ID: die Modell-ID des multimodalen Modells, das Sie verwenden möchten. Folgende Optionen sind verfügbar:
gemini-1.5-pro
- ROLE:
Die Rolle in einer mit dem Inhalt verknüpften Unterhaltung. Die Angabe einer Rolle ist auch bei Anwendungsfällen mit nur einem Schritt erforderlich.
Unter anderem sind folgende Werte zulässig:
USER
: Gibt Inhalte an, die von Ihnen gesendet werden
- TEXT: Die Textanleitung, die in den Prompt eingefügt werden soll.
- RESPONSE_MIME_TYPE: Der Formattyp des generierten Kandidatentexts. Eine Liste der unterstützten Werte finden Sie im Parameter
responseMimeType
in der Gemini API. - RESPONSE_SCHEMA: Schema, dem das Modell beim Generieren von Antworten folgen soll. Weitere Informationen finden Sie in der Schemareferenz.
HTTP-Methode und URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD
JSON-Text der Anfrage:
{ "contents": { "role": "ROLE", "parts": { "text": "TEXT" } }, "generation_config": { "responseMimeType": "RESPONSE_MIME_TYPE", "responseSchema": RESPONSE_SCHEMA, } }
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/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"
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/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
Beispiel: cURL-Befehls
LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro"
PROJECT_ID="test-project"
GENERATE_RESPONSE_METHOD="generateContent"
cat << EOF > request.json
{
"contents": {
"role": "user",
"parts": {
"text": "List a few popular cookie recipes."
}
},
"generation_config": {
"maxOutputTokens": 2048,
"responseMimeType": "application/json",
"responseSchema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"recipe_name": {
"type": "string",
},
},
"required": ["recipe_name"],
},
}
}
}
EOF
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
-d `@request.json`
Beispielschemas und Modellantworten
In den folgenden Abschnitten werden verschiedene Beispielaufforderungen und Antwortschemas gezeigt. Nach jedem Codebeispiel ist eine Beispielmodellantwort enthalten.
- Bewertungen in einer verschachtelten Liste zusammenfassen
- Wetter für jeden Wochentag in einem Array prognostizieren
- Produkt mit einer klar definierten Aufzählung klassifizieren
- Objekte in Bildern identifizieren
- Mit einem einzelnen Nur-Text-Enum-Wert antworten
Überprüfungsbewertungen zusammenfassen
Im folgenden Beispiel wird ein Array von Objekten ausgegeben, wobei jedes Objekt zwei Eigenschaften hat: die Bewertung und den Namen einer Eiscreme.
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.
Beispiel für eine Modellantwort
candidates { content { role: "model" parts { text: "[\n [\n {\n \"rating\": 4\n },\n {\n \"flavor\": \"Strawberry Cheesecake\"\n },\n {\n \"rating\": 1\n },\n {\n \"flavor\": \"Mango Tango\"\n }\n ]\n] " } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.1139734759926796 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.10070161521434784 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.13695430755615234 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.12241825461387634 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.11676400154829025 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.05310790613293648 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.10521054267883301 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.08299414813518524 } } usage_metadata { prompt_token_count: 61 candidates_token_count: 66 total_token_count: 127 }
Wetter für jeden Tag der Woche vorhersagen
Im folgenden Beispiel wird für jeden Tag der Woche ein forecast
-Objekt ausgegeben, das eine Reihe von Attributen wie die erwartete Temperatur und Luftfeuchtigkeit für den Tag enthält. Einige Attribute sind auf „nullable“ gesetzt, damit das Modell einen Nullwert zurückgeben kann, wenn nicht genügend Kontext vorhanden ist, um eine sinnvolle Antwort zu generieren. Diese Strategie trägt dazu bei, Halluzinationen zu reduzieren.
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.
Beispiel für eine Modellantwort
candidates { content { role: "model" parts { text: "{\"forecast\": [{\"Day\": \"Sunday\", \"Forecast\": \"sunny\", \"Humidity\": \"50%\", \"Temperature\": 77, \"Wind Speed\": 10}, {\"Day\": \"Monday\", \"Forecast\": \"partly cloudy\", \"Humidity\": null, \"Temperature\": 72, \"Wind Speed\": 15}, {\"Day\": \"Tuesday\", \"Forecast\": \"rain showers\", \"Humidity\": \"70%\", \"Temperature\": 64, \"Wind Speed\": null}, {\"Day\": \"Wednesday\", \"Forecast\": \"thunderstorms\", \"Humidity\": null, \"Temperature\": 68, \"Wind Speed\": null}, {\"Day\": \"Thursday\", \"Forecast\": \"cloudy\", \"Humidity\": \"60%\", \"Temperature\": 66, \"Wind Speed\": null}, {\"Day\": \"Friday\", \"Forecast\": \"partly cloudy\", \"Humidity\": null, \"Temperature\": 73, \"Wind Speed\": 12}, {\"Day\": \"Saturday\", \"Forecast\": \"sunny\", \"Humidity\": \"40%\", \"Temperature\": 80, \"Wind Speed\": 8}]}" } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.1037486344575882 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.09670579433441162 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.18126320838928223 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.10052486509084702 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.15960998833179474 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.09518112242221832 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.1388116478919983 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.10539454221725464 } } usage_metadata { prompt_token_count: 280 candidates_token_count: 249 total_token_count: 529 }
Produkt klassifizieren
Das folgende Beispiel enthält Enums, bei denen das Modell den Typ und die Bedingung eines Objekts anhand einer Liste von angegebenen Werten klassifizieren muss.
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.
Beispiel für eine Modellantwort
candidates { content { role: "model" parts { text: " [{\n \"item_category\": \"winter apparel\",\n \"subcategory\": \"coat\",\n \"to_discard\": 1\n }] " } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.08945459872484207 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.13753245770931244 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.19208428263664246 severity: HARM_SEVERITY_LOW severity_score: 0.23810701072216034 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.07585817575454712 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.04336579889059067 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.12667709589004517 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.07396338135004044 } } usage_metadata { prompt_token_count: 38 candidates_token_count: 33 total_token_count: 71 }
Objekte in Bildern identifizieren
Im folgenden Beispiel werden Objekte aus zwei Bildern ermittelt, die in Cloud Storage gespeichert sind.
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.
Beispiel für eine Modellantwort
candidates { content { role: "model" parts { text: "[\n [\n {\n \"object\": \"globe model\"\n },\n {\n \"object\": \"tablet computer\"\n },\n {\n \"object\": \"shopping cart\"\n },\n {\n \"object\": \"Eiffel Tower model\"\n },\n {\n \"object\": \"airplane model\"\n },\n {\n \"object\": \"coffee cup\"\n },\n {\n \"object\": \"computer keyboard\"\n },\n {\n \"object\": \"computer mouse\"\n },\n {\n \"object\": \"passport\"\n },\n {\n \"object\": \"sunglasses\"\n },\n {\n \"object\": \"US Dollar bills\"\n },\n {\n \"object\": \"notepad\"\n },\n {\n \"object\": \"pen\"\n }\n ],\n [\n {\n \"object\": \"watering can\"\n },\n {\n \"object\": \"oregano\"\n },\n {\n \"object\": \"flower pot\"\n },\n {\n \"object\": \"flower pot\"\n },\n {\n \"object\": \"gardening gloves\"\n },\n {\n \"object\": \"hand rake\"\n },\n {\n \"object\": \"hand trowel\"\n },\n {\n \"object\": \"grass\"\n }\n ]\n] " } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.1872812658548355 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.16357900202274323 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: LOW probability_score: 0.37920594215393066 severity: HARM_SEVERITY_LOW severity_score: 0.29320207238197327 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.14175598323345184 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.12074951827526093 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.12241825461387634 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.0955180674791336 } } usage_metadata { prompt_token_count: 525 candidates_token_count: 333 total_token_count: 858 }
Mit einem einzelnen Nur-Text-Enum-Wert antworten
Im folgenden Beispiel wird das Genre eines Films anhand seiner Beschreibung ermittelt. Die Ausgabe ist ein Nur-Text-Enum-Wert, der vom Modell aus einer Liste von Werten ausgewählt wird, die im Antwortschema definiert sind.
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.
Beispiel für eine Modellantwort
candidates { content { role: "model" parts { text: "documentary" } } finish_reason: STOP safety_ratings { category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE probability_score: 0.051025390625 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.08056640625 } safety_ratings { category: HARM_CATEGORY_DANGEROUS_CONTENT probability: NEGLIGIBLE probability_score: 0.1416015625 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.068359375 } safety_ratings { category: HARM_CATEGORY_HARASSMENT probability: NEGLIGIBLE probability_score: 0.11572265625 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.0439453125 } safety_ratings { category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE probability_score: 0.099609375 severity: HARM_SEVERITY_NEGLIGIBLE severity_score: 0.146484375 } avg_logprobs: -8.783838711678982e-05 } usage_metadata { prompt_token_count: 33 candidates_token_count: 2 total_token_count: 35 }