第2章 AI Agentの全体アーキテクチャと構成要素
対象=一般Web/アプリ開発者・アーキテクト。AI Agentをソフトウェアシステムとして捉え、どの部品がどう連携して動くのかを把握する。
1. AI Agentシステムの5大構成要素
実用的なAI Agentは、単一のLLMではなく、以下の5つの独立したコンポーネントの組み合わせで構築されます。
| コンポーネント | 役割 | 主な技術・実装要素 |
|---|---|---|
| ① Brain / Core | 推論、意思決定、次手選択、出力生成 | LLM(GPT-4o, Claude 3.5, Gemini 1.5/2.0等) |
| ② Planning | タスクの分解、優先順位付け、自己修正 | ReAct, Plan-and-Solve, Tree of Thoughts (ToT) |
| ③ Memory | 短期コンテキストと長期知識の保持 | ワーキングメモリ(Window)、Vector DB、K-V Store |
| ④ Tools & Actions | 外部世界への働きかけ、API実行 | Function Calling, MCP (Model Context Protocol), Code Sandbox |
| ⑤ Safety & Guardrails | 不正入力検知、トークン上限、HITL承認 | Input Guard, ZDR設定, Audit Trail, キルスイッチ |
2. コンポーネント間のデータフロー
Agent内部でのコンポーネント間のデータ連携と制御フローの全体図です:
🔍 クリックで拡大
フローの詳細ステップ:
- 外部環境(External Environment): ユーザーからのGoal入力やWebhook、DBイベントをトリガーとして受信。
- Safety & Guardrails: 入力のサニタイズ(プロンプトインジェクション検知)、トークン・ステップ上限値の検証を実施。
- Planning Engine: 目標を依存関係のあるサブタスク(DAG: 有向非巡回グラフ)へ分解。
- Brain (LLM 推論部) & Tools: ツール定義をもとに実行すべきActionを決定し、Tool Executor / MCP経由で外部APIやDB、検索を実行。実行結果(Observation)をBrainへフィードバックするReActループを形成。
- Memory Module: ワーキングメモリ(短期実行コンテキスト)とVector DB等の長期記憶から関連知識を参照・蓄積。
- Human-in-the-Loop (HITL) 承認ゲート: 破壊的アクションや外部確定送信の前に人間の確認・承認を挟み、安全性を担保して最終確定へ。
3. 各コンポーネントの詳細機能
① Brain(推論コア)
Agentの頭脳。プロンプトとして「システム指示(ペルソナ、ルール、制約)」と「利用可能なツール一覧(JSON Schema)」を受け取り、次に実行すべきツールの名前と引数をJSONで返します。
② Planning(計画エンジン)
ユーザーの曖昧な指示「競合他社3社の新製品価格を調査して比較表をスプレッドシートにまとめて」を、
- 競合リストの特定
- 各社サイトのスクレイピング・情報抽出
- 為替や税抜・税込の統一計算
- Google Sheets APIのドラフト生成
という依存関係のあるステップに変換します。
③ Memory(記憶システム)
- Working Memory(短期記憶): 現在のReActループ内で交わされたプロンプトとTool実行結果の履歴。コンテキストウィンドウ上限に達すると溢れるため、古い思考の要約圧縮が必要。
- Long-term Memory(長期記憶): 過去のセッションで得たユーザーの好み、社内用語集、過去の類似タスクでの成功手順。Vector DBやリレーショナルDBに保存し、タスク開始時にセマンティック検索で呼び出す。
④ Tools(道具・実行器)
Agentが「考えるだけ」の存在から「実行する」存在へ進化するための鍵。
- 計算機(正確な算術計算)
- HTTPクライアント(外部REST APIとの対話)
- SQLクエリ生成・実行器(データ抽出)
- MCP Server(標準化されたプロトコルで接続されたツール群)
⑤ Safety & Guardrails(防御壁)
- Token / Step Capping: 最大ループ回数(例: 最大10ループ)と最大消費トークン数を設定し、暴走を強制シャットダウン。
- Human Approval Gate: 破壊的アクション(書き込み、送金、外部送信)の前にプロセスを一旦保留(Suspended)状態にし、人間のWebhook承認を待つ。