はじめに:本シリーズについて
このシリーズ「OpenClaw内部解剖:LLMエージェントフレームワークの仕組みを徹底解説」では、オープンソースのLLMエージェントフレームワークであるOpenClawを4回に分けて深掘りする。Part 1となる本稿では、OpenClawのモジュール構成を俯瞰し、各コアコンポーネントの役割と相互関係を整理する。Part 2以降では、ToolのI/Oシリアライゼーション、非同期実行モデル、そしてMemory Storeのスケーリング戦略へと踏み込んでいく。
LLMエージェントフレームワークが抱える共通課題
LLMを単体で利用する場合と異なり、エージェントとして動作させる際には「ツール呼び出しの管理」「状態の永続化」「複数ステップにわたるオーケストレーション」という三つの課題が生じる。近年のオープンソースRLライブラリを横断的に分析したHugging Faceの調査によれば、非同期処理とトークンスループットの両立がエージェント基盤における最大のボトルネックであることが報告されている [Source: https://huggingface.co/blog/async-rl-training-landscape]。OpenClawはこの課題に正面から向き合い、コンポーネントを明確に分離することで保守性と拡張性を確保している。
OpenClawのモジュール構成:三層アーキテクチャ
OpenClawは大きく三つのレイヤーに分かれる。
[User / External API] | [Orchestrator] <-- 制御層 / \ [Tool Registry] [Memory Store] <-- リソース層 | [External Tools / APIs] <-- 実行層 このように責務を分離することで、各コンポーネントを独立してテスト・置換できる設計になっている。
コアコンポーネント詳解
1. Orchestrator
OrchestratorはOpenClawの中枢であり、LLMへのプロンプト送信、ツール呼び出し判断、レスポンスのパースを一手に担う。具体的には以下のループを実行する。
- ユーザーからの入力をLLMに渡す
- LLMがtool_callを返した場合、Tool Registryに対象ツールの実行を委譲する
- 実行結果をMemory Storeに書き込む
- 最終応答が得られるまでループを繰り返す
Anthropicが公開しているClaude Agent SDKのリファレンス実装においても、このReAct(Reasoning + Acting)スタイルのループが標準パターンとして採用されている [Source: https://docs.anthropic.com/en/docs/agents-and-tools/claude-as-an-agent]。OpenClawはこのパターンを踏襲しつつ、LLMバックエンドをプラガブルにした点が特徴的だ。
2. Tool Registry
Tool Registryは「どのツールが存在し、どのようなインターフェースを持つか」を一元管理するカタログである。各ツールはJSON Schemaで入出力を定義し、Registryに登録される。Orchestratorはこのスキーマ情報をLLMへのシステムプロンプトに動的に埋め込み、LLMが適切なツールを選択できるよう誘導する。
Tool Registryが重要な理由は、ツールの追加・削除をOrchestratorの実装に影響なく行えるからだ。新しいAPIやデータソースが増えたとき、Registryへの登録だけで即座にエージェントの能力を拡張できる。
3. Memory Store
Memory StoreはエージェントのセッションコンテキストとLong-term Memoryを管理する。OpenClawはMemory Storeを二層に分ける設計を採用している。
- Short-term Memory(In-process Buffer): 現在のセッション内の会話履歴とtool_call結果を保持する。デフォルトではオンメモリで動作する。
- Long-term Memory(Persistent Backend): ベクトルDBやKVストアと連携し、セッションをまたいだ知識を保存・検索する。
Long-term Memoryのバックエンド設計はHugging Face Hubが2025年に導入したStorage Bucketsの考え方と共鳴する部分がある。大量のバイナリアーティファクトや埋め込みベクトルをオブジェクトストレージに分離し、メタデータのみをインデックス側で管理するアーキテクチャは、スケーラビリティの観点から有効なパターンとして認識されている [Source: https://huggingface.co/blog/storage-buckets]。
三コンポーネントの相互関係まとめ
| コンポーネント | 主な責務 | 依存先 |
|---|---|---|
| Orchestrator | ループ制御・LLM呼び出し | Tool Registry, Memory Store |
| Tool Registry | ツール登録・スキーマ管理・実行委譲 | External Tools |
| Memory Store | コンテキスト保存・検索 | Persistent Backend(任意) |
Orchestratorがツールを呼ぶときはTool Registryを経由し、結果をMemory Storeに書き込む。Memory StoreはOrchestratorがLLMに渡すコンテキストウィンドウの内容を決定するため、間接的にLLMの応答品質にも影響する。
まとめとPart 2への橋渡し
OpenClawのアーキテクチャは、Orchestrator・Tool Registry・Memory Storeという三つのコンポーネントが疎結合で協調する設計になっている。この分離により、各層を独立してスケールアップ・置換できる柔軟性が生まれる。
Part 2では、Tool RegistryにおけるツールのI/Oシリアライゼーション仕様と、Orchestratorがどのようにtool_callのレスポンスをパースして次のステップを決定するか、コードレベルで解説する。
Category: LLM | Tags: LLMエージェント, OpenClaw, アーキテクチャ, ToolRegistry, AIエンジニアリング
0 件のコメント:
コメントを投稿