Applied AI School
v0 · 規劃中
Anthropic

一個 request 的生命週期 + Models

從 client 按下 send 到拿到回應,5 步流程;順便把 Opus / Sonnet / Haiku 三個模型的取捨講清楚。

TL;DR

  • 一個 request 5 步:client → 你的 server → Anthropic API → model 處理 → response 回來
  • client 不該直連 Anthropic——API key 一旦進前端 bundle 或 mobile app 就漏光
  • Opus / Sonnet / Haiku 的取捨是**「智力 ↔ 速度 ↔ 成本」**的三點選擇,多數產品用 Sonnet

一個情境:為什麼前端不能直接呼叫

實作 chat app 的時候第一個誘惑:「在 React 直接 fetch Anthropic API 不就好?少一層 server。」

不行,原因很直接:

  • API key 寫在前端 bundle 裡,瀏覽器 devtools 一打開就看到
  • mobile app 反編譯也一樣
  • 一旦漏,攻擊者可以無限刷你帳上的額度

所以永遠中間要有一台 server。server 拿 key、客戶端只跟 server 講話。Anthropic 是這樣,OpenAI、Gemini 也都是這樣。

5 步流程

1. [Client]
       │  user 輸入訊息
       ▼
2. [你的 Server]                   ← API key 在這
       │  組 request
       ▼
3. [Anthropic API]
       │  收下 → 排隊
       ▼
4. [Model(Opus/Sonnet/Haiku)]
       │  處理 → 產生回應
       ▼
5. [Anthropic API → 你的 Server → Client]
       回程把 response 一路傳回去

每一步都可以失敗、都需要錯誤處理。實務上大部分 bug 都在 step 2(你的 server 組錯 request)跟 step 5(response 沒處理好就丟給前端)。

Model 處理那一格裡發生什麼

很多人聽過「LLM 是預測下一個 token」但沒看過那是什麼意思。Model 內部走 4 步:

步驟做什麼
Tokenization把輸入文字切成 token(≈ 字、字根、標點)
Embedding每個 token 變成一串數字(向量),代表它「可能是什麼意思」
Contextualization看上下文調整每個 token 的意思("bank" 是河岸還是銀行?)
Generation一次預測下一個 token 的機率分佈,挑一個,再循環

這 4 步不需要記細節。只要知道「不是一個 lookup table,是一輪計算」就夠了。後面講 prompt caching 才會用到這個觀念(cache 的就是前 3 步算出來的東西)。

Stop reasons:model 為什麼停下

回 response 裡有個 stop_reason 欄位,三種值最常見:

stop_reason意思
end_turnmodel 自然講完
max_tokens撞到你設的上限被截斷
stop_sequence你在 stop_sequences 指定的字串出現,提早停(response 會多一個 stop_sequence 欄位告訴你命中哪一個)

production 一定要檢查 stop_reasonmax_tokens 出現代表你的 response 被切一半,UI 顯示要提示,或者重發 request 加長 max。後面結構化輸出時(JSON 截一半就不能 parse)這個欄位很重要。

Models:Opus / Sonnet / Haiku

Anthropic 三個 model family,都會做同樣的事(chat、code、看圖、tool use),差別在 optimize 哪一邊:

強項弱項適合
Opus最聰明、會深度推理、長任務不掉鏈慢、貴複雜 agent、多步驟規劃、難 debug
Sonnet平衡——夠聰明、夠快、夠便宜沒有特別強項多數產品的主力
Haiku最快、最便宜推理較弱、不支援 extended thinking分類、摘要、實時 user-facing

2026 當下版本:Opus 4.7、Sonnet 4.6、Haiku 4.5。實際 model id 寫成 claude-opus-4-7claude-sonnet-4-6claude-haiku-4-5。版本會持續更新,寫 production code 把 model id 抽成設定,不要寫死

實務上的混搭

「選哪個」不一定要選一個。常見組合:

  • Haiku 做分類、Sonnet 做生成:客服信先 Haiku 分類,分到「需要長回信」才丟 Sonnet 寫草稿
  • Sonnet 做主流程、Opus 做兜底:normal case Sonnet 解,連續失敗 N 次才升 Opus
  • Haiku 做 streaming 預覽、Sonnet 做 final:user 先看 Haiku 快回答,背景 Sonnet 補一份完整版

接下來

下一篇把抽象的「組 request」變具體——messages.create 的 4 個必填欄位、system prompt 為什麼分離、max_tokens 為什麼是上限不是目標。