Mengonfigurasi perutean model
Halaman ini menjelaskan cara mengonfigurasi, men-deploy, dan menguji perutean model di Gateway API menggunakan spesifikasi OpenAPI 3.x.
Sebelum memulai
Sebelum mengonfigurasi perutean model, periksa apakah lingkungan Anda memenuhi prasyarat berikut:
- Periksa izin IAM: Periksa apakah Anda memiliki akses ke Gateway API Management Plane dan Vertex AI Model Garden. Anda harus memiliki peran Admin API Gateway (
roles/apigateway.admin) untuk membuat konfigurasi dan gateway API. Selain itu, akun layanan yang digunakan oleh gateway API Anda—baik akun layanan Compute Engine default maupun akun layanan yang dikelola pengguna yang ditentukan saat membuat konfigurasi API—harus diberi peran Vertex AI User (roles/aiplatform.user) untuk mengakses model target. - Periksa ketersediaan model dan akses endpoint: Pastikan model yang dapat dirutekan telah di-deploy sebelumnya sebagai model terbuka untuk Model sebagai Layanan (MaaS) di Vertex AI Model Garden. Semua model yang dirujuk oleh satu router harus memiliki nama host yang sama persis. Pilih endpoint global (
aiplatform.googleapis.com) atau satu endpoint regional (misalnya,us-central1-aiplatform.googleapis.com) untuk setiap model yang dirujuk dalam router tersebut. - Periksa kelayakan deployment gateway: Anda tidak dapat memperbarui gateway yang ada yang di-deploy tanpa perutean model untuk mengaktifkan perutean model, dan Anda juga tidak dapat memperbarui gateway yang di-deploy dengan perutean model untuk menonaktifkan atau menghapus perutean model. Untuk mengganti mode perutean, Anda harus membuat dan men-deploy konfigurasi API dan instance gateway baru.
- Periksa kompatibilitas endpoint dan Kontrol Layanan VPC: Gateway perutean model tidak mendukung konfigurasi endpoint Private Service Connect (PSC) atau Kontrol Layanan VPC. Pastikan project target dan instance Gateway API Anda tidak dibatasi oleh perimeter Kontrol Layanan VPC, dan model Anda menggunakan endpoint regional atau global publik.
Validasi konfigurasi
Saat Anda men-deploy konfigurasi API, bidang pengelolaan Gateway API akan memvalidasi spesifikasi OpenAPI Anda. Management plane menolak konfigurasi yang tidak valid selama deployment dengan error validasi informasi. Proses validasi menerapkan aturan berikut:
Pemeriksaan struktural dan lokasi
- Ekstensi
x-google-api-managementdan blok terkaitnya (backends,ai.models.routing.routers, router individual, danrules) harus memiliki format yang benar. Kunci harus cocok dengan jenis data yang diharapkan (peta, daftar, atau string). Bidang pengelolaan menolak ketidakcocokan jenis dengan errorexpected map/list/string. - Ekstensi
x-google-api-managementharus berisi blokbackendsyang valid saat perutean model diaktifkan. - Ekstensi
x-google-model-routerhanya didukung dalam spesifikasi OpenAPI 3.x (tidak didukung di OpenAPI 2.0 / Swagger). - Ekstensi
x-google-model-routerhanya dapat ditentukan di tingkat operasi. Bidang pengelolaan secara eksplisit menolak definisix-google-model-routeryang ditempatkan di tingkat jalur atau tingkat root (atas). - Blok
ai.models.routing.routersharus ditentukan di dalamx-google-api-managementsetiap kali ada operasi yang mereferensikanx-google-model-router. - Anda tidak dapat menentukan
x-google-model-routerdanx-google-backendsekaligus pada operasi API yang sama. - Spesifikasi OpenAPI tidak boleh berisi campuran operasi perutean model dan non-model. Anda tidak dapat menentukan ekstensi perutean standar (seperti
x-google-backend) pada beberapa operasi saat menggunakanx-google-model-routerpada operasi lain dalam spesifikasi API yang sama.
Pemeriksaan metode HTTP
- Ekstensi
x-google-model-routerhanya dapat diterapkan pada operasi yang menggunakan metode HTTPPOST. Bidang pengelolaan menolak perutean model pada metode HTTP lainnya (sepertiGET,PUT, atauDELETE).
Validitas backend
- Setiap backend yang ditentukan dalam
x-google-api-management.backendsharus menyertakan kolomaddressyang tidak boleh kosong. - Backend
addressharus berupa URL yang valid menggunakan skemahttpatauhttps. Untuk melindungi payload perintah dan kredensial autentikasi dalam pengiriman di seluruh endpoint publik atau jarak jauh, selalu tentukan skemahttpssaat menentukan kolomaddress. - Setiap backend yang ditentukan dalam
x-google-api-management.backendsdan dirujuk oleh perute model harus menggunakanpathTranslation: CONSTANT_ADDRESS. Bidang pengelolaan menolak konfigurasi yang menggunakanpathTranslation: APPEND_PATH_TO_ADDRESSuntuk backend perutean model karena terjemahan jalur diabaikan di jalur runtime perute model. - Backend perutean model tidak mendukung konfigurasi endpoint Private Service Connect (PSC) atau Kontrol Layanan VPC. Semua kolom
addressbackend harus mengarah ke endpoint model terbuka MaaS regional atau global publik.
Penyelesaian referensi router
- Nama router yang dirujuk oleh
x-google-model-routeroperasi harus cocok dengan kunci router valid yang ditentukan diai.models.routing.routers. backendyang dirujuk olehdefaultModelrouter harus cocok dengan backend valid yang ditentukan dix-google-api-management.backends.backendyang dirujuk oleh setiap aturan di router harus cocok dengan backend valid yang ditentukan dix-google-api-management.backends.
Isi router
- Setiap router harus menentukan
defaultModel. defaultModelharus menyertakan kolombackendyang valid.defaultModelharus menyertakan kolomtargetModelyang tidak kosong.- Setiap entri di bagian
rulesharus menyertakan kolommodelyang tidak boleh kosong. Nilai stringdefaultdicadangkan dan tidak dapat digunakan sebagai nilaimodelaturan. - Setiap entri di bagian
rulesharus menyertakan kolomtargetModelyang tidak boleh kosong. - Nilai
modelyang ditentukan di semua aturan dalam satu perouter harus unik. Bidang pengelolaan menolak nilaimodelduplikat dalam router yang sama.
Konsistensi host dan skema backend
- Semua backend yang dirujuk oleh satu router (termasuk
defaultModel.backenddanbackendsetiap aturan) harus memiliki nama host dan skema URL yang identik. Bidang pengelolaan menolak konfigurasi dengan nama host yang berbeda atau skema yang tidak konsisten (httpversushttps) dalam router yang sama, sehingga memastikan router mengirimkan semua permintaan ke endpoint layanan upstream yang konsisten.
Validasi model target
- Bagian
<provider>dari stringtargetModel(google,openai, atauanthropic) dan format ID<provider>/<model>divalidasi pada waktu config-create (deploy). Management plane menolaktargetModelyang tidak diformat sebagai<provider>/<model>atau yang penyedianya bukangoogle,openai, atauanthropicdengan errorInvalidArgument: unsupported publisherselama deployment.
Langkah 1: Identifikasi model target
Identifikasi model dasar target dan URL endpoint Vertex AI yang sesuai. Semua model yang dapat dirutekan dalam router harus berbagi satu nama host (untuk model terbuka MaaS, nama host ini adalah aiplatform.googleapis.com).
Jalur URL endpoint bervariasi berdasarkan penyedia model:
- Google Gemini: Menggunakan metode
:generateContent. - Anthropic Claude: Menggunakan metode
:rawPredict. - OpenAI: Menggunakan jalur endpoint
/endpoints/openapi/chat/completions.
Tabel berikut mencantumkan endpoint MaaS yang digunakan dalam contoh spesifikasi OpenAPI di bagian ini:
| Model | URL Endpoint |
|---|---|
google/gemini-3.5-flash-lite |
https://aiplatform.googleapis.com/v1/projects/YOUR_PROJECT_ID/locations/global/publishers/google/models/gemini-3.5-flash-lite:generateContent |
anthropic/claude-opus-4-7 |
https://aiplatform.googleapis.com/v1/projects/YOUR_PROJECT_ID/locations/global/publishers/anthropic/models/claude-opus-4-7:rawPredict |
openai/gpt-oss-120b-maas |
https://aiplatform.googleapis.com/v1/projects/YOUR_PROJECT_ID/locations/global/endpoints/openapi/chat/completions |
Ganti YOUR_PROJECT_ID dengan project ID Google Cloud Anda.
Langkah 2: Konfigurasi spesifikasi OpenAPI 3.x
Buat atau perbarui spesifikasi OpenAPI 3.x untuk menentukan konfigurasi perutean model dan endpoint backend Anda.
Contoh berikut menunjukkan spesifikasi OpenAPI 3.0.3 yang menentukan dua perute model yang berbeda. Untuk mencegah scrolling horizontal, URL alamat backend yang panjang menggunakan kelanjutan string multi-baris dengan tanda kutip ganda YAML (``):
openapi: 3.0.3
info:
title: OpenAPI 3.x spec using Model Routing
description: Using Model Routing in an OAS 3.x spec
version: 1.0.0
x-google-api-management:
backends:
gemini-35-flashlite:
address: "https://aiplatform.googleapis.com/v1/projects/\
YOUR_PROJECT_ID/locations/global/publishers/google/\
models/gemini-3.5-flash-lite:generateContent"
deadline: 60.0
pathTranslation: CONSTANT_ADDRESS
anthropic-claude-opus-47:
address: "https://aiplatform.googleapis.com/v1/projects/\
YOUR_PROJECT_ID/locations/global/publishers/anthropic/\
models/claude-opus-4-7:rawPredict"
deadline: 60.0
pathTranslation: CONSTANT_ADDRESS
openai-gpt-oss-120b:
address: "https://aiplatform.googleapis.com/v1/projects/\
YOUR_PROJECT_ID/locations/global/endpoints/openapi/\
chat/completions"
deadline: 60.0
pathTranslation: CONSTANT_ADDRESS
ai:
models:
routing:
routers:
# Router 1: route between Gemini (default) and Claude.
gemini-claude-router:
defaultModel:
backend: gemini-35-flashlite
targetModel: google/gemini-3.5-flash-lite
rules:
- model: "claude-opus-4-7"
backend: anthropic-claude-opus-47
targetModel: anthropic/claude-opus-4-7
# Router 2: route between OpenAI GPT (default) and Gemini.
openai-gemini-router:
defaultModel:
backend: openai-gpt-oss-120b
targetModel: openai/gpt-oss-120b-maas
rules:
- model: "gemini-3.5-flash-lite"
backend: gemini-35-flashlite
targetModel: google/gemini-3.5-flash-lite
servers:
- url: "https://my-gateway-url.com"
paths:
/v1/chat/gemini-claude:
post:
summary: "Endpoint:defaults to Gemini & Claude as an option."
operationId: "chatGeminiClaude"
x-google-model-router: gemini-claude-router
responses:
'200':
description: "OK"
/v1/chat/openai-gemini:
post:
summary: "Endpoint:defaults to OpenAI & Gemini as an option."
operationId: "chatOpenAIGemini"
x-google-model-router: openai-gemini-router
responses:
'200':
description: "OK"
Properti konfigurasi
backends: Objekbackendsdi bawahx-google-api-managementmenentukan semua endpoint model yang dapat dirutekan. Setiap nama backend merepresentasikan nama model simbolis (misalnya,gemini-35-flashlite) yang berisiaddresstujuan. Kolombackendsadalah ekstensi Google OpenAPI yang sudah ada.ai.models.routing: Konfigurasi perutean model berada dix-google-api-managementsebagaiai.models.routing, yang berisi peta router bernama. Setiap entri peta menentukan satu perute model, dengan kunci yang merepresentasikan nama perute (misalnya,gemini-claude-router) dan nilai yang berisi:defaultModel: Tujuan model penggantian yang diperlukan digunakan saat payload permintaan masuk tidak cocok dengan aturan eksplisit apa pun. Entri ini memiliki struktur yang sama persis dengan entri aturan, tetapi tidak menyertakan kolom pencocokanmodel. Untuk rute yang kompatibel dengan OpenAI, saat permintaan kembali kedefaultModel, nilaitargetModelakan diteruskan sebagai atributmodelkeluar dalam isi permintaan yang dikirim ke Vertex AI.rules: Array opsional yang setiap elemennya memetakan string model payload klien ke backend tujuan dan model target.
- Properti aturan: Setiap entri dalam
rules(dandefaultModel) menentukan properti berikut:model(khusus aturan): Nilai string yang cocok dengan atributmodeldalam payload perintah JSON yang masuk dari klien. Router membandingkan nilaimodelpayload yang masuk dengan string ini. Jika tidak ada aturan yang cocok, router akan memilihdefaultModel. Untuk rute yang kompatibel dengan OpenAI (dengan backend tujuan adalah/openapi/chat/completions), string ini diteruskan langsung sebagai atributmodelkeluar dalam isi permintaan yang dikirim ke Vertex AI. Oleh karena itu, untuk rute yang kompatibel dengan OpenAI, pemilihmodelitu sendiri harus berupa ID model penayang yang valid (misalnya,openai/gpt-oss-120b-maas); menggunakan alias sepertigpt-ossakan menghasilkan error400 Malformed publisher modeldari Vertex AI.backend: Nama backend simbolis yang ditentukan dix-google-api-management.backendstempat gateway mengirimkan perintah.targetModel: ID model target yang diformat sebagai<provider>/<model-id>. Router model menggunakan string ini untuk menerjemahkan permintaan dan respons untuk model tujuan. Awalan<provider>harus persisgoogle,openai, atauanthropic.<model-id>harus berupa ID model penayang Vertex AI Model Garden yang valid. Gateway mengulangi string ini dalam kolommodeldari respons yang ditampilkan kepada klien. Contoh nilai mencakup:google/gemini-3.5-flash-litegoogle/gemini-2.5-proopenai/gpt-oss-120b-maasanthropic/claude-opus-4-7
x-google-model-router: Untuk melampirkan perute model ke jalur operasi API, tentukan nama perute menggunakan atributx-google-model-router. Dalam contoh sebelumnya, permintaanPOSTyang dikirim ke/v1/chat/gemini-claudememanggilgemini-claude-router, yang merutekan perintah berdasarkan nama model yang ditentukan dalam payload JSON.
Langkah 3: Buat dan deploy konfigurasi API
Buat konfigurasi API menggunakan spesifikasi OpenAPI 3.x yang Anda buat dan deploy konfigurasi ke instance API Gateway seperti yang dijelaskan dalam Men-deploy API ke gateway.
Bidang pengelolaan API Gateway memproses konfigurasi perutean model Anda dan mengaktifkan lapisan perutean. Setelah deployment gateway Anda selesai, gateway siap menerima permintaan perintah yang diformat sebagai payload JSON yang kompatibel dengan OpenAI.
Langkah 4: Uji perilaku perutean
Sebelum menguji gateway, tunggu hingga gateway mencapai status ACTIVE, lalu ambil URL-nya:
gcloud api-gateway gateways describe GATEWAY_ID \
--location=GATEWAY_LOCATION \
--project=PROJECT_ID \
--format='value(defaultHostname)'
Selama Pratinjau Publik, gateway pemilihan rute model menampilkan nama host *.run.app. Ambil nama host hanya setelah gateway ACTIVE; nilai yang dilaporkan saat gateway masih dibuat bukanlah URL akhir.
Uji perilaku perutean gateway Anda menggunakan curl untuk mengirim permintaan perintah yang kompatibel dengan OpenAI ke URL gateway Anda (https://GATEWAY_URL). Dalam contoh berikut, $TOKEN mewakili token autentikasi valid yang diperoleh menggunakan salah satu metode yang dijelaskan dalam Memilih Metode Autentikasi.
Menguji perutean aturan eksplisit
Kirim perintah yang meminta model Claude anthropic/claude-opus-4-7:
curl https://GATEWAY_URL/v1/chat/gemini-claude \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"model": "claude-opus-4-7",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Explain the concept of recursion in one sentence."
}
]
}'
Mengirim permintaan ke /v1/chat/gemini-claude akan memanggil gemini-claude-router. Atribut "model": "claude-opus-4-7" dalam payload JSON cocok dengan aturan eksplisit di gemini-claude-router, yang mengarahkan gateway untuk merutekan permintaan ke backend anthropic-claude-opus-47.
Menguji penggantian model default
Kirim perintah yang menentukan nama model yang tidak cocok untuk menguji perutean penggantian:
curl https://GATEWAY_URL/v1/chat/gemini-claude \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"model": "unrecognized-model",
"messages": [
{
"role": "user",
"content": "Write a short poem about the ocean."
}
],
"stream": true
}'
Mengirim permintaan ke /v1/chat/gemini-claude akan memanggil gemini-claude-router. Karena atribut "model": "unrecognized-model" tidak cocok dengan aturan eksplisit apa pun, gateway mengirimkan permintaan ke defaultModel yang dikonfigurasi router—backend gemini-35-flashlite.
Menguji jalur router alternatif
Kirim perintah yang meminta Gemini melalui endpoint router sekunder:
curl https://GATEWAY_URL/v1/chat/openai-gemini \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"model": "gemini-3.5-flash-lite",
"messages": [
{
"role": "user",
"content": "List the three largest cities in the world."
}
]
}'
Mengirim permintaan ke /v1/chat/openai-gemini akan memanggil openai-gemini-router. Atribut "model": "gemini-3.5-flash-lite" cocok dengan aturan eksplisit di router tersebut, yang mengarahkan gateway untuk merutekan permintaan ke backend gemini-35-flashlite. Satu backend dapat dirujuk oleh beberapa router; dalam konfigurasi ini, gemini-35-flashlite berfungsi sebagai target aturan eksplisit di openai-gemini-router dan sebagai defaultModel penggantian di gemini-claude-router.
Kemampuan observasi
Router model diinstrumentasikan sehingga Anda dapat memverifikasi bahwa gateway Anda melayani traffic, memeriksa metadata per permintaan menggunakan Cloud Logging, dan mendiagnosis kegagalan menggunakan Cloud Monitoring.
Cloud Logging
Setiap permintaan yang dirutekan melalui gateway akan membuat entri dalam log permintaan Gateway API standar yang ada di project Google Cloud Anda di:
projects/YOUR_PROJECT_ID/logs/apigateway.googleapis.com%2Frequests
Setiap entri log mencakup kolom berikut:
httpRequest.requestUrl,httpRequest.status,httpRequest.latencyapi,apiConfig,apiMethodbackendRequest.hostname: Nama host backend Vertex AI yang menjadi tujuan proxy permintaan.responseDetails: Diisi dengan kategori error bermerek pada kegagalan perute model (lihat Memecahkan masalah kegagalan perute model tepat di bawah).
Untuk menemukan permintaan terbaru yang dikirim ke gateway tertentu, gunakan filter kueri Cloud Logging berikut:
(resource.type="apigateway.googleapis.com/Gateway" OR resource.type="api")
logName="projects/YOUR_PROJECT_ID/logs/apigateway.googleapis.com%2Frequests"
Cloud Monitoring
Metrik Gateway API standar apigateway.googleapis.com/proxy/request_count (BETA) melaporkan volume traffic gateway yang dikelompokkan menurut:
response_code_class: Salah satu dari2xx,3xx,4xx, atau5xx.api_config: Nama konfigurasi API yang digunakan gateway.
Metrik ini memungkinkan Anda memverifikasi volume traffic dan rasio error secara keseluruhan. Metrik khusus model router (seperti perincian per-router atau per-target-model) akan ditambahkan dalam rilis mendatang.
Untuk melacak latensi permintaan gabungan, Anda dapat membuat metrik berbasis log dari kolom httpRequest.latency di log permintaan.
Memecahkan masalah kegagalan router model
Jika permintaan yang dirutekan melalui perute model gagal, kolom responseDetails pada entri log permintaan yang sesuai menunjukkan apakah kegagalan terjadi dalam lapisan perute model. Router model menampilkan empat kategori bermerek:
Nilai responseDetails |
Arti | Perbaikan umum |
|---|---|---|
model_router_application_error |
Permintaan tidak dapat dirutekan. Error ini biasanya menunjukkan aturan yang tidak ada, payload yang berisi nilai model yang tidak cocok dengan aturan apa pun (tanpa defaultModel yang dikonfigurasi), atau payload permintaan yang salah format. |
Sisi pelanggan: Pastikan parameter model payload Anda cocok dengan salah satu string rule.model dalam konfigurasi router Anda atau penggantian defaultModel ditentukan. Pastikan isi permintaan adalah JSON yang kompatibel dengan OpenAI yang valid dan secara eksplisit menyertakan atribut model (selama Pratinjau Publik, atribut model yang tidak ada dalam payload permintaan diproses secara salah, bukan ditolak). |
model_router_timeout |
Router model melampaui waktu tunggu per permintaan. Permintaan mungkin terlalu besar atau rumit, atau mungkin ada hambatan kapasitas. | Periksa setelan kompleksitas permintaan dan waktu tunggu di seluruh backend. Jika masalah berlanjut di seluruh payload normal, hubungi Google Cloud Dukungan dengan stempel waktu permintaan dan contoh log. |
model_router_upstream_error |
Model target upstream menampilkan error HTTP ke gateway. | Sisi layanan upstream: Periksa kode status dan payload dari endpoint layanan Vertex AI target. Jika hal ini tidak terduga untuk permintaan yang valid, buka kasus dukungan. |
model_router_unavailable |
Router model tidak dapat dijangkau dari gateway karena kegagalan konektivitas atau transportasi. | Sisi platform: Buka kasus dukungan dengan Google Cloud Support. |
Langkah berikutnya
- Tinjau arsitektur dan konsep perutean model
- Menjelajahi ekstensi OpenAPI 3.x