閱讀路線圖
LLM Foundations
依照章節順序探索這 5 篇文章。你可以從第一篇開始,也可以直接跳到任何節點。
從 LLM 基礎到推論基礎設施——建構與部署生產級 AI 系統的實戰指南。
閱讀路線圖
依照章節順序探索這 5 篇文章。你可以從第一篇開始,也可以直接跳到任何節點。
章節
直接點擊任一章節即可跳轉閱讀。
你在某個 AI 應用裡打了一段話,幾秒鐘後螢幕上跑出好幾段文字——流暢、有條理,讀起來像某個很懂的人寫的。這種事現在大家都習以為常了。但如果你打算在這些系統上面蓋東西,真正該理解的是:從你按下送出到那些文字出現,中間到底發生了什麼。
上一篇裡,我們丟了一句話給 LLM——「幫我規劃一趟赫爾辛基(Helsinki)之旅」——然後拿到一份細節滿滿的行程表:餐廳名、交通路線、一日遊安排。讀起來很順,看起來也合理,但好幾個細節事後被證實是錯的。模型沒壞,只是輸入沒給它什麼限制條件可以依循。
大型語言模型能產出流暢又自信的文字。而這份自信,正是問題所在。模型可以把一筆已經下架的房源、一個上一季才變動的稅率、一則三年前的學校評分,講得頭頭是道。它沒有任何機制去查核——本來就不是為查核設計的。它的工作是根據訓練資料預測下一個最合理的 token,而合理不等於正確。
一個有用的 AI 系統,關鍵不在於它被稱為助理還是 Agent,而在於它對下一步擁有多少控制權。
客戶支援是很適合收束基礎概念的範例,因為一則訊息可能同時需要檢索、工具使用、記憶、路由和核准邊界。
閱讀路線圖
依照章節順序探索這 7 篇文章。你可以從第一篇開始,也可以直接跳到任何節點。
章節
直接點擊任一章節即可跳轉閱讀。
真實 AI 產品裡的多數失敗,根本不是模型能力不夠。問題出在我們把太多工作交給模型:擷取正確的資料、解讀混亂的文件、檢查 schema、追蹤跨步驟的狀態、為答案附上佐證。Demo 階段可以掩蓋這些問題,但一進正式環境,馬上就暴露了。
有用的 AI 系統往往還沒遇到什麼奇特的模型問題,就先因為普通的軟體原因出狀況了。原型階段看起來很厲害——一個提示就能產生看似合理的答案。但正式系統面對的不是合理性,而是一筆筆需要路由、驗證(validation)、重試、儲存或拒絕的記錄、決策和動作。
大型語言模型之所以有用,是因為它們能用流暢的語言綜合、解釋和轉化資訊。但一旦我們要求它們處理即時的、私有的,或需要可驗證依據的資訊,它們就變得不可靠。模型在訓練期間可能看過類似的素材,但這不代表它能存取當前任務需要的那份飯店合約、無障礙稽核或客戶回饋記錄。
一個為中型旅行社打造的旅遊規劃 Copilot,被問了一個很直接的問題:「這間飯店之前是否在輪椅使用者的無障礙審查中未通過?」
Agent(代理)已經成為 AI 中最被濫用的術語之一。產品團隊拿它來形容各種東西——從帶有檢索功能的聊天介面,到可以自行規劃、呼叫工具和採取行動的長時間執行程式,通通都算。這種詞彙漂移會造成實際問題:真正的設計問題明明是架構性的,團隊卻在爭論標籤。
多數關於 agent 的工程討論,太早亮出 agent 這個詞,卻太晚才談運營迴圈。其實實務上真正重要的設計問題很簡單:模型一旦能執行不止一步,系統怎麼決定下一步做什麼?能呼叫哪些工具?可以從結果推斷什麼?又該在何時停下來?
基本的檢索增強生成(RAG)到現在還是多數正式環境系統最常用的基礎模式。語料庫很大、更新頻繁、又需要展示答案來源?檢索依然是最乾淨的起點。不過實務上會碰到一種極限情境——簡單的 RAG 開始力不從心:系統確實找到了正確的文件,但任務現在需要的是針對一組有限的證據持續推理,同時回答同一案件的多次後續追問。
閱讀路線圖
依照章節順序探索這 3 篇文章。你可以從第一篇開始,也可以直接跳到任何節點。
章節
直接點擊任一章節即可跳轉閱讀。
多數團隊第一次接觸文件處理,都是從 OCR 開始。問題看起來很直覺:把頁面轉成文字、為文字建索引,然後讓檢索系統或 LLM 來回答問題。
純文字系統一旦證據不再主要是文字,就會失效;在無障礙旅行規劃中,照片、平面圖、路線地圖、圖說和量測數據往往會共同決定答案。
當一個團隊準備建構進階 AI 旅行 Copilot 時,真正的難題不是「用哪個模型」,而是「在系統能被正式環境信任之前,什麼事情必須發生、按什麼順序、憑什麼證據、在什麼狀態下、經誰核准?」這是架構問題——模型在裡面扮演角色,但模型無法單獨解決它。
閱讀路線圖
依照章節順序探索這 6 篇文章。你可以從第一篇開始,也可以直接跳到任何節點。
章節
直接點擊任一章節即可跳轉閱讀。
你已經建好一個旅遊小助理。使用者輸入一段查詢,你的應用程式把它送到 LLM 供應商的 API,幾秒後回應串流回來。對應用程式開發者來說,那就是一次函式呼叫。但從基礎設施的角度來看,這一次呼叫觸發了一整條流程(pipeline),牽涉到不同的運算階段、專用的記憶體結構、排程決策,還有硬體限制。這些因素加在一起,決定了使用者實際感受到的延遲、吞吐量和成本。
I-00 追蹤了單一請求通過推論流程的完整路徑:預填充(prefill)以平行方式處理所有輸入 token,解碼(decode)逐一生成輸出 token,而 KV 快取(key-value cache)隨著每一步不斷增長。在那篇文章的結尾,我們注意到還有 49 個其他代理人幾乎同時提交了查詢。這個觀察不是隨口帶過——它直接指向推論服務的核心運作問題。
在 I-00 篇中,我們走過了一次 API 呼叫從頭到尾通過推論管線的完整流程,也認識了 KV 快取(key-value cache)——一種用來儲存注意力機制中 key-value 向量的資料結構,讓模型不必在每個解碼步驟重複計算這些向量。KV 快取會隨著每個生成的 token 不斷增長,而且在整個請求期間都必須留在 GPU 記憶體裡。到了 I-01 篇,我們又認識了連續批次處理(continuous batching):它在迭代層級進行排程,不再傻等批次中最慢的請求跑完,因此能讓更多請求同時保持運作。
I-00 確立了 LLM 推論具有兩個資源特性截然不同的階段。預填充以平行方式處理所有輸入 token,屬於運算瓶頸(compute-bound)——GPU 的運算單元是限制因素。解碼則逐一生成 token,屬於記憶體頻寬瓶頸(memory-bandwidth-bound)——限制因素在於從 GPU 記憶體讀取模型權重和 KV 快取的速度。I-01 介紹了連續批次處理,它透過在迭代層級而非批次層級進行排程,讓 GPU 保持滿載。I-02 則展示了 PagedAttention 如何消除記憶體浪費,讓更多請求能同時處於活躍狀態。
在 I-02 篇中,我們看到 PagedAttention 讓不同的請求能在同一個模型副本(model replica)上共用物理 KV 快取區塊。兩個使用相同系統提示詞(system prompt)的請求可以指向相同的物理區塊,不需要儲存重複的副本。這個共用機制確實有效——但前提是兩個請求必須落在同一個副本上。
在 I-00 篇中,我們列出了 LLM 推論與傳統模型服務的五項差異。前四項——可變長度運算、兩階段資源特徵、不斷增長的記憶體需求,以及快取感知路由——每一項都已經在本系列的專文中討論過了。第五項則只用一句話帶過:「部分現代 LLM 使用混合專家模型(MoE, mixture of experts)架構,不同的輸入會啟動模型的不同部分。將 MoE 模型分散部署到多張 GPU 上,所需的分片(sharding)策略與密集模型(dense model)截然不同。」