MUST · 手搓你的 AI Agent · 組件 05

上下文視窗計量表

看清模型的「工作記憶」怎樣被填滿、為何會忘記、壓縮又丟掉了甚麼。

模型的白板有多大

大型語言模型(large language model, LLM)每一次回答,都只能「看見」一塊有限的白板——這塊白板叫上下文視窗(context window),以詞元(token,模型計數和收費的單位,見組件 01)計算大小。白板上有甚麼,模型就知道甚麼;不在白板上的東西,對模型而言等於不存在。

選擇白板大小(上下文視窗上限)
上限 128,000 個詞元(本頁以 1K=1,000 計)

今天的模型,白板大小各不相同。例如 DeepSeek V4 透過程式介面(application programming interface, API,即用程式直接呼叫模型的通道)使用時,上下文為 1M(一百萬個詞元,見其定價頁);阿里雲百煉的 qwen3.7-flash 則按每次送入的長度分三檔收費(≤32K/32K–256K/256K–1M),越後面的檔每個詞元越貴。

白板大,不等於應該塞滿。下一步你會看到,塞得越滿,模型越容易忽略你最先寫下的指令。

想快一點看到「滿」的效果,可先選 32K。

把東西放上白板

白板從左到右依序填入:最前面固定是系統提示(system prompt)——聊天程式或執行框架(harness,即包住模型、替你管理整段對話的程式,例如聊天程式或本課程用的工作台 dsh)替你寫好的規則;接著是你的個人指令檔(記憶檔)與你的開頭指令;之後每一句話、每一份文件、每一個工具結果都會排在後面。按下方按鈕把東西放上去,看白板怎樣被填滿。

0%
已用 0 個詞元
上限 128,000
充裕

將滑鼠移到(或點選)任一色塊,查看它是第幾項、屬於甚麼類型、佔多少詞元。

放上白板(括號內為典型詞元數)

每一個項目的詞元數是典型值,用來示意大小比例;只有「三頁報告」是組件 01 以 DeepSeek-V4 分詞器量得的 1,748 個詞元。

0 個字元 · 約 0 個詞元

這一輪要送出多少

模型本身不記得上一輪說過甚麼。每一次你按下送出,聊天程式都會把整塊白板重新送給模型——所以白板越滿,每一輪越貴(組件 01 第 4 步的曲線,原因就在這裡)。

下一輪要送出的詞元(=整塊白板)
0
 
這一輪的輸入費用
¥0
以 DeepSeek V4-Flash 閒時輸入價計
若上一輪全部快取命中(cache hit)
¥0
前文與上一輪完全相同時的折扣價
白板維持這樣再聊 20 輪,至少
¥0
白板只會越來越滿,所以這是下限
同樣 20 輪,全部快取命中
¥0
快取只省輸入費,不會令白板變小
預設為 DeepSeek V4-Flash 直連閒時價(2026-09),可修改試算;未計模型回覆的輸出費。

開頭的指令還看得見嗎

白板上的東西並非「都一樣清楚」。你最先寫下的指令,被後來的內容越推越遠,模型越容易忽略。這個現象叫上下文腐化(context rot):白板越滿,越早寫的內容往往越容易被忽略,回答的品質也容易下滑(下方以示意方式呈現)。

指令能見度(示意)100%

指令後面沒有其他內容,模型清楚看見。

模擬回答預覽(示意)

遵守指令

示意:真實模型的表現因模型與內容而異,但「放在越前面、後面塞得越多,越容易被忽略」是普遍現象。本頁的能見度只是一個說明用的比例:指令後面的新內容每多佔白板 1%,能見度便減 1 點,最低 20%;跌破 40%(即後面的內容超過白板六成)時,預覽切換為「偏離」。

壓縮與清空

白板快滿時,執行框架有兩個辦法:壓縮(compaction,指令常寫作 /compact)——把舊對話和附件濃縮成一段摘要(summary),只保留最近的一小段原文;或清空(/clear)——整段對話丟掉,重新開始。兩者都會令模型「忘記」一些東西;差別在於忘記多少、留下甚麼。

