关于上下文窗口
当您使用 GitHub Copilot CLI 时,您发送的每条信息、Copilot 的每个响应、每次工具调用及其结果,以及定义 Copilot 行为的系统指令,全部都保存在一个上下文窗口中。上下文窗口是 AI 模型在生成响应时一次可以考虑的全部信息量。
上下文窗口具有固定大小,以 token 为单位,且不同模型大小不同。Token 通常由常用的短词以及多音节词的片段组成。随着对话的进行,上下文窗口会被以下内容填满:
- 系统指令和工具定义:告诉 Copilot 如何行为的内置指令,以及所有可用工具的模式。这些始终存在并占用上下文窗口的固定部分。
- 您的消息:您发送的每个提示。
- Copilot 的响应:Copilot 对您说的所有内容。
- 工具调用和结果:当 Copilot 读取文件、运行命令或搜索代码库时,请求和输出都会被添加到上下文中。工具结果可能会非常大——例如,工具读取了一个很长的文件或运行产生大量输出的命令时。
所有这些都会累积在上下文窗口中。在长时间或复杂的会话中,上下文窗口可能会被填满。
为什么上下文窗口很重要
上下文窗口为 Copilot 提供了对话的“记忆”。上下文窗口中的所有内容都可以在 Copilot 回答时被引用。
这意味着在非常长的会话中,Copilot 可能无法一次性容纳整个对话历史。因此,Copilot CLI 提供了上下文管理功能,使您能够在需要时与 Copilot 持续对话。
检查您的上下文使用情况
您可以通过输入 /context 斜杠命令来检查当前使用了多少上下文窗口。这会显示令牌使用情况的可视化细分,展示
- 系统/工具:系统指令和工具定义的固定开销。
- 消息:对话历史占用的空间。
- 空闲空间:剩余可用于新消息的空间。
- 缓冲区:触发自动上下文管理的保留部分。

您可能希望在以下情况下使用 /context 斜杠命令:
- 您正处于长会话中,需要了解剩余空间多少。
- Copilot 似乎忘记了对话的早期部分。
- 您想了解是否已经发生压缩,或压缩即将发生。
压缩
压缩是一种过程,使 GitHub Copilot CLI 能够在不超出上下文窗口限制的情况下支持长时间运行的会话。
压缩发生时
当对话大约占满上下文窗口容量的 80% 时,Copilot CLI 会自动在后台开始压缩上下文。这会留下约 20% 的缓冲区,以便在压缩进行时工具调用仍能继续运行。如果在压缩完成前上下文已填满约 95%,Copilot CLI 会短暂暂停,等待压缩完成后再继续。
您也可以随时通过输入 /compact 命令手动触发压缩。如果您即将开始新的工作阶段并希望主动释放上下文空间,这非常有用。如果您改变主意,按 Esc 可以取消手动压缩。
压缩的作用
当压缩运行时,Copilot CLI
- 获取当前对话历史的快照。
- 将完整对话发送给 AI 模型,并附加一个特殊提示,请求其生成结构化摘要。该摘要捕获对话的目标、已完成的工作、关键技术细节、重要文件以及计划的下一步。
- 用摘要替换旧的对话历史,同时保留任何原始用户指令以及任何计划或待办列表的当前状态。
- 保留在压缩后台运行期间添加的任何消息。
结果是,对话历史被压缩成一个更小的摘要,从而释放出大部分上下文窗口供新工作使用。Copilot 使用该摘要保持连续性——它知道已经讨论了什么、决定了什么以及接下来要做什么,即使原始消息已经被替换。
压缩未保留的内容
压缩是一种摘要过程,因此不可避免地会丢失一些细节。摘要捕获了关键要点,但细粒度的细节——例如每条消息的确切措辞、每个命令的完整输出,或在长对话早期做出的细微决定——可能未被包含。如果您需要 Copilot 回忆会话早期的非常具体的细节,压缩后可能没有这些信息。
没有压缩会怎样
如果没有压缩,一旦上下文窗口被填满,Copilot 将只能回退到直接删除对话历史中的旧消息——在没有任何摘要或记录的情况下移除它们。这将导致上下文突然丢失,Copilot 无法了解被删除消息的内容。压缩通过用智能摘要替代历史记录,避免了这种情况的发生。
检查点
每当压缩发生——无论是自动还是手动——都会创建一个检查点。检查点是压缩摘要的保存副本,以编号并带标题的文件形式存储在您会话的工作区中。
查看检查点
要查看当前会话中的所有检查点,请输入
/session checkpoints
/session checkpoints
这会列出每个检查点的编号和标题
Checkpoint History (3 total):
3. Refactoring authentication module
2. Implementing user dashboard
1. Initial planning and setup
使用检查点编号可查看任意检查点的完整内容。例如,要查看检查点 2,输入
/session checkpoints 2
/session checkpoints 2
检查点有用的情形
- 审查已发生的内容:在经历多次压缩的长会话后,早期的对话阶段不再位于活动上下文中。检查点让您能够回顾每次压缩时 Copilot 的操作。
- 验证连续性:如果您想在继续之前确认 Copilot 的摘要准确捕获了您之前的工作,可查看最近的检查点。
- 调试混乱:如果 Copilot 似乎忘记了某个决定,或走向与早期工作相矛盾的方向,检查检查点可以揭示压缩期间保留了哪些内容,以及哪些内容可能被不同于您预期的方式摘要。
注意
- 检查点会自动创建。您无需管理它们——需要时它们就在那儿。对于大多数会话,您根本不需要查看检查点。
- 压缩完成后无法撤销。
使用长时间运行的会话
自动压缩使您能够在长时间运行的会话中继续工作,而无需担心触及上下文窗口的限制。有时这非常有用,另一些时候您可能更倾向于启动全新会话。
长会话有用的情形
长时间运行的会话在以下情况下效果良好:
- 您正在进行多阶段任务,例如构建需要搭建框架、实现、测试,然后创建拉取请求的功能。
- 您在反复尝试解决问题,并希望 Copilot 保留已尝试和未成功的上下文。
- 您在整个代码库中进行探索性工作,并随时间与 Copilot 共同建立共享理解。
何时开始新会话
在以下情况下,启动新会话更合适:
- 您正切换到不相关的任务。Copilot 不需要先前工作的上下文,干净的上下文窗口意味着为新任务提供更多空间。
- 对话经历了多次压缩,您感觉重要的上下文在摘要过程中丢失。
- 您想要一个全新的起点——例如,工作走错方向,您宁愿重新开始,而不是让 Copilot 试图将早期决策与新方法调和。
提示
您可以随时使用 /resume 命令恢复先前的会话。这允许您从中断的地方继续,包括该会话期间创建的所有检查点。