エージェントループアーキテクチャ
概要
エージェントループはAI Dev Agentのコアとなる推論と実行サイクルです。
エージェントの以下の動作を定義します:
- タスクの解釈
- アクションの計画
- ツールの実行
- 結果の観察
- 理解の更新
- 完了に向けた進捗の継続
ループはタスクが完了するか、システムが停止条件に達するまで継続的に実行されます。
このアーキテクチャにより、エージェントは作業を反復的に改善し、新しい情報に適応できます。
コアループ
AI Dev Agentは構造化された推論ループを使用して動作します。
計画(PLAN)
↓
実行(ACT)
↓
観察(OBSERVE)
↓
反省(REFLECT)
↓
状態更新(UPDATE STATE)
↓
繰り返し(REPEAT)各ステップには明確に定義された責務があります。
ステップ1: 計画(Plan)
計画フェーズでは、エージェントはタスクゴールに向けて進むために必要な次のアクションを決定します。
計画への入力には以下が含まれます:
- タスク記述
- 現在のコンテキスト
- リポジトリの状態
- 過去のアクション
- ツール結果
- 取得されたメモリ
エージェントは以下を決定することがあります:
- コードの検査
- 追加コンテキストの取得
- ファイルの変更
- テストの実行
- ドキュメントの更新
- 変更のコミット
計画出力例:
次のアクション:
現在のキャッシュ実装を理解するためにsrc/cache/UserCache.tsを読む。このステージの出力はアクションプランです。
ステップ2: 実行(Act)
実行フェーズでは、エージェントは計画された操作を実行します。
アクションはツールシステムを使用して実行されます。
例:
- read_file
- write_file
- run_command
- git_diff
- search_code
- parse_ast
ツール呼び出し例:
tool: read_file
path: src/cache/UserCache.tsアクションはエージェントによって観察される結果を生成します。
ステップ3: 観察(Observe)
ツールを実行した後、エージェントは結果を観察します。
観察の例:
- ファイルの内容
- コマンドの出力
- テスト結果
- エラーメッセージ
- gitのdiff出力
観察例:
キャッシュ実装は現在インメモリMapを使用しています。
TTLメカニズムは存在しません。観察は次の推論ステップのためにコンテキストに追加されます。
ステップ4: 反省(Reflect)
反省により、エージェントは前のアクションの結果を評価できます。
エージェントは以下を考慮することがあります:
- アクションは期待される結果を生んだか?
- どんな新しい情報が学ばれたか?
- 計画の調整が必要か?
反省例:
現在のキャッシュ実装には有効期限ロジックがありません。
次のステップはTTLサポートを導入することです。反省はエージェントが戦略を適応させるのに役立ちます。
ステップ5: 状態更新(Update State)
エージェントは内部状態を更新します。
これには以下が含まれる場合があります:
- タスク進捗の更新
- メモリの記録
- 作業計画の更新
- 重要な発見の保存
状態更新例:
タスク進捗:
* 現在のキャッシュ実装を分析済み
* 次: TTLサポートを設計する状態更新はイテレーション間の連続性を確保します。
ループの継続
状態を更新した後、ループが繰り返されます。
計画 → 実行 → 観察 → 反省 → 更新ループは以下まで継続されます:
- タスクが完了した
- 停止条件に達した
- 人間の介入が必要になった
エージェント状態
エージェントはイテレーション間で永続的な状態を維持します。
構造例:
type AgentState = {
task: string
plan: string[]
completedSteps: string[]
currentStep: string | null
observations: Observation[]
}状態により、エージェントは進捗を追跡できます。
イテレーション制限
無限ループを防ぐために、システムはイテレーション制限を強制することがあります。
設定例:
maxIterations: 50制限に達した場合、エージェントは以下を行うことがあります:
- 人間の入力を要求する
- 進捗をまとめる
- 次のステップを提案する
アクションタイプ
エージェントのアクションは一般的にいくつかのカテゴリーに分類されます。
探索
エージェントはコードベースに関する情報を収集します。
例:
- ファイルの読み取り
- シンボルの検索
- 依存関係の検査
変更
エージェントはリポジトリを変更します。
例:
- ファイルの編集
- 新しいモジュールの作成
- 設定の更新
検証
エージェントは正確性を確認します。
例:
- テストの実行
- プロジェクトのビルド
- コードのリント
文書化
エージェントはプロジェクトのドキュメントを更新します。
例:
- READMEの更新
- 設計メモの追加
- コメントの記述
マルチステップ計画
一部のタスクには複数のステップが必要です。
計画例:
1. 現在のキャッシュ実装を分析する
2. TTLメカニズムを設計する
3. キャッシュモジュールを変更する
4. テストを更新する
5. テストスイートを実行する
6. 変更をコミットするエージェントは新しい情報が発見されると、この計画を動的に更新することがあります。
エラー回復
自律開発中にエラーは予期されるものです。
例:
- テストの失敗
- コンパイルエラー
- ランタイム例外
エラーが発生した場合、エージェントは以下を行うべきです:
- エラーを分析する
- 根本原因を特定する
- 修正を試みる
- 検証を再実行する
回復ループ例:
テスト実行
↓
テスト失敗
↓
エラーの検査
↓
コードの変更
↓
テスト実行停止条件
ループは以下の条件のいずれかが満たされたときに終了します。
タスク完了
すべての必要な変更が実装され検証されました。
基準例:
- テストが通過
- 機能が実装された
- ドキュメントが更新された
人間の介入
エージェントは明確化または承認を必要とします。
例:
曖昧な要件が検出されました。
期待される動作を明確にしてください。安全制限
システムは安全制約により停止します。
例:
- イテレーションが多すぎる
- 繰り返し失敗
- 権限違反
コンテキストエンジニアリングとの統合
エージェントループはコンテキストエンジニアリングシステムに大きく依存しています。
各計画ステップの前に、システムは以下を含む新しいコンテキストを構築します:
- タスク記述
- 関連コード
- ツール結果
- 取得されたメモリ
- リポジトリ状態
これにより、エージェントは常に最も関連性の高い情報で推論できます。
可観測性
ループの各イテレーションはログに記録されるべきです。
ログフィールド例:
- イテレーション番号
- 実行されたアクション
- 呼び出されたツール
- 実行時間
- 結果状態
これらのログにより、開発者はエージェントの動作を分析できます。
実行トレースの例
エージェント実行例:
イテレーション1
計画: UserServiceを検査する
アクション: read_file(UserService.ts)
イテレーション2
計画: キャッシュの使用を検査する
アクション: search_code("cache")
イテレーション3
計画: キャッシュ実装を変更する
アクション: write_file(CacheClient.ts)
イテレーション4
計画: 実装を検証する
アクション: run_tests
イテレーション5
計画: 変更をコミットする
アクション: git_commitこの反復プロセスにより、エージェントは複雑なタスクを徐々に完了できます。
将来の拡張
エージェントループは追加機能をサポートするために進化する可能性があります。
可能な拡張:
- 階層的計画
- 並列ツール実行
- マルチエージェント協調
- 過去のタスクからの学習
これらの機能により、効率性とスケーラビリティが向上する可能性があります。
まとめ
エージェントループはAI Dev Agentの推論と実行サイクルを定義します。
ループは5つのステージで構成されています:
- 計画(Plan)
- 実行(Act)
- 観察(Observe)
- 反省(Reflect)
- 状態更新(Update State)
このループを反復的に実行することで、エージェントはコードを分析し、システムを変更し、タスクが完了するまで結果を検証できます。
このアーキテクチャは自律エンジニアリングシステムの認知コアを形成します。