给 AI 编程工具喂上下文有什么讲究?为什么整仓塞进去反而更差?

Q7-02AI 编程协作 · 上下文构建高频上下文工程context-rot代理式检索prompt缓存规则文件2026新增

谁在问:头部 AI 公司与大厂二面;面试官一般自己踩过「整仓塞进去」的坑,追问会很细

口语化问法

  • 你给 AI 喂上下文的时候有什么讲究?
  • 现在窗口都上百万 token 了,为什么不干脆把整个仓库塞进去?
  • 一个四十万行的仓库,你怎么让它找到该改的地方?

考察意图

面试官在判断三层:

  1. 你知不知道「窗口容量」和「有效注意力」不是一回事。这是上下文工程的入门分界线,答不出来说明还停在「窗口越大越好」的直觉里。
  2. 你有没有量化依据。2026 年这个问题已经有编程域的公开数据了,能不能引出来,区分「听说过」和「关注过」。
  3. 你有没有在大仓上真干过。真干过的人会自然谈到三件事:检索怎么做、规则文件放什么、缓存怎么保住。只在小项目上用过的人,只会谈第一件。

这道题和 Q1-11/Q1-12(上下文工程与 context rot)是同一套机理,口径必须一致——它是那两题在编程场景的具体应用。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

上下文窗口虽然大,但模型的注意力是有限的,塞得越多、无关内容越多,它越容易被干扰,这就是常说的 context rot——不是线性变笨,而是在某些位置上失效。所以我一般不整仓贴,而是给相关的几个文件,加上一段说明。另外整仓贴的 token 成本也很高,每轮都要重发。

到这一步是及格:说清了「容量 ≠ 有效」,也说清了成本。但它是一段常识陈述,没有可验证的东西,任何读过两篇博客的人都能说。

90

90 分答案(有生产经验的回答)

90 分要在四个地方长出细节:有数字、分了层、讲了检索路线、护住了缓存

第一,这件事在编程场景已经有硬数字了。 2026 年的一项评测覆盖 1476 个真实修复任务、51 个仓库、9 种语言,结论很反直觉:给模型一份平均 217 token 的精炼摘要,解决率从 26.26% 升到 34.34%;给它平均 25,633 token 的完整探索轨迹,只有 27.27%;让它不受限地自由检索,26.26%——等于没提升,成本还多花 27.3%。另一项工作从反面印证:把 agent 会话的 token 剪掉 23%–38%,解决率掉不到 1 个百分点,成本降了约 27%,而且读取类操作占了 agent 总 token 的 76%。所以「整仓塞进去更差」不是感觉,是一百倍 token 换负收益。

第二,我把上下文分四层来管,因为它们的变化速度不一样:系统提示与工具定义(几乎不变)→ 项目规则文件(周级变化)→ 本次任务取回的内容(每次都变)→ 对话历史(单调增长)。真正能调控的是第三层,但优化的关键动作是把关键事实从第三层上提到第二层。举个具体的:我们仓里有新旧两套支付回调 handler,长得几乎一样,代码里没有任何一行写着哪个在跑;靠模型每次自己推断就是在掷骰子,把「V2 才是在跑的那个、V1 只在灰度 0% 兜底」写进规则文件,问题就消失了。规则文件是用来放推不出来的事实的,不是用来放读一眼代码就知道的事实的。

第三,大仓里怎么找。 两条路线:预先做全仓 embedding 索引,或者让模型自己 grep、读文件、顺引用爬。要注意的是两边争的根本不是同一个指标——索引派讲召回率(有厂商公布语义检索比纯 grep 的问答准确率平均高 12.5%,千文件以上大仓的代码留存率高 2.6%),代理派讲新鲜度(embedding 流水线跟不上活跃团队的提交,开发者查到的是几小时甚至几周前的快照)。而且没有第三方在同一 benchmark 上做过公开对照,所以谁也没证伪谁。实践里两条路线已经在合流:代理派在做更快的 grep 原语,索引派配了只回摘要的探索子 agent。

第四,别把缓存打穿。 编程 agent 每轮都在重发同一个巨大前缀,命中率不是省钱技巧、是成本结构本身。原则是静态在前、动态在后

追问链

