> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Fleet Mode

> 说明如何使用 Fleet Mode，从一个父会话并行运行多个子代理。

## Fleet Mode

Fleet Mode 是一个实验性的编排功能，用于从一个父会话并行运行多个子代理。当工作可以拆分为独立的单元时，父会话会分配职责范围，并汇总各个子代理的结果。

在 Laravel 版中可以从 typed RPC layer 调用 `session.fleet.start`。

## 适合的用途

* 可以按文件、包、语言 SDK 拆分的重构
* 分别调查多个模块的研究任务
* 以差异、警报、文档页面为单位的评审
* 迁移工作等每个职责范围可以独立验证的任务

反之，对于「前一步的具体结果对下一步来说是必需的处理」「多个 worker 编辑同一个文件的处理」「小的一次性任务」不适合。

## 启动 Fleet Mode

```php theme={null}
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');
    }
});
```

也可以用数组指定。

```php theme={null}
$result = $session->rpc()->fleet()->start([
    'prompt' => '独立评审每个包，最后汇总风险',
]);
```

`prompt` 是可选的。省略时仅通过运行时侧的 Fleet Mode 指令来启动。

## 从 Plan Mode 启动

如果你在自行处理 Plan Mode UI，可以在 `onExitPlanModeRequest` 中选择 `autopilot_fleet`，从已批准的计划进入 Fleet Mode。

```php theme={null}
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 中会更易处理

## 参考

* [自定义代理](/zh/packages/laravel-copilot-sdk/custom-agents)
* [RPC](/zh/packages/laravel-copilot-sdk/rpc)
* [流式事件](/zh/packages/laravel-copilot-sdk/streaming-events)

<Info>
  最新信息请参考 [GitHub 仓库](https://github.com/invokable/laravel-copilot-sdk)。
</Info>


## Related topics

- [自定义代理](/zh/packages/laravel-copilot-sdk/custom-agents.md)
- [Eloquent 集合](/zh/eloquent-collections.md)
- [Laravel Fetch Metadata](/zh/packages/laravel-fetch-metadata.md)
- [流式事件](/zh/packages/laravel-copilot-sdk/streaming-events.md)
- [Laravel Telescope](/zh/telescope.md)
