上下文

上下文是模型在生成响应时所能看到的一切信息。它包括对话历史记录、工作区中的文件内容、工具输出、自定义指令以及您显式添加的任何引用。模型只能基于它所能看到的内容进行推理,因此提供相关的上下文是提高 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 状态。
  • 显式引用:您使用 # 提及的文件、编辑器上下文、Web 内容及其他来源。
  • 工具输出:在代理会话期间,从文件读取、终端命令、代码库搜索结果及其他工具调用中获得的结果。

这组汇编后的提示词就是模型所看到的内容。除此之外的一切对于模型而言都是不可见的。这就是为什么使用 #file 引用特定文件比询问模型未见过的代码能产生更好结果的原因。

工作区索引

VS Code 使用索引来快速、准确地在您的代码库中搜索相关的代码片段。该索引可以由 GitHub 维护,也可以存储在您的本地机器上。

  • 远程索引:如果您的代码托管在 GitHub 仓库中,您可以构建远程索引以快速搜索代码库,即使对于大型代码库也是如此。
  • 本地索引:使用存储在您本地机器上的高级语义索引,以获得快速且准确的搜索结果。
  • 基本索引:如果无法使用本地索引,则针对大型代码库采用更简单的算法在本地运行。

了解更多关于 工作区索引 的信息。

隐式上下文

VS Code 会根据您当前的活动自动向提示词提供上下文

  • 活动编辑器中当前选定的文本。
  • 活动编辑器的文件名或笔记本名称。
  • 如果您正在使用 Ask 代理,活动文件会自动作为上下文包含在内。
  • 当使用 Agent 时,它会根据您的提示词自动决定是否需要添加活动文件。

如何高效利用上下文

  • 为新任务开启新会话。 会话 是一次独立的对话,拥有自己的上下文窗口和历史记录。每个会话都是全新的,因此不要在不相关的任务中复用同一个对话。
  • 有选择性地使用上下文。 添加整个代码库并不总是有帮助。请引用与任务相关的特定文件。
  • 使用自定义指令来设定持久规则。 您在 自定义指令 中添加的规则会包含在每个请求中,这样即使对话被总结,这些规则也不会丢失。

示例

以下示例展示了添加上下文如何改进结果:

模糊的提示词(无上下文):

How does authentication work?

模型无法知道您指的是哪个项目,只能给出关于身份验证模式的通用回答。

包含显式上下文的提示词:

How does authentication work for this project?

模型会读取您实际的身份验证文件,并解释您的实现方式,同时引用特定的函数和配置值。

包含 Web 上下文的提示词:

Migrate the auth module to the latest passport.js API #fetch https://www.passportjs.org/concepts/authentication/

模型会使用 Web 上最新的文档来指导迁移,避免使用其训练数据中过时的 API 模式。

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

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