最近しばらくLangChainに触れていなかったのですが、昨日ふと公式ブログを見たところ、LangGraph(LangChainのエージェント構築機能)に「長期メモリ機能」が追加されたようです。この機能はなかなか面白そうですので、共有したいと思います。
ブログ記事によると、LLMとの会話で用いられるメモリには大きく2種類あります。
1つは短期メモリ(on-memory)で、これは現在の会話セッション中の内容を保持するものです。一般的な手法としては、会話終了ごとに比較的軽量なLLMで前回までの対話を要約し、その要約を次回以降の応答生成時に参照します。そして新たな会話が終わるたびに、またその要約を更新していくわけです。こうすることで、長い対話でも一貫した文脈を保持できるようにします。
2つ目は長期メモリ、いわゆる「クロススレッドメモリ(Cross-Thread Memory)」で、これは過去の会話履歴を蓄積しておくことで、セッションを跨いだ記憶を実現する仕組みです。短期メモリよりは、以前の対話内容を参照しつつ、より深い文脈理解に基づいた応答が可能になります。
LangChainが公開された長期メモリ機能の実装例⇩
仕組み自体はシンプルです。過去の対話内容を「メモリストア」に格納し、ベクトル化して保存します。そして新たに応答を生成する際には、このメモリストアから関連度の高いメモリチャンクを検索して参照します。たとえば、直近3つのユーザークエリを使用し、関連度が高い10件のメモリチャンクを抽出して、それらを踏まえて回答を生成します。
さらに、LangChainはこのメモリストアへのアクセスをエージェントとして組み込んで、必要に応じてそのエージェントを呼び出せるようにしています。⇩
この長期メモリ機能は非常に汎用的であり、LangChainのブログによれば、将来的にはLangGraphの標準エージェントとして組み込まれる予定とのことです。最近ちょっと試してみたいと思います。
興味ある方: