目錄
選 LLM 不是選「最強的那個」,是選「在你的限制條件下夠用的那個」。nobodyclimb 跑在 Cloudflare Workers 上,AI 推論也繼續留在 Cloudflare 生態系——在這個限制下,Gemma 系列一直是繁體中文最順的選項。
模型狀態(2026-08):本文原本以
@cf/google/gemma-3-12b-it為主角,它已在 2026-05-30 被 Workers AI 標為 deprecated(模型頁與定價仍在,但已在退場軌道上)。現在的對應選項是@cf/google/gemma-4-26b-a4b-it,全文範例都已改成 Gemma 4。當初捨 Llama 選 Gemma 的三個理由在 Gemma 4 上一樣成立,所以那段判斷保留。
Cloudflare Workers AI 是什麼
Cloudflare Workers AI 是 Cloudflare 的推論服務,讓你在 Workers 環境直接呼叫 hosted 模型,不需要管 GPU 基礎設施。計費按 token 用量。
支援的模型涵蓋 text generation、embedding、image generation、speech-to-text 等類別。在 LLM 這塊,目前有 Gemma、Llama、Qwen、GLM、gpt-oss、Kimi 等主流開源模型。
// Workers 環境裡,binding 就是這樣用
const response = await env.AI.run("@cf/google/gemma-4-26b-a4b-it", {
messages: [
{ role: "system", content: "你是一個台灣攀岩社群的 AI 助手。" },
{ role: "user", content: "龍洞有哪些適合初學者的路線?" }
],
max_tokens: 1024,
stream: true,
});
相比自己架推論服務,好處是明顯的:不需要管 GPU、不需要 model serving 的 ops 工作、跟 Workers 的其他 binding(D1、KV、Vectorize)在同一個環境。
為什麼是 Gemma,不是 Llama
nobodyclimb 早期用的是 llama-3.1-8b-instruct,後來換成當時的 gemma-3-12b-it。換掉的三個理由,到 Gemma 4 依然是選它的理由:
繁體中文指令跟隨:Llama 3.1 8B 的繁體中文輸出品質不穩定,偶爾會夾雜簡體字,或是忽略系統提示裡的格式指令(例如「回答要包含來源連結」)。Gemma 在這方面明顯更可靠。
參數量:12B 對 8B 的差距在 RAG 問答這個場景能感受到——給它 5 份檢索文件,較大的模型能更準確地整合資訊,而不是只用到前幾份。Gemma 4 用 MoE 把這件事推得更遠:總參數 26B,每次推論只啟動約 4B。
Gemma 的多語言訓練:Google 在 Gemma 的訓練資料裡有更完整的多語言覆蓋,中文(包含繁體)的比例比 Llama 3.1 的公開訓練設定更高。
這不是說 Llama 不好,而是在繁體中文 RAG 這個具體 use case 上,Gemma 更適合。順帶一提,這兩個當初被拿來對比的模型 ID 都在 2026-05-30 那波被標為 deprecated——官方用字是 will be deprecated,模型頁與定價至今仍掛著,但它們已在退場軌道上,不該再拿來起新專案。
基本使用方式
非串流(適合 evaluation、background jobs):
const result = await env.AI.run("@cf/google/gemma-4-26b-a4b-it", {
messages: [
{ role: "system", content: systemPrompt },
{ role: "user", content: userQuery }
],
max_tokens: 512,
});
const answer = result.response; // string
串流(適合使用者介面):
const stream = await env.AI.run("@cf/google/gemma-4-26b-a4b-it", {
messages: [...],
stream: true,
});
// 搭配 Hono 的 streamSSE
return streamSSE(c, async (sseStream) => {
for await (const chunk of stream) {
if (chunk.response) {
await sseStream.writeSSE({ data: chunk.response });
}
}
});
JSON 輸出(適合結構化任務如 judge、filter-build):
const result = await env.AI.run("@cf/google/gemma-4-26b-a4b-it", {
messages: [
{
role: "system",
content: "以 JSON 格式回答,格式為 { score: number, reason: string }"
},
{ role: "user", content: `評估這個回答的品質:${answer}` }
],
response_format: { type: "json_object" },
max_tokens: 256,
});
const evaluation = JSON.parse(result.response);
nobodyclimb 的使用場景
系統裡有多個 pipeline step 需要呼叫 LLM:
| Step | 任務 | 輸出類型 |
|---|---|---|
| HyDE | 生成假設答案文件 | 純文字 |
| multi-query | 展開查詢成多個角度 | JSON array |
| filter-build | 萃取結構化搜尋條件 | JSON object |
| llm-generation | 最終回答生成 | 純文字(串流) |
| judge | 評估答案品質 | JSON object |
| agenticDecision | 判斷資訊是否足夠 | JSON boolean + reasoning |
同一個模型、不同的 prompt 工程,做截然不同的任務。這是選擇讓一個夠強的模型做所有事,而不是為每個任務選最小夠用的模型的策略——在 Cloudflare Workers AI 上,這樣管理更簡單。
Cloudflare Workers AI 的限制
不說清楚這些,之後踩坑會很痛:
CPU 時間限制:Workers 有 CPU 時間上限(Paid plan 是 30 秒,但 AI 呼叫不計入 CPU 時間,計入 wall time)。pipeline 裡有多個 LLM 呼叫(HyDE + generation + judge),加起來可能超過 Workers 的執行時間限制。nobodyclimb 的解法是讓 judge 非同步寫入(不阻塞主流程),HyDE 只在複雜查詢啟用。
模型會被標為退場,版本也不透明:Cloudflare 管理模型版本,你不能鎖定特定 checkpoint,模型行為可能在沒有通知的情況下改變;更麻煩的是整個 model ID 會進入退場軌道。2026-05-30 那波一次把 18 個 ID 標為 deprecated,Llama 2/3/3.1 全系列、Mistral 7B、Gemma 3 12B 都在裡面。這代表 model ID 不該散在程式各處硬寫,要收斂成一個常數或設定值,換的時候只動一個地方;另外要有監控機制偵測輸出品質是否有異常。
沒有 fine-tuning:目前 Workers AI 上的 hosted 模型無法 fine-tune。領域適應只能靠 prompt engineering 和 RAG。
冷啟動延遲:在流量低的時段,第一次呼叫可能有較高延遲。semantic cache 可以緩解這個問題(有快取命中就不需要呼叫 LLM)。
Context window 要看模型頁:各模型差很多,而且以 Workers AI 模型頁標示的數字為準,不是原始模型的規格——gemma-4-26b-a4b-it 是 256,000 tokens,glm-4.7-flash 是 131,072,已標退場的 gemma-3-12b-it 是 80,000。長對話或大量檢索文件照實際上限抓。
跟其他選項比較
| gemma-4-26b-a4b-it (Workers AI) | glm-4.7-flash (Workers AI) | OpenAI GPT-4o-mini | 自架 Ollama | |
|---|---|---|---|---|
| 繁中品質 | 好 | 好 | 很好 | 依模型 |
| Context window | 256K tokens | 131K tokens | 128K tokens | 依模型 |
| Vision | 有 | 無 | 有 | 依模型 |
| Function calling | 有 | 有 | 有 | 依模型 |
| 維運成本 | 零 | 零 | 零 | 高 |
| 延遲 | 快(MoE active 4B) | 快 | 低 | 依硬體 |
| 彈性 | 低 | 低 | 中 | 高 |
| 費用(per M tokens) | $0.10 / $0.30 | $0.06 / $0.40 | Token-based | 固定硬體成本 |
如果繁體中文品質是最高優先,GPT-4o 系列還是更強。但如果你已經在 Cloudflare 生態系,不想多維護一個 AI 服務的帳戶和 API key,Workers AI 是最順的選擇。
同一個生態系裡,Gemma 4 跟 GLM-4.7-Flash 的分工大致是:要 vision 或 context 塞很滿選 Gemma 4,純文字對話而且輸入量遠大於輸出量選 GLM(input 只要 $0.06,但 output 貴一點)。
實際觀察
用了幾個月下來:
- 繁體中文的指令跟隨比 Llama 穩定,系統提示裡要求的格式(引用來源、JSON 輸出)基本上都能遵守
- 偶爾的幻覺問題靠 judge + self-reflection 機制攔截,groundedness 低於 0.5 就重試
- 12B 的推論速度不算快,串流的第一個 token 通常在 1-2 秒,完整回答(300-500 字)大約 5-8 秒;Gemma 4 因為只啟動 4B,這一段有改善
- JSON 輸出模式穩定,
response_format: { type: "json_object" }很少回傳格式錯誤的東西
整體判斷:在「不離開 Cloudflare 生態系」的限制下,這是目前最好的繁體中文 LLM 選項。
從 Gemma 3 遷移到 Gemma 4
@cf/google/gemma-3-12b-it 在 2026-05-30 被標為 deprecated。Cloudflare 給的建議替代品有三個:@cf/zai-org/glm-4.7-flash(快速 tool calling)、@cf/google/gemma-4-26b-a4b-it(高效開源模型)、@cf/moonshotai/kimi-k2.6(agentic + vision,但需要付費方案)。從 Gemma 3 過來,最直接的就是 Gemma 4。
架構變化:MoE Gemma 4 採用 Mixture-of-Experts 架構。總參數 26B,但每次推論只啟動約 4B(a4b = active 4 billion)。實際推論速度比 Gemma 3 12B 更快,同時在多數任務上表現更好。
256K context window Gemma 3 在 Workers AI 上是 80K,Gemma 4 是 256K。對需要塞入大量檢索文件的 RAG 場景,這是實打實的空間。
Vision 支援 可以傳入圖片做視覺理解,適合需要分析截圖、圖表的應用。
Function calling 原生支援工具呼叫,比起用 prompt 硬塞 JSON 更可靠,適合 agentic workflow。
價格反而更便宜 Gemma 3 是 $0.35 / $0.56 per M input/output tokens,Gemma 4 是 $0.10 / $0.30。升級不需要拿成本去換。
// 遷移就是換 model ID,呼叫介面相同
const response = await env.AI.run("@cf/google/gemma-4-26b-a4b-it", {
messages: [
{ role: "system", content: "你是一個台灣攀岩社群的 AI 助手。" },
{ role: "user", content: "龍洞有哪些適合初學者的路線?" }
],
max_tokens: 1024,
stream: true,
});
介面相同不代表輸出相同。換模型之後 prompt 要重跑一次評估——尤其是靠 few-shot 或特定措辭撐住的 JSON 格式指令,換模型是最容易破的地方。
更新紀錄
- 2026-08-18:
gemma-3-12b-it已於 2026-05-30 標為 deprecated,全文範例改為gemma-4-26b-a4b-it,新增遷移章節與 GLM-4.7-Flash 對比。同時修正兩處事實:Gemma 3 在 Workers AI 的 context window 是 80,000 tokens(原寫 8192),以及 Gemma 3 有公開定價 $0.35 / $0.56 per M tokens(原寫沒有公開定價)。
參考資料
Loading...