在 Visual Studio Code 中使用代理
代理是实现 AI 驱动的自主编码以及执行超出简单代码建议和聊天交互的多步任务的关键。Visual Studio Code 允许您创建在本地或云端、以交互方式或在后台运行的代理会话。您可以随时在不同类型的代理之间切换任务,以利用它们独特的优势。通过 VS Code 中的统一聊天视图,您可以集中管理和监控所有代理会话,无论它们在哪里运行。
本文档概述了各种代理类型,如何创建和管理代理会话,代理之间的任务委派,以及跟踪它们的进度。

什么是代理?
代理可以端到端地处理完整的编码任务,它们所做的不仅仅是建议代码或回答问题,从而为您节省时间。它们可以理解您的项目,跨多个文件进行更改,运行命令,并根据获得的结果进行调整。
例如,假设您有一个测试失败。代理不仅可以建议修复,还可以读取错误消息,在多个文件中识别根本原因,更新相关代码,重新运行测试以验证修复是否有效,甚至提交更改。
给代理一个高级任务,它们会将其分解为多个步骤,使用各种工具执行这些步骤,并在遇到错误或测试失败时进行自我纠正。
在 VS Code 中,代理可以在不同的环境中运行以匹配您的工作流程:在 VS Code 中进行本地交互任务,在您的机器上进行后台自主工作,或者在云端进行远程团队协作。它们执行编码任务,运行终端命令,并协同使用工具来实现您的目标。一些代理会实时响应您的提示,帮助您规划功能或进行有针对性的编辑,而另一些代理则独立工作以实现多步更改。
代理与自定义代理有何不同?
自定义代理允许您让代理在执行某项任务时扮演特定的角色或个性,例如代码审阅者、测试人员或安全专家。自定义代理是一种配置,它定义了代理应如何行为,可以使用哪些工具,以及应使用哪个模型。
例如,“代码审阅者”自定义代理可能被配置为专注于根据团队编码标准和行业最佳实践来识别潜在的 bug 并提出改进建议。自定义代理将只拥有对代码库的只读访问权限,并使用特定的存储库或文档作为其审阅的上下文。自定义代理的输出将是一个基于模板的详细代码审阅报告。
您可以在不同类型的代理(本地、后台、云端)之间重用自定义代理,以使它们在不同环境中扮演相同的角色或个性。
自定义代理还允许您在自定义代理定义中指定切换点,以实现结构化的工作流程,让用户通过另一个代理执行后续操作。例如,“代码审阅者”自定义代理可以配置为切换到内置代理,并要求它实现建议的更改。
了解更多关于创建自定义代理的信息。
代理与子代理有何不同?
子代理使代理能够分解复杂任务并在隔离的上下文中执行它们。子代理是在代理会话的一部分中启动的自主代理,但它独立运行并拥有自己的上下文窗口。子代理对于优化复杂的多步任务(如研究或分析)的上下文管理非常有用。一个代理可以创建多个子代理来处理单个用户请求的不同部分。
例如,如果您要求代理研究一个主题并总结研究结果,它可以创建一个子代理来处理研究部分。子代理收集信息,处理信息,然后只将最终摘要返回给主代理,从而使主上下文专注于主要对话。
与代理本身类似,子代理也可以利用自定义代理来承担其任务的特定角色或个性。如果子代理需要执行研究,您可以让它使用针对信息收集、分析和总结优化的“研究员”自定义代理。
目前,子代理仅在 VS Code 的本地代理会话中受支持。
代理类型
VS Code 支持四种主要的代理类别,每种代理都针对不同的用例和交互级别进行设计。

