Appearance
Copilot CLI 的上下文窗口有固定 token 上限,随着对话增长会触发自动压缩(Compaction)。压缩保留关键目标和决策,但会丢失细节。理解压缩机制、善用 /context 命令和 Checkpoints,是高效运行长时间任务的关键。
GitHub Copilot CLI 上下文管理:会话压缩、检查点与多阶段任务技巧
什么是上下文窗口
上下文窗口是 AI 模型"能同时看到的所有信息"的总量,包括:
- 系统指令(Custom Instructions、工具定义)
- 你的所有提示词
- Copilot 的所有响应
- 工具调用的结果(文件内容、Shell 输出等)
上下文窗口有固定的 token 上限。工具调用结果(尤其是读取大文件或 Shell 输出)会快速消耗上下文。
查看当前上下文使用情况
/context显示当前上下文的:
- 各部分(系统指令、对话历史、工具结果)的 token 占用
- 剩余可用空间
- 距离触发压缩的百分比
在长时间任务中定期检查,避免意外压缩丢失重要状态。
自动压缩(Compaction)
当上下文使用量达到 80% 时,Copilot 会自动触发压缩:
- 分析整个对话历史
- 生成一份结构化摘要,保留:
- 主要目标和任务进度
- 关键决策和发现
- 当前状态
- 用摘要替换大部分历史,释放上下文空间
压缩会丢失什么:
- 每条消息的确切措辞
- 每个命令的完整输出
- 细节的技术讨论
- 中间推理过程
如果不压缩,Copilot 会直接丢弃最旧的消息,比压缩更不可控。
手动压缩
不想等到 80% 才压缩?可以主动触发:
/compact在开始新的工作阶段前手动压缩,可以保证关键状态被正确记录进摘要,而不是在关键时刻被"意外压缩"。
Checkpoints(检查点)
每次压缩都会创建一个 Checkpoint——一个带编号的摘要文件,记录该时间点保留了什么信息。
查看检查点列表:
/session checkpoints用途:
- 验证压缩后保留了哪些关键信息
- 追溯之前阶段的任务状态
- 分析长时间任务的执行历程
恢复会话
长时间任务中断后(关闭终端、重启机器),可以恢复之前的会话:
/resume会列出最近的会话,选择要恢复的即可。Copilot 会从 Checkpoint 摘要重建上下文。
长时间任务的最佳实践
何时继续当前会话 vs 开新会话
| 场景 | 建议 |
|---|---|
| 同一任务的多个阶段 | 继续当前会话 |
| 切换到完全不同的任务 | 开新会话 |
| 多次压缩后细节大量丢失 | 考虑开新会话并重新说明目标 |
| Autopilot 长任务中途检查 | 用 /context 确认状态后继续 |
减少上下文消耗的技巧
bash
# 避免让 Copilot 读取大文件的全部内容
# 改为:告诉它只读取相关部分
/你只需要看 src/utils.ts 的第 50-100 行
# 用 /compact 在阶段切换时主动压缩
/compact
# 然后继续下一阶段任务
# 限制 Shell 输出量
# 让 Copilot 只获取关键输出而不是完整日志配合 Snapshot 回滚使用
上下文压缩是处理会话历史的;快照回滚(双击 Esc)是恢复文件系统状态的。两者独立:
- 工作区出问题 → 用 Esc 快照回滚
- 上下文太长/混乱 → 用
/compact或开新会话
与 Claude Code 的对比
Claude Code 也有类似的上下文压缩机制(/compact),核心逻辑相同:会话历史被摘要替换,释放 token。两者的主要区别在于:
- Copilot CLI 有 Checkpoints 检查点,方便回顾历史摘要
- Claude Code 的压缩在达到上限时触发,也可手动执行
常见问题
Q: 压缩后 Copilot 还记得我们的任务吗?
A: 会记得主要目标和关键状态,但细节会丢失。如果任务依赖精确的之前讨论内容,压缩前建议手动 /compact,并在摘要前明确说明"保留 X 细节"的指示。
Q: /context 显示还剩很多空间,但响应变慢了,是怎么回事?
A: token 量不一定直接影响速度,模型处理长上下文时计算量也会增加。如果响应明显变慢,手动 /compact 可以改善。
Q: 每次会话的 Checkpoint 文件存在哪里?
A: 存储在 ~/.copilot/session-state/ 目录下,按会话组织。可以用 /chronicle 功能管理和查询历史会话数据。