60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# SpawnSubTask
|
||
|
||
タスクを並列サブタスクに分解して実行する。各サブタスクは独立した worker(ジョブ)で動き、完了後に親タスクが結果を集約する。
|
||
|
||
## 基本
|
||
|
||
```js
|
||
SpawnSubTask({
|
||
title: "ローカル LLM 比較調査",
|
||
instruction: "Ollama, vLLM, llama.cpp の最新性能ベンチマークを比較する。各ツールについて: 1) 直近6ヶ月の主要ベンチマーク, 2) ハードウェア要件, 3) 対応モデル一覧 を output/report.md にまとめる。",
|
||
piece: "research" // 任意。指定しないと自動分類
|
||
})
|
||
```
|
||
|
||
呼び出すと `subtasks/{index}/` にサブタスクのワークスペースが作られ、結果はそこに集約される。
|
||
|
||
## いつ使うか
|
||
|
||
### 並列分解が効果的なケース
|
||
|
||
- 2 つ以上の **独立したテーマ**(互いに参照しない)
|
||
- 各テーマが軽くなく、調査・処理に時間がかかる
|
||
- 分解後の各タスクが単独でも意味を持つ成果物になる
|
||
|
||
例:
|
||
- 「3 つの製品比較レポート」→ 製品ごとに 3 サブタスク
|
||
- 「複数 PDF の OCR 処理」→ ファイルごとに分解
|
||
- 「複数 SNS の情報収集」→ プラットフォーム別に分解
|
||
|
||
### 分解しないほうがよいケース
|
||
|
||
- 単一テーマで論理的に連続する処理(A→B→C のように依存)
|
||
- サブタスクが極端に小さい(オーバーヘッドの方が大きい)
|
||
- 全体像を見ながら判断する必要がある作業(対話的タスク等)
|
||
|
||
## instruction の書き方
|
||
|
||
- **完結した依頼文**で書く(親タスクの文脈を持たないので、サブタスクは instruction だけで判断する)
|
||
- 期待する成果物(出力ファイル名・場所)を明示
|
||
- 必要な前提情報があれば文中に展開
|
||
|
||
❌ 「これと同じ調査を別キーワードでやって」
|
||
✅ 「キーワード『A』『B』『C』について、各々のメリット・デメリットを比較する独立した調査を行い、output/A-vs-B.md にまとめる」
|
||
|
||
## piece の指定
|
||
|
||
- 省略時: 親と同じ classifier ロジックで自動選択
|
||
- 明示する場合: `research`, `general`, `office-process` 等の piece 名を指定
|
||
|
||
## 結果の参照
|
||
|
||
サブタスク完了後、親タスクは:
|
||
- `subtasks/{index}/output/` 以下にサブタスクの成果物がある
|
||
- Read で参照して集約レポートを作成する
|
||
|
||
## 制限
|
||
|
||
- ネスト深さは `subtasks.maxDepth`(デフォルト 2)まで
|
||
- サブタスクが waiting_human 等で停止すると親もブロックされる
|