程式設計基礎篇 · 遞迴與分治
分治:上下文壓縮的演算法原理
動手實戰篇講過:對話太長裝不下時,AI 會做一次 Compaction——把舊對話壓成摘要。當時說「像搬家前把雜物打包」,這一課揭開包裝紙:它是一個有兩千年歷史的演算法套路,叫分治。上一課的遞迴是「拆」,這一課補上另一半:「拆完再合」。
親手壓一次 · 3600 token 的裝潢對話
下面是一段你和 AI 討論裝潢方案的完整對話,12 條訊息約 3600 token,眼看要把上下文視窗塞爆了。點「開始壓縮」,留意三幕動作:先切(分成三段)、再治(每段各自收成一條摘要)、最後合(三條摘要併成一條)——頂部的 token 計數器會告訴你壓掉了多少。
當前上下文3600token
切分 → 各段摘要 → 合併,三幕連播
試試開啟「保留最近 4 條」再壓一次。這正是真實 Agent 的做法:最近幾條對話往往就是你正在辦的事,最金貴,一個字都不動;只把久遠的部分壓成摘要。你會看到 token 數沒有壓到 200 那麼狠——保真和省空間,永遠在做交換。
概念卡 · 歸併排序同款套路
剛才三幕動作有個正式名字:分治(Divide and Conquer)。教科書裡它最出名的代言人是歸併排序——把一列數切成小段、每段排好、再兩兩合併。歸併排序排的是數,Compaction 壓的是話,骨架一模一樣:
分
✂️ 切成小塊
大問題直接解不動,就切成幾個小塊。歸併排序:一列數對半切到只剩單個。Compaction:長對話按話題或輪次切成幾段。
治
🔧 每塊各自解決
小塊規模小,好辦。歸併排序:小段各自排好序。Compaction:每段各自摘要——段夠短,AI 一口就能讀完、總結準。這一步還能並行幹,又快一截。
合
🧩 結果合併
把小塊的成果拼回完整答案。歸併排序:兩段有序數列合成一段。Compaction:幾條摘要再合成一條總摘要。段還太多?遞迴再來一輪——上一課的味道回來了。
為什麼不一口氣讓 AI 總結全文?因為「總結一萬字」本身就會把上下文塞爆——這不就是我們要解決的問題嗎。分治的聰明處在於:把「解不動的大問題」變成一堆「肯定解得動的小問題」,再花點力氣拼裝。工程進階篇 Coding Agent 讀大程式碼庫也是這麼幹的:一個檔案一個檔案地讀、各自記要點、最後彙總。
誠實卡 · 壓縮的代價
⚠️ 摘要是有失真壓縮——細節會丟
原文:「預算 8 萬以內」「我特別不喜歡紅色,整屋都不要出現紅色」
→
壓縮後:「討論了預算和配色偏好」← 具體數字和紅色禁令都沒了
壓縮後 AI 還知道「聊過預算」,但再問它「我預算多少」它只能猜;下次它給你配個紅沙發,你都沒處說理。所以動手實戰篇反覆強調:關鍵事實(數字、硬性要求、決定)要另外記進長期記憶或文件裡,不能指望摘要替你留著。摘要負責「大概聊過什麼」,檔案負責「鐵板釘釘的事」。
✅ 這一課想和你分享的
- 分治 = 切小、各治、再合:解不動的大問題,變成一堆肯定解得動的小問題
- Compaction 是分治在 AI 的真身:切段 → 各段摘要 → 合併,和歸併排序同一副骨架
- 最近的對話最金貴:真實 Agent 只壓舊的、留新的——保真和省空間永遠在交換
- 壓縮有損:「8 萬以內」「別用紅色」這種關鍵事實要另存,別指望摘要
- 段還太多就遞迴再壓一輪:上一課的遞迴 + 這一課的合併 = 完整的分治