本地代理
本地代理直接在您的机器上的 VS Code 中运行。您可以通过聊天与本地代理进行交互,以即时获得对您提示的响应。本地代理在您的工作区上运行,并可以访问 VS Code 中提供的所有工具和模型。您可以通过创建自定义代理,让代理在执行某项任务时扮演特定的角色或个性,例如代码审阅者、测试人员或文档编写者。
本地代理在 VS Code 的聊天界面中运行。当您关闭聊天会话时,本地代理将保持活动状态,并可以在会话视图中进行跟踪。
最适合:
- 需要即时反馈的交互式对话,例如头脑风暴、规划或尚未完全定义任务
- 不需要其他团队成员协作的任务
- 需要从您的开发环境获取上下文的任务,例如 lint 错误、堆栈跟踪、单元测试结果
- 需要访问 VS Code 扩展或 MCP 服务器中的特定工具,或者需要使用 BYOK 模型之类的特定模型
主要特点:
- 在您的本地机器上的 VS Code 中运行,并在您当前的工作区上工作
- 基于聊天的交互式界面,用于实时反馈和迭代
- 完全访问您的工作区、文件和上下文
- 可以访问 VS Code 中配置的所有代理工具,例如内置工具、MCP 工具和扩展提供的工具
- 可以使用您在 VS Code 中提供的所有模型,包括 BYOK 模型和其他提供商的模型
了解更多关于在 VS Code 中使用聊天的信息。
后台代理
类似 Copilot CLI 的后台代理是基于 CLI 的代理,它们在您的本地机器上以非交互方式运行。后台代理可以使用 Git 工作树以隔离模式工作,以防止代码更改干扰您当前的工作区。您可以选择在当前工作区中运行后台代理,但这可能会导致冲突(如果您正在积极处理相同的文件)。后台代理不能使用 MCP 或扩展提供的工具,并且仅限于 CLI 提供的模型。要自定义后台代理的行为,您可以重用工作区自定义代理,使其扮演特定的角色或个性。
最适合:
- 具有明确范围和所有必要上下文的非交互式任务,例如实施计划
- 不需要与其他团队成员协作的任务
- 不需要访问 VS Code 内置工具、MCP 工具或运行时上下文的任务,例如失败的测试或文本选择
主要特点:
- 在您的本地机器上以非交互和自主的方式在后台运行
- 可以使用 Git 工作树与您的主工作区隔离工作
- 除非明确添加,否则无法直接访问 VS Code 内置工具和运行时上下文
- 无法访问 MCP 服务器
- 仅限于通过 CLI 工具提供的模型
了解更多关于在 VS Code 中使用后台代理的信息。
云端代理
云端代理在远程基础设施上运行,以执行 AI 驱动的编码任务。类似 Copilot 编码代理的云端代理与 GitHub 存储库和拉取请求集成,以实现团队协作和代码审阅。云端代理通过分支和拉取请求与您的本地工作区隔离运行,以防止干扰。云端代理无法访问 VS Code 内置工具和运行时上下文,但可以访问在远程环境中配置的 MCP 服务器。您可以重用您的工作区自定义代理,使云端代理在执行任务时扮演特定的角色或个性。
最适合:
- 具有明确范围和所有必要上下文的非交互式任务,例如实施计划
- 需要与其他团队成员协作的任务
- 不需要访问 VS Code 内置工具、MCP 工具或运行时上下文的任务,例如失败的测试或文本选择
主要特点:
- 在远程基础设施上以非交互方式运行
- 通过分支和拉取请求与您的主工作区隔离工作
- 可以通过拉取请求支持团队协作
- 无法访问 VS Code 内置工具和运行时上下文
- 可以访问在远程环境中配置的 MCP 服务器
- 仅限于云端代理服务中提供的模型
了解更多关于在 VS Code 中使用云端代理的信息。
第三方代理
第三方代理是由其他提供商(例如 OpenAI Codex)开发的后台代理,它们已集成到 VS Code 代理体验中。您可以像管理本地、后台和云端代理一样管理这些提供商的代理会话。
最适合:当您已在使用第三方 AI 代理并希望将其集成到 VS Code 工作流程中时
管理代理会话
VS Code 中的聊天视图提供了一个统一的界面,用于管理您的代理会话,无论它们在哪里运行。您可以查看所有代理会话的列表、它们的状态以及关键详细信息(如文件更改)以及它们的类型(本地、后台、云端或 Codex)。状态指示器可帮助您快速识别活动、已完成、失败的会话或需要您输入的会话。
会话列表已限定到您的工作区。如果您没有打开工作区,列表将显示所有工作区中的所有会话。
聊天视图有两种模式
-
紧凑模式:
在紧凑模式下,当您打开一个新的聊天会话时,您会在一个紧凑的列表中看到最近的三个会话。您可以选择**显示所有会话**以打开代理会话的完整历史记录。在查看所有会话时,请使用搜索和筛选选项来查找特定会话。

当您从列表中选择一个会话时,聊天视图将切换到该会话。一个链接使您能够返回到之前的视图。
-
并排模式
在并排模式下,聊天视图直接与聊天视图并排显示代理会话的完整列表。使用搜索和筛选选项来查找特定会话。要切换紧凑模式和并排模式,请使用聊天视图右上角的切换控件。

