为什么 VS Code 中的 Copilot 聊天记录会丢失
Chat 视图仅列出你当前打开的工作区
VS Code 有两个地方列出会话,但它们显示的内容不同。在 Chat 视图中,微软的文档指出“会话列表的范围限定为你当前的工作区,并按时间段对会话进行分组”。它补充了一个例外:“如果你没有打开工作区,该列表将显示你所有工作区中的所有会话。”
Agents 窗口的范围更广。它的会话列表“显示来自你所有工作区的会话,因此你可以在一个地方监控跨项目的开发工作。”
因此,如果你在一个项目中启动了会话,但在另一个项目中打开了 VS Code,Chat 视图将不会列出它。如果你从不同的文件夹打开相同的代码,也请检查 Agents 窗口,因为 Chat 视图会跟随你打开的工作区。
默认情况下,列表仅显示活动会话
这两个列表在初始状态下都是经过过滤的。文档指出:“默认情况下,列表经过过滤,仅显示活动会话。你可以更改过滤器以显示不同状态的会话,例如已完成或已归档。”
你已完成的会话,或由于任何其他原因脱离活动状态的会话,在更改该过滤器之前都不会显示。
已归档和已完成的会话只是被隐藏,并未被删除
归档是 VS Code 保持列表整洁的方式,该操作就位于会话的悬停菜单上。微软明确说明了其含义:“归档会话不会将其删除。你可以随时取消归档会话,将其恢复到活动会话列表中。”
要查看它们,请使用 Chat 视图中的 Archived(已归档)过滤器,或 Agents 窗口中的 Done(已完成)过滤器。会话内的单个聊天也是如此。“将聊天标记为已完成会将其从活动会话列表中隐藏并关闭其标签页,但不会将其删除。”你可以在 Done 过滤器下找到并恢复它,文档称它恢复时“其标题和转录内容完好无损”。
来自其他应用的会话会被隐藏,直到你更改过滤器
VS Code 可以显示你在 Copilot CLI、GitHub Copilot 应用、Claude Code 和 Codex 中启动的会话。但是“默认情况下,在其他应用程序中创建的会话会被隐藏。”你可以通过 External(外部)过滤器选择显示的内容,选项包括 None(无)、Recent(最近)、Last 24 Hours(过去 24 小时)、Last 7 Days(过去 7 天)和 All(全部)。
Copilot 会话也有一个时间窗口:“对于 Copilot 会话,发现范围包括与仓库相关联且在过去七天内更新过的会话。”三周前的 CLI 会话将无法通过发现显示。如果你同时使用 CLI 和编辑器,我们关于配置 Copilot CLI 指令的指南涵盖了如何保持两者的一致性。
自动清理可以将会话标记为已完成,然后将其删除
VS Code 针对已合并拉取请求(PR)的会话提供了一个可选的清理功能。“这两个设置默认都是禁用的”,因此这仅在你或你的组织开启它时才适用。开启后,一个设置会在不活动若干天后将符合条件的会话标记为已完成,第二个设置则会在进一步的宽限期后将其删除。
文档对删除进行了仔细的限制:“永久删除仅适用于 VS Code 自动标记为已完成的会话。你手动标记为已完成的会话不会被自动删除。”在宽限期内还有一条退路:“恢复自动完成的会话会清除其删除资格。”
Worktree(工作树)清理也本着类似的精神工作。当你运行它时,“清理会将每个选定的会话标记为已完成,并安排其工作树进行移除。”会话及其分支历史记录会被保留,因此这些会话会保存在 Done 过滤器下。
本地会话索引可能需要重建
VS Code 保留了你 Copilot 会话的本地索引。微软的会话历史文档指出“如果会话丢失或数据库损坏,请重建索引”。它指出了常见的触发因素:“在从备份恢复会话文件、意外崩溃、手动删除会话目录或重新选择加入会话同步后进行重新索引。”
已删除的会话将不复存在
删除与上述所有情况都不同。“删除会话会永久移除它,且无法撤销。”对于已同步的数据,选择从两处删除“会从你的机器和 GitHub.com 中移除会话数据。此操作无法撤销。”
如果你仅是想让会话不显示在视线中,归档才是正确的做法。微软官方的指南也是这么建议的。
在另一台设备上,同步决定了你看到的内容
VS Code 默认会同步会话。文档指出它“将本地 agent 会话同步到你的 GitHub 帐户,以便你可以跨设备访问它们”。这就是让你在第二台机器上找到会话的原因。
有几种情况会关闭该功能。你可以将 chat.sessionSync.enabled 设置为 false,之后“会话数据将保留在你的机器上,你只能在本地查询它。”在 chat.sessionSync.excludeRepositories 中列出的仓库会被跳过:“来自匹配仓库的会话仅存储在本地。”在 Copilot Business 和 Enterprise 上,组织策略可以禁用同步,在这种情况下,状态会显示它已被策略禁用,你无法覆盖它。
同步默认是私密的。“除非你明确共享,否则同步的会话是私密的。”微软还指出,“启用该策略不会让管理员访问你的会话数据。”
人们常尝试的替代方法(但可能无效)
在不同的项目中搜索 Chat 视图。 它仅列出当前工作区。Agents 窗口会列出所有工作区。
误以为已归档的会话已被删除。 归档只是隐藏了会话。取消归档可以将其带回。
在编辑器中寻找 CLI 会话。 外部会话会被隐藏,直到你更改过滤器,且发现功能仅覆盖最近的会话。
期望在新笔记本电脑上看到会话。 这取决于你以及该仓库是否开启了同步。
通过重新安装 VS Code 来修复丢失的列表。 当会话从索引中丢失时,重新索引才是文档中记录的解决步骤。
等待已删除的会话恢复。 删除是永久性的。
解决方法:扩大列表范围、检查同步和索引,然后保留重要内容的副本
步骤 1:扩大范围和过滤器
打开 Agents 窗口以查看来自每个工作区的会话。无论你使用哪个列表,请更改状态过滤器,以在 Chat 视图中包含已完成和已归档的会话,或在 Agents 窗口中包含 Done(已完成)会话。
如果会话来自 Copilot CLI、GitHub Copilot 应用、Claude Code 或 Codex,请将 External 过滤器设置为 All。对于会话内被标记为已完成的单个聊天,请使用 Done 过滤器或显示所属会话的已完成聊天,然后将其恢复。
如果你使用自动清理,请检查其两个设置:chat.agentSessions.autoMarkAsDoneMergedSessionsAfterDays 和 chat.agentSessions.autoDeleteMarkedAsDoneMergedSessionsAfterDays。在宽限期结束之前,恢复你仍然需要的任何内容。
步骤 2:检查同步,然后重建索引
查看 Chat 视图中 Copilot 状态栏中的会话同步状态。它会告诉你同步是否已启用、已同步了多少个会话,或者是否有策略禁用了它。如果你正在寻找来自另一台机器的会话,这是首先要检查的事情。
然后重建本地索引。从命令面板(Command Palette)运行 Reindex Sessions,或在聊天输入框中使用 /chronicle:reindex。完成后,使用 /chronicle:search 进行搜索,微软将其描述为“通过关键字、文件路径、拉取请求或 Issue 引用来搜索会话”的方法。
如果这些方法都没有找到会话,且你没有删除它,它可能没有从运行它的设备同步过来。请检查那台机器。
步骤 3:导出重要的会话并记录决策
一旦找到了能找到的内容,请在会话列表之外保留一份副本。在会话打开的情况下,从命令面板运行 Chat: Export Chat。微软表示:“导出聊天会话会创建一个 JSON 文件,其中包含该会话的所有提示词和回复。”为了更易于阅读,Copy All(复制全部)选项将“以 Markdown 格式复制整个聊天会话,包括所有提示词、回复、思考步骤和工具调用。”
然后提取出你实际需要再次使用的内容。一个漫长的 agent 会话大部分都是步骤。有用的部分是少数几个决策:为什么选择某种方法、排除了什么,以及还有什么处于开启状态。用你自己的话把这些写下来,与转录内容分开。我们对索引会话日志的探讨解释了为什么可搜索的日志召回的是你过去说过的话,而不是当前仍然正确的事实。
在 MemoryLake 中进行设置
会话历史记录是工作进行过程的记录。最后的决策是下一个会话所需要的,无论旧会话是否仍在你的列表中。MemoryLake 是一个记忆层,用于将这些决策保存在你维护的一个列表中,供 Copilot 和你使用的其他 agent 使用。
你自己用自己的话编写这些条目。不会从你的 VS Code 会话、你的 GitHub 帐户或任何供应商的存储中读取、写入或删除任何内容。如果代码属于你的雇主或客户,在将项目详细信息复制到其他地方之前,请检查他们的策略。
步骤 1:创建 API 密钥
登录并从控制面板生成一个密钥。该密钥属于你的 MemoryLake 工作区,与你的 GitHub 帐户是分开的。

