AgentHubAgentHub
返回全部博客

代码库上下文智能裁剪算法(Context Pruning):在百万行项目中精确保留核心依赖

AgentHub 核心团队··5 分钟阅读·58 次阅读
代码库上下文智能裁剪算法(Context Pruning):在百万行项目中精确保留核心依赖

粗暴全选的时代已经结束

面对一个包含 500 个文件的微服务模块,简单地把所有代码拼接起来会直接突破大模型的上下文上限。


智能剪枝三阶段流水线

  1. 符号定义剥离(Outline Skeleton):非核心依赖文件只保留函数签名与接口定义,将具体实现函数体折叠为 // ... implementation hidden, 节省 70% 空间;
  2. 调用图深度裁剪(Depth-limited BFS):以当前修改点为圆心,沿 AST 调用链仅向下展开 2 层间接调用方,超出范围一律剪掉;
  3. 测试文件与 Mock 数据隔离:除非当前任务明确要求编写单元测试,否则自动将 __tests__/ 目录从初筛列表中剔除。

先算预算,再决定裁多少

裁剪的目标不是「越少越好」,而是在固定预算下让最相关的代码留在窗口里。一个可复用的预算分配大致如下(比例为经验值,按模型上下文长度等比缩放):

内容建议占比说明
任务描述与报错原文约 10%用户的原话与堆栈不要改写
直接修改点文件全文约 30%唯一允许完整保留实现的部分
一跳依赖(调用方/被调用方)约 25%签名 + 关键分支,函数体可折叠
类型与接口定义约 15%字段名与枚举值必须原样保留
配置与构建相关文件约 10%只取与本次改动相关的片段
余量约 10%给模型输出和多轮追加留空间

实现顺序:索引、评分、拼装

第一步是离线索引。用现成的解析器产出符号表与调用边(语言侧一般都有成熟的 AST/符号工具),加上全文或语义检索作为召回兜底。这一步的结果可以缓存,只有增量文件需要重算。

第二步是给候选文件打分,把多路信号合成一个排序。常见信号与权重大致是:

信号相对权重取值理由
报错栈或用户点名提到的文件最高命中即进入必选集合
与修改点直接相连的调用边高一跳内的双向依赖
导出的公共接口(被外部引用)中高改动会影响契约
关键词或语义检索命中中兜住静态分析看不到的隐式引用
近期变更频率低仅作同分时 tie-break

第三步是拼装与降级。按分数从高到低装填,装到预算耗尽即停;被裁掉的目录要在开头显式列出(例如「未纳入:src/generated/**、**/__tests__/**」),让模型知道还有东西可查,而不是以为仓库就这么大。

几条不能折叠的硬规则

正在调试的函数体不能只留签名,堆栈指向的那几行必须完整。类型定义的字段名与枚举值不能省略,模型一旦猜错字段名,产出就是不可编译的代码。配置文件按行截取,通常只需要数据源、开关与路径相关的片段。代码块前后要带路径与行号范围,否则模型无法定位应该改哪里,只会重新输出一遍整文件。

反过来,能安全折叠的东西也很明确:内部工具函数实现、自动生成代码、快照与测试夹具、示例数据。

验证方法

用消融对比代替主观感觉:同一批任务分别用「全量拼接」和「裁剪后上下文」各跑一遍,比较三件事——模型是否引用了正确文件与正确符号、编辑是否落在预期位置、产出代码是否可编译。同时记录一个反例集合:那些被裁剪后反而做对的任务,通常是无关文件里的相似命名把模型带偏了,这说明召回策略需要收紧而不是放宽。跑批时固定温度与模型版本,否则两次结果差异分不清来自裁剪还是采样。

常见故障速查

现象原因处理
改了 A 却需要 B 一起改调用图只做了单向双向各展开一跳
模型凭空发明字段名类型定义被折叠类型与枚举原样保留
输出重复整份文件缺少路径与行号锚点每段代码显式标注来源
上下文仍然超限预算未约束检索条数按占比硬性截断并显式声明裁剪范围
改动越跑越保守相似命名文件干扰收紧关键词召回,提高 AST 权重

小结

裁剪算法是否合格,看两个可测的数字:模型在正确文件上发起编辑的比例,以及产出代码一次通过编译或类型检查的比例。两项相比全量拼接没有下降,而 token 消耗明显更低,这个策略就成立。若某类任务反复失败且失败原因都是「没看到某个文件」,先检查那条依赖是否属于生成代码或动态引用这类静态分析盲区,再决定是否给它开一个必选白名单。

延伸阅读

推荐阅读

最佳实践

12 个真正好用的提示词:把要求写成验收标准

从站内 1,018 条提示词里挑出 12 条覆盖开发、汇报、数据、决策与自动化的实用模板,逐条给出正文、适用场景和它有效的原因,并说明三类最常见的失效与修法。

最佳实践

设计师该装的 5 个 Skill:把设计标准写成说明书

我们逐个读完上游仓库里 SKILL.md 的原文,从设计向候选里留下 5 个真的写了可执行标准的:Anthropic 官方的 frontend-design 管视觉方向与排版、theme-factory 管配色与字体主题、canvas-design 先写设计哲学再出海报,加上 ui-ux-pro-max 的本地设计资料库和 popular-web-designs 的 54 套真实设计系统。附安装命令、五步组合工作流与踩坑提醒。

最佳实践

让 AI 替你办事的安全清单:授权怎么给、钱怎么管、出事怎么办

把邮箱、网盘甚至支付入口交给 AI 之后,风险从“它说错话”变成“它办错事”。这份清单按事前、事中、事后三段展开:授权分只读/待确认/执行三层给,账号与插件要可牺牲,支付走限额的一次性虚拟卡而不是主账户;再给出四个跑偏信号和三分钟事后检查。

最佳实践

Jev 使用教程:从注册拿 Key 到接入 Claude Code,只会做选择题的模型手把手上手

Jev 是 TypeSafe AI 发布的 System One 决策模型:给它情况描述和预设选项,它只返回选项、概率与置信度,不生成一个字。本教程覆盖 console.typesafe.ai 注册拿 Key、Choice/Noul/Score 三种题型的 Python SDK 与 curl 调用示例、Claude Code 插件两行命令接入、置信度路由写法,以及新手必踩的 8 个坑。

探索更多生产力神器

不想只停留在理论?立即体验下一代 AI 工具与 MCP 插件

收录 ChatGPT 6、Claude 3.7、Devin 等热门 AI,以及 3000+ 开发者开源 MCP 插件与一键安装脚本。