当您从列表中选择一个会话时,聊天视图将显示该会话的详细信息,而会话列表将保持可见。
提示使聊天视图更宽以自动切换到并排模式。右键单击会话列表并选择**会话方向**以更改默认行为(chat.viewSessions.orientation)。
右键单击列表中的会话可查看其他操作,例如打开会话详细信息的不同选项、存档会话,或特定于代理类型的操作,例如检出拉取请求(针对云端代理会话)。
要隐藏聊天视图中的会话列表,请在空白聊天中右键单击并取消选择**显示会话**。
如果您更喜欢专用的代理视图(预览版),请将chat.agentSessionsViewLocation 设置为 `view` 或 `single-view`。
扩展开发人员可以了解如何使用提议的 API chatSessionsProvider 与代理视图集成。该 API 目前处于提议状态,可能会发生变化。
筛选代理会话
当所有会话都显示在会话列表中时,您可以使用搜索和筛选来查找特定的代理会话。默认情况下,会显示所有会话,但已存档的会话除外。您可以按代理类型、状态、读取状态和存档状态筛选会话。

选择**重置**可将筛选器重置为默认值。
存档代理会话
为了保持会话列表的整洁,您可以存档已完成或不活动的会话。存档的会话默认情况下会隐藏,但您仍然可以通过应用**存档**筛选器来访问它们。
要存档会话,请将鼠标悬停在会话列表中的会话上,然后选择**存档**。存档会话后,它将从列表中消失。反之,您也可以用同样的方式取消存档会话。

创建代理会话
在 VS Code 中创建新的代理会话有多种方式
-
创建一种特定类型的新的、空的代理会话
-
通过委派将现有会话切换到另一种代理类型
-
直接将任务分配给代理,例如 TODO 注释或 GitHub 问题
创建新的代理会话
您可以从聊天视图创建新的代理会话,或使用命令面板中的相应命令。
-
打开聊天视图
-
选择**新会话**下拉列表,然后选择要创建的代理会话类型

- 新聊天:在聊天视图中启动新的本地代理会话
- 新聊天编辑器:在编辑器选项卡中启动新的本地代理会话
- 新聊天窗口:在单独的 VS Code 窗口中启动新的本地代理会话
- 新后台/云端/Codex 代理:在聊天视图中启动新的后台、云端或 Codex 代理会话
您可以随时通过溢出菜单 (...) 中的操作,将代理会话从聊天视图移动到聊天编辑器或新窗口。
或者,使用命令面板中的以下命令(⇧⌘P (Windows, Linux Ctrl+Shift+P))
- 聊天:新聊天编辑器/窗口:在聊天编辑器中启动新的本地代理会话
- 聊天:新后台代理:在聊天编辑器中使用 Copilot CLI 启动新的后台代理会话
- 聊天:新云端代理:在聊天编辑器中启动新的 Copilot 编码代理会话
- Codex:新 Codex 代理:在聊天编辑器中启动新的 OpenAI Codex 代理会话
将会话切换到另一个代理
每种代理类型都有其独特的优势和功能。本地代理允许您实时与 AI 进行交互,而后台代理非常适合自主处理定义明确的任务,而云端代理则非常适合通过拉取请求进行团队协作。
VS Code 使您能够根据任务的具体情况,将现有任务从一个代理切换(或委派)到另一个代理。例如,您可以先使用本地代理创建计划,然后切换到后台代理来创建不同的概念验证变体,最后继续使用云端代理在拉取请求中实现最终版本以供团队审阅。
当您委派会话时,VS Code 会创建一个所选类型的新代理会话,并保留完整的对话历史记录和上下文。然后,您可以继续与新代理进行交互以完成任务。原始会话将在切换后存档。
您可以通过使用“在…中继续”控件,或在提示中键入 ` @cli `、` @cloud ` 或 ` @codex ` 来将本地代理会话从 VS Code 中的聊天切换到其他代理类型,从而将任务传递给其他代理类型。

在后台代理会话中,您可以通过在聊天输入框中输入 `/delegate` 命令来委派给云端代理。可选地,您可以在 `/delegate` 命令后提供给云端代理的附加指令。
将编码任务分配给代理
如果您已安装GitHub Pull Requests 扩展,则可以将代理分配给实现代码中的 `TODO` 注释。

在 GitHub.com 上,或通过使用 GitHub Pull Requests 扩展,您可以将 GitHub 问题分配给 Copilot 编码代理(通过将问题分配给 `copilot`),或者在问题评论或拉取请求中提及它以请求代码审阅。
审查和应用文件更改
当代理会话完成并对您的项目进行了代码更改时,会话列表会显示该会话的文件更改统计信息。要审查代理所做的更改,请从列表中选择该会话以打开会话详细信息。
会话详细信息视图显示与代理的完整对话历史记录,以及会话期间所做的任何文件更改。右键单击已更改的文件可查看该文件的 diff 编辑器,或选择“**查看所有更改**”操作以查看包含会话期间所有更改的多文件 diff 编辑器。

根据代理类型,您还可以选择将代理所做的更改应用到您的本地工作区,或者检出代理会话中的分支(针对云端代理)。