{"meta":{"title":"在 GitHub Copilot CLI 中管理上下文","intro":"Copilot了解如何管理对话上下文、长时间会话期间发生的情况，以及如何保持对上下文窗口的控制。","product":"GitHub Copilot","breadcrumbs":[{"href":"/zh/copilot","title":"GitHub Copilot"},{"href":"/zh/copilot/concepts","title":"概念"},{"href":"/zh/copilot/concepts/agents","title":"智能体"},{"href":"/zh/copilot/concepts/agents/copilot-cli","title":"Copilot CLI"},{"href":"/zh/copilot/concepts/agents/copilot-cli/context-management","title":"上下文管理"}],"documentType":"article"},"body":"# 在 GitHub Copilot CLI 中管理上下文\n\nCopilot了解如何管理对话上下文、长时间会话期间发生的情况，以及如何保持对上下文窗口的控制。\n\n## 关于上下文窗口\n\n使用 GitHub Copilot CLI时，发送的每个消息、来自每个工具调用及其结果的每个响应 Copilot，以及定义 Copilot行为的系统说明都保存在 **上下文窗口中**。 上下文窗口是生成响应时 AI 模型可以一次性考虑的总信息量。\n\n上下文窗口具有固定大小（以标记为单位），该大小因模型而异。 令牌通常由短的、常用的单词和多音节单词的片段组成。 随着对话的进行，上下文窗口将填满：\n\n* **系统说明和工具定义**：用于说明 Copilot 行为方式的内置说明以及所有可用工具的架构。 这些始终存在，并占用上下文窗口的固定部分。\n* **消息**：你发送的每个提示。\n* **Copilot 的响应**：Copilot 向您返回的所有内容。\n* **工具调用和结果**：读取文件、运行命令或搜索代码库时 Copilot ，请求和输出将添加到上下文中。 工具结果可能特别大，例如，如果工具读取长文件或运行生成大量输出的命令。\n\n这些都会在上下文窗口中累积。 在长会话或复杂会话中，上下文窗口可以填满。\n\n### 管理大型工具输出\n\n为了防止单个工具响应消耗过多的上下文窗口，默认情况下，大于 20 KiB 的工具输出将保存到临时文件中。 模型接收文件路径和预览，而不是完整输出。 这适用于所有工具，包括 MCP 服务器提供的工具。\n\n若要更改限制，请先设置为 `COPILOT_LARGE_OUTPUT_THRESHOLD_BYTES` 正数 UTF-8 字节，然后再启动 CLI。 增加限制会使对话和后续工具调用的上下文更少。\n\n## 上下文窗口为何重要\n\n上下文窗口赋予 Copilot 记录您对话的“记忆”。 当 Copilot 向您响应时，上下文窗口内的所有内容均可供其引用。\n\n这意味着，在很长的会话中， Copilot 可能无法同时保存整个对话历史记录。\nCopilot CLI 因此具有上下文管理功能，可以有效地让你根据需要与Copilot继续对话。\n\n## 检查上下文使用情况\n\n可以使用 `/context` 斜杠命令可视化当前上下文窗口使用情况。 输出结果的第一行显示了当前活动模型，以及该模型上下文窗口总容量中当前已使用的令牌数量。 输出结果的其余部分显示以下内容：令牌使用情况以及上下文窗口的百分比：\n\n* **系统提示**：基本系统提示。\n* **自定义说明**：加载的自定义说明（仅当存在时显示）。\n* **系统工具**：内置工具定义。\n* **MCP 工具：MCP** 服务器提供的工具定义。\n* **消息**：对话历史记录。\n* **可用空间**：未使用的上下文仍可用。\n* **缓冲区**：为模型的响应和留出空间预留的容量。\n\n![“/context”CLI 命令的输出的屏幕截图。](/assets/images/help/copilot/copilot-cli-context-usage.png)\n\n在以下情况下，可能需要使用 `/context` 斜杠命令：\n\n* 您正在进行一个较长的会话，并希望了解还剩多少空间。\n* Copilot 似乎忘记了先前谈话的内容。\n* 你希望了解压缩是否已发生，或者可能很快就会发生。\n\n## 压缩\n\n压缩是一个使 GitHub Copilot CLI 能够支持长时间会话而不触及上下文窗口限制的过程。\n\n### 压缩发生时\n\n当会话达到上下文窗口容量的大约 80% 时， Copilot CLI 会自动开始压缩后台的上下文。 这留出大约 20% 的缓冲余量，以便在压缩进行时，工具调用可以继续运行。 如果在压缩完成之前上下文已填充到大约 95%，Copilot CLI 将短暂暂停以等待压缩完成，然后再继续。\n\n还可以通过输入 `/compact` 命令随时手动触发压缩。 如果要开始新的工作阶段并想要主动释放上下文空间，这非常有用。 如果改变想法，请按 <kbd>Esc</kbd> 取消手动压缩。\n\n### 压缩的作用\n\n当压缩运行时，Copilot CLI：\n\n1. 拍摄当前聊天历史记录的快照。\n2. 使用特殊提示将完整对话发送到 AI 模型，要求其生成结构化摘要。 在摘要中概述对话的目标、完成工作的内容、关键技术细节、重要的文件和下一步计划。\n3. 将旧的对话历史记录替换为摘要，并保留任何原始用户说明以及任何计划或待办事项列表的当前状态。\n4. 保留在后台运行压缩时添加的任何消息。\n\n结果是将对话历史记录压缩为更小的摘要，从而释放了大多数用于新工作的上下文窗口。\nCopilot 使用此摘要来保持连续性（它知道讨论的内容、决定的内容以及下一步操作），即使原始消息已被替换。\n\n### 压缩不会保留的内容\n\n压缩是一个汇总过程，因此一些细节不可避免地丢失。 摘要会捕获关键点，但细化的详细信息（如每条消息的确切措辞、每个命令的完整输出或长时间对话中做出的次要决策）可能不包括在内。 如果需要 Copilot 回忆会话初期的某个非常具体的细节，压缩后可能不会保留该信息。\n\n### 在没有压缩的情况下会发生什么\n\n如果没有压缩，一旦上下文窗口填满，Copilot 就只能简单地回退到从对话历史记录中删除旧消息，而不进行任何摘要或记录。 这意味着突然失去上下文，无法 Copilot 知道已删除的消息中的内容。 压缩通过用智能摘要替代历史记录，而不是抛弃它，从而避免了此问题。\n\n## Checkpoints\n\n每次压缩时（无论是自动还是手动）都会创建 **检查点** 。 检查点是压缩摘要的保存副本，以带编号和标题的文件形式存储在您的会话工作区中。\n\n### 查看检查点\n\n若要查看当前会话中的所有检查点，请输入：\n\n```copilot copy\n/session checkpoints\n```\n\n这会列出每个检查点及其编号和标题：\n\n```text\nCheckpoint History (3 total):\n  3. Refactoring authentication module\n  2. Implementing user dashboard\n  1. Initial planning and setup\n```\n\n使用检查点号查看任何检查点的完整内容。 例如，若要查看检查点 2，请输入：\n\n```copilot copy\n/session checkpoints 2\n```\n\n### 检查点有用时\n\n* **回顾发生的情况**：在经历多次压缩操作的长时间会话后，对话的早期阶段内容将不再处于活动上下文中。 检查点允许你回顾Copilot在每个压缩中执行的操作。\n* **验证连续性**：如果您想在 Copilot 继续之前检查其摘要是否准确地反映了您之前的工作，您可以查看最新的检查点。\n* **排查混淆问题**：如果 Copilot 似乎忘记了某个决策，或其发展方向与先前工作相矛盾，检查检查点可以揭示压缩过程中保留了哪些内容，以及哪些内容可能被总结得与您的预期不同。\n\n> \\[!NOTE]\n>\n> * 自动创建检查点。 无需管理它们 -- 如果需要，它们就在那里。 对于大多数会话，您通常无需查看检查点。\n> * 完成压缩后，无法撤消压缩。\n\n## 使用长时间运行的会话\n\n自动压缩功能使您能够在长时间运行的会话中继续工作，而无需担心触及上下文窗口的限制。 有时，这非常有用，有时你可能希望启动新的会话。\n\n### 当长时间会话很有用时\n\n长时间运行的会话在以下情况中效果良好：\n\n* 您正在处理一个多阶段任务，例如构建一个需要搭建框架、实现、测试，然后创建拉取请求的功能。\n* 您正在针对某个问题进行迭代，并希望 Copilot 保留已尝试过的方法以及未成功的方法的上下文信息。\n* 您正在整个代码库中进行探索性工作，并随着时间的推移与 Copilot 建立共同的理解。\n\n### 何时启动新会话\n\n在以下情况下，启动新会话更为合适：\n\n* 您正在切换到一项无关的任务。\n  Copilot 不需要之前工作的上下文，一个清晰的上下文窗口意味着为新任务提供更多的空间。\n* 该对话已经历多次压缩，您觉得在摘要过程中丢失了重要上下文。\n* 你想要一个新的开始，例如，如果工作方向错误，你宁愿重新开始，而不是让 Copilot 尝试将早期决策与新的方法调和。\n\n> \\[!TIP]\n> 可以使用命令随时 `/resume` 恢复以前的会话。 这使您能够从上次中断处继续，包括该会话期间创建的任何检查点。\n\n## 延伸阅读\n\n* [GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli)\n* [使用 GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli/use-copilot-cli/overview)\n* [GitHub Copilot CLI 命令参考](/zh/copilot/reference/copilot-cli-reference/cli-command-reference)"}