上下文

上下文是指模型在生成回复时可以看到的所有内容。它包括对话历史、工作区中的文件内容、工具输出、自定义指令以及您明确添加的任何引用。模型只能基于它所能看到的内容进行推理,因此提供相关的上下文是提高 AI 回复质量的最有效方法之一。

本文介绍了 VS Code 如何组装上下文、可用的上下文类型以及如何有效处理上下文窗口限制。

为什么上下文很重要

与没有上下文的模糊提示词相比,包含相关文件、明确指令和重点历史记录的提示词会产生更好的结果。模型没有先前会话的记忆,也无法访问未提供给它的文件。它对您的任务所了解的一切都来自为当前请求所组装的上下文。

VS Code 如何组装上下文

当您发送消息时,VS Code 会从多个来源构建语言模型提示词:

Diagram showing the context window as a container with seven layers: system instructions, customizations, user message, conversation history, implicit context, explicit references, and tool outputs, with an arrow sending the assembled prompt to the language model.

  • 系统指令:定义代理行为的内置准则。
  • 自定义设置:您设置的 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 模式。

了解更多关于 向聊天添加上下文 的信息。

© . This site is unofficial and not affiliated with Microsoft.