AIエージェントにメモリを組み込む方法
AIエージェントにメモリを追加する実践的なガイド。短期・長期記憶の概念、トレース分析、LangSmithツールを使ったメモリループの実装により、エージェントが実行間で学習し改善する方法を解説します。
AIエージェントにメモリを持たせる方法
エージェントが過去の行動から学習できるようにすることは、優れたエージェント体験を生み出す鍵です。この能力は「メモリ」と呼ばれます。メモリがあれば、ユーザーは同じ修正を繰り返し伝える必要がなくなり、エージェントは一度教えられたことを正しく実行できるようになります。実装は進化し続けていますが、基本的な抽象化はシンプルです。メモリを実装するには、エージェントが間違えた箇所や新しい情報を学習できた箇所を見つけ、その情報をデータ構造に抽出・一般化するバックグラウンドプロセスを実行する必要があります。
本記事では、このプロセスの具体的な実装を紹介します。使用するのはLangSmith Observability(トレースストア)、LangSmith Engine(トレース分析)、LangSmith Context Hub(メモリストア)です。
メモリとは?
メモリとは、エージェントが複数回の実行にわたって検索できる持続的なコンテキストであり、その行動を導くものです。事実、好み、過去のやり取り、指示、スキル、例、学習されたパターンなどが含まれます。トレースやトランスクリプトは何が起こったかの証拠ですが、それがメモリになるのは、関連する教訓がエージェントが後で検索して行動を変えるためのコンテキストに変換されたときだけです。
メモリを整理するには、短期記憶(ワーキングメモリ)と長期記憶に分けると便利です。短期記憶はエージェントが現在のタスクを実行する際に利用可能なコンテキスト(現在のスレッド、最近のメッセージ、ツール結果、取得したドキュメント、中間推論成果物、一時ファイルや状態)です。長期記憶は現在の実行を超えて持続するコンテキスト(事実、好み、例、ワークフロー、ポリシー、指示、スキル)です。
両者の関係は読み書きサイクルです。実行中、エージェントはハーネスが関連コンテキストを利用可能にすることで長期記憶の恩恵を受けます。実行後、トレースは何が起こったかの証拠を提供します。そのほとんどの証拠は履歴として残すべきですが、一部には有用なシグナル(エージェントが記憶すべき好み、明確化が必要な指示、ルールにすべきツール使用パターン、更新すべきスキル)が含まれている可能性があります。
長期記憶をさらに意味記憶(事実や知識)、エピソード記憶(過去の経験)、手続き記憶(行動の仕方)に分類するのも有用です。エージェント行動の顕著な改善の多くは手続き記憶からもたらされます。
高レベルのメモリプロセス
適切に機能するエージェントメモリループには3つの部分があります:
- トレースの取得:トレースは証拠層です。適切に計装されたトレースは、エージェントがタスクを実行した経路(ユーザー入力、モデル呼び出し、ツールの入出力、取得したドキュメント、ルーティング決定、レイテンシ、エラー、ユーザーフィードバック)を記録します。
- トレースの分析:トレースから有用なシグナルを見つけます。シグナルは明示的なフィードバック、評価の失敗、繰り返しパターンから得られます。難しいのは診断です。同じ症状が異なる修正方法を示すことがあります。
- メモリの更新:シグナルを理解したら、システムは将来のコンテキストを変更する必要があるかどうかを判断します。問題の修正(指示の明確化やルーティングルールの変更)だけでなく、有用な情報の記憶(ユーザーの好みや成功例)も含まれます。
LangSmithを使った実装
LangSmithはメモリループ全体を実装するツールを提供します。LangSmith Observabilityでトレースを取得し、LangSmith Engineで分析し、LangSmith Context Hubでメモリを更新します。
トレースは取得ステップを提供し、トレーシングプロジェクトはエージェントの軌跡を保存します。Engineはバックグラウンドプロセスとしてトレースを改善シグナルに変換します(繰り返し問題の特定、根本原因の診断、具体的な変更提案)。Context Hubはバージョン管理された場所で指示やツールを管理し、メモリがアドホックな編集に終わらないようにします。
コンテキストが更新されると、将来の実行は最新のコンテキストを読み込み、ループが閉じます。
設計原則
- すべてをメモリ更新にすべきではない:ほとんどのトレースデータは履歴に残し、一部はデータセット例や評価、コード変更に使う。ごく一部だけが持続的コンテキストになる。
- 将来の実行が更新を実際に読み込むことを確認する:ランタイムがプロンプトやツールをキャッシュしている場合、メモリコミットにはリフレッシュパスが必要。
- 重要な行動は評価で保護する:メモリ更新が将来の行動を形成するほど重要なら、その行動の退行を検出する方法を持つべき。
この構造化されたアプローチにより、開発者は学習と適応が可能なAIエージェントシステムを段階的に構築できます。