許多執行框架會在白板用到某個門檻時自動壓縮,並保留一小段最近的原文——常見設定例如「達 80% 時壓縮、保留約 16%」(DeepSeek Harness 設定目錄記載的預設值)。本頁的自動壓縮亦以 80% 為門檻、保留最近約 16% 的原文,但保留方式經過簡化(見下方壓縮規則)。

壓縮後遺失了甚麼

  • 尚未壓縮。

事件紀錄

  1. 尚無事件。

壓縮規則(本頁示意):① 系統提示與個人指令檔固定保留。② 最後一輪——最後一個由你送出的項目(你的一句、貼上的文件或程式碼、工具結果、自訂文字)及其後的所有內容——原文保留。③ 在它之前,由後往前繼續保留完整的項目,直到合共達白板的 16%(32K 白板約 5,120 個詞元,通常足以保留最近幾輪一問一答)。④ 更早的對話、開頭指令、附件、工具結果與舊摘要合併為一個新摘要,大小為被合併項目詞元總和的 12%(四捨五入,最少 40 個,且不會多於被合併的總數)。若壓縮不會令白板變小(沒有可合併的項目,或摘要不比原文小),本頁會略過並說明原因。「壓縮後遺失了甚麼」在連續的對話項目多於 4 項時,合併為一行「對話 N 輪」顯示。自動壓縮在每次白板改變(放入項目、改變大小、切換指令檔或開啟自動壓縮)後檢查:已用達 80% 即執行一次;若執行不會令白板變小,只提示一次,待白板再改變後才重新檢查。頁面上的百分比一律向下取整(接近 50% 與 80% 時顯示一位小數),所以顯示「80%」時必定已達門檻。

重點一

遺忘是設計,不是故障

白板是有限的,而且模型本身沒有記憶:每一次回答,它只看見這一次送來的白板;對話結束,白板便消失。所謂「AI 記得我」,其實是執行框架把上一輪的白板再送一次——或者把某些東西寫進指令檔,每次開場都放上白板。

決定留下甚麼、丟掉甚麼的,是執行框架,不是模型。所以學會用工作台,一半的工夫在於管理這塊白板。

重點二

壓縮會失細節

重點三

開新對話比塞爆便宜

想一想

課堂討論用,每題兩分鐘。

  1. 你要和 AI 一起修改一份三頁報告(約 1,750 個詞元):先討論整體結構,再逐段改寫,最後通篇校對。你會在哪一步開新對話?開新對話時,你會帶甚麼過去(整份報告、一段摘要,還是只帶結論)?為甚麼?
  2. 以下三句話:「所有回答用繁體中文」、「我主修市場學,正在寫畢業論文」、「這份報告的第三段要重寫,語氣要更正式」——哪些應該放進開頭指令或個人指令檔,哪些放在對話裡就好?你的判斷依據是甚麼?
教師提示(討論後再展開)

第 1 題可引導的方向:討論結構時只需要大綱,不必貼全文;逐段改寫前開新對話,帶上「結構討論的結論」(一段摘要)和該段原文,而不是整段討論紀錄;校對時再開一次,貼上最終稿。原則是:白板上只放「這一步需要的」,需要原文細節時重新貼上文件,而不是依賴壓縮後的摘要。可回到第 3 步比較「塞爆再聊 20 輪」與「開新對話帶摘要」的費用差。

第 2 題可引導的方向:每次都適用的規則(語言、格式、身分背景)屬於指令檔——它在清空後仍然在,也不會被壓縮掉;只在這一件事上適用的要求(第三段重寫)屬於對話。判斷依據:這句話下一次開新對話時還需要嗎?需要就進指令檔。可指出第 4 步的開頭指令雖然放在最前面,仍會被壓縮成摘要,只有指令檔不會——這正是第 4 堂「記憶」的伏筆。