AI News HubLIVE
サイト内リライト3 分で読了

Goat 2.0 – AIエージェントのためのプロアクティブエピソディックメモリ

Goat 2.0 は、Telegram ベースの AI エージェントであり、プロアクティブな階層型メモリシステムを中核としています。標準的な RAG とは異なり、クエリの内容に関係なく、毎ターン前にメモリを能動的に検索します。3 つの独立したバックエンド(Redis、ChromaDB、Letta)を備え、適応型トークン予算、優先順位反転 L2/L3 分割、ライトスルーアーカイブなどの機能を備えています。このプロジェクトは、複雑なメモリ機構を備えた AI アシスタントを構築する方法を示しています。

ソースHacker News AI著者: takashikiari

Goat 2.0 は、Telegram 上で動作する AI エージェントであり、その中核はプロアクティブな階層型メモリシステムです。従来の RAG(検索拡張生成)とは異なり、Goat 2.0 は各会話ターンの開始前に能動的にメモリを検索し、モデルが不足を認識するのを待ちません。曖昧な単一ワードのメッセージでも、過去のセッションの意味検索がトリガーされ、構造的に関連する内容がプロンプトに注入されます。モデルが「これを覚えているか?」と尋ねる必要はなく、検索は既に完了しています。

このシステムの重要な設計は、複数の独立したバックエンドストレージ層です。ワーキングメモリには Redis を使用し、現在の会話履歴とキャッシュを保存します。エピソディックメモリには ChromaDB(永続クライアント)を使用し、長期的な意味記憶を保存します。パーマネントメモリには Letta HTTP API を使用し、重要な事実とアイデンティティ情報を保持します。これらのバックエンドはすべて遅延ロードされ、初回使用時に接続が確立され、互いに独立して障害が発生します。例えば、Letta サービスが停止しても、L1(事実層)の内容が失われるだけで、会話は継続できます。

メモリは5つの論理層に整理されています。L0(アイデンティティ層)は常に基本ペルソナプロンプトを含みます。L1(事実層)は Letta 内のキー・バリューペアで構成されます。L2(ワーキング層)は現在の会話の完全な履歴(上限あり)を含みます。L2.5(セッションキャッシュ層)は L3 の検索結果とツール出力の TTL キャッシュを提供します。L3(エピソディック層)は ChromaDB からの意味検索により長期記憶を取得します。Orchestrator は統一インターフェース(MemoryLayers)を通じてのみメモリシステムと対話し、物理バックエンドを直接インポートすることはありません。

プリフェッチデーモンは、このシステムを他のシステムと区別する核心的な違いです。各ターンの開始時に非同期タスクとして起動され、L0/L1/L2 の取得と並行して実行されます。プリフェッチデーモンは3つの検索メカニズムを同時に実行します:時間メカニズム(日付範囲を解析してフィルタリング検索)、テーマメカニズム(無条件に実行、キャッシュ付き意味検索)、特定キーメカニズム(メッセージに構造キーが含まれる場合に完全一致検索)。これらのメカニズムは独立に評価され、信頼度のしきい値はなく、タイムアウトのみが唯一のブロッキング条件です。3つのメカニズムの結果は結果マージャーで重複排除され、混合スコア(重み0.6/0.3/0.1)でシステムプロンプトに注入されます。

適応型意図トークンスケーリング(AITS)も重要な機能です。各ターンは、ユーザーメッセージの確信度と複雑さに基づいて動的なトークン予算を計算します。確信度はクエリ内の手がかり語(「何」、「どうやって」、「なぜ」など)に基づいて評価され、複雑さはメッセージの長さと接続語の数に基づきます。デフォルト予算は2000トークンで、複雑なクエリでは12000トークン近くまで達することがあります。さらに、コンテキスト予算の割り振りには優先順位反転戦略が採用されています。L0+L1 の固定消費を差し引いた後、L3 に最低1200トークンを保証し、残りを L2 に割り当てることで、長期記憶が短期会話によって完全に圧迫されることを防ぎます。

ライトスルーアーカイブメカニズムにより、各会話ターンはそのままエピソディックメモリ(L3)に保存され、「l2_full_archive」タグが付けられ、将来のソートのためにアクセス回数と最終アクセス時刻が保持されます。会話履歴が上限を超えた場合、最も古いメッセージから削除されますが、最初のメッセージ(会話のトピックを設定するもの)は、十分に短い場合に固定保持されます。

プロジェクトは観測可能性もサポートしています。各ターンごとに JSON ログ行が生成され、AITS パラメータ、キャッシュヒット/ミス、各段階のレイテンシ、トークン使用量、プリフェッチ結果などが含まれます。これらのデータは MemoryAnalytics によって集約され、100リクエストごとにサマリレポートが出力されます。

Goat 2.0 のコード構造は明確で、主要モジュールはメモリ層、オーケストレータ、サービスレジストリ、プラグインマネージャ、ツールレジストリ、Telegram インターフェースです。全体の設計は「ゼロシングルトン」ルールに従い、すべてのサービスは依存性注入コンテナを介して管理され、テストと拡張が容易です。このプロジェクトは、複雑なメモリシステムを持つ AI エージェントを構築する方法を示しており、持続的な文脈と長期記憶を必要とする会話アプリケーションに適しています。