上下文
上下文是指模型在生成回复时可以看到的所有内容。它包括对话历史、工作区中的文件内容、工具输出、自定义指令以及您明确添加的任何引用。模型只能基于它所能看到的内容进行推理,因此提供相关的上下文是提高 AI 回复质量的最有效方法之一。
本文介绍了 VS Code 如何组装上下文、可用的上下文类型以及如何有效处理上下文窗口限制。
为什么上下文很重要
与没有上下文的模糊提示词相比,包含相关文件、明确指令和重点历史记录的提示词会产生更好的结果。模型没有先前会话的记忆,也无法访问未提供给它的文件。它对您的任务所了解的一切都来自为当前请求所组装的上下文。
VS Code 如何组装上下文
当您发送消息时,VS Code 会从多个来源构建语言模型提示词:

- 系统指令:定义代理行为的内置准则。
- 自定义设置:您设置的 AI 自定义内容,包括自定义代理、技能和自定义指令。
- 用户消息:您当前发送给代理的消息。
- 对话历史:当前会话中已交换的消息。
- 隐式上下文:您正在编辑的文件、当前选中的内容、可见的错误以及 Git 状态。
- 显式引用:您使用
#提及的文件、编辑器上下文、网页内容和其他来源。 - 工具输出:在代理会话期间,来自文件读取、终端命令、代码库搜索结果和其他工具调用的结果。
这个组装好的提示词就是模型所看到的内容。除此之外的一切对于模型来说都是不可见的。这就是为什么使用 #file 引用特定文件比询问模型未见过的代码能产生更好结果的原因。
工作区索引
VS Code 使用索引来快速准确地在您的代码库中搜索相关的代码片段。此索引可以由 GitHub 维护,也可以存储在您的本地计算机上。
- 远程索引:如果您的代码托管在 GitHub 仓库中,您可以构建远程索引来快速搜索代码库,即使对于大型代码库也适用。
- 本地索引:使用存储在本地计算机上的高级语义索引,以获得快速且准确的搜索结果。
- 基础索引:如果无法使用本地索引,针对大型代码库,本地会有更简单的算法运行。
了解更多关于 工作区索引 的信息。
隐式上下文
VS Code 会根据您当前的活动自动将上下文提供给提示词:
- 活动编辑器中当前选中的文本。
- 活动编辑器的文件名或笔记本名称。
- 如果您正在使用 Ask 代理,活动文件将自动作为上下文包含在内。
- 使用 Agent 时,它会根据您的提示词自动决定是否需要添加活动文件。
如何高效使用上下文
- 为新任务开启新会话。 会话 是一个拥有独立上下文窗口和历史记录的对话。每个会话都是全新的,因此不要对不相关的任务重复使用同一个对话。
- 有选择地使用上下文。 添加整个代码库并不总是有帮助。请引用与任务相关的特定文件。
- 使用自定义指令来设置持久规则。 您在 自定义指令 中添加的规则会被包含在每个请求中,因此当对话被总结时,您不会丢失这些规则。
示例
以下示例展示了添加上下文如何改善结果:
模糊提示词(无上下文):
How does authentication work?
模型无法知道您指的是哪个项目,因此会给出关于身份验证模式的通用回答。
带有显式上下文的提示词:
How does authentication work for this project?
模型会读取您实际的身份验证文件,并解释您的实现方式,同时引用特定的函数和配置值。
带有网页上下文的提示词:
Migrate the auth module to the latest passport.js API #fetch https://www.passportjs.org/concepts/authentication/
模型使用来自网页的最新文档来指导迁移,从而避免使用其训练数据中过时的 API 模式。
了解更多关于 向聊天添加上下文 的信息。