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