Puoi garantire che l'output generato da un modello rispetti sempre uno schema specifico in modo da ricevere risposte formattate in modo coerente. Ad esempio, potresti avere uno schema di dati stabilito che utilizzi per altre attività. Se il modello segue lo stesso schema, puoi estrarre direttamente i dati dall'output del modello senza alcuna post-elaborazione.
Per specificare la struttura dell'output di un modello, definisci uno schema di risposta, che funge da blueprint per le risposte del modello. Quando invii un prompt e includi lo schema di risposta, la risposta del modello segue sempre lo schema definito.
Puoi controllare l'output generato quando utilizzi i seguenti modelli:
- Gemini 1.5 Pro
- Gemini 1.5 Flash
Per le chiamate di funzione con generazione controllata (note anche come chiamate di funzione forzate), consulta Introduzione alle chiamate di funzione.
Esempi di casi d'uso
Un caso d'uso per l'applicazione di uno schema di risposta è garantire che la risposta di un modello produca JSON valido e sia conforme allo schema. Gli output dei modelli generativi possono avere un certo grado di variabilità, pertanto l'inclusione di uno schema di risposta garantisce di ricevere sempre JSON valido. Di conseguenza, le attività a valle possono aspettarsi in modo affidabile un input JSON valido dalle risposte generate.
Un altro esempio è limitare il modo in cui un modello può rispondere. Ad esempio, puoi fare in modo che un modello annoti il testo con etichette definite dall'utente, non con quelle prodotte dal modello. Questo vincolo è utile quando prevedi un insieme specifico di etichette, ad esempio positive
o negative
, e non vuoi ricevere una combinazione di altre etichette che il modello potrebbe generare, ad esempio good
, positive
, negative
o bad
.
Considerazioni
Le seguenti considerazioni illustrano le potenziali limitazioni se prevedi di utilizzare un schema di risposta:
- Devi utilizzare l'API per definire e utilizzare uno schema di risposta. Non è previsto il supporto per le console.
- Le dimensioni dello schema di risposta vengono conteggiate ai fini del limite di token di input.
- Sono supportati solo alcuni formati di output, ad esempio
application/json
otext/x.enum
. Per ulteriori informazioni, consulta il parametroresponseMimeType
nel riferimento all'API Gemini. - La generazione controllata supporta un sottoinsieme del riferimento allo schema di Vertex AI. Per ulteriori informazioni, consulta Campi dello schema supportati.
Uno schema complesso può generare un errore
InvalidArgument: 400
. La complessità può essere dovuta a nomi di proprietà lunghi, limiti di lunghezza degli array, enum con molti valori, oggetti con molte proprietà facoltative o una combinazione di questi fattori.Se ricevi questo errore con uno schema valido, apporta una o più delle seguenti modifiche per risolvere il problema:
- Abbrevia i nomi delle proprietà o degli enum.
- Appiattisci gli array nidificati.
- Riduci il numero di proprietà con vincoli, ad esempio numeri con limiti minimi e massimi.
- Riduci il numero di proprietà con vincoli complessi, ad esempio proprietà con formati complessi come
date-time
. - Riduci il numero di proprietà facoltative.
- Riduci il numero di valori validi per gli enum.
Campi dello schema supportati
La generazione controllata supporta i seguenti campi dello schema di Vertex AI. Se utilizzi un campo non supportato, Vertex AI può comunque gestire la tua richiesta, ma ignora il campo.
anyOf
enum
format
items
maximum
maxItems
minimum
minItems
nullable
properties
propertyOrdering
*required
* propertyOrdering
è specificamente per la generazione controllata e non fa parte dello schema di Vertex AI. Questo campo definisce l'ordine in cui vengono generate le proprietà. Le proprietà elencate devono essere univoche e devono essere chiavi valide nel dizionario properties
.
Per il campo format
, Vertex AI supporta i seguenti valori: date
,
date-time
, duration
e time
. La descrizione e il formato di ogni valore sono descritti nel registro dell'iniziativa OpenAPI
Prima di iniziare
Definisci uno schema di risposta per specificare la struttura dell'output di un modello, i nomi dei campi e il tipo di dati previsto per ogni campo. Utilizza solo i campi supportati elencati nella sezione Considerazioni. Tutti gli altri campi vengono ignorati.
Includi lo schema di risposta solo nel campo responseSchema
. Non
duplicare lo schema nel prompt di input. In questo caso, la qualità dell'output generato potrebbe essere inferiore.
Per gli schemi di esempio, consulta la sezione Schemi di esempio e risposte del modello.
Schema di comportamento e risposta del modello
Quando un modello genera una risposta, utilizza il nome e il contesto del campo del prompt. Pertanto, ti consigliamo di utilizzare una struttura chiara e nomi di campi non ambigui in modo che le tue intenzioni siano chiare.
Per impostazione predefinita, i campi sono facoltativi, il che significa che il modello può compilare i campi o saltarli. Puoi impostare i campi come obbligatori per forzare il modello a fornire un valore. Se il contesto nel prompt di input associato non è sufficiente, il modello genera risposte principalmente in base ai dati su cui è stato addestrato.
Se non vedi i risultati che ti aspetti, aggiungi altro contesto ai prompt di input o rivedi lo schema di risposta. Ad esempio, esamina la risposta del modello senza generazione controllata per vedere come risponde. Puoi quindi aggiornare lo schema di risposta in modo che corrisponda meglio all'output del modello.
Inviare un prompt con uno schema di risposta
Per impostazione predefinita, tutti i campi sono facoltativi, il che significa che un modello potrebbe generare una risposta per un campo. Per forzare il modello a generare sempre una risposta a un campo, imposta il campo come richiesto.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.
Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- GENERATE_RESPONSE_METHOD: il tipo di risposta che vuoi che il modello generi.
Scegli un metodo che generi la modalità di restituzione della risposta del modello:
streamGenerateContent
: la risposta viene trasmessa in streaming durante la generazione per ridurre la percezione della latenza da parte di un pubblico di persone.generateContent
: la risposta viene restituita dopo essere stata completamente generata.
- LOCATION: la regione in cui elaborare la richiesta.
- PROJECT_ID: il tuo ID progetto.
- MODEL_ID: l'ID del modello multimodale
che vuoi utilizzare. Le opzioni sono:
gemini-1.5-flash
gemini-1.5-pro
- ROLE:
Il ruolo in una conversazione associato ai contenuti. La specifica di un ruolo è obbligatoria anche nei casi d'uso con un solo turno.
I valori accettabili sono:
USER
: specifica i contenuti inviati da te.
- TEXT: le istruzioni di testo da includere nel prompt.
- RESPONSE_MIME_TYPE: il tipo di formato del testo candidato generato. Per un elenco dei valori supportati, consulta il
parammetro
responseMimeType
nell'API Gemini. - RESPONSE_SCHEMA: schema da seguire per il modello durante la generazione delle risposte. Per ulteriori informazioni, consulta la documentazione di riferimento dello schema.
Metodo HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD
Corpo JSON della richiesta:
{ "contents": { "role": "ROLE", "parts": { "text": "TEXT" } }, "generation_config": { "responseMimeType": "RESPONSE_MIME_TYPE", "responseSchema": RESPONSE_SCHEMA, } }
Per inviare la richiesta, scegli una delle seguenti opzioni:
curl
Salva il corpo della richiesta in un file denominato request.json
,
quindi esegui il comando seguente:
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
Salva il corpo della richiesta in un file denominato request.json
,
quindi esegui il comando seguente:
$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
Dovresti ricevere una risposta JSON simile alla seguente.
Comando curl di esempio
LOCATION="us-central1"
MODEL_ID="gemini-1.5-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`
Schemi di esempio per l'output JSON
Le sezioni seguenti mostrano una serie di prompt e schemi di risposta di esempio. Dopo ogni esempio di codice è inclusa anche una risposta del modello di esempio.
- Riassumi le valutazioni delle recensioni in un elenco nidificato
- Prevedere il meteo per ogni giorno della settimana in un array
- Classificare un prodotto con un enum ben definito
- Identifica gli oggetti nelle immagini
Riassumi le valutazioni delle recensioni
L'esempio seguente restituisce un array di oggetti, in cui ogni oggetto ha due proprietà: la valutazione e il nome di un gusto di gelato.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.
Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esempio di risposta del modello
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 }
Effettua previsioni meteo per ogni giorno della settimana
L'esempio seguente restituisce un oggetto forecast
per ogni giorno
della settimana che include un array di proprietà come la temperatura e il livello di umidità previsti per la giornata. Alcune proprietà sono impostate su nullable
in modo che il modello possa restituire un valore nullo quando non dispone di contesto sufficiente per
generare una risposta significativa. Questa strategia aiuta a ridurre le allucinazioni.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.
Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esempio di risposta del modello
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 }
Classifica un prodotto
L'esempio seguente include enum in cui il modello deve classificare il tipo e la condizione di un oggetto da un elenco di valori specificati.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.
Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esempio di risposta del modello
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 }
Identifica gli oggetti nelle immagini
L'esempio seguente identifica gli oggetti di due immagini archiviate su Cloud Storage.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.
Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esempio di risposta del modello
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 }
Schema di esempio per l'output dell'enum
L'esempio seguente identifica il genere di un film in base alla sua descrizione. L'output è un valore enum in testo normale selezionato dal modello da un elenco di valori definiti nello schema di risposta.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.
Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esempio di risposta del modello
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 }