Vertex 不可用时通过开关秒切到 DeepSeek + Workers AI,业务零感知
业务 Worker
┌──────────────────────────────────┐
│ youtube-trim / youtube-dub │
│ youtube-translate / -analysis │
│ image-recognize / research-... │
└──────────────┬───────────────────┘
│ env.VERTEX_SVC (Service Binding)
↓
┌──────────────────────────────────┐
│ vertex-gateway │
│ (统一入口,接口签名永久不变) │
│ │
│ ┌──────────────────────────┐ │
│ │ 4 个 BYPASS 开关 │ │
│ │ TEXT / VISION / TTS / AUDIO │
│ └──────────────────────────┘ │
└──┬──────────────────────────┬────┘
│ │
switch=true switch=false
↓ ↓
┌──────────────────┐ ┌──────────────────┐
│ fallback 路径 │ │ Vertex 路径 │
│ │ │ │
│ DeepSeek (text) │ │ gemini-2.5-pro │
│ LLaVA (vision) │ │ gemini-3.1-tts │
│ MeloTTS (tts) │ │ gemini-flash │
└──────────────────┘ └──────────────────┘
| 开关 | true(当前默认) | false |
|---|---|---|
BYPASS_VERTEX_TEXT | → openapi-deepseek-gateway | → Vertex gemini-2.5-flash-lite |
BYPASS_VERTEX_VISION | → cf-ai-gateway (LLaVA) | → Vertex gemini-2.5-flash-lite |
BYPASS_VERTEX_TTS | → cf-ai-gateway (MeloTTS) | → Vertex gemini-3.1-flash-tts |
BYPASS_VERTEX_AUDIO | → DeepSeek 文本降级 | → Vertex gemini-2.5-pro 听音频 |
| 端点 | 开关 |
|---|---|
POST /chat | BYPASS_VERTEX_TEXT |
POST /translate | BYPASS_VERTEX_TEXT |
POST /analyze | BYPASS_VERTEX_TEXT |
POST /summarize | BYPASS_VERTEX_TEXT |
POST /vision | BYPASS_VERTEX_VISION |
POST /tts / /tts-to-r2 | BYPASS_VERTEX_TTS |
POST /diarize-translate | BYPASS_VERTEX_AUDIO |
一键脚本:
export CLOUDFLARE_EMAIL=go20260310@outlook.com export CLOUDFLARE_API_KEY=<cfk_ Global API Key> bash MIGRATION_ROLLBACK.sh # 全部回 Vertex bash MIGRATION_ROLLBACK.sh text # 只回文本 bash MIGRATION_ROLLBACK.sh audio # 只回音频说话人识别
手动改 vertex-gateway/wrangler.toml:
[vars] BYPASS_VERTEX_TEXT = "false" BYPASS_VERTEX_VISION = "false" BYPASS_VERTEX_TTS = "false" BYPASS_VERTEX_AUDIO = "false"
然后 wrangler deploy --config vertex-gateway/wrangler.toml。
env.VERTEX_SVC.fetch() 走统一入口,
开关切换不需要改任何调用方代码、不用重部其他 worker。
curl https://vertex-gateway.hb67egcim4.workers.dev/health
响应:
{
"status": "ok",
"bypass": { "text": true, "vision": true, "tts": true, "audio": true }
}