跳转到主要内容

Fleet Mode

Fleet Mode 是一个实验性的编排功能,用于从一个父会话并行运行多个子代理。当工作可以拆分为独立的单元时,父会话会分配职责范围,并汇总各个子代理的结果。 在 Laravel 版中可以从 typed RPC layer 调用 session.fleet.start

适合的用途

  • 可以按文件、包、语言 SDK 拆分的重构
  • 分别调查多个模块的研究任务
  • 以差异、警报、文档页面为单位的评审
  • 迁移工作等每个职责范围可以独立验证的任务
反之,对于「前一步的具体结果对下一步来说是必需的处理」「多个 worker 编辑同一个文件的处理」「小的一次性任务」不适合。

启动 Fleet Mode

use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\Rpc\FleetStartRequest;

Copilot::start(function (CopilotSession $session): void {
    $result = $session->rpc()->fleet()->start(
        new FleetStartRequest(
            prompt: '独立检查 docs/jp 的每个页面,只报告需要更新的地方',
        ),
    );

    if ($result->started) {
        info('Fleet mode started');
    }
});
也可以用数组指定。
$result = $session->rpc()->fleet()->start([
    'prompt' => '独立评审每个包,最后汇总风险',
]);
prompt 是可选的。省略时仅通过运行时侧的 Fleet Mode 指令来启动。

从 Plan Mode 启动

如果你在自行处理 Plan Mode UI,可以在 onExitPlanModeRequest 中选择 autopilot_fleet,从已批准的计划进入 Fleet Mode。
use Revolution\Copilot\Types\ExitPlanModeRequest;
use Revolution\Copilot\Types\ExitPlanModeResult;
use Revolution\Copilot\Types\SessionConfig;

$config = new SessionConfig(
    onExitPlanModeRequest: function (ExitPlanModeRequest $request): ExitPlanModeResult {
        return new ExitPlanModeResult(
            approved: true,
            selectedAction: 'autopilot_fleet',
        );
    },
);
autopilot 用于单个自主 worker,interactive 用于用户持续参与的运行方式,autopilot_fleet 用于以并行方式推进独立工作单元的运行方式。

子代理的协作

Fleet Mode 不是通过隐式的共享内存,而是通过显式的工作单元进行协作。父会话拆分任务,每个子代理只处理自己的职责范围,返回完成或阻塞状态。 在设计工作单元时,请明确以下几点。
  • 1 个 worker 负责的范围
  • 该 worker 可以编辑的文件或目录
  • 完成时应返回的产出或验证结果
  • 与其他任务的依赖关系

注意事项

  • Fleet RPC 是生成 RPC 层的实验性功能。使用时请匹配 Copilot CLI 和 SDK 的版本
  • 避免容易冲突的文件编辑,明确分配职责范围
  • 在父会话侧汇总结果的前提下,如果将各 worker 的报告格式包含在 prompt 中会更易处理

参考

最新信息请参考 GitHub 仓库
最后修改于 2026年7月13日