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