レッスン3: 複雑なタスクをワークフローに分解する
学習目標:
- 3つのタスク分解戦略をマスターする
- タスク間の依存関係を特定する
- 分解を実行可能なワークフローに変換する
前提: レッスン2: ワークフローの構成要素: ステップ、状態、分岐、ループ | 次: レッスン4 >>
「どこから始めればいいかわからない」から明確なステップへ
あなたの机にタスクが届きます。「モノリシックなRailsアプリをマイクロサービスアーキテクチャに分割する」というものです。これは複雑なタスクです。どこから始めればいいのか、何ステップ必要なのか、各ステップが何をするのかわかりません。
タスク分解とは、曖昧で大きすぎるタスクを小さく明確なステップに分割する方法です。1
優れた分解は3つの基準を満たします:
- 各サブタスクが十分に小さい — 単一のエージェント呼び出しや関数で完了できる
- サブタスク間の依存関係が明示的 — どれを順番に実行し、どれを並列実行できるかがわかる
- 各サブタスクに明確な入力と出力がある — あるステップの出力を次のステップに直接渡せる
分解が適切であれば、ワークフローの記述はレゴブロックを組み立てるような感覚になります。分解が不適切だと、実行中にステップの欠落、順序の誤り、データの流れの問題を発見することになります。2
戦略1: シーケンシャル分解
いつ使うか: タスクに明確な前後の順序があり、各ステップが前のステップの結果に依存する場合。
方法: 終わりから逆算します。「このステップにはどんな入力が必要か? その入力はどこから来るか?」と問います。
例: 技術ドキュメントの生成
タスク: APIのユーザー向けドキュメントを生成する。
逆算による分解:
ワークフローに変換:
依存関係チェーン:
ステップ2はステップ1と並列実行できますか? いいえ — ステップ2はステップ1の endpoints が必要です。
ステップ3はステップ2と並列実行できますか? いいえ — ステップ3はステップ2の examples が必要です。
シーケンシャル分解の特徴: 長い依存関係チェーン、並列化の機会は少ないが、ロジックは明確です。3
戦略2: パラレル分解
いつ使うか: タスクが相互に依存しない複数の独立したサブタスクに分割できる場合。
方法: 「すべてのXについてYを実行」というパターンを見つけます — 各Xは並列処理できます。
例: コードベースのセキュリティ監査
タスク: 100個のファイルをセキュリティ問題について監査する。
パラレル分解:
形状:
ファンアウト・リデュースパターン: これはパラレル分解の最も一般的な形状です。4
- ファンアウト: タスクを多数の並列エージェントに分散させる。
- リデュース: すべての結果を最終出力にマージする。
パラレル分解の威力: 100ファイル、各監査に2分。シーケンシャル実行は200分かかりますが、パラレル実行は2分で完了します(リソース制限がない場合)。
戦略3: ハイブリッド分解
いつ使うか: ほとんどの実際のタスク。一部は並列実行でき、一部は順序を守る必要がある場合。
方法: まず高レベルのフェーズ(順番に実行する必要があるもの)を見つけ、次に各フェーズ内の並列化の機会を見つけます。
例: 大規模リファクタリング
タスク: 50個のコンポーネントをVue 2からVue 3にアップグレードする。
ハイブリッド分解:
ワークフローに変換:
ハイブリッドの依存関係グラフ:
ハイブリッド分解の核心: 本当に必要な順序を保ちながら、並列化のあらゆる機会を絞り出します。3
LLMを使って分解を支援する
分解をLLMに任せることもできます。3つの方法がすべて機能します: ゼロショットプロンプト、思考連鎖プロンプト、そしてフューショット(例ベース)プロンプトです。1
ゼロショット
思考連鎖
フューショット
LLM分解の利点: 最初の計画を素早く作成し、見落としていたステップを見つけます。
LLM分解の欠点: 抽象的すぎる可能性があります(「各ファイルの循環的複雑度を計算する」ではなく「データを分析する」と言うなど)。したがって、人間が明確化する必要があります。1
依存関係を見つけるための実践的なヒント
ヒント1: 「このステップは最初のステップの前に実行できるか?」と問う
答えが「はい」なら、並列実行できます。「いいえ、最初のステップの結果が必要」なら、依存関係があります。
ヒント2: 依存関係グラフを描く
ステップ2とステップ3は並列実行できますか? はい — どちらもステップ1にのみ依存します。
ステップ3とステップ4は並列実行できますか? いいえ — ステップ4はステップ2に依存します。
矢印が依存関係を意味し、決して開始地点にループバックしないグラフには正式な名前があります: DAG(有向非巡回グラフ)。ステップ1は何にも依存しないため、グラフが最初に実行できるリーフです。矢印の方向に違反しないようにすべてのステップを順序付けすることは、トポロジカルソートと呼ばれます。
ヒント3: データフローをチェックする
各ステップの入力と出力をリストアップします:
ステップXの入力がステップYの出力から来る場合、XはYに依存します。
一般的な分解の間違い
間違い1: ステップが大きすぎる
「データを準備する」は何を含みますか? ファイルを読む? 設定をパースする? データベースに接続する? 曖昧すぎます。
間違い2: エラーハンドリングステップがない
ステップ2が失敗したらどうなりますか? サービスAはすでにデプロイされていますがBはされておらず、システムは不整合な状態です。
間違い3: 並列化の機会を無視する
これは各サービスを一度に1つずつ処理します。遅いです。
次: レッスン4: 状態管理とコンテキスト渡し — ワークフローのステップ間でデータを正しく渡し管理する方法を学びます。