Anda dapat memastikan bahwa output yang dihasilkan model selalu mematuhi skema tertentu sehingga Anda menerima respons yang diformat secara konsisten. Misalnya, Anda mungkin memiliki skema data yang sudah ditetapkan yang Anda gunakan untuk tugas lain. Jika membuat model mengikuti skema yang sama, Anda dapat langsung mengekstrak data dari output model tanpa pascapemrosesan apa pun.
Untuk menentukan struktur output model, tentukan skema respons, yang berfungsi seperti cetak biru untuk respons model. Saat Anda mengirimkan perintah dan menyertakan skema respons, respons model akan selalu mengikuti skema yang Anda tentukan.
Anda dapat mengontrol output yang dihasilkan saat menggunakan model berikut:
- Gemini 1.5 Pro
- Gemini 1.5 Flash
Untuk pemanggilan fungsi dengan pembuatan terkontrol (juga dikenal sebagai pemanggilan fungsi paksa), lihat Pengantar pemanggilan fungsi.
Contoh kasus penggunaan
Salah satu kasus penggunaan untuk menerapkan skema respons adalah memastikan respons model menghasilkan JSON yang valid dan sesuai dengan skema Anda. Output model generatif dapat memiliki tingkat variabilitas tertentu, sehingga menyertakan skema respons memastikan bahwa Anda selalu menerima JSON yang valid. Akibatnya, tugas downstream Anda dapat mengharapkan input JSON yang valid dari respons yang dihasilkan dengan andal.
Contoh lainnya adalah membatasi cara model merespons. Misalnya, Anda dapat
meminta model menganotasi teks dengan label yang ditentukan pengguna, bukan dengan label yang
dibuat model. Batasan ini berguna saat Anda mengharapkan kumpulan label tertentu
seperti positive
atau negative
dan tidak ingin menerima campuran
label lain yang mungkin dihasilkan model seperti good
, positive
, negative
,
atau bad
.
Pertimbangan
Pertimbangan berikut membahas potensi batasan jika Anda berencana menggunakan skema respons:
- Anda harus menggunakan API untuk menentukan dan menggunakan skema respons. Tidak ada dukungan konsol.
- Ukuran skema respons Anda diperhitungkan dalam batas token input.
- Hanya format output tertentu yang didukung, seperti
application/json
atautext/x.enum
. Untuk informasi selengkapnya, lihat parameterresponseMimeType
di referensi Gemini API. - Pembuatan terkontrol mendukung sebagian referensi skema Vertex AI. Untuk mengetahui informasi selengkapnya, lihat Bidang skema yang didukung.
Skema yang kompleks dapat menyebabkan error
InvalidArgument: 400
. Kompleksitas mungkin berasal dari nama properti yang panjang, batas panjang array yang panjang, enum dengan banyak nilai, objek dengan banyak properti opsional, atau kombinasi faktor-faktor ini.Jika Anda mendapatkan error ini dengan skema yang valid, lakukan satu atau beberapa perubahan berikut untuk mengatasi error:
- Persingkat nama properti atau nama enum.
- Meratakan array bertingkat.
- Kurangi jumlah properti dengan batasan, seperti angka dengan batas minimum dan maksimum.
- Kurangi jumlah properti dengan batasan yang kompleks, seperti properti dengan format yang kompleks seperti
date-time
. - Kurangi jumlah properti opsional.
- Kurangi jumlah nilai yang valid untuk enum.
Kolom skema yang didukung
Pembuatan terkontrol mendukung kolom berikut dari skema Vertex AI. Jika Anda menggunakan kolom yang tidak didukung, Vertex AI masih dapat menangani permintaan Anda, tetapi mengabaikan kolom tersebut.
anyOf
enum
format
items
maximum
maxItems
minimum
minItems
nullable
properties
propertyOrdering
*required
* propertyOrdering
khusus untuk pembuatan terkontrol dan
bukan bagian dari skema Vertex AI. Kolom ini menentukan urutan
pembuatan properti. Properti yang tercantum harus unik dan harus
kunci yang valid dalam kamus properties
.
Untuk kolom format
, Vertex AI mendukung nilai berikut: date
, date-time
, duration
, dan time
. Deskripsi dan format setiap nilai dijelaskan dalam OpenAPI Initiative Registry
Sebelum memulai
Tentukan skema respons untuk menentukan struktur output model, nama kolom, dan jenis data yang diharapkan untuk setiap kolom. Hanya gunakan kolom yang didukung seperti yang tercantum di bagian Pertimbangan. Semua kolom lainnya akan diabaikan.
Sertakan skema respons Anda sebagai bagian dari kolom responseSchema
saja. Jangan
menduplikasi skema dalam perintah input Anda. Jika Anda melakukannya, kualitas output yang dihasilkan mungkin
lebih rendah.
Untuk contoh skema, lihat bagian Contoh skema dan respons model.
Perilaku model dan skema respons
Saat menghasilkan respons, model menggunakan nama kolom dan konteks dari perintah Anda. Oleh karena itu, sebaiknya gunakan struktur yang jelas dan nama kolom yang tidak ambigu sehingga intent Anda jelas.
Secara default, kolom bersifat opsional, yang berarti model dapat mengisi kolom atau melewati kolom tersebut. Anda dapat menetapkan kolom sesuai kebutuhan untuk memaksa model memberikan nilai. Jika tidak ada cukup konteks dalam perintah input terkait, model akan menghasilkan respons terutama berdasarkan data yang digunakan untuk melatihnya.
Jika Anda tidak melihat hasil yang diharapkan, tambahkan lebih banyak konteks ke perintah input atau revisi skema respons Anda. Misalnya, tinjau respons model tanpa pembuatan terkontrol untuk melihat respons model. Kemudian, Anda dapat mengupdate skema respons yang lebih sesuai dengan output model.
Mengirim perintah dengan skema respons
Secara default, semua kolom bersifat opsional, yang berarti model dapat menghasilkan respons ke kolom. Untuk memaksa model agar selalu menghasilkan respons ke kolom, tetapkan kolom sesuai kebutuhan.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- GENERATE_RESPONSE_METHOD: Jenis respons yang ingin Anda hasilkan dari model.
Pilih metode yang menghasilkan cara Anda ingin respons model ditampilkan:
streamGenerateContent
: Respons di-streaming saat dibuat untuk mengurangi persepsi latensi bagi audiens manusia.generateContent
: Respons ditampilkan setelah sepenuhnya dibuat.
- LOCATION: Region untuk memproses permintaan.
- PROJECT_ID: Project ID Anda.
- MODEL_ID: ID model model multimodal
yang ingin Anda gunakan. Opsinya adalah:
gemini-1.5-flash
gemini-1.5-pro
- ROLE:
Peran dalam percakapan yang terkait dengan konten. Menentukan peran diperlukan bahkan dalam
kasus penggunaan satu giliran.
Nilai yang dapat diterima mencakup hal berikut:
USER
: Menentukan konten yang dikirim oleh Anda.
- TEXT: Petunjuk teks yang akan disertakan dalam perintah.
- RESPONSE_MIME_TYPE: Jenis format
teks kandidat yang dihasilkan. Untuk mengetahui daftar nilai yang didukung, lihat
parameter
responseMimeType
di Gemini API. - RESPONSE_SCHEMA: Skema untuk model yang akan diikuti saat membuat respons. Untuk mengetahui informasi selengkapnya, lihat referensi Skema.
Metode HTTP dan URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD
Isi JSON permintaan:
{ "contents": { "role": "ROLE", "parts": { "text": "TEXT" } }, "generation_config": { "responseMimeType": "RESPONSE_MIME_TYPE", "responseSchema": RESPONSE_SCHEMA, } }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
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
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
$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
Anda akan melihat respons JSON yang mirip seperti berikut:
Contoh perintah curl
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`
Contoh skema untuk output JSON
Bagian berikut menunjukkan berbagai contoh perintah dan skema respons. Contoh respons model juga disertakan setelah setiap contoh kode.
- Merangkum rating ulasan dalam daftar bertingkat
- Membuat prakiraan cuaca untuk setiap hari dalam seminggu dalam array
- Mengklasifikasikan produk dengan enum yang ditentukan dengan baik
- Mengidentifikasi objek dalam gambar
Merangkum rating ulasan
Contoh berikut menghasilkan array objek, dengan setiap objek memiliki dua properti: rating dan nama rasa es krim.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Contoh respons model
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 }
Memperkirakan cuaca untuk setiap hari dalam seminggu
Contoh berikut menghasilkan objek forecast
untuk setiap hari
dalam seminggu yang menyertakan array properti seperti perkiraan
suhu dan tingkat kelembapan untuk hari tersebut. Beberapa properti ditetapkan ke nullable
sehingga model dapat menampilkan nilai null jika tidak memiliki cukup konteks untuk
menghasilkan respons yang bermakna. Strategi ini membantu mengurangi halusinasi.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Contoh respons model
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 }
Mengklasifikasikan produk
Contoh berikut menyertakan enum tempat model harus mengklasifikasikan jenis dan kondisi objek dari daftar nilai yang diberikan.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Contoh respons model
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 }
Mengidentifikasi objek dalam gambar
Contoh berikut mengidentifikasi objek dari dua gambar yang disimpan di Cloud Storage.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Contoh respons model
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 }
Contoh skema untuk output enum
Contoh berikut mengidentifikasi genre film berdasarkan deskripsinya. Outputnya adalah satu nilai enum teks biasa yang dipilih model dari nilai daftar yang ditentukan dalam skema respons.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Contoh respons model
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 }