---
schemaVersion: 1
slug: levelup-20260608-12-llm-internals
ticketId: Lv-12
lang: zh-tw
title: LLM 其實怎麼跑起來的？從 Token 到下一個 Token 迴圈
summary: 大型語言模型看起來像在聊天，底層其實是一條很機械的流水線：文字先變成詞元編號，再變成向量，加入位置資訊，經過注意力機制、FFN、殘差流和正規化，最後把下一個 token 的機率算出來。這篇用 Level-Up 方式把 `Transformer` 架構 LLM 的核心零件拆開。
originalDate: 2026-06-01
translatedDate: 2026-06-08
source: Level-Up 系列 / 0xkato
sourceUrl: https://www.0xkato.xyz/how-llms-actually-work/
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/levelup-20260608-12-llm-internals
status: published
replacementTicketId: null
replacementUrl: null
---

# LLM 其實怎麼跑起來的？從 Token 到下一個 Token 迴圈

> **來源:** [Level-Up 系列 / 0xkato](https://www.0xkato.xyz/how-llms-actually-work/)

大型語言模型很會裝。

畫面上看起來像一個人在回訊息：一句一句、有語氣、有停頓，偶爾還會很有自信地講錯。可是把外殼拆掉，裡面其實沒有一個小人在讀文章、思考、再打字。裡面是一條很機械的流水線。

文字先被切成 token。[Token](https://gu-log.vercel.app/glossary#token) 變成數字 ID。數字 ID 查表變成向量。向量被加上位置感。接著一層一層 `Transformer` 區塊反覆加工：注意力機制讓 token 互相看，FFN 讓每個 token 自己消化，殘差流把中間結果一路累積，正規化防止數字爆炸。最後，模型不是輸出「答案」，而是輸出「下一個 token 可能是誰」的分數。

聽起來冷冰冰，對吧？

但這就是最有趣的地方：一個看起來像聊天的東西，底層其實只是在重複做「下一個字最可能是什麼」。魔法不是某個單一零件，而是這些零件疊到夠大、資料餵到夠多、訓練跑到夠久以後，行為開始像理解。

今天這篇不是要把 `Transformer` 的數學全部推完。那會變成期末考複習講義，讀者看三段就開始想滑 短影音。今天的目標比較務實：看懂 LLM 模型卡 或 `Transformer` 論文時，至少知道那些零件名稱在講哪一層。

先看全景。

```mermaid
graph TD
    輸入[文字 → 詞元編號<br/>→ 嵌入向量]
    輸入 --> 位置[位置資訊 / `RoPE`]
    位置 --> Blocks[`Transformer` 區塊]
    Blocks --> 注意力機制[注意力機制]
    Blocks --> FFN[前饋網路]
    注意力機制 --> 殘差[殘差流]
    FFN --> 殘差
    殘差 --> 輸出[原始分數 → 下一個 Token]
```

_\`Transformer\` 架構 LLM 的核心流水線_

---

## 🏰 第 0 層：Token — 模型讀的不是文字，是編號

**Level 0 / 7 — LLM 內部機制 — 0% 完成**

第一個殘酷事實：LLM 不直接讀文字。

人類看到 `strawberry`，腦中會浮出草莓、紅色、甜味、冰淇淋。模型看到的第一步不是這些東西，而是一串整數。這個轉換過程叫 **斷詞**。

**Token** 可以先想成「模型世界裡的最小文字積木」。它不一定是一個字，也不一定是一個完整單字。英文的 `running` 可能被切成 `run` 和 `ning`。中文也可能被切成字、詞、或更奇怪的片段。每個 token 都會對應到一個固定編號，叫 **詞元編號**。

> **比喻：便利商店條碼**
>
> 架上的商品叫「御飯糰」，但收銀機不是真的理解御飯糰。它掃到的是條碼，條碼對應到資料庫裡的一筆商品資料。
>
> LLM 也是一樣。文字是架上的商品，詞元編號是條碼。模型真正吃進去的是條碼，不是人類看到的字面。

這也是為什麼早期模型常常數錯 `strawberry` 裡有幾個 `r`。人類按字母數，模型看到的可能是幾個 子詞詞元。它不是在字母層級工作，所以要求它逐字母數數，就像要求收銀機只看條碼猜商品包裝上有幾個紅色字母。不是不可能，但不是它原生擅長的介面。

斷詞的取捨會直接影響成本。文字被切得越少 token，推論越便宜；切得越碎，模型需要處理的步數越多。不同模型家族用不同斷詞器，帳單、上下文視窗實際可用量、多語言表現，都會被這一步影響。

> **Mogu 認真說：**
>
> 這也是 prompt engineering 裡很多怪現象的底層原因。人類覺得「只是多打一點字」，模型看到的是「多了幾百個 token 要進注意力機制」。帳單不是按人類的字數算，是按模型世界的積木數算。這也是為什麼換斷詞器會讓舊 prompt 的成本突然浮動，像換了一把量尺以後發現家裡牆壁變長了。牆沒變，是量法變了。

**Quiz:** Tokenization 這一步主要在做什麼？

- A. 把文字轉成模型能處理的詞元編號序列
- B. 讓模型開始查網路找答案
- C. 把每個 token 的機率轉成文字
- D. 把模型權重壓縮成比較小的檔案

**Answer:** A — Tokenization 是文字進模型前的第一道轉換：文字先被切成 token，再映射成詞元編號。模型後面處理的是這些 ID 對應出來的向量。

---

## 🏰 第 1 層：嵌入向量 — 條碼要先查表，才會變成意思

**Level 1 / 7 — LLM 內部機制 — 14% 完成**

Token ID 本身沒有意義。

1024 只是一個數字。它不比 1025 更聰明，也不自帶「貓」「程式」「晚餐」的概念。模型要先拿這個 ID 去查一張巨大表格：**嵌入矩陣**。

嵌入矩陣可以想成「每個 token 的向量字典」。每一列對應一個 token，每一列是一串很長的數字。7B 級模型常見隱藏維度可能是 4096，意思是每個 token 會被換成 4096 個數字組成的向量。

**向量** 不用想太玄。先想成一張超長的角色能力表：甜度、技術感、名詞感、動詞感、跟 Python 相關的程度、跟法國相關的程度。真實模型裡不是人類手刻這些欄位，但訓練會讓向量空間自然長出語意結構。

> **比喻：遊戲角色能力值**
>
> Token ID 像角色編號。Embedding 像角色的能力值面板。
>
> 編號 37 本身沒有戰鬥力；查表後才知道這個角色速度多少、攻擊多少、魔法多少。模型後面所有計算，都是在操作這些能力值，不是在操作文字本身。

常聽到的 `king - man + woman ≈ queen`，就是 嵌入空間有語意幾何的經典例子。沒有人硬把「國王減男性加女性等於女王」寫進規則裡；模型只是為了預測文字，被迫把語意關係壓進向量位置。

但這裡還缺一件事。

同一個 token 的嵌入，不知道它站在句子的哪裡。`dog` 出現在第一個位置，和 `dog` 出現在第十個位置，查到的是同一列向量。可是語言順序很重要。「狗咬人」跟「人咬狗」完全不是同一件事，雖然 token 集合很像。

所以接下來要把「位置」放進來。

**Quiz:** 嵌入矩陣的角色最接近哪一個？

- A. 把詞元編號查成一串學出來的向量
- B. 決定模型最後要不要拒答
- C. 儲存所有使用者聊天紀錄
- D. 把網頁搜尋結果排成列表

**Answer:** A — Token ID 只是索引。嵌入矩陣會把這個索引換成模型可以計算的向量，後面的 \`Transformer\` 區塊都在處理這些向量。

---

## 🏰 第 2 層：位置 — 同一個字，站不同位置就不是同一回事

**Level 2 / 7 — LLM 內部機制 — 29% 完成**

`Transformer` 的 注意力機制 本身不天然知道順序。

如果只丟一堆 token 嵌入進去，模型看到的是一包向量，不是有順序的一句話。可是語言不是超市購物籃。雞蛋、牛奶、吐司順序換了沒差；「工程師修好了 bug」和「bug 修好了工程師」順序一換，世界觀直接崩壞。

早期 `Transformer` 用 **位置編碼**：每個位置有一組數字，直接加到 token 嵌入裡。位置 1 加一種波形，位置 2 加另一種波形。這樣同一個 token 放在不同位置，進模型時就會變成不同向量。

現代 LLM 常見的是 **`RoPE`（旋轉位置嵌入）**。這個名字很嚇人，但直覺可以很簡單：不要把位置資訊硬塞進 token 本身，而是在注意力機制比對 `Query` 和 `Key` 的時候，根據位置把向量旋轉一下。

> **比喻：舞台上的演員**
>
> 同一句台詞，站在舞台中央講，和站在門口講，觀眾理解會不一樣。
>
> `RoPE` 像是在每個演員身上加一個「站位角度」。兩個演員互相對戲時，模型看的不只是台詞內容，也看兩個站位之間的相對距離。

`RoPE` 的好處是比較自然地表達相對位置。注意力機制在意的常常不是「這是第 500 個 token」，而是「這個 token 跟那個 token 距離多遠」。這也是為什麼 `RoPE` 會出現在 LLaMA、Mistral、Gemma、Qwen 這些現代開放權重模型家族裡。

但位置資訊不是萬靈丹。長 context 裡常見的 **中段遺失** 問題，意思是模型比較容易用到開頭和結尾，埋在中間的資訊比較容易被忽略。長上下文不是大法師的無限記憶宮殿，比較像塞到爆的冰箱：東西都在裡面，但每次找蛋不一定找得到。

> **Mogu 歪樓一下：**
>
> 這一層很直接連回 prompt 寫法。重要資訊放開頭或結尾，通常比埋在中間可靠，不是玄學，是模型使用長上下文的行為真的有偏差。很多 prompt 技巧看起來像民俗療法，底層其實是架構的副作用。

**Quiz:** \`RoPE\` 的核心直覺是什麼？

- A. 把 \`Query\` 和 \`Key\` 依照位置旋轉，讓相對距離影響注意力機制
- B. 把所有 token 重新依照字母排序
- C. 讓模型只能處理英文，不處理中文
- D. 把模型參數平均分給每個使用者

**Answer:** A — \`RoPE\` 不是單純把位置向量加進嵌入，而是在 \`Query\` / \`Key\` 比對時用旋轉方式注入位置資訊，讓相對距離自然出現在注意力機制裡。

---

## 🏰 第 3 層：注意力機制 — Token 之間開始互相看

**Level 3 / 7 — LLM 內部機制 — 43% 完成**

前面三步處理的是「每個 token 自己是誰、站在哪裡」。接下來才是 `Transformer` 最有名的部分：**注意力機制**。

注意力機制的任務很單純：每個 token 要決定，前面哪些 token 對現在這一步最重要。

這裡有三個角色：**`Query`、`Key`、`Value`**，簡稱 Q、K、V。

**`Query`** 是「正在找什麼」。**`Key`** 是「身上掛著什麼標籤」。**`Value`** 是「如果被選中，要帶走什麼資訊」。

> **比喻：派對找人聊天**
>
> 一個人在派對上想找人聊 Python。
>
> - `Query`：腦中正在找「誰懂 Python？」
> - `Key`：每個人胸前的名牌，寫著「後端」「AI」「貓奴」「設計」
> - `Value`：真的聊上以後，對方能提供的資訊
>
> `Query` 會跟每個 `Key` 做匹配。匹配分數高的人，`Value` 就會被拿來影響現在這個 token。

數學上，`Query` 會和 `Key` 做點積，得到相似度分數。分數再經過 `softmax`，變成加總為 1 的權重。權重越高，對應的 `Value` 對目前 token 的影響越大。

GPT 風格的純解碼器模型還有一個限制：**因果遮罩**。生成第 5 個 token 時，只能看第 1 到第 5 個 token，不能偷看第 6 個。因為第 6 個還沒生成。這就是為什麼語言模型是左到右一個 token 一個 token 長出來。

這裡也是 KV 快取出現的地方。生成新 token 時，前面 token 的 `Key` 和 `Value` 不需要每次重算，可以先存起來。這個快取讓生成快很多，但長 context 也會讓快取變大，吃掉很多記憶體。

> **Mogu 碎碎念：**
>
> KV 快取是很多推論成本問題的核心。長 prompt 貴，不只是因為讀很多字，而是因為模型要保留很多過去 token 的 K/V 狀態，後面每生一個 token 都要拿來比對。這就像會議逐字稿越長，秘書要帶在身上的資料夾越厚。不是不能帶，是每走一步都比較重。

**Quiz:** 在 Q/K/V 裡，哪一個最像「如果匹配成功，就真正被複製過去的資訊」？

- A. \`Query\`
- B. \`Key\`
- C. \`Value\`
- D. Softmax

**Answer:** C — \`Query\` 負責找，\`Key\` 負責被比對，\`Value\` 才是匹配後實際被加權帶走的資訊。

---

## 🏰 第 4 層：多頭注意力 與 GQA — 一雙眼睛不夠，那就開很多雙

**Level 4 / 7 — LLM 內部機制 — 57% 完成**

一個 注意力機制 頭 只是一種看世界的方式。

語言裡同時存在很多關係：主詞和動詞、代名詞和人名、句子裡的引用、前後文的格式規律、程式碼裡變數和型別的關係。只用一個視角看，太窄。

所以 `Transformer` 用 **多頭注意力**：同一層裡平行跑很多個 注意力機制 頭。每個 頭 有自己的 Q/K/V 投影，學會看不同關係。最後再把這些 頭 的輸出合起來，丟回同一條 殘差流。

這裡有一個常見誤解：每個 頭 不是「拿原始向量的一小段固定切片」。比較準確的說法是：每個 頭 都有自己的 學出來的投影，把完整 詞元向量 投影到自己的小空間。

> **比喻：同一份履歷，不同面試官看不同重點**
>
> 履歷是完整的一份，不是剪成三段分給三個人。
>
> 技術主管看工程能力，產品主管看溝通，HR 看文化適配。每個人都看同一份履歷，只是各自用不同角度抽取重點。注意力機制 頭 也是這樣。

現代模型還常用 **GQA（分組查詢注意力）**。它的動機很實際：KV 快取很貴。

傳統多頭注意力裡，每個查詢頭都有自己的 `Key`/`Value` 頭。GQA 讓多個查詢頭共用比較少組 `Key`/`Value`。效果像保留很多種提問視角，但減少需要存的資料夾數量。LLaMA-2 70B、Mistral 7B 這類模型都採用過這種設計。

這不是華麗理論，是推論工程。模型要跑得快、長 context 要扛得住，KV 快取記憶體壓力就得降下來。

> **Mogu 忍不住說：**
>
> 這是讀模型卡時很值得注意的地方。看到 GQA，不要只想「架構名詞 +1」。它其實在講一個 production 問題：長上下文生成時，記憶體快被 KV 快取吃爆，所以架構要幫推論省錢。很多模型設計不是為了論文好看，是為了資料中心帳單不要好看得太恐怖。

**Quiz:** GQA 主要想改善哪個實務問題？

- A. 減少 KV 快取 的記憶體壓力
- B. 讓 斷詞器 不再需要 詞彙表
- C. 讓模型不用做 下一詞元 prediction
- D. 把所有 注意力機制 頭 變成同一個 頭

**Answer:** A — GQA 讓多個查詢頭共用較少的 key/value 頭，主要好處是降低 KV 快取 的記憶體成本，同時保留多個查詢視角。

---

## 🏰 第 5 層：FFN、`SwiGLU`、`MoE` — 模型的知識倉庫不只在 注意力機制

**Level 5 / 7 — LLM 內部機制 — 71% 完成**

注意力機制 很有名，所以很多人以為 `Transformer` 的靈魂都在 注意力機制。

其實每個 `Transformer` 層裡還有另一個重量級零件：**前饋網路（FFN）**。

注意力機制負責 token 之間互相交換資訊。FFN 則是每個 token 自己單獨加工。它通常做三件事：先把向量展開到更大的維度，經過非線性，再壓回原本大小。

**非線性** 是關鍵。沒有它，兩層線性層疊起來還是等於一層線性層，再疊一百層也只是比較會浪費電的一層。非線性讓模型可以表達彎曲、分段、條件式的關係。

現代 LLM 常見的 FFN 啟動函數不是早期 `ReLU`，而是 GELU、`SwiGLU` 這些變體。細節先不用死背，重點是：FFN 不是 注意力機制 的配角，它吃掉大量參數，也承載很多模型學到的語意和事實結構。

> **比喻：注意力機制 是開會，FFN 是回座位加工**
>
> 注意力機制 像大家在會議室交換情報。
>
> FFN 像每個人回到座位，把剛剛拿到的情報寫進自己的報告、重新整理、補上判斷。沒有會議，資訊不流動；沒有回座位加工，資訊只是聊天紀錄。

可解釋性研究裡常看到某些 FFN 神經元 對特定概念很敏感，例如地名、語法、程式語言、某些事實關聯。`ROME` 這類 模型編輯 方法甚至可以對特定 FFN 權重 做低秩修改，讓模型某些事實關聯改變。這表示模型的「知道」不是一個資料庫欄位，而是分散在權重和啟動值裡的結構。

大型模型還有另一個方向：**`MoE`（專家混合）**。密集 FFN 是每個 token 都跑同一套 FFN。`MoE` 則是準備多個專家，每個 token 只啟動其中幾個。總參數量可以變大，但每個 token 實際跑的運算量不會同比例變大。

這就像公司有 100 個專家，但每個案子只叫 2 個相關的人進會議室。公司總知識很多，單次開會成本不一定爆炸。

> **Mogu 插嘴：**
>
> `MoE` 的直覺很容易被總參數量騙。看到「8x7B」不要直接以為每個 token 都跑 56B。比較像一間有很多部門的公司，不是每封信都全公司逐字審稿。`Router` 會決定哪些專家上場。當然路由器本身也可能出事，像專案經理把資料庫問題丟給設計部門，那就精彩了。

**Quiz:** FFN 在 \`Transformer\` 層裡主要做什麼？

- A. 讓每個 token 在不混合其他 token 的情況下進一步加工
- B. 把未來 token 偷偷提供給目前 token
- C. 負責把文字切成詞元編號
- D. 只負責把模型輸出翻成中文

**Answer:** A — 注意力機制 負責跨 token 混合資訊；FFN 則對每個 token 的向量獨立做展開、非線性加工、再壓回原大小。

---

## 🏰 第 6 層：殘差流 與 `RMSNorm` — 深到幾十層還能訓練的原因

**Level 6 / 7 — LLM 內部機制 — 86% 完成**

`Transformer` 層一層一層疊上去，問題馬上出現：如果每層都直接覆蓋前一層資訊，訓練會很難穩定。梯度可能消失，數字可能爆炸，模型深一點就開始發瘋。

所以 `Transformer` 用 **殘差連接**。

意思是每個子區塊的輸出不會直接取代原本向量，而是加回去。舊向量保留，新資訊疊上去。這條一路累積的通道常被叫做 **殘差流**。

> **比喻：共同編輯文件**
>
> 每一層不是把前一版文件整份刪掉重寫，而是在同一份文件上加註、修改、補段落。
>
> 最後的文件裡還看得到最早的骨架，也看得到每一輪編輯留下的東西。殘差流就像這份一路被共同編輯的工作文件。

但一直加東西會有另一個問題：數字可能越加越大，或分布越來越怪。這時候需要 **層正規化** 或現代模型常見的 **`RMSNorm`**。

正規化的任務很務實：把每個詞元向量的數值拉回穩定範圍。沒有它，深層模型很容易訓練不穩。

早期 `Transformer` 常用 `post-正規化`，也就是子區塊跑完再正規化。現代 GPT、LLaMA、Mistral 等模型常見 `pre-正規化`，先正規化再進子區塊，訓練深層模型比較穩。`RMSNorm` 則是更簡化、更便宜的正規化變體，省掉均值置中，保留重新縮放向量大小的核心功能。

這一層聽起來不華麗，但很重要。沒有殘差連接和正規化，前面那些注意力機制、FFN、`MoE` 都很難穩定堆到幾十層、上百層。

> **Mogu 補個刀：**
>
> 很多系統設計也是這樣。外面看起來最酷的是 agent、瀏覽器、tool use，真正讓系統不爆炸的常常是檢查點、重試、速率限制、健康檢查。殘差連接和正規化就是 `Transformer` 裡的基礎設施。平常沒人鼓掌，壞掉時全場尖叫。

**Quiz:** 殘差連接的核心作用是什麼？

- A. 讓每層輸出加回原本向量，保留資訊和梯度通道
- B. 把所有 token 的順序打亂，增加泛化能力
- C. 讓 斷詞器 可以支援更多語言
- D. 把輸出機率轉成 JSON

**Answer:** A — 殘差連接讓子區塊的結果加回原向量，而不是完全取代它。這讓深層網路更容易保留資訊，也讓訓練訊號更穩定地流動。

---

## 🎯 魔王關：下一詞元迴圈 — 一整段文字就是一直猜下一格

**Level 7 / 7 — LLM 內部機制 — 100% 完成**

所有 `Transformer` 區塊跑完後，模型會拿最後一個 token 的最終向量，轉成詞彙表裡每個 token 的分數。這些原始分數叫 **原始分數**。

原始分數還不是機率。它們會經過 `softmax`，變成一個機率分布：下一個 token 可能是逗號、可能是「的」、可能是 function，每個候選都有一個分數。

接著 解碼設定會決定怎麼選。

**溫度** 會控制分布有多尖銳。低溫比較保守，高溫比較發散。**`top-k`** 只從前 k 個候選裡選。**`top-p`** 則從累積機率達到 p 的候選集合裡選。這就是為什麼同一個模型可以在某些設定下像嚴謹工程師，在另一些設定下像半夜三點靈感爆棚的寫作者。

選出下一個 token 後，這個 token 會被接到序列後面。模型再跑一次，產生下一個 token。然後再跑一次。再一次。直到遇到結束詞元或長度限制。

一整段回答，就是這個迴圈重複很多次。

```mermaid
graph TD
    Prompt[提示詞元] --> Model[`Transformer`]
    Model --> 原始分數[原始分數]
    原始分數 --> 取樣[取樣 / 解碼]
    取樣 --> Token[新詞元]
    Token --> 接回[接回上下文]
    接回 --> Model
```

_下一詞元 生成迴圈_

基礎模型的核心訓練目標也是這件事：預測下一個 token。它不是直接被訓練成「誠實」「會聊天」「會寫 code」。那些能力來自大量下一詞元預訓練之後，再加上指令微調、偏好最佳化、安全訓練、工具框架等後處理。

最後再補一個 production 技巧：**推測式解碼**。

直覺是先找一個小模型快速猜好幾個 token，再讓大模型一次驗證。如果小模型猜得符合大模型分布，就整批接受；猜錯再退回大模型。做對時，輸出分布可以保持等價，但速度變快。

這像讓實習生先草擬三句，資深工程師一次審三句。草稿合理就直接過，不合理再重寫。重點不是實習生比較聰明，而是資深工程師不用每個字都從零開始。

> **Mogu 吐槽時間：**
>
> 這也是 LLM 最容易讓人誤會的地方。表面上它像在「想完再回答」，底層卻是一格一格長出來。當然，現代 reasoning model 會用更多隱藏推理、工具呼叫、規劃框架 包住這個迴圈，但核心生成仍然離不開 逐詞元。外面穿西裝，裡面還是流水線。

## 結語

現在把整條路串起來：

文字先被斷詞器切成詞元編號。ID 查嵌入矩陣變成向量。位置資訊讓模型知道順序。注意力機制讓 token 彼此交換訊息。多頭注意力和 GQA 讓這個交換同時有多種視角，而且比較省 KV 快取。FFN 讓每個 token 自己加工，也承載大量學到的結構。殘差流把一路上的資訊累積起來，`RMSNorm` 讓數字保持穩定。最後原始分數變成下一個 token 的機率，生成迴圈一格一格往前走。

這就是 `Transformer` 架構 LLM 的基本骨架。

下次看到 模型卡 寫 `RoPE`、GQA、`SwiGLU`、`RMSNorm`、`MoE`，不必把它們當成一串咒語。它們只是這條流水線上的零件：有的負責位置，有的負責省記憶體，有的負責非線性加工，有的負責讓深層模型不要爆炸。

LLM 看起來像一顆會思考的大腦，但工程上更像一座巨大工廠。每個 token 都被送進輸送帶，經過一站又一站，最後吐出下一個 token。

魔法感還在，只是現在知道機房在哪裡了。

(๑•̀ㅂ•́)و✧

## 延伸閱讀

- [MP-46: Karpathy 只花 $72 就訓練出 GPT-2 — 7 年前 OpenAI 花了 $43,000](https://gu-log.vercel.app/posts/mp-46-20260208-karpathy-nanochat-gpt2/)
- [提示詞分頁式快取 / 分頁式注意力機制](https://gu-log.vercel.app/posts/gp-33-20260205-dejavucoder-prompt-caching-part3-paged-attention/)
- [MP-186: 把電腦塞進 `Transformer`：為什麼這招能讓 LLM 解數獨不翻車？](https://gu-log.vercel.app/posts/mp-186-20260317-christostzamos-transformer-llm/)
