上下文工程与仓库感知¶
Context Engineering已经从 Prompt 工程的附属技能,升级成 AI Coding 和 Agent 岗位的核心能力。
1. 为什么上下文工程是决定性能力¶
大型仓库里真正困难的不是“写一段代码”,而是:
- 找到相关文件
- 理解调用链
- 明白约束和规范
- 只把最有价值的信息提供给模型
上下文给得太少:
- 模型会瞎猜
- 会改错层
- 会编不存在的接口
上下文给得太多:
- token 爆炸
- 注意力稀释
- 重点丢失
所以本质问题不是“多给上下文”,而是“给对上下文”。
2. 仓库级上下文的 6 个来源¶
| 类型 | 典型内容 | 是否应常驻 |
|---|---|---|
| 需求上下文 | issue、Spec、验收标准 | 应常驻 |
| 仓库结构 | 目录树、模块边界、核心入口文件 | 子任务启动时注入 |
| 代码上下文 | 相关函数、类、接口、调用链 | 按需检索 |
| 规范上下文 | 代码风格、架构约定、命名规范 | 应常驻 |
| 状态上下文 | 已改文件、未完成事项、报错信息 | 应常驻 |
| 历史上下文 | 先前决策、失败尝试、摘要 | 增量摘要保留 |
3. 典型策略¶
真正有效的上下文工程,不是把信息堆得更多,而是按任务类型选择合适的组织策略。
3.1 先导航,再读取¶
不要一上来读完整文件。更合理的顺序是:
- 看目录树
- 搜符号
- 查引用关系
- 再按行范围读取
这也是为什么现代 AI Coding 产品越来越强调:
- symbol search
- repo map
- file tree
- read by range
3.2 把“读取粒度”设计好¶
差的工具:
- 每次只能返回整个文件
好的工具:
- 支持按行范围读取
- 支持按符号读取
- 支持只拿定义、不拿实现
- 支持搜索后再精读
3.3 pinned context 与增量摘要并存¶
以下信息不应该被摘要掉:
- 用户原始目标
- 当前计划
- 已修改文件列表
- 关键报错
- 未完成事项
而中间过程则适合做增量摘要:
- 为什么放弃方案 A
- 某次搜索或阅读得到的中间结论
- 某轮尝试的失败原因
4. 一个可落地的上下文架构¶
Text Only
第 0 层:系统规则
- 安全边界
- 编码规范
- 禁止事项
第 1 层:任务锚点
- 需求
- 验收标准
- 当前计划
第 2 层:仓库导航
- 目录结构
- 关键模块
- 相关符号索引
第 3 层:工作记忆
- 已读文件摘要
- 已做改动
- 当前阻塞点
第 4 层:即时检索
- 当前步骤所需的源码片段
- 测试输出
- 命令结果
5. 面试里怎么讲¶
如果面试官问“中大型仓库不能全塞进上下文,怎么办”,一个比较稳的回答结构是:
- 先承认不能暴力全塞。
- 强调先让 agent 获得
导航能力而不是一次性塞满内容。 - 说明工具粒度决定 token 利用率。
- 说明哪些信息需要 pinned,哪些适合摘要。
- 说明如何做结果验证,防止改错仓库位置。
6. 项目交付时至少要展示什么¶
- 你怎么做 repo map
- 你怎么做文件/符号检索
- 你怎么做增量摘要
- 你怎么保留 pinned context
- 这些策略对成功率、token、延迟、错误率有什么影响
如果没有这些证据,你做的往往只是“能跑的 Demo”,不是面试里有说服力的系统。