图 1 · 五层追问树:面试官会往哪儿挖
从「精简到什么程度」一路挖到「账单涨三倍先砍哪刀」

  1. 你说「精简」,精简到什么程度?有可操作的判据吗?

    期望给方向不给绝对值:先给几百 token 摘要,不够再加,别先全量再删——前者失败是「它说信息不足」,成本约等于零;后者失败是「它自信地改错了」,成本是一次事故。规则文件有公开上限可引:200 行以内、合并后 32 KiB 硬截断、「不超过两页且不得任务特定」
    信号说得出「加法比减法安全」这个方向 → 真在用;只会答「按需给」→ 没有可操作方法
  2. 规则文件里到底该写什么、不该写什么?

    期望只写模型推不出来的事实:哪个实现在跑、哪个目录已废弃、哪个测试不可信、哪次事故的教训。技术栈、目录结构、代码规范读一眼代码就知道,交给 linter。检验法背官方原话:逐行问「删掉这行,模型会不会犯错?不会就删」——臃肿不等于保险,它会挤掉你真正的指令
    信号答「项目介绍、技术栈、代码规范」→ 写了但没用对;答「哪个模块废弃、哪个测试不可信」并说「要定期删」→ 真在维护
  3. 大仓里到底该用索引还是 grep?给我一个选型判断。

    期望三段式不站队:① 索引式买跨语义召回(「处理超时的地方」这类没有共同关键词的需求),代价是索引陈旧、代码要出网——高频变动、不能出网、只改一两个已知文件时不该用;② 代理式买新鲜度与零维护,代价是烧 token、跨语义召回弱;③ 实践混合:检索定位候选,代理式确认现状
    信号说得出「两边评价的根本不是同一个指标」→ 真读过双方材料;一句「XX 更先进」→ 站队
  4. 你说要护住缓存,什么操作会打穿?有反直觉的吗?

    期望三类打穿:静态前缀里放精确时间戳(命中率恒为 0)、工具定义顺序不确定、中途改工具参数;切模型、改推理档位同样失效。反直觉的才是分水岭:改仓库文件不失效(文件不在前缀里,是现读的);中途改规则文件不失效也不生效,得重开会话;缓存绑机器与工作目录,多个 worktree 互不共享
    信号只会说「前缀要固定」→ 背概念;能说出「中途改规则文件不生效」和「worktree 之间不共享缓存」→ 被这两件事坑过
  5. AI 编程的 token 账单一个月涨了三倍,怎么查?先砍哪一刀?

    期望成本三刀:① 先切输入/输出侧——编程 agent 的账压倒性在输入侧(每轮重发前缀),输出侧异常则是任务变复杂或档位被调高;② 再切侧内:缓存命中率、并行度(队伍 token 约单会话 7 倍)、读取类操作(本就占四分之三);③ 最后才是单价,警惕新模型换了 tokenizer:单价降三成、token 数涨回来。顺序:修缓存 → 砍并行 → 最后动档位
    信号上来就「换便宜模型」→ 没算过账;主动提「先看缓存命中率」→ 真管过账单
一句「中途改规则文件不生效、得重开会话」就把「读过博客」和「真被坑过」切开了 —— 分水岭在第 4 层第 5 层再看你先修缓存命中率还是先换便宜模型。

评分要点

  1. 区分「窗口容量」与「有效注意力」,并说明 context rot 是非均匀衰减而非线性变笨
  2. 引得出编程场景的具体数字(摘要 vs 完整轨迹的解决率对比,或可裁剪比例)
  3. 能把上下文分层,并说出优化的关键是把关键事实上提到规则文件
  4. 说得清规则文件该放「推不出来的事实」,且知道它要定期删
  5. 谈索引 vs 代理式检索时给三段式(解决什么 / 代价 / 什么时候不该用),不站队
  6. 知道两条路线争的是不同指标,且没有公开对照实验
  7. 说得出至少三种打穿缓存的操作,含一条反直觉的
  8. 成本追问时按成本三刀展开,且先修不影响正确性的那一刀

常见错误

「窗口够大就都塞进去,反正模型能处理」停留在容量直觉,没接触过长上下文衰减
「context rot 就是上下文越长越笨」概念背对了但缺关键词「非均匀」,追问位置效应会答不出
说不出任何数字,全程「我觉得」「一般来说」没有跟进 2026 年的公开材料
「规则文件当然越详细越好」与官方结论相反,且暴露没被臃肿规则文件坑过
「向量索引更先进 / grep 才是正道」站队,且没意识到两边评价的指标不同
谈缓存只会说「前缀要固定」背概念。真做过的人会讲中途改规则文件不生效、worktree 不共享
成本问题只答「换便宜模型 / 少调用」没有归因结构,无法定位真实开销
把「让 AI 自己去找」等同于「不用管上下文」忽略了读取类操作占总 token 四分之三这件事

关联学习