言語モデルは、呼び出し間で情報を保持しない:各実行時には、リクエストで提供されたテキストのみを処理する。過去の行動を追跡し、ユーザーの好みを記憶し、複数ステップのタスクを遂行する必要があるAIエージェントにとって、この制限はモデル外部のメモリを必要とする。このメモリは、モデルが一度に処理できるテキスト量であるコンテキストウィンドウの外部に情報を保存し、必要時にそれを取り出す。
エージェントのメモリ構成要素
エージェントは、呼び出し間やタスク間で情報を運ぶ必要がある。重複した行動を避けるために既に計画された内容を覚えておく必要があったり、同じ作業を繰り返さないために失敗した手順を記憶しておく必要があるかもしれない。メモリがなければ、各呼び出しは提供されたコンテキストのみで処理することになる。
メモリの種類は4つのカテゴリに分類される。ワーキングメモリは、中間結果などタスクの現在の状態を含み、キーで直接参照される。エピソードメモリは、過去のやり取り、タスク実行、意思決定など、何が起こったかを時系列ログやベクトルデータベースに保持し、意味的類似性による検索を行う。セマンティックメモリは、事実や好みなど、真実とみなされる情報を集め、追加ではなく更新される。手続きメモリは、成功した行動パターンや既知の失敗モードなど、物事のやり方を記述し、プロンプトのテンプレートや、特定データによるモデル調整であるファインチューニングに基づく。
信頼性の高いメモリを設計する
同じタスクに数日間取り組む検索エージェントの例では、各結果はまず短命のワーキングメモリに書き込まれる。結果が有用と判明すると、重要度スコアとともにエピソードメモリに移される。ツール呼び出しの前に、エージェントはワーキングメモリを参照し、必要に応じてエピソードメモリも参照する。タスクが途中で失敗した場合、一時的な状態は消去される一方、完了した作業の履歴は保持される。
メモリが大きくなるにつれて信頼性を高めるいくつかの実践がある:書き込み前に情報の重要度を記録する、マルチエージェントシステムでは各エージェントのメモリをその役割に制限する、意思決定の各段階でメモリを参照する、各要素の出所(エージェント、ツール、ユーザー入力、タイムスタンプ)を追跡する。一方、実装が簡単なアプローチの中には信頼性が低くなるものもある。例えば、すべてを単一のベクトルデータベースに保存する方法、数字や制約を消去する可能性のある自由要約による圧縮、無制限のメモリ増加、または各書き込みを同じように信頼する方法などである。最後の方法は、信頼できないまたは悪意のあるコンテンツが保存され、安全な情報として扱われるメモリ汚染のリスクにさらされる。
異なるアプローチを持つフレームワーク
フレームワークは、単純なテキストメモリと知識グラフの中間に位置する。Lettaは、エージェント自身が書き直せるテキストブロックに基づき、矛盾を検出するとブロックを更新する。Mem0は、エンティティを考慮した検索を行うベクトルメモリを使用し、新しい記憶を古いものの隣に追加する。Graphitiは、型付けされた関係を持つ双時間知識グラフに依存し、古い関係を無効化しながらも検索可能な履歴を保持する。Cogneeは、ソースデータからグラフ層、ベクトル層、関係層を構築し、変化を追跡する時間モードとともにメモリ表現を再構築する。
マルチエージェントシステムでは、メモリの共有は同時更新時の競合を引き起こす可能性がある。議論されている解決策には、書き込み制御付きの中央サービス、各エージェントのための分離された名前空間、または追加のみのジャーナルで検索時に競合を解決する方法などがある。評価はいくつかの指標に基づく:関連する記憶が検索されるかを測る再現率、不要な情報が返される割合を測る精度、検索された情報が正しく使用されるかを確認する忠実性、期限切れ情報の頻度を測る陳腐化度。記事によれば、選択はエージェントのワークロード、データ、運用要件に依存する。
