在 VS Code 中使用代理模式
通过 Visual Studio Code 中的聊天代理模式,您可以使用自然语言定义高级任务,并启动代理式代码编辑会话来完成该任务。在代理模式下,Copilot 会自主规划所需的工作并确定相关的文件和上下文。然后,它会对您的代码库进行编辑并调用工具以完成您提出的请求。代理模式会监控编辑和工具的结果,并迭代以解决出现的任何问题。
如果您还没有 Copilot 订阅,您可以通过注册 Copilot 免费计划 来免费使用 Copilot,并获得每月有限的补全和聊天互动次数。
使用代理模式
在代理模式下,Copilot 以自主方式运行,并确定您的提示的相关上下文。
-
通过在设置编辑器中配置 chat.agent.enabled 设置,确保已启用代理模式。
-
通过从 VS Code 标题栏中的 Copilot 菜单中选择打开聊天,或使用 ⌃⌘I(Windows、Linux Ctrl+Alt+I) 键盘快捷键,打开聊天视图。
-
从聊天视图中的聊天模式下拉列表中选择提问。
-
在聊天输入字段中输入您的编辑提示,然后选择发送(Enter)提交。
您可以指定高级要求,而无需指定要处理的文件。在代理模式下,Copilot 会自主确定要编辑的相关上下文和文件。
尝试使用以下一些示例提示开始操作
使用 React 和 Node.js 创建一个膳食计划 Web 应用程序
添加社交媒体分享功能
将当前的身份验证替换为 OAuth
-
代理模式可能会调用多个工具来完成不同的任务。或者,选择工具图标来配置哪些工具可以用于响应您的请求。
提示您也可以通过输入
#
后跟工具名称,在提示中直接引用工具。您可以在所有聊天模式(提问、编辑和代理模式)下执行此操作。 -
确认工具调用和终端命令。
在运行终端命令或非内置工具之前,Copilot 会请求确认以继续。这是因为工具可能会在您的本地计算机上运行,并可能执行修改文件或数据的操作。
使用继续按钮下拉选项自动确认当前会话、工作区或所有未来调用中的特定工具。
如果您的项目在
tasks.json
中配置了任务,则代理模式会尝试运行适当的任务。例如,如果您定义了构建任务,则代理模式将在运行应用程序之前运行构建任务。使用 github.copilot.chat.agent.runTasks 设置启用或禁用运行工作区任务。 -
或者,在运行工具之前验证和编辑工具输入参数。
选择工具名称旁边的 chevron 图标以查看其详细信息和输入参数。您可以在运行工具之前编辑输入参数。
-
Copilot Edits 检测代码编辑和终端命令中的问题和错误,并将迭代并执行其他操作来解决这些问题。
例如,代理模式可能会将单元测试作为代码编辑的结果运行。如果测试失败,它会使用测试结果来解决问题。
Copilot Edits 代理模式会多次迭代以解决问题和错误。chat.agent.maxRequests 设置控制 Copilot Edits 在代理模式下可以发出的最大请求数。
-
当 Copilot 处理您的请求时,请注意 Copilot 会将建议的代码编辑直接流式传输到编辑器中。
聊天视图以粗体文本显示已编辑文件的列表。编辑器叠加控件使您可以在建议的编辑之间导航。
-
查看建议的编辑,并接受或放弃建议的编辑。
-
继续迭代代码更改以改进编辑或实现其他功能。
代理模式工具
代理模式使用工具来完成处理用户请求时的专门任务。此类任务的示例包括列出目录中的文件、编辑工作区中的文件、运行终端命令、从终端获取输出等等。
代理模式可以使用以下工具
您可以查看和管理可用于响应请求的工具。选择聊天视图中的工具图标以查看和管理代理模式下可用的工具。
根据工具的结果,Copilot 可能会调用其他工具来完成总体请求。例如,如果代码编辑导致文件出现语法错误,Copilot 可能会探索另一种方法并建议不同的代码更改。
接受或放弃编辑
Copilot 在聊天视图的更改文件列表中列出了已编辑的文件。具有待处理编辑的文件在资源管理器视图和编辑器选项卡中也具有指示符。
使用编辑器叠加控件,您可以使用 向上 () 和 向下 () 控件在建议的编辑之间导航。使用保留或撤消按钮来接受或拒绝给定文件的编辑。
使用编辑器或聊天视图中的保留或撤消控件来接受或拒绝单个或所有建议的编辑。
通过 chat.editing.autoAcceptDelay 设置,您可以配置在建议的编辑自动接受后的延迟时间。将鼠标悬停在编辑器叠加控件上以取消自动接受倒计时。
当您关闭 VS Code 时,会记住待处理编辑的状态。当您重新打开 VS Code 时,将恢复待处理的编辑,您仍然可以接受或放弃编辑。
还原编辑
当您发送请求以对代码进行编辑时,您可能想要回滚其中的一些更改,例如,因为您想要使用另一种实现策略,或者因为 Copilot 在生成编辑时开始走错方向。
您可以使用聊天视图标题栏中的撤消上次编辑控件来还原上次编辑,并返回到发送上次请求之前的状态。在您执行上次编辑的撤消操作后,您可以使用聊天视图标题栏中的重做上次编辑控件再次重做这些编辑。
当您将鼠标悬停在 Copilot Edits 视图中的请求上时,您还可以使用撤消编辑(删除)控件(x 图标)来还原从该请求开始的所有编辑。
中断代理模式请求
要中断正在进行的请求,您可以暂停它或取消它。当您暂停请求时,Copilot 会停止处理请求并等待您的输入。
当您暂停请求时,您可以选择输入新提示(这将取消当前请求),也可以选择恢复当前请求。
当您取消请求时,Copilot 会中断并结束活动请求。您仍然可以查看并接受或拒绝到那时为止所做的更改。
设置
以下列表包含与代理模式相关的设置。您可以通过设置编辑器(⌘,(Windows、Linux Ctrl+,))配置设置。
- chat.agent.enabled:启用或禁用代理模式(默认值:
false
) - chat.agent.maxRequests:Copilot Edits 在代理模式下可以发出的最大请求数(默认值:Copilot 免费用户为 5,其他用户为 15)
- github.copilot.chat.agent.runTasks:在使用 Copilot Edits 中的代理模式时运行工作区任务(默认值:
true
) - chat.mcp.discovery.enabled:启用或禁用在其他工具中配置的 MCP 服务器的发现(默认值:
true
)
常见问题解答
为什么我应该使用代理模式而不是编辑模式?
考虑以下标准以在编辑模式和代理模式之间进行选择
- 编辑范围:代理模式自主确定要编辑的相关上下文和文件。在编辑模式下,您需要自己指定上下文。
- 任务复杂性:代理模式更适合需要不仅进行代码编辑,还需要调用工具和终端命令的复杂任务。
- 持续时间:代理模式涉及多个步骤来处理请求,因此可能需要更长的时间才能获得响应。例如,确定要编辑的相关上下文和文件、确定行动计划等等。
- 自我修复:代理模式评估生成的编辑的结果,并可能迭代多次以解决中间问题。
- 请求配额:在代理模式下,根据任务的复杂性,一个提示可能会导致向后端发出许多请求。