管理 AI 上下文
通过提供正确的上下文,你可以从 VS Code 中的 AI 获得更相关和准确的响应。在本文中,你将学习如何管理聊天上下文,包括如何使用 # 提及来引用文件、文件夹和符号,如何引用网页内容,或者如何使用自定义指令来指导 AI 的响应。
隐式上下文
VS Code 会根据你当前的活动自动为聊天提示提供上下文。以下信息会隐式包含在聊天上下文中:
- 活动编辑器中当前选定的文本。
- 活动编辑器的文件名或笔记本名称。
活动文件的实际内容不包含在上下文中,但会显示为聊天输入框中的建议上下文项(以斜体文本和虚线轮廓表示)。根据你的提示,VS Code 可能会决定读取活动文件的内容。要明确将活动文件的内容包含在聊天上下文中,请在聊天输入框中选择建议的文件。
# 提及
在聊天中,你可以通过键入 #
加上你想要提及的上下文项来明确引用上下文。这使得 AI 能够根据你引用的特定上下文提供更相关的响应。
在聊天输入字段中键入 #
符号以查看可用上下文项列表。
要引用特定的工作区文件、文件夹或代码符号,请键入 #
加上文件名、文件夹名或符号名。了解更多关于在聊天中引用文件和文件夹的信息。
或者,从可用预定义上下文项列表中选择,例如 #changes
以获取已更改文件的差异,或 #codebase
以对你的工作区执行代码库搜索。
请确保启用 github.copilot.chat.codesearch.enabled (预览)设置以获得最佳结果。
支持的上下文项
VS Code 支持以下上下文项:
上下文项 | 描述 |
---|---|
#changes | 获取源代码管理中已更改文件的差异。 |
#codebase | 跨当前工作区执行代码库搜索。 |
#extensions | 搜索 VS Code 扩展。 |
#fetch | 获取网页内容。 |
#githubRepo | 在 GitHub 仓库中执行网页搜索。 |
#problems | 获取当前工作区的问题列表。 |
#selection | 获取活动编辑器的文本选择。 |
#searchResults | 获取搜索视图中的结果。 |
#terminalLastCommand | 获取上次运行的终端命令及其状态。 |
#terminalSelection | 获取终端文本选择。 |
#testFailure | 获取测试失败列表。 |
#usages | 获取跨工作区的符号引用。 |
#vscodeAPI | 搜索 VS Code 扩展 API。 |
提示示例
以下示例展示了如何在聊天提示中使用 # 提及:
引用你待处理的源代码管理更改
“总结 #changes”
“基于 #changes 生成发布说明”
理解代码库
“解释 #codebase 中身份验证的工作原理”
“数据库连接字符串在哪里配置? #codebase”
“如何构建这个 #codebase?”
“#getUser 在哪里使用? #usages”
生成与你的代码库一致的代码
“创建关于页面并将其包含在导航栏中 #codebase”
“添加一个新的 API 路由用于更新地址信息 #codebase”
“添加登录按钮并根据 #styles.css 进行样式设置”
修复工作区中的问题
“修复 #problems 中的问题”
“修复失败的测试 #testFailure”
获取有关扩展的信息
“此工作区有哪些顶级 #extensions?”
引用网页内容
“如何在 React 18 中使用 'useState' 钩子? #fetch https://18.reactjs.ac.cn/reference/react/useState#usage”
“构建一个 API 端点来获取地址信息,使用来自 #githubRepo contoso/api-templates 的模板”
将文件添加为上下文
要让 AI 自动在你的工作区中查找相关文件和符号,你可以使用 #codebase
。要提供特定的文件、文件夹或符号作为上下文,请使用以下方法将它们添加到聊天中:
-
在聊天消息中通过键入
#
加上文件、文件夹或符号的名称来 # 提及文件、文件夹或符号。要引用符号,请确保首先在编辑器中打开包含该符号的文件。 -
将文件或文件夹从资源管理器视图、搜索视图或编辑器选项卡拖放到聊天视图中,以将其添加为上下文。
-
使用聊天视图中的“添加上下文”按钮,然后选择“文件和文件夹”或“符号”。
如果可能,当你附加文件时,将包含文件的全部内容。如果内容过大无法适应上下文窗口,则将包含文件的大纲,其中包含函数及其描述,但不包含实现。如果大纲也太大,则文件将不会成为提示的一部分。
执行代码库搜索
除了手动添加单个文件,你还可以让 VS Code 自动从你的代码库中找到正确的文件。当你不知道哪些文件与你的问题相关时,这会很有用。
在提示中添加 #codebase
或选择“添加上下文”>“工具”>“codebase”以启用工作区的代码搜索功能。
以下提示示例展示了如何使用代码库搜索:
“解释 #codebase 中身份验证的工作原理”
“数据库连接字符串在哪里配置? #codebase”
“添加一个新的 API 路由用于更新地址 #codebase”
请确保启用 github.copilot.chat.codesearch.enabled (预览)设置以获得最佳结果。
引用网页内容
你可以在聊天提示中引用网页内容,例如获取最新的 API 参考或代码示例。
-
#fetch
:使用此工具从特定网页检索内容,例如框架的特定版本文档页面。要使用此工具,请键入#fetch
加上你想要引用的页面 URL。“VS Code 1.100 有哪些亮点? #fetch https://vscode.js.cn/updates/v1_100”
“将 asp.net 应用更新到 .NET 9 #fetch https://learn.microsoft.com/en-us/aspnet/core/migration/80-90”
-
#githubRepo
:使用此工具在 GitHub 仓库中执行代码搜索,例如引用其他项目的代码模式或示例。键入#githubRepo
加上仓库名称(例如,microsoft/vscode-docs
)。“next.js 中的路由是如何工作的? #githubRepo vercel/next.js”
“执行代码审查以验证其与 #githubRepo microsoft/typescript 的一致性”
“为我的应用添加单元测试。使用与 #githubRepo rust-lang/rust 相同的测试设置和结构”
引用工具
VS Code 中的聊天功能有多个内置工具,你可以通过 MCP 服务器或扩展中的工具进一步扩展它。例如,#fetch
工具是一个内置工具,允许你从网页获取内容。你还可以将工具分组到工具集中,然后可以在聊天提示中引用这些工具集。
要在聊天提示中直接引用工具或工具集,请键入 #
加上工具(集)名称和可选的工具参数。以下提示示例展示了如何使用工具:
-
使用 GitHub MCP 服务器工具(在你的
mcp.json
中配置为github-mcp
)“我有哪些未解决的问题 #github-mcp”
“为 contoso/tailwindtraders 中的问题 #123 实现修复 #github-mcp”
“microsoft/vscode-docs 中的 PR 8407 是关于什么的? #github-mcp”
-
使用
#postgres
MCP 服务器查询 PostgreSQL 数据库“生成一个 API 端点和数据访问层,用于从 #postgres 获取天气数据”
“#postgres 中公司名称的最大长度是多少?”
@ 提及
当你在聊天中使用提问模式时,可以使用 @
符号将聊天提示传递给聊天参与者。聊天参与者是具有特定主题上下文和知识的领域专家。例如,内置的 @vscode
参与者是 VS Code 和扩展 API 的专家,而 @terminal
可以帮助处理 shell 命令。
要使用聊天参与者,请以 @
加上参与者名称开始你的提示,然后继续提问。
以下示例展示了如何在聊天提示中使用 @ 提及:
“@vscode 如何启用自动换行”
“@terminal 当前目录中最大的 5 个文件是什么”
在聊天输入字段中键入 @
以查看可用聊天参与者列表。
扩展也可以贡献自己的聊天参与者。
从 VS Code 简单浏览器添加元素(实验性)
VS Code 内置了一个简单的浏览器,你可以使用它来查看本地托管的 Web 应用程序并与其交互,例如快速测试和调试你的 Web 应用程序。
你可以将简单浏览器窗口中的元素作为上下文添加到聊天提示中。为此,请执行以下操作:
-
请确保通过 chat.sendElementsToChat.enabled 设置启用从简单浏览器中选择元素。
-
在本地运行你的 Web 应用程序。
-
通过从命令面板运行“简单浏览器:显示”命令来打开简单浏览器视图。
-
选择“开始”按钮以开始从当前页面选择元素。
-
将鼠标悬停在网页元素上,然后单击以将其添加到聊天提示中。
请注意,所选元素已作为上下文添加到当前聊天提示中。
你可以配置上下文中包含哪些信息:
- 附加 CSS - 通过 chat.sendElementsToChat.attachCSS 设置启用。
- 附加图像 - 通过 chat.sendElementsToChat.attachImages 设置启用。
此功能在 Live Preview 扩展(预发布)中也可用。
聊天历史记录
VS Code 中的聊天被设计为多轮对话。在聊天会话中,VS Code 使用对话历史记录作为你当前提示的上下文。这意味着你可以提出后续问题或澄清你之前的问题,而无需重复上下文。
要开始新的聊天会话并丢弃当前上下文,请在聊天视图中选择“新建聊天”(+
)按钮(⌃L (Windows, Linux Ctrl+L))。如果你想切换到不同的主题并避免之前的上下文和历史记录,这会很有用。
了解更多关于聊天历史记录和上下文管理的信息。
自定义指令
通过指令文件,你可以为 AI 提供通用的指导方针和规则,使其生成符合你的编码风格和偏好的响应。指令文件是你可以在工作区或当前配置文件中创建的 Markdown 文件。
通过使用指令文件,你可以避免在聊天提示中重复添加常用指令,而是让 AI 自动将这些指令应用于你的聊天交互。
了解更多关于使用指令文件的信息。
工作区索引
VS Code 使用索引来快速准确地在你的代码库中搜索相关的代码片段。此索引可以由 GitHub 维护,也可以本地存储在你的机器上。
以下工作区索引选项可用:
- 远程索引:如果你的代码托管在 GitHub 仓库中,你可以构建远程索引,即使对于大型代码库,也能快速搜索你的代码库。
- 本地索引:使用存储在你本地机器上的高级语义索引,为你的代码库提供快速准确的搜索结果。
- 基本索引:如果本地索引不可用,你可以使用针对大型代码库进行本地优化工作的更简单算法。
了解更多关于工作区索引的信息。
相关资源
- 了解代理模式中的工具。
- 使用指令文件自定义 AI。
- 了解工作区索引。
- 开始使用VS Code 中的聊天。