Introduction
处理任务时 Copilot ,通常需要采取措施来更改系统,例如运行 shell 命令、编辑文件或访问 URL。 可以选择如何处理这些操作的权限请求。
回答审批提示会使你保持控制状态,但它可能会减慢速度,尤其是在会话开始时,Copilot 需要确定其被允许执行哪些操作。 若要减少提示数,可以授予 Copilot 无条件权限,但这样做会消除对单个操作的监督。
Assisted permissions 是手动审批和授予广泛权限与允许所有选项之间的中间点。 它使用大型语言模型来评审权限请求,并自动批准它判断在任务上下文中安全的操作。 在标准交互式会话中,仍需要审批的请求将提交给你。
注意
Assisted permissions 在 GitHub Copilot CLI、Visual Studio Code 和 GitHub Copilot app中可用。
审批选项
可以在三个选项之间进行选择,以确定您想在多大程度上参与批准 Copilot 采取的操作。 现有的拒绝规则和企业限制仍然适用。 权限允许的请求可以在没有提示或模型评审的情况下运行。
-
**手动审批:**Copilot 当尚不允许某个操作(例如,运行不是只读的命令、编辑文件或访问 URL)时,请求你的批准。 您可以批准该操作一次,或在本次会话的剩余时间内批准该操作。 这为你提供了最大的控制,但要求你响应最多的提示。
-
**Assisted permissions:**Copilot 使用模型评估符合条件的权限请求,并自动批准其判断为安全的权限请求。 当请求仍需要审批时,系统会提示你。 这可以减少提示,而无需授予运行命令的一揽子权限。
-
**无条件批准:**Copilot 该用户具有广泛的权限,无需模型安全评审或单个审批提示即可使用工具、路径和 URL。 这是最宽松的选择,并使您无法监督个别操作。 这是在使用
--yolo(或/permissions allow-all)命令行选项,或/yolo(或 Copilot CLI)斜杠命令时,在--allow-all中得到的行为。
管理员可以在不禁用permissions.disableBypassPermissionsMode: "disable"的情况下使用assisted permissions禁用无条件审批。 单独的 permissions.disableAssistedPermissionsMode: true 设置将 assisted permissions禁用 。 有关详细信息,请参阅“企业管理设置”。
assisted permissions的工作原理
启用 assisted permissions后,将在模型评审之前评估现有规则和人工审批。 对于尚未解决的合格请求——无论是运行命令、访问路径还是获取 URL——模型将评估该操作是否安全,并且是在你为任务授予的授权范围内。
在 Copilot CLI中,当请求符合评审条件时,模型审批可以满足 shell 命令、文件读取、文件写入和 URL 的企业 ask 规则。 这意味着这些规则并不总是导致提示您进行确认。 企业拒绝规则仍适用。
Assisted permissions 不会审核企业规则要求你批准的其他工具调用,也不会审核绕过本地沙盒的请求。 这些请求仍受会话正常权限处理的约束。
对于它可以审核的请求,模型会提出建议:
- 如果模型确信该请求是安全的,Copilot 会自动批准并继续,而无需提示你。
- 如果模型不确定该请求是否安全,Copilot 会请求你批准,就像进行手动批准时一样。
如果安全评审不可用或无法评估请求,则请求遵循会话的正常权限处理。
注意
在 Autopilot 模式和非交互式运行中,仍需要你的批准的请求将被拒绝。 当安全审查需要批准时,相关说明将传回 Copilot,以便它可以尝试不同的方法。 请参阅“允许GitHub Copilot自主工作”。
Copilot 用于选择安全审查所用的模型,该模型可能与你为对话选择的模型不同。 如果所选审阅模型不可用,则评审可以改用会话的活动模型。 如果使用自己的模型提供程序,评审将使用会话的活动模型。
重要
Assisted permissions 减少提示的频率,但不会消除你对 Copilot 所执行操作的责任。 模型可能会犯错误并批准危险或意外的操作。 此功能不能替代沙箱隔离或访问限制。 与任何自动审批选项一样,应查看 Copilot 执行的操作,并考虑在沙盒或其他隔离环境中运行它。 有关详细信息,请参阅“GitHub Copilot 命令行界面 (CLI)”。
在GitHub Copilot app中使用assisted permissions
若要启用 assisted permissions 本地会话,请执行:
- 在提示框中,打开显示当前模式的模式菜单,例如 交互式、计划或 Autopilot。
- 单击“工具权限”,然后选择“辅助”。
你的选择适用于当前会话,并且也保存为新本地会话的默认值。 它不会更改其他现有会话。 若要在不更改当前会话的情况下更改默认值,请打开 “设置”,选择 “会话”,然后在 “工具权限” 下选择 “辅助”。
若要仅为当前活动会话启用 assisted permissions,而不更改默认值,请在提示框中输入 /permissions assisted。 单击 /permissions manual 将该会话恢复为手动审批,或单击 /permissions show 检查其权限模式。
工具权限控制在云会话中不可用。 对于远程主机上的会话,可用的权限模式取决于该主机支持的内容。 即使选择 “辅助” 作为默认值,管理员限制仍适用。
在assisted permissions中使用GitHub Copilot CLI
有三种方法可以启用 assisted permissions,具体取决于是要针对你处于的会话,是针对每个新会话,还是针对单个自动运行。
在交互式会话期间将其打开
输入以下斜杠命令:
/permissions assisted
/permissions assisted
若要返回手动审批,请输入 /permissions manual。 若要检查当前处于的权限模式,请输入 /permissions show。 还可以输入不带参数的 /permissions,然后从列表中选择一种模式。
将其设为新会话的默认值
若要将 assisted permissions 设为新交互式会话的首选模式,请在用户配置文件中将 defaultPermissionMode 设置为 "assisted"(~/.copilot/settings.json)。 可以直接编辑文件,也可以在会话期间使用 /settings 斜杠命令。 有关详细信息,请参阅“GitHub Copilot CLI 配置目录”。
此设置仅适用于新的交互式会话。 如果管理员设置 permissions.defaultMode,则托管默认值优先于偏好。 如果策略允许,你仍然可以为会话选择其他模式,例如使用 /permissions manual。
恢复的会话保留其保存的权限模式,并受当前策略限制。 如果策略允许,则 --allow-all 或 --yolo 选项优先于任一默认值。 如果所选默认值不可用或被策略阻止,CLI 将以手动批准方式启动。
若要将手动批准设为首选默认选项,请将 defaultPermissionMode 设置为 "manual"。 如果你和管理员都未配置默认设置,新会话可以以手动或辅助模式启动。 使用 /permissions show 来检查。
将其用于非交互式运行
当以非交互方式运行 Copilot CLI 时——使用 -p 或 --prompt 选项,或者在未附加终端的环境中(例如 CI/CD 工作流)——请使用 --assisted-approval 命令行选项:
copilot -p "Fix the failing tests" --assisted-approval
copilot -p "Fix the failing tests" --assisted-approval
还可以将 COPILOT_ASSISTED_APPROVAL 环境变量设置为 true,这在你无法轻松更改所运行命令的自动化环境中特别有用。
此选项仅适用于非交互式运行。 如果在启动交互式会话时使用它,CLI 将因错误而退出。 若要在交互式会话中使用assisted permissions,请改用/permissions assisted或defaultPermissionMode设置。
何时使用命令行选项
在非交互式运行中,没有人可以回答审批提示,因此你必须在两个都不理想的选项之间进行选择。 如果没有任何权限选项,Copilot 会被拒绝进行任何需要批准的操作,并且往往无法完成任务。 使用 --allow-all-tools时,无需模型安全评审即可授予全面工具权限。
--assisted-approval 是折中方案。 要求安全评审员确认安全的请求将自动获得批准。 如果该审查需要你的批准,请求就会被拒绝,其解释将传回给 Copilot,以便它可以尝试不同的方法。 仍需要审批的其他请求也被拒绝。
如果想要在 CI/CD 工作流、计划作业或批处理脚本中进行无人值守运行,并在不赋予 Copilot 无条件运行任何命令的权限的情况下完成实际工作,可以考虑使用它。
有关以编程方式运行 Copilot CLI 程序的详细信息,请参阅 以编程方式运行GitHub Copilot CLI。
警告
成功启用后,--assisted-approval 优先于 --allow-all-tools,但不会更改 --allow-all-paths 或 --allow-all-urls。 如果将它与 --allow-all(或 assisted permissions)结合使用,即使已为工具请求启用 --yolo,路径和 URL 访问仍然可以不受限制。
如果 assisted permissions 无法启用(例如,因为企业设置阻止了它),CLI 会将警告写入标准错误。 它不会取消你提供的单独 --allow-all-tools 选项,因此工具请求仍可能获得批准,而无需进行安全审查。 在自动运行输出中检查是否有此警告。
assisted permissions 在 Copilot CLI 中的行为方式
-
在会话中打开它仅影响该会话。 输入
/permissions assisted后,assisted permissions 将在该会话的剩余时间内保持开启,除非将其关闭。 它不会影响当前已打开的任何其他会话。 若要将其应用于将来的会话,请使用上文所述的defaultPermissionMode设置。 -
您可以随时切换到 assisted permissions。 如果已启动具有最宽松设置(
--allow-all或其别名--yolo)的会话,则输入/permissions assisted将你从无条件批准切换到 assisted permissions。 -
您可以在Copilot运行时打开assisted permissions。 无需等待任务完成。 后续符合条件的权限请求使用 assisted permissions。 根据以前的设置,这可能会增加或减少在任务期间看到的审批请求数。