步骤 2:上传你的第一批记忆
从你刚刚恢复或导出的会话中的决策开始。每个条目记录一个决策,并附带日期、仓库和原因。

步骤 3:连接你的 AI 和 agent
连接你使用的编程 agent。这样,即使你做出决策的会话已被归档、删除或从未同步,这些决策在新的会话中也同样可用。

这在实践中带来了什么改变
第一个区别是搜索速度更快。了解了记录在案的原因后,你可以在几分钟内扩大范围、更改两个过滤器、检查同步并重新索引。
第二个区别是归档不再具有风险。一旦决策被记录下来,整理会话列表就不会隐藏你需要的任何内容。
第三个区别是新机器在启动时就拥有上下文。会话可能会同步,也可能不会。无论哪种情况,你单独保存的决策都是可用的。
第四个区别是历史记录和记忆之间的划分更加清晰。Copilot Memory 保存 Copilot 学习到的内容,并在你的许可证下进行管理,正如我们跨许可证管理 Copilot Memory 的指南所解释的那样。指令文件保存规则,这在我们关于哪个 Copilot 指令文件胜出的指南中有所涵盖。Copilot Space 可以保存参考资料,如保持 Copilot Space 最新中所述。你自己的决策日志则保存代码背后的原因。有关最后一个差距的更多信息,请参阅防止 Copilot 遗忘你的代码库。
保持 Copilot 聊天记录可查找的最佳实践
使用 Agents 窗口进行搜索。 它列出了来自每个工作区的会话。
首先检查过滤器。 默认仅显示活动会话。
使用归档代替删除。 已归档的会话可以恢复。
如果使用 CLI,请开启 External 过滤器。 来自其他应用的会话默认会被隐藏。
了解你的同步状态。 它决定了你在另一台设备上看到的内容。
当会话丢失时进行重新索引。 这是崩溃和恢复后文档中记录的解决步骤。
导出重要内容,然后记录决策。 转录内容只是备份,而不是计划。
结论
VS Code 中丢失 Copilot 聊天记录通常有记录在案的解释。Chat 视图仅列出当前工作区,两个列表默认都显示活动会话,已归档和已完成的会话只是被隐藏而不是被删除,来自其他应用的会话会保持隐藏,直到你更改 External 过滤器。可选的清理功能可以将已合并的会话标记为已完成并随后将其删除,同步设置决定了什么内容能传输到另一台设备,损坏的索引也可以重建。
已删除的会话是例外。它们已经彻底消失了,无论是本地,还是(如果你选择了的话)从 GitHub.com 中。
扩大范围,检查过滤器、同步和索引,然后导出你需要的会话,并将它们的决策保存在不依赖于任何列表的地方。