LLM Agent の長期記憶 (Entity Memory)

stateless な LLM に会話をまたいだ記憶を持たせる仕組み。langchain-langgraph の LangGraph を題材にした実装パターン。

Checkpointer と Store

LangGraph は 2 種類の永続化機構を分ける。

  • Checkpointer (BaseCheckpointSaver): グラフ状態の snapshot を会話スレッド単位 (thread_id) で保存。短期記憶=会話の継続。
  • Store (BaseStore): スレッドをまたいだ KVS。namespace / key / value 構造で、batch(Iterable[Op])GetOp | SearchOp | PutOp | ListNamespacesOp)で操作。embedding index を張れば store.search(ns, query=...) で意味検索も可能。

langchain.memory.entity.ConversationEntityMemory (v0.2 系) は deprecated で、long-term memory agent tutorial 方式に移行。

Knowledge Triple 抽出

agent が会話から情報を knowledge triple (subject, predicate, object) の形で抽出し、tool (save_recall_memory) 経由で vector store に永続化する。検索時は会話履歴を embed して search_recall_memories で類似記憶を引き、システムプロンプトの <recall_memory> に詰めて agent に渡す。

例: “My friend John likes Pizza” →
{subject: Alice, predicate: has a friend, object_: John},
{subject: John, predicate: likes, object_: Pizza}
次の会話で “What food should I bring to John’s party?” に対し記憶を読み出して回答。

グラフ構成は load_memories → agent → (tool_calls あれば) tools → agent のループ(llm-agent-pattern の典型形)。

スキーマ駆動コンテキスト (GAI as a Service)

厳密なオントロジー/知識グラフを作るのが目的ではなく、あくまで LLM に適切なコンテキストを渡すための仕組みという立場。スキーマ(スキーマ名+JSON schema 属性)とデータ(名前+スキーマに沿った属性)を持ち、生成コンテンツの一貫性を保つ。

関連