エージェントの TODO を 1 つの記事で理解します: AI は複雑なタスクを段階的に完了する方法?
1. 問題はどこから来たのでしょうか?
JWT ユーザー認証システムの開発をコーディング エージェントに支援させるとします。
プロジェクトの分析、データベースの設計、インターフェイスの作成、トークン検証の実装、そして最後にテストの実行が必要です。タスク全体には十数の手順が含まれる場合があります。
最初は、エージェントはスムーズに動作しました。しかし、途中で突然次のことに気づきます。手順の 1 つがスキップされますが、タスクが完了したことが通知されます。
なぜこのようなことが起こっているのでしょうか?
エージェントは継続的にコードを処理する必要があるため、長いタスクを実行すると、ツールは結果、エラー ログ、その他の情報を返します。コンテキストが大きくなるにつれて、以前のタスク要件が無視され、ステップが欠落したり繰り返されたりする可能性があります。
これは人間の仕事と非常によく似ています。パイロットは離陸前にチェックリストを必要とし、プログラマーもプロジェクト開発時に TODO リストを使用します。
エージェントには、TODO メカニズムの目的であるタスク リストも必要です。
2. TODOメカニズムとは何ですか?
TODO メカニズムは本質的に一連のヘルプ エージェントです。 タスクの解体、進捗状況の記録、実行ステータスの管理 機構。
たとえば、JWT 認証システムを開発する場合、タスクは次のように分類できます。
- プロジェクトの構造と依存関係を分析する
- ユーザーデータ構造の設計
- ログインとトークン発行を実装する
- トークン検証を実装する
- テストを作成して機能を検証する
実際のシステムでは、通常、各タスクには次の 3 つの状態があります。
| 州 | 意味 |
|---|---|
pending |
実行を待っています |
in_progress |
実行中 |
completed |
すでに完了しています |
エージェントはステップを完了するたびに、対応するタスクのステータスを更新し、リストに基づいて次に何を行うかを決定します。
これを行うと、主に次の 3 つの利点があります。
- 漏れを防ぐには: どのタスクが完了し、どのタスクがまだ実行されていないのかをエージェントに通知します。
- 進捗状況の視覚化: ユーザーは、タスクがどこで実行されているかを明確に確認できます。
- タスクオーケストレーションのサポート: 複雑なタスクの実行シーケンス、依存関係、コラボレーション プロセスを簡単に管理します。
TODO はエージェントが間違いを犯さないことを保証するものではなく、タスクの実行プロセスをより秩序正しく追跡しやすくするだけであることに注意してください。
3. TODO メカニズムはどのように実装されますか?
Claude Code を例として、TodoWrite と Task という 2 つの代表的なタスク管理ソリューションについて学ぶことができます。
1. TodoWrite: シンプルな ToDo リスト
TodoWrite は、Claude Code の初期に使用されていたタスク管理ツールです。
これは付箋として理解できます。エージェントは完了する必要がある項目をリストし、項目を完了するたびに対応するステータスを更新します。
これにはいくつかの特徴があります。
- 単一セッションの場合: 主に現在のセッション内のタスク追跡に使用されます。
- フラット構造: タスクはリスト形式で編成されており、明示的なタスクの依存関係はサポートされていません。
- 完全なアップデート: ステータスを更新するときは、完全なタスク リストを送信する必要があります。
たとえば、バグを修正するには:
- 位置決めの問題。
- コードを変更します。
- テストを実行します。
- 修正結果を確認します。
この種のタスクには複雑な依存関係がなく、複数のエージェントの協力を必要としません。簡単なチェックリストで十分です。
ただし、タスクが複数のセッションにまたがる必要がある場合、または複数のエージェントが並行して作業する必要がある場合、単純なタスク リストは便利ではありません。
2. タスク: より完全なタスク管理システム
これらの問題を解決するために、Claude Code は後続のバージョンでタスク システムを導入しました。
TodoWrite と比較すると、Task は単に To Do アイテムを記録するだけではなく、一連の構造化されたタスク管理機能を提供します。
主に次の 4 つのツールが含まれています。
| 道具 | 効果 |
|---|---|
TaskCreate |
タスクの作成 |
TaskGet |
タスクの詳細を取得する |
TaskUpdate |
タスクのステータス、依存関係などを更新します。 |
TaskList |
タスクリストを表示する |
Task の主な利点は 3 つの側面に反映されています。
① 永続ストレージ
タスク データは、現在の会話コンテキストだけに依存するのではなく、ローカル ディスクに保存できます。
したがって、コンテキストが圧縮されていても、タスクの記録は保持されます。共有タスク リスト ID を構成することで、セッション間で同じリストを引き続き使用することもできます。
②タスクの依存関係管理
認証システムを開発するには、次のタスクを実行する必要があるとします。
- タスク A: データベース構造を設計します。
- タスク B: ログイン インターフェイスを実装し、A に依存します。
- タスク C: トークン検証を実装し、B に依存します。
- タスク D: B と C に応じて統合テストを実行します。
タスクはこれらの依存関係を記録できます。
タスク A がまだ完了していない場合、タスク B はブロック状態になります。先行タスクが完了した後でのみ、後続タスクのブロックを解除できます。
これは、エージェントがタスクが実行に適格かどうかを判断するのに役立ちます。
③マルチエージェント連携
複数のエージェントは、タスク リストを共有することで作業を調整できます。
例えば:
- エージェント A: バックエンド インターフェイスを担当します。
- エージェント B: フロントエンド ページを担当します。
- エージェント C: 統合テストを担当します。
さまざまなエージェントがタスクのステータスを表示し、タスクを要求し、進行状況を更新できるため、作業の重複が削減されます。
ただし、タスク リストはステータスの記録と調整を担当し、コードの競合やリソースの競合などの同時実行の問題を直接解決するものではありません。
4. TodoWrite とタスクの違いは何ですか?
表を使用して要約します。
| コントラストの寸法 | TodoWrite | タスク |
|---|---|---|
| コアの位置決め | 簡単なチェックリスト | 構造化されたタスク管理 |
| タスクの組織化 | フラットリスト | 独立したタスクと依存関係 |
| ステータス更新 | 完全なアップデート | 単一タスクの更新 |
| 持久力 | 主に現在のセッション用 | ローカル永続性 |
| マルチセッションのコラボレーション | 共有タスクリストはサポートされていません | サポート |
| 該当するシナリオ | 単純で短期間のタスク | 複雑で長期にわたるタスク |
これは次のように理解できます。
TodoWrite は付箋のようなもので、Task は軽量のプロジェクト管理ツールに似ています。
どちらもエージェントがタスクを追跡するのに役立ちますが、タスクはこれに基づいて永続性、依存関係管理、およびマルチセッション コラボレーション機能を追加します。
5. TodoWrite をいつ使用するか、タスクをいつ使用するか?
2 つのメカニズムの違いを理解した後、実際的な問題は、エージェントを開発するときにどちらを選択すべきかということです。
考慮すべき主な要素は次の 3 つです。タスクの複雑さ、永続性が必要かどうか、および複数のエージェントのコラボレーションが必要かどうか。
1. TodoWrite: 単純で短期間のタスクに適しています
タスクが 1 つのセッションで完了でき、複雑な依存関係がなく、複数のエージェントの協力が必要ない場合は、通常は単純なチェックリストで十分です。
例えば:
- バグを修正するには、特定、修正、テストの順序で実行します。
- ファイルをバッチで処理して、各ファイルが確実に処理されるようにします。
- 複数のステップを含む自動スクリプトを実行します。
このタイプのタスクの主な要件は、複雑なタスクのスケジュール設定ではなく、ステップの欠落を防ぐことです。
したがって、TodoWrite は、単一エージェントの短いプロセスのタスク追跡に適しています。
2. タスク: 複雑で長期的なタスクに適しています。
タスクに次のような特徴がある場合は、タスクの使用がより適しています。
- セッション間で実行: 今日は一部を終えて、明日続きます。
- タスクの依存関係があります。 B を実行する前に A を完了する必要があります。
- 複数のエージェントのコラボレーション: 異なるエージェントはタスクのステータスを共有する必要があります。
- タスクの数が増える: 独立した更新および管理タスクが必要です。
たとえば、完全なユーザー認証システムを開発するには、データベース設計、バックエンド インターフェイス、フロントエンド ページ、統合テストを完了する必要があります。
これらのタスク間には依存関係があり、複数のエージェントによって並行して実行される場合があります。
この時点で、Task の永続性、依存関係の管理、および共有機能が有効になります。
3. 組み合わせて使用できますか?
建築設計の観点から見ると、2段階のタスク管理アイデア:
- プロジェクトレベル: タスクを使用して、主要なタスクとその依存関係を管理します。
- エグゼクティブレベル: 特定のタスク内では、簡単なチェックリストを使用して手順を追跡します。
たとえば、タスクには「ログイン インターフェイスの実装」というタスクがあります。
このタスクを実行する場合、エージェントはさらに次のように分類できます。
- インターフェイスを作成します。
- パスワード認証を実装します。
- JWTを生成します。
- 単体テストを作成します。
これにより、プロジェクト全体の進行状況を管理できるだけでなく、特定の実行プロセスにおける手順の欠落を防ぐこともできます。
これは一般的なエージェント アーキテクチャ設計のアイデアであり、現在のバージョンの Claude Code が TodoWrite ツールとタスク ツールの両方を確実に同時に呼び出せるという意味ではないことに注意してください。
概要: 単純なタスクにはチェックリストを使用し、複雑なタスクには構造化タスクを使用します。クロスセッション、依存関係管理、および複数エージェントのコラボレーションが必要かどうかが、最も重要な判断基準となります。
6. TODO とコンテキスト エンジニアリングの関係は何ですか?
コンテキスト エンジニアリングを学習したことがある場合は、TODO がコンテキスト エンジニアリングと密接に関連していることがわかるでしょう。
コンテキスト エンジニアリングの中心的な目標は次のとおりです。モデルが推論を行うたびに、本当に必要な情報を取得できるようにします。
TODO は、簡潔で構造化されたタスクのステータスを提供します。
エージェントが 30 のステップを実行したとします。
TODO がない場合、モデルは長い会話履歴からタスクの進行状況を見つける必要がある場合があります。
TODO を使用すると、エージェントはタスク リストを見るだけで次のことをすぐに理解できます。
- 現在の目標は何ですか?
- どのようなタスクが完了しましたか?
- 次に何をすべきでしょうか?
マニフェストが外部ストレージにも保存されている場合は、コンテキストの圧縮またはセッションの回復時に再ロードできます。
したがって、TODO は、エージェントの外部タスク ステータス管理メカニズムとして理解できます。これはコンテキスト エンジニアリングとエージェント メモリに関連していますが、完全なメモリ システムと同等ではありません。
7. まとめ
TODO メカニズムは単純に見えますが、エージェントが複雑なタスクを実行するための非常に実用的なインフラストラクチャです。
主に解決するのはモデルの推論能力ではなく、タスク実行時の問題です。ステータス管理とプロセス制御の問題。
この記事では、次の 2 つの典型的な実装について説明します。
- TodoWrite: 単純なタスクに適しており、エージェントがチェックリストを通じて実行ステップを追跡できるようにします。
- タスク: 複雑なタスクに適しており、永続性、依存関係管理、およびリストに基づくマルチエージェントのコラボレーションをサポートします。
実際のエンジニアリングでは、単純なタスクごとに複雑なオーケストレーション システムを導入するのではなく、タスクの複雑さに応じて適切な管理方法を選択する必要があります。
信頼できるエージェントは、タスクを完了する方法を知っているだけでなく、自分が何をしたか、現在何をしているのか、次に何をすべきかを知っている必要があります。
バージョンノート: TodoWrite と Task は、クロード コードのさまざまな段階に対応したタスク管理ソリューションです。現在、タスク ファミリのツールは TodoWrite よりも優先されますが、新しいモデルでは、専用のタスク ツールがデフォルトで有効になっているとは限りません。実際の使用は、対応するバージョンと構成に基づいて行う必要があります。