應用路線與模型速成
想做出 AI 應用或 agent 的人,走這條路線就夠了:
- S0 全局地圖:先看懂一個 AI 系統由哪些部分組成。
- 模型速成(本頁下半部):做應用最少要知道的模型知識,十個主題,每個幾段話。
- Part III 到 Part VII(S6–S19):從 S6 LLM API 與應用基本功開始,按順序走到 S19 真實 agent 系統與畢業專題。
Part II 模型原理(S1–S5)講模型內部怎麼運作:神經網路、Transformer、預訓練、後訓練、推論。它比較底層、用到較多數學,是選修的深入路線。不讀它也能走完 Part III 到 Part VII(S6–S19);S6 LLM API 與應用基本功之後的頁面用到模型知識時,會先指回本頁的速成段落,再標出「深入:」與 Part II 的對應章節,例如「深入:S2 Transformer 與 decoding」。
- 想把 LLM 接進產品、做出能用的系統的工程師,也就是業界說的 AI 工程師(用現成模型做產品,不從頭訓練模型)。
- 沒有機器學習背景,想先知道「這些東西怎麼用、為什麼這樣設計」的人。
- 不寫程式、只想看懂的人(理解路線):讀完下面「現在要懂的四件事」就直接進 S6 LLM API 與應用基本功,各章只讀主線、做「先試一下」與自我檢查。
- 時間有限,希望早點交出看得到的成果(實作路線)。第一個成果是 S6 LLM API 與應用基本功的系統專案進階題 A6 串流聊天與 trace:一個能串流的聊天介面,介面可以用 Gradio、Chainlit 或 CLI,不必寫前端。
想研究或訓練模型、做推論基礎設施的人,請把 Part II 也走完(從 S0 全局地圖依序走到 S19 真實 agent 系統與畢業專題)。
每一章的必做題是主線;進階題是選做的長期專案,分成兩個:系統專案(A6–A19,每章一步做出你自己的 AI 應用)和模型專案(M1–M5,在 Part II 訓練小模型)。進階題在淺顯模式下收合。
什麼時候值得讀 Part II
Section titled “什麼時候值得讀 Part II”走應用路線時,下面這些地方你會先「知道怎麼做」,想知道「為什麼」時再去讀對應的章(代號的意思見代號怎麼讀):
| 你在哪一章 | 會用到的模型知識 | 深入閱讀 |
|---|---|---|
| S6 LLM API 與應用基本功、S18 部署與架構 | 輸入與輸出 token 的計價差異、延遲的組成 | S5 推論與 serving |
| S7 Prompt、structured output 與 workflows | constrained decoding 怎麼保證格式 | S5 推論與 serving |
| S8 Eval 方法論 | logprobs 與信心、sampling 造成的隨機性 | S2 Transformer 與 decoding |
| S9 檢索與 RAG | 微調 embedding 模型(A9 附引用的 RAG) | S4 Post-training 與 reasoning、模型專案 |
| S11 Context engineering | prompt caching 為什麼省錢 | S5 推論與 serving |
| S14 Agent eval、資料與最佳化 | reward hacking、蒸餾 router(A14 agent eval 與最佳化) | S4 Post-training 與 reasoning |
| S18 部署與架構 | 自架與 API 的成本比較(A18 多使用者部署用 M5 迷你推論伺服器的實測數字) | S5 推論與 serving、模型專案 |
如果想補,建議從這幾個不需要先讀 S1 神經網路基礎的小節開始:走完 S8 Eval 方法論之後,讀 S2 Transformer 與 decoding 的斷詞與 decoding 兩節、S5 推論與 serving 開頭的例子與 prefill/decode 一節(和應用最相關);走完 S14 Agent eval、資料與最佳化之後,讀 S4 Post-training 與 reasoning 的講義主線;想完整理解時,再從 S1 依序讀。數學工具(softmax、標準誤、bootstrap 等)見數學補給。
這一節分兩部分:「現在要懂的四件事」是走進 S6 LLM API 與應用基本功之前要先懂的;「之後用到再查」先知道名字就好,用到時再回來。每一段後面都附上深入內容所在的章(Part II,選讀)。
現在要懂的四件事
Section titled “現在要懂的四件事”走進 S6 LLM API 與應用基本功之前,先確定這四件事都懂:模型讀寫的單位(token)、它怎麼產生文字(下面分 Next-token 與 Sampling 兩段講)、一次能看多少(context)、要花多少錢與時間。
Token 與斷詞
Section titled “Token 與斷詞”模型看到的不是字元,而是 token:tokenizer 用 BPE 之類的演算法,把常一起出現的字元組合併成一個單位,再轉成整數。一個英文單字通常是一到兩個 token,中文常常一到兩個字就是一個 token。同樣的意思,中文是否比英文花更多 token(也就更貴、更佔 context)要看 tokenizer:詞彙表小或以英文為主的 tokenizer 差很多,新一代多語 tokenizer 差距小得多。API 的計價、context 的上限、速度,全部以 token 計算,不是以字數。很多「LLM 的怪毛病」,例如數不清單字裡的字母、算術不穩,都和 token 的切法有關。→ S2 Transformer 與 decoding
Next-token prediction
Section titled “Next-token prediction”LLM 只做一件事:給定前面所有的 token,輸出下一個 token 的機率分布。生成一段回答,就是重複「預測 → 挑一個 token → 接到後面 → 再預測」直到結束。對話、工具呼叫、JSON 輸出,最後都是這個機制產生的文字,只是格式不同。模型本身是數十億個數字,叫參數(也叫權重);訓練就是調整這些數字,讓預測越來越準。這也代表模型沒有「查資料庫」的動作,它說的事實來自訓練時學到的統計規律,所以會產生看似合理但錯誤的內容(幻覺)。→ S1 神經網路基礎、S2 Transformer 與 decoding
Sampling 與 temperature
Section titled “Sampling 與 temperature”模型每一步給出機率分布之後,由 sampling 設定決定挑哪個 token。Temperature 調整分布的尖銳程度:低溫(例如 0–0.3)幾乎都挑最可能的,輸出穩定;高溫讓不太可能的 token 也有機會,輸出更多樣也更容易出錯。要注意:temperature 設成 0 也不保證每次輸出完全相同,所以測試 LLM 程式時要用 S6 LLM API 與應用基本功教的方法處理「每次輸出可能不同」。→ S2 Transformer 與 decoding、S6 LLM API 與應用基本功
深入一點:top-p,以及不接受這些參數的 API
- Top-p 只在累積機率達到 p 的候選裡抽樣。
- 溫度設 0 仍會變,是因為伺服器端的批次處理與浮點運算順序都可能造成差異。
- 部分 API 已不接受這些參數(例如 Claude 帶
temperature會回 400,見 S6 LLM API 與應用基本功),穩定性要靠 prompt、structured output 與測試方法;需要調 temperature 的練習請用本地模型(Ollama、llama.cpp)。
Context window
Section titled “Context window”Context window 是模型一次能處理的 token 上限,輸入(系統提示詞、對話歷史、檢索結果、工具輸出)和輸出加起來都要算進去。上限很大不代表都該塞滿:放進去的內容越多,成本與延遲越高,而且模型在長 context 中找出關鍵資訊的能力會下降。決定「這次放什麼進 context」是 S11 Context engineering 的主題;S9 檢索與 RAG 教的 RAG 則是只放相關部分的方法。→ S9 檢索與 RAG、S11 Context engineering
成本與延遲的基本功
Section titled “成本與延遲的基本功”API 費用約等於「輸入 token 數 × 輸入單價 + 輸出 token 數 × 輸出單價」,輸出單價通常是輸入的好幾倍;有快取的輸入通常更便宜(原理見下方〈KV cache〉)。推理模型(reasoning model)會先寫出一段思考過程再回答,這些思考 token 一般按輸出計價,常常比最後的回答還多。延遲大致是 TTFT(第一個 token 出現前的時間,隨輸入長度增加)加上「輸出 token 數 × 每個 token 的時間」,所以縮短輸出通常比縮短輸入更能降低延遲。常見的省錢與加速手段:換小模型、限制輸出長度、讓 prompt 開頭固定以提高快取命中、用串流讓使用者更早看到內容。從 S6 LLM API 與應用基本功開始,每次呼叫都要記錄 token 數、成本、延遲,這是之後所有最佳化的依據。→ S5 推論與 serving、S6 LLM API 與應用基本功、S18 部署與架構
之後用到再查
Section titled “之後用到再查”下面五個主題,S6 LLM API 與應用基本功之後的頁面用到時會連回來。現在先知道名字和用途就好,每段最後寫了什麼時候值得回來讀。
Logits 與 softmax
Section titled “Logits 與 softmax”「輸出機率分布」具體是這樣:模型最後一層為詞彙表裡的每個 token 各輸出一個分數,叫 logit;softmax 把這些分數轉成加總為 1 的機率,分數高的機率就高。Temperature 就是在 softmax 之前先把 logits 除以 T。有些 API 會回傳 logprobs,也就是這些機率取對數,S8 Eval 方法論會用它看模型有多「確定」。手算例子見數學補給。→ S2 Transformer 與 decoding
什麼時候回來讀:S8 Eval 方法論用 logprobs 判斷模型有多確定時。
KV cache,以及為什麼輸出 token 比較貴
Section titled “KV cache,以及為什麼輸出 token 比較貴”模型處理請求分兩個階段。Prefill 一次平行處理整段輸入,並把每個 token 的中間結果存成 KV cache;decode 每次只產生一個 token,而每產生一個,都要把整個模型的權重從記憶體讀一遍。所以輸入 token 可以大量平行處理、比較便宜,輸出 token 只能一個一個來、比較貴也比較慢,API 價目表上輸出單價通常是輸入的好幾倍。Prompt caching 就是重用相同開頭的 KV cache:如果每次請求的開頭(例如系統提示詞)都一樣,那段的計費比較便宜,處理也更快。→ S5 推論與 serving
什麼時候回來讀:S11 Context engineering 講 prompt caching 為什麼省錢之前。
訓練階段:pretrain → SFT → 偏好 / RL → reasoning
Section titled “訓練階段:pretrain → SFT → 偏好 / RL → reasoning”LLM 的訓練大致分成幾個階段。Pretraining 用大量網路文字訓練 next-token prediction,得到只會「接著寫」的 base model,知識大多在這個階段學到。SFT 用「指令 → 好回答」的資料教它聽指令、用對話格式回答。偏好學習(RLHF、DPO)用人類對回答的比較,讓它更有用、更安全。最近的 reasoning model 再用可自動驗證答案的任務(數學、程式)做強化學習(也常搭配蒸餾),讓模型學會先寫出很長的思考過程再回答,所以它們更擅長難題,但也更慢、花更多 token。→ S3 Pretraining 與 scaling、S4 Post-training 與 reasoning
什麼時候回來讀:S14 Agent eval、資料與最佳化和 S16 安全與治理提到 reward hacking、model spec 時。
Chat template
Section titled “Chat template”你送給 API 的 messages(system、user、assistant、工具呼叫與工具結果)不會原封不動進入模型。伺服器會用 chat template 把它們串成一整段文字,用特殊 token 標出每則訊息的角色與邊界,例如 Qwen 系列的 <|im_start|>user … <|im_end|>;模型看到的就是這段文字,接著預測 assistant 的下一個 token。工具呼叫也是模型依 template 規定的格式輸出的一段文字,再由伺服器解析成結構化的 tool call。訓練與推論用的 template 必須一致;用 API 時廠商會處理,自己跑開源模型時要用 tokenizer 提供的 template。→ S4 Post-training 與 reasoning、S7 Prompt、structured output 與 workflows
什麼時候回來讀:S7 Prompt、structured output 與 workflows 看工具呼叫的原始樣子時。
微調能做什麼、不能做什麼
Section titled “微調能做什麼、不能做什麼”微調(fine-tuning)適合改變模型的行為:固定的輸出格式、特定的語氣或風格、某個窄任務的表現,或把大型模型的能力蒸餾到更小、更便宜的模型。它不適合用來加入會變動的知識:用微調灌輸新事實通常不如 RAG 可靠,資料一改就要重新訓練,也無法提供引用來源。一般用少量資料做的 SFT 微調,也不太能讓模型學會本來就做不到的推理能力(推理能力主要來自大規模 RL,或用大量強模型解題範例做 SFT,也就是蒸餾;見 S4 Post-training 與 reasoning),而且可能讓其他能力退步。實務上的順序是:先把 prompt 做好,知識問題用 RAG,最後才考慮微調,而且要先有評估資料才能判斷微調有沒有用。→ S4 Post-training 與 reasoning、S9 檢索與 RAG
什麼時候回來讀:S9 檢索與 RAG 決定該用 prompt、RAG 還是微調時。
走進 S6 LLM API 與應用基本功之前,試著回答這幾題。答不出來的,回到對應的段落或章節。
-
為什麼同一段話翻成中文後,API 費用可能變高?
提示
判斷重點:計價以 token 計,不是字數;中文在某些 tokenizer 上 token 數較多。常見錯法:以為中文字少所以比較便宜。回讀:Token 與斷詞
-
把 temperature 設成 0,可以當作「測試永遠會得到相同輸出」的保證嗎?
提示
判斷重點:不行,伺服器端的處理仍可能讓輸出不同。常見錯法:用「輸出完全相同」當測試的通過條件。回讀:Sampling 與 temperature
-
一個請求的輸入是 10,000 token、輸出是 500 token;另一個輸入 500、輸出 10,000。哪一個比較慢?哪一個比較貴?為什麼?
提示
判斷重點:輸出一個一個產生,所以輸出多的那個比較慢;輸出單價通常是輸入的好幾倍,所以它通常也比較貴。常見錯法:只看總 token 數,以為兩個差不多。回讀:成本與延遲的基本功
-
(之後用到再查)公司想讓模型回答最新的產品規格,同事提議用規格書微調模型。你會怎麼建議?
提示
判斷重點:會變動的知識用 RAG,微調適合改變行為。常見錯法:以為微調後模型就能可靠地背出新規格。回讀:微調能做什麼、不能做什麼
講義內容以 CC BY-NC-SA 4.0 授權:可以轉載與改作,但要標示出處、不得用於商業用途,改作也要用相同授權。引用的第三方內容與商標屬於原作者。