メインコンテンツへ移動
AIチュートリアル

AIrecallで永続的なAIエージェントメモリを構築

AIrecallのインストール方法、永続的なローカルストレージの初期化、会話や長期保存すべき事実の保存、関連メモリの取得、エージェントフレームワークへのリトリーバー接続について解説します。ハイブリッド検索、自動要約、デプロイ方法、一般的なトラブルシューティングも紹介します。

AIrecallで永続的なAIエージェントメモリを構築

AIrecallとは?

AIrecallは、AIエージェントに後付けできる長期メモリ層です。エージェントが現在のコンテキストウィンドウだけに依存せず、セッションをまたいで有用な情報を保持します。このプロジェクトは、Python SDK、Go製メモリサーバー、SQLiteストレージ、プロセス内ベクトルインデックスを組み合わせています。

AIrecallは、プロンプトを簡潔に保つよう設計されています。すべてのリクエストにやり取りの履歴全体を挿入するのではなく、エージェントは現在のターンに最も関連するメモリを取得できます。

主なメモリの種類と機能

  • エピソードメモリ:会話、アクション、結果などのイベントを順序どおりに保存します。
  • 意味メモリ:過去のエピソードから抽出した、長期的に有用な事実や好みを保持します。
  • ハイブリッド検索:エピソードメモリと意味メモリを対象に、キーワード照合とベクトル類似度を組み合わせます。
  • 自動要約:古いエピソードを定期的に圧縮し、履歴を単に削除するのではなく、長期的に有用な事実を抽出します。
  • 永続的なローカルストレージ:プロセス内ベクトルインデックスを備えたSQLiteを使用します。
  • 柔軟な運用:メモリサーバーをローカルまたはサイドカーとして実行できます。

AIrecallの仕組み

各ターンで、Python SDKはローカル呼び出しまたはgRPCを通じて、現在のクエリをAIrecall Coreに送信します。Coreはキーワードとベクトルの類似度を使ってエピソードメモリと意味メモリを検索し、結果を順位付けして、エージェントのプロンプトに挿入する関連度の高いメモリを返します。

バックグラウンドでは、要約処理が古いエピソードを処理します。長時間稼働するエージェントがアクティブなコンテキストを継続的に拡大せずに有用な知識を保持できるよう、長期的な情報を意味メモリに抽出し、残りの履歴を圧縮します。

インストールとセットアップ

Python SDKをインストールする

Pythonエージェントがインポートするパッケージをインストールします。

pip install airecall-sdk

ローカルストレージを初期化する

コマンドラインインターフェースを使って、SQLiteベースのローカルメモリストアを作成します。

airecall init

このセットアップにより、別のサービスを用意しなくても、すぐにメモリの保存と呼び出しを開始できます。

メモリサーバーをインストールまたは実行する

Coreメモリサーバーをローカルまたはサイドカーとして利用する場合は、サーバー用の追加機能をインストールします。

pip install airecall-sdk[server]

その後、サーバーをスタンドアロンプロセスとして実行できます。

airecall serve

SDK自体は標準ライブラリのみで構成されています。プロジェクトのREADMEによると、サーバーは純粋なGo製の依存関係を1つ使用します。

基本的な使い方

Memoryインスタンスを作成する

Memoryをインポートし、エージェントに識別子を割り当てます。

from airecall import Memory

memory = Memory(agent_id="support-bot")

agent_idは、保存および取得するメモリの所有エージェントを識別します。後続のセッションで同じメモリコレクションにアクセスする場合は、同じ識別子を使用します。

エピソードメモリを保存する

rememberを使って、やり取り中に発生したことを記録します。

memory.remember(
    "User asked about refund policy for order ORD-9921, told 30-day window applies."
)

これは特定のイベントとその結果を記録するため、エピソードメモリに該当します。

関連するコンテキストを呼び出す

後のセッションで、現在の質問を指定してrecallを呼び出します。

context = memory.recall(
    "what did we tell this user about refunds?"
)

AIrecallは保存されたメモリを検索し、関連するエピソードを関連度順に返します。アプリケーションは、返されたコンテキストをモデルに送信するプロンプトへ追加できます。

長期的な事実を保存する

1つのイベントを超えて有用であり続ける情報は、remember_factを使って明示的に昇格できます。

memory.remember_fact(
    key="preferred_contact",
    value="email, not phone"
)

これにより、時系列上の別のエピソードとして記録するのではなく、安定した好みに関する意味メモリが作成されます。

LangChainアダプターを使う

AIrecallには、MemoryRetrieverというLangChainアダプターが含まれています。既存のMemoryインスタンスをラップして、リトリーバーを作成します。

from airecall import Memory
from airecall.adapters.langchain import MemoryRetriever

memory = Memory(agent_id="support-bot")
retriever = MemoryRetriever(memory)

READMEではアダプターの構築方法が示されていますが、チェーンやリトリーバーに関する追加設定は指定されていません。生成したオブジェクトをより大規模なLangChainアプリケーションに統合する際は、アダプターの現行APIに従ってください。

実用的な統合パターン

  1. エージェント用のMemoryインスタンスを作成します。
  2. 応答を生成する前に、ユーザーの現在のクエリを指定してrecallを呼び出します。
  3. 返された関連メモリを補助コンテキストとしてモデルのプロンプトに挿入します。
  4. やり取りの後、重要なイベント、アクション、結果を保存するためにrememberを呼び出します。
  5. 明示的に保持すべき長期的な好みや事実をアプリケーションが特定したら、remember_factを使用します。

このパターンにより、すべてのプロンプトに完全な履歴を含めることなく、過去の意思決定やユーザーの好みが重要な場面でエージェントから参照できるようになります。

高度なヒント

イベントと長期的な知識を分ける

特定のやり取りで起きたことにはエピソードメモリを使用します。安定した事実や好みには意味メモリを使用します。たとえば、返金に関する話し合いはエピソードに、ユーザーがメールでの連絡を希望することは長期的な事実に該当します。

エージェント識別子を一貫させる

メモリを共有する必要があるセッションには、安定した agent_id を選択してください。識別子を変更すると、アプリケーションから見て別のメモリスコープが作成されます。

適切なデプロイモードを選択する

シンプルなローカルワークフローでは、airecall init を使用して SQLite ベースのストアを初期化します。専用のメモリプロセスが必要なアーキテクチャでは、サーバー用エクストラをインストールし、airecall serve をローカルまたはサイドカーとして実行します。

インデックスがウォームアップするまで待つ

最初のクエリで RecallTimeout が発生した場合、ベクトルインデックスのウォームアップ中である可能性があります。ヘルスエンドポイントが status: ready を報告した後に再試行してください。

信頼できるストレージパスを使用する

再起動後にメモリが見つからない場合は、storage.backend のパスを確認してください。相対パスはサーバープロセスの作業ディレクトリを基準に解決されるため、別のディレクトリからサーバーを起動すると、別のストアを参照する可能性があります。一貫した作業ディレクトリまたはストレージパスを使用してください。

まとめ

AIrecall は、過去のすべてのやり取りをプロンプトに残すことなく、AI エージェントに永続的なエピソード記憶と意味記憶を提供します。小規模な Python API、SQLite ベースのストレージ、ハイブリッド検索、自動要約により、セッションをまたいで関連するコンテキストを保持する実用的な方法を実現します。まず airecall init で開始し、remember でエピソードを記録し、recall で取得し、長期的な知識を remember_fact で保存してください。