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 属性)とデータ(名前+スキーマに沿った属性)を持ち、生成コンテンツの一貫性を保つ。
関連
- retrieval-augmented-generation(記憶検索も embedding ベース)
- model-context-protocol
- _moc-llm-agent