上下文管理
Token优化、上下文窗口、缓存机制、精准引用
引言:为什么上下文管理如此重要?
AI 模型有上下文窗口限制(Token 上限)。你可以把上下文窗口想象成 AI 的「工作记忆」——它只能同时记住有限的信息。在长对话中,上下文会逐渐填满,导致:
- 响应变慢
- Token 消耗增加(直接关系到费用)
- AI 遗忘早期信息
- 回答质量下降
高效的上下文管理能显著降低 Token 消耗和费用,同时提升响应质量。本章将深入讲解上下文管理的原理和实用技巧。
1. 上下文窗口工作原理
1.1 上下文窗口结构
+--------------------------------------------------+
| 上下文窗口 |
| |
| [系统提示词 + 项目规则] <- 固定部分(缓存) |
| [当前文件上下文] <- 动态部分 |
| [引用的文件内容] <- 用户控制 |
| [对话历史] <- 持续增长 |
| [工具调用结果] <- 按需加载 |
| [AI 的响应] <- 生成部分 |
| |
+--------------------------------------------------+
| 可用空间 = 总窗口 - 已占用空间 |
+--------------------------------------------------+
1.2 Token 消耗估算
| 内容类型 | 大约 Token 数 | 说明 |
|---|---|---|
| 1 行代码 | 10-20 tokens | 取决于代码复杂度 |
| 1 个文件(100行) | 1,000-2,000 tokens | 包括格式化字符 |
| 1 个文件(500行) | 5,000-10,000 tokens | 大文件消耗显著 |
| 1 轮对话(用户+AI) | 200-500 tokens | 简单问答 |
| 1 轮复杂对话 | 1,000-3,000 tokens | 包含代码生成 |
| 工具调用结果 | 500-2,000 tokens | 文件读取、命令输出 |
| 系统提示词 | 2,000-5,000 tokens | 固定开销 |
1.3 窗口满载的表现
| 症状 | 原因 | 解决方案 |
|---|---|---|
| AI 忘记之前的对话 | 早期对话被截断 | 开新会话 |
| 响应变慢 | 上下文处理时间增加 | 减少上下文 |
| 回答质量下降 | 关键信息被挤出窗口 | 精准引用文件 |
| Token 费用飙升 | 大量重复上下文 | 利用缓存机制 |
2. 五个核心优化技巧
2.1 技巧一:长对话及时开新会话
原则:每个独立任务开一个新会话
不推荐:
在一个会话中处理:修 Bug -> 写新功能 -> 做代码审查 -> 部署
推荐:
会话 1:修复登录 Bug
会话 2:实现用户管理功能
会话 3:代码审查
会话 4:部署
判断标准:如果话题转换了,就开新会话。
2.2 技巧二:精准引用文件
不推荐:
帮我看看这个项目有什么问题
(AI 需要读取大量文件,消耗大量 Token)
推荐:
请检查 @src/api/auth.ts 中的认证逻辑是否有安全问题
(AI 只需要读取一个文件,Token 消耗大幅减少)
2.3 技巧三:使用 @ 引用语法
@ 引用是精准控制上下文的关键工具:
| 引用方式 | 说明 | 示例 |
|---|---|---|
@filename | 引用整个文件 | @src/App.tsx |
@filename:10-20 | 引用特定行 | @src/utils.ts:10-20 |
@folder/ | 引用目录结构 | @src/components/ |
@symbol | 引用符号定义 | @UserService |
请根据 @src/types/user.ts 中的类型定义,
修改 @src/api/users.ts 中的 API 实现
2.4 技巧四:及时关闭不需要的 MCP 工具
MCP 工具和扩展会占用上下文。不用时及时禁用:
/settings -> MCP 工具 -> 禁用不需要的工具
2.5 技巧五:合理切换模型
| 场景 | 推荐模型 | Token 消耗 |
|---|---|---|
| 简单补全 | 轻量模型 | 低 |
| 复杂推理 | 高级模型 | 高 |
| 代码审查 | 平衡模型 | 中 |
| 快速问答 | 轻量模型 | 低 |
3. 缓存机制
3.1 缓存工作原理
CodeBuddy 采用智能缓存策略:
首次请求:
[系统提示词] + [项目规则] + [用户输入] -> 全量计算 -> 响应
后续请求:
[系统提示词] + [项目规则] + [新用户输入] -> 缓存命中部分 + 增量计算 -> 响应
缓存命中率:系统提示词和项目规则的缓存命中率可达 90%+。
3.2 节省效果
| 内容 | 首次 Token | 缓存后 Token | 节省比例 |
|---|---|---|---|
| 系统提示词 | 3,000 | ~300 | 90% |
| 项目规则 | 1,000 | ~100 | 90% |
| 对话历史 | 变化 | 变化 | 0% |
4. 实战:监控和优化 Token 使用
4.1 查看 Token 使用
在 CodeBuddy 界面底部,可以看到当前会话的 Token 使用情况:
Tokens: 12,450 / 128,000 (9.7%)
4.2 优化前后对比
优化前(一个长会话处理 5 个任务):
- 总 Token:85,000
- 费用:$0.85
- 质量:后期任务质量下降
优化后(5 个独立会话):
- 总 Token:35,000
- 费用:$0.35
- 质量:每个任务质量稳定
5. 常见陷阱
陷阱 1:在一次对话中处理太多不相关的任务
现象:AI 开始「遗忘」早期任务的细节
解决:每个任务开新会话,用 Memory 系统传递关键信息
陷阱 2:大文件全量引用
现象:引用了一个 2000 行的文件,上下文瞬间被占满
解决:使用 @filename:100-150 只引用需要的代码段
陷阱 3:缓存不等于免费
现象:以为缓存命中就不消耗 Token
解决:缓存减少的是计算成本,但每次请求仍有基础 Token 消耗
总结
| 技巧 | 效果 |
|---|---|
| 及时开新会话 | 避免上下文溢出,保持回答质量 |
| 精准引用文件 | 减少 50%+ Token 消耗 |
| 使用 @ 引用 | 精确控制上下文内容 |
| 关闭不用的 MCP | 释放上下文空间 |
| 合理切换模型 | 平衡质量和成本 |
下一章预告:我们将学习斜杠命令,了解如何用快捷操作提升开发效率。