注意
此功能处于 公开预览 阶段,并且可能会发生变化。
本文介绍动态工作流及其用途。 有关使用方法的详细信息,请参阅 使用动态工作流。
关于动态工作流
动态工作流是一个定义任务执行方式的程序。它可以将自动化步骤与一个或多个代理的工作相结合。 步骤可以一个接一个地运行,并行运行,也可以作为两者的混合运行。
动态工作流尤其适用于复杂的多步骤任务,以及那些需要反复执行、且每次都按一组确定性操作来完成的任务。 例如,可以使用动态工作流来调查服务中断事件,方法是收集日志和遥测数据、分配独立代理来分析不同的系统,并将其结构化结果合并到时间线和根本原因报告中。
动态工作流可以:
- 运行命令、使用工具或调用其他服务。
- 将目标划分为任务,并并行运行独立任务。
- 将结果从一个阶段传递到下一个阶段。
- 让子代理验证彼此的发现。
- 将结果合并为单个答案。
- 如果你正在使用的应用程序支持,系统会要求你提供输入。
- 在检查点处暂停,以便在准备就绪时查看结果并恢复运行。
一切都在代码中定义:步骤、何时涉及代理以及如何使用其结果。 智能体处理需要分析或判断的部分。
工作流可以要求代理以指定格式返回结果,以便后续步骤可以使用它们。 Copilot 如果需要,可以要求客服人员更正格式。
动态工作流在扩展中 Copilot 定义。 它们可以是:
- 作者:Copilot 描述你希望工作流遵循的任务和流程。
- 由你撰写。 您可以使用Copilot的内置编写指南自行编写扩展。
- 与你共享。 扩展加载后,即可使用其动态工作流。
若要使用动态工作流,可以用自然语言要求 Copilot 按名称运行它。 例如:
Run the java-security-review dynamic workflow on the java files in the current directory.
Run the java-security-review dynamic workflow on the java files in the current directory.
从提示启动动态工作流时, Copilot 在后台运行该工作流,并在完成后报告回来。 在其运行期间,您仍可在当前会话中继续工作。
重要
聊天代理仅在您明确要求时创建或运行动态工作流,或者当技能或斜杠命令指示它执行此操作时。
在 Copilot CLI 中,还可以使用 copilot workflow run WORKFLOW-NAME 直接从终端运行现有的动态工作流。 无需打开交互式聊天或要求代理启动它。 工作流仍可使用代理执行各个步骤。
该命令等待运行完成或停止,然后再将控制权返回给 shell。 使用这种方法可使用特定输入重复运行工作流、保存其结果,或通过脚本或 CI/CD 管道运行该工作流。 有关详细信息,请参阅“使用动态工作流”。
还可以通过扩展的斜杠命令、自定义工具或程序化钩子,或者从使用 Copilot SDK 的其他代码启动工作流。 在 Copilot app 中,扩展可以提供画布(自定义界面),其中包含用于启动工作流的控件。 这些替代方法因您使用的扩展和客户端而异。
有关画布的更多信息,请参阅 在 GitHub Copilot 应用中使用画布扩展。
要查看有哪些动态工作流可用,只需询问 Copilot:
What dynamic workflows are available?
What dynamic workflows are available?
动态工作流的可用性
动态工作流可在Copilot app、Copilot CLI和Copilot SDK中使用。 除现有年度计划中仍沿用旧版高级请求计费的Copilot Pro+和Copilot订阅者外,它们可供所有Copilot Pro计划的用户使用。 有关此计费模型的详细信息,请参阅 面向 GitHub Copilot 年度计划订阅者的按请求计费(旧版)。
动态工作流与 Autopilot 和 Fleet 有何不同
如果已使用 autopilot 模式和 /fleet 命令,动态工作流可能看起来是类似的东西。 主要区别在于如何规划和控制工作,而不仅仅是使用多少个代理。
- Autopilot 是一种关于自主性的模式。 它允许 Copilot 在无需在每个步骤后暂停以获取你的输入的情况下继续完成任务。
/fleet鼓励 Copilot 将工作委托给子代理并并行协调其工作。 Copilot 决定每次如何分解任务。- 动态工作流 执行代码中定义的流程。 工作流的作者定义步骤、条件和交接。 此过程可以使用一个代理或多个代理,工作可按顺序进行、并行进行,或两者结合进行。
重用工作流意味着重用其步骤和规则。 这些步骤的执行路径会随着输入或发现结果而变化,代理在不同次运行中也可能给出不同的答案。
| 方面 | Autopilot | Fleet | 动态工作流 |
|---|---|---|---|
| 主要用途 | 让 Copilot 继续自主运行 | 鼓励 Copilot 将工作委托给子代理 | 执行代码中定义的过程 |
| 谁定义该过程? | |||
| Copilot 决定后续步骤 | |||
| Copilot 决定如何划分和协调工作 | 工作流作者定义步骤、条件和移交 | ||
| 工作原理 | 取决于任务和 Copilot 的决策 | 独立工作项可并行委派 | 顺序执行、并行执行,或两者结合,使用单个代理或多个代理 |
有关管理工作流运行的详细信息,请参阅 限制动态工作流 和 查看、停止、暂停和恢复运行。
何时使用动态工作流
如果要定义可以重复使用的流程,或者单个任务需要明确的阶段、检查或限制,请使用动态工作流。 合适的候选项包括:
- 运行发布检查,要求一个代理评估失败情况,并暂停,等待你审核结果后再继续。
- 同时查看拉取请求中的多个已更改的文件。
- 使用代码查找合并拉取请求的未解析审阅注释,然后询问两个模型注释是否仍然重要。 仅当两者都同意时,工作流的代码才会报告发现项。
- 一次性跨多个目录在大型代码库中搜索某种模式,例如缺少的测试或你要移除的 API 的用法。
- 研究更改,根据调查结果规划其实施,然后进行更改。
- 启动一次耗时较长且可能成本高昂的运行,后续你可能需要暂停并恢复它。
如果只是想快速获得答案或进行简单修改,那么在标准聊天模式下使用常规提示词通常就足够了。
动态工作流权限
动态工作流的子代理使用 CLI 的权限系统,并继承启动它们的会话的权限授予。 会话中已允许的任何内容都适用于动态工作流的子代理。
如果某个工作流的子代理尝试执行尚未获准的操作,则请求会在交互式 CLI 会话中显示为正常权限提示。 你可以按照主代理的相同方式批准它。 需要权限的子代理只需等待,直到你作出响应。
如果一个子代理请求某项权限,并且你在会话期间授予该权限,该授权适用于所有需要相同权限的子代理。
使用 copilot workflow run时,该命令不显示权限审批提示。 在启动运行之前,授予工作流代理所需的权限。 请参阅“使用动态工作流”。
扩展还可以直接在这些权限提示之外运行自己的代码。
创建动态工作流
您可以在交互式会话中让 Copilot 创建动态工作流。 告知 Copilot 希望工作流完成的操作。
默认情况下,Copilot 会为当前会话创建一个扩展。 你可以改为要求它创建个人或项目扩展,或使用 Copilot的内置创作指南自行编写扩展。
有关详细信息,请参阅“使用动态工作流”。
修改动态工作流
通常,首次使用动态工作流时,会通过运行具有有限作用域的动态工作流来测试它。 例如,对于设计为处理多个文件的动态工作流,你最初可能会让 Copilot 只对两个或三个文件运行该工作流。 然后,您可以评估结果。 如有必要,您可以先让 Copilot 修改工作流,然后再运行一次。
使用自然语言请求来 Copilot 修改工作流的已保存定义,而不是仅对单次运行覆盖限制。 例如:
Update the check-python-style dynamic workflow to use no more than 10 subagents in total.
Update the check-python-style dynamic workflow to use no more than 10 subagents in total.
修订将保存到动态工作流的扩展中,无论该扩展是为会话存储、存放在您的个人扩展目录中,还是存放在项目存储库中。 加载更新后的扩展后,后续运行将使用修订版。 这不会替换暂停运行中保存的结果。
如果修改在项目存储库中共享的动态工作流,则处理该项目的人员必须拉取存储库的更新版本,然后重新加载其扩展,然后才能使用修订的版本。
复用和共享动态工作流
默认情况下,Copilot 为您创建的工作流仅限于当前会话。 可以将扩展复制到个人扩展目录中,以便跨会话使用扩展,也可以复制到存储库的扩展目录中,以便与处理该项目的人员共享该扩展。 这会共享定义,而不是原始会话的运行历史记录或保存的进度。 有关详细信息,请参阅“使用动态工作流”。
若要更广泛地共享动态工作流,可以将动态工作流打包为插件,并通过首选的插件管理系统分发它。 有关详细信息,请参阅“为 GitHub Copilot CLI 创建插件”。
限制动态工作流程
您可以为动态工作流设置以下限制:
-
可同时处于活动状态的工作流所属代理的最大数目。
-
在一次运行期间,由工作流拥有的代理累计可启动的最大数量。
-
最长的活动运行时间,包括暂停前使用的时间。 运行暂停期间的时间不计入。
-
工作流的代理及其子代理可以使用的 AI credits 的大致最大数目。
注意
Copilot 跟踪工作流代理使用的积分,并在总数达到限制时停止新工作。 使用情况在发生后报告,因此,已在进行中的工作可能会使总量超过限制。 这是近似最大值,而不是硬上限。
可以在三个位置定义限制:
-
在提示中: 在用于运行动态工作流的提示中,用自然语言说明限制条件。 例如:
Use the architecture-research dynamic workflow on this repo, with a timeout of 1 hour. -
在工作流代码中: 创建动态工作流时,你可以(可选地)定义在动态工作流运行时应使用的限制条件。
-
在个人设置中: 可以在个人设置 Copilot中定义默认限制。 如果提示或工作流代码中未指定相同类型的限制,这些限制将应用于运行的任何动态工作流。
在 Copilot CLI 中,你可以使用以下键配合
/settings命令来配置你个人的动态工作流默认限制。workflows.defaultLimits.maxConcurrentSubagentsworkflows.defaultLimits.maxTotalSubagentsworkflows.defaultLimits.timeoutSeconds(必须以秒为单位指定)workflows.defaultLimits.maxAiCredits
例如:
/settings workflows.defaultLimits.timeoutSeconds 3600
限制按上面所示的顺序确定优先级。 如果在提示中指定限制,则会覆盖动态工作流或个人设置中定义的任何相应限制。
并发子代理限制使额外的子代理一直等待,直到其他子代理完成。 到达该状态不会中断工作流程。
其他限制可以停止运行,但其状态和保存的结果会保留,以便稍后可以恢复它。 恢复因达到限制而停止的运行时,请增加该限制以允许更多工作。 新限制是本次运行的总限制,包括停止前的使用量,而不是新的额度。
防止意外 AI credit 使用
启动多个子代理的工作流可能需要很长时间才能完成,并消耗大量 AI credits。
为防止意外的高消耗 AI credits,应在将动态工作流用于大型作业之前,先在小范围内测试动态工作流。 执行小型运行后,请检查实际 AI credit 使用情况,然后为 AI credits 设置适当的限制,以用于大规模运行。
查看、停止、暂停和恢复运行实例
你可以在Copilot CLI会话中使用/workflows斜杠命令,或在**** 中点击Copilot app按钮,以查看当前或过去的工作流运行记录。
详细信息显示 AI credits 的使用情况,以及工作流所报告的任何阶段、进度消息和子代理。 可以从此处取消或暂停当前正在运行的工作流。 扩展还可以提供自己的进度视图,例如在 Copilot app 中的画布里。
如果某次运行已被暂停,或者因达到某个限制而停止,你可以在运行列表中选择该运行并继续执行。 工作流可以重复使用已完成的步骤和子代理中保存的结果。 未保存的内容可能需要重新执行。
有关详细信息,请参阅“使用动态工作流”。