永続的なAIエージェントメモリの構築: 4層のファイルベースアーキテクチャ
AIエージェントが私たちのワークフローにより統合されるにつれて、一つの永続的な課題が残ります: メモリ。セッション間での永続的なメモリがなければ、AIアシスタントはステートレスなチャットボットに過ぎず、過去のやり取りを基に構築したり、文脈を維持したりすることができません。この制限は、ChatGPT、Claude、あるいはローカルLLMのような強力なモデルを使用する際には特に悔しいものです。
自分のプロジェクトでこの制限に悩まされた後、私はAIエージェントに真の永続性を提供する4層のファイルベースメモリアーキテクチャを開発しました。このシステムは、主要なLLM APIおよびローカルモデルとシームレスに連携し、エージェントにセッション間での連続したメモリを提供します。
ステートレスなAIエージェントの問題
ほとんどのAIエージェント実装は、各インタラクションを独立したものとして扱い、以前の会話の記憶がありません。これが単純なQ&Aには適していても、次のようなより複雑な使用ケースには不十分です:
- マルチステップのワークフロー自動化
- セッション間のプロジェクト追跡
- パーソナルアシスタント機能
- ナレッジベースの構築
メモリがなければ、エージェントは次のことができません:
- 以前の決定を思い出す
- インタラクション間の文脈を維持する
- 過去の間違いから学ぶ
- 以前の作業を基にする
解決策: 4層のファイルベースアーキテクチャ
様々なアプローチを試した後、私はシンプルさと強力な機能を両立させた4層のファイルベースシステムに落ち着きました。これがその仕組みです:
層1: セッションログ
私たちのアーキテクチャの基盤はセッションログです。各インタラクションは、専用のディレクトリにタイムスタンプ付きのJSONファイルとして保存されます:
memory/
sessions/
2023-11-15_14-30-22.json
2023-11-15_14-45-17.json
...
各ファイルには:
- ユーザー入力
- エージェントの応答
- メタデータ (タイムスタンプ、セッションIDなど)
{
"session_id": "sess_abc123",
"timestamp": "2023-11-15T14:30:22Z",
"user_input": "Create a project plan for our new API",
"agent_response": "Here's a draft project plan...",
"metadata": {
"tokens_used": 456,
"model": "gpt-4"
}
}
層2: コンテキストグラフ
2層目は、セッション間の関係をグラフ構造を使用して構築します。セッションがどのように関連しているかをマッピングしたedges.jsonファイルを維持します:
{
"sess_abc123": {
"next": ["sess_def456", "sess_ghi789"],
"prev": [],
"related": ["sess_jkl012"]
},
"sess_def456": {
"next": ["sess_mno345"],
"prev": ["sess_abc123"],
"related": []
}
}
これにより、エージェントは:
- 会話のスレッドを追う
- 時間的順序を理解する
- 関連するディスカッションを見つける
層3: エンティティ抽出
3層目は、会話から主要なエンティティを抽出して保存することに焦点を当てています。entities.jsonファイルを維持し、次のことを追跡します:
- 人物
- プロジェクト
- 概念
- アクション
json
{
"people": {
"John Doe": {
"first_seen": "2023-11-15",
"last_seen": "2023-11-16",
"roles": ["Project Manager"],
"sessions": ["sess_abc12"