# 上下文目录

别名：片段包含的片段目录

## 描述

通过在代码库中的上下文目录中收集整个代码库的上下文，可以更容易地向 GitHub Copilot 传递准确的上下文，从而在开发过程中提高开发效率。

## 问题

* 不准确的建议 GitHub Copilot 无法获取整个代码库的上下文，可能会提出不准确的建议。这可能会降低代码质量，增加开发者进行修复或调整的时间。
* 效率降低 如果开发者不将相关文件保持在相邻的标签中，GitHub Copilot 将无法从这些文件中获取信息。结果，提议变得不准确，开发人员需要手动搜索和参考相关文件来编写代码。这可能会降低开发人员的生产力。
* 代码一致性的丧失 如果无法获取整个代码库的上下文，则 GitHub Copilot 建议的代码可能与现有代码不一致。这会影响代码的可读性和可维护性，可能会减慢整个团队的开发速度。

## 故事

有一天，项目团队的工程师决定使用 GitHub Copilot 开发新功能。她对 GitHub Copilot 充满了兴趣，认为借助其可以快速编写代码。

然而，随着开发的进行，她发现 GitHub Copilot 提出的建议有时不准确。尽管如此，她还是手动进行了修正，继续开发。渐渐地，她开始感到疲劳。此外，其他团队成员也指出，GitHub Copilot 提出的代码缺乏一致性。

她开始怀疑为什么 GitHub Copilot 无法提供准确的建议，并开始进行调查，结果发现这是由于没有正确打开相关文件造成的。另一方面，保持所有文件打开可能并不现实，而且 GitHub Copilot 仅发送相邻标签的数据，因此打开太多文件也没有意义。此外，她还意识到，考虑到 GitHub Copilot 使用的模型 Codex，仅能将一定数量的令牌传递给它。

因此，她决定引入上下文目录模式。通过保持相关文件打开，希望 GitHub Copilot 能够提供更准确的建议。

## 上下文

作为 AI 编码辅助工具的代表性产品，GitHub Copilot 目前基于打开的文件或在标签中打开的具有相同扩展名的文件的信息提供建议。由于 GitHub Copilot 使用的 Codex 模型所能接收的令牌数量有限，因此 GitHub Copilot 扩展不会将所有打开的文件的信息作为参考信息发送到 GitHub Copilot 服务器是不现实的，而是优先发送具有相似性的文件的信息。包含代码片段的目录称为 "snippet inclusion"。

因此，必须保持相邻标签中适量的相关文件。

## 解决方案

1. 创建上下文目录。 在个人或团队中创建一个目录，其中包含想要向 GitHub Copilot 学习的上下文或规则，以及其他想要作为辅助参考的文件。
2. 关闭与当前开发内容无关的文件。
3. 在 VSCode 中保持与当前正在开发的内容相关的文件的标签处于打开状态。 尽管目前 GitHub Copilot 无法获取整个代码库的上下文，但它可以读取当前文件以及编辑器中打开的文件。通过保持相关文件的标签处于打开状态，GitHub Copilot 将能够提供更准确的建议。

## 结果上下文

通过使用上下文目录，GitHub Copilot 将能够提供更准确的建议。通过保持相关文件的标签处于打开状态，可以获得有效的代码补全。

## 注意事项

* 目前 GitHub Copilot 所读取的文件是有限的。如果编写 Python，则建议包括片段文件或参考文件也应为 Python 代码。
* 根据需要，可以通过将这些目录添加到 .gitignore 中来避免将它们推送到存储库中。
* 另外，可以使用 Git Submodule 将上下文目录作为单独的目录切分出来。
