编程基础篇 · 递归与分治
分治:上下文压缩的算法原理
动手实战篇讲过:对话太长装不下时,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 万以内」「别用红色」这种关键事实要另存,别指望摘要
- 段还太多就递归再压一轮:上一课的递归 + 这一课的合并 = 完整的分治