{
  "canonical_name": "langchain-ai/langmem",
  "compilation_id": "pack_6a385609f5824fc08f1c96ce2fde8405",
  "created_at": "2026-05-22T00:07:20.305617+00:00",
  "created_by": "project-pack-compiler",
  "feedback": {
    "carrier_selection_notes": [
      "viable_asset_types=mcp_config, recipe, host_instruction, eval, preflight",
      "recommended_asset_types=mcp_config, recipe, host_instruction, eval, preflight"
    ],
    "evidence_delta": {
      "confirmed_claims": [
        "identity_anchor_present",
        "capability_and_host_targets_present",
        "install_path_declared_or_better"
      ],
      "missing_required_fields": [],
      "must_verify_forwarded": [
        "Run or inspect `pip install -U langmem` in an isolated environment.",
        "Confirm the project exposes the claimed capability to at least one target host."
      ],
      "quickstart_execution_scope": "allowlisted_sandbox_smoke",
      "sandbox_command": "pip install -U langmem",
      "sandbox_container_image": "python:3.12-slim",
      "sandbox_execution_backend": "docker",
      "sandbox_planner_decision": "llm_execute_isolated_install",
      "sandbox_validation_id": "sbx_079744830055404084f217c89813e877"
    },
    "feedback_event_type": "project_pack_compilation_feedback",
    "learning_candidate_reasons": [],
    "template_gaps": []
  },
  "identity": {
    "canonical_id": "project_616b768d275c30bdad1762fdcad0f64e",
    "canonical_name": "langchain-ai/langmem",
    "homepage_url": null,
    "license": "unknown",
    "repo_url": "https://github.com/langchain-ai/langmem",
    "slug": "langmem",
    "source_packet_id": "phit_ccdecd12f1b948bea410d86a616df2e1",
    "source_validation_id": "dval_769f6bd591314079a9e33348a317fb5d"
  },
  "merchandising": {
    "best_for": "需要软件开发与交付能力，并使用 claude的用户",
    "github_forks": 167,
    "github_stars": 1453,
    "one_liner_en": "LangMem helps agents learn and adapt from their interactions over time.",
    "one_liner_zh": "LangMem helps agents learn and adapt from their interactions over time.",
    "primary_category": {
      "category_id": "software-development",
      "confidence": "medium",
      "name_en": "Software Development",
      "name_zh": "软件开发与交付",
      "reason": "matched_keywords:git"
    },
    "target_user": "使用 claude, chatgpt 等宿主 AI 的用户",
    "title_en": "langmem",
    "title_zh": "langmem 能力包",
    "visible_tags": [
      {
        "label_en": "Knowledge Retrieval",
        "label_zh": "知识检索",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "product_domain-knowledge-retrieval",
        "type": "product_domain"
      },
      {
        "label_en": "Knowledge Base Q&A",
        "label_zh": "知识库问答",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "user_job-knowledge-base-q-a",
        "type": "user_job"
      },
      {
        "label_en": "Workflow Automation",
        "label_zh": "流程自动化",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "core_capability-workflow-automation",
        "type": "core_capability"
      },
      {
        "label_en": "Checkpoint Resume",
        "label_zh": "断点恢复流程",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "workflow_pattern-checkpoint-resume",
        "type": "workflow_pattern"
      },
      {
        "label_en": "Evaluation Suite",
        "label_zh": "评测体系",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "selection_signal-evaluation-suite",
        "type": "selection_signal"
      }
    ]
  },
  "packet_id": "phit_ccdecd12f1b948bea410d86a616df2e1",
  "page_model": {
    "artifacts": {
      "artifact_slug": "langmem",
      "files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json",
        "REPO_INSPECTION.md",
        "CAPABILITY_CONTRACT.json",
        "EVIDENCE_INDEX.json",
        "CLAIM_GRAPH.json"
      ],
      "required_files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json"
      ]
    },
    "detail": {
      "capability_source": "Project Hit Packet + DownstreamValidationResult",
      "commands": [
        {
          "command": "pip install -U langmem",
          "label": "Python / pip · 官方安装入口",
          "source": "https://github.com/langchain-ai/langmem#readme",
          "verified": true
        }
      ],
      "display_tags": [
        "知识检索",
        "知识库问答",
        "流程自动化",
        "断点恢复流程",
        "评测体系"
      ],
      "eyebrow": "软件开发与交付",
      "glance": [
        {
          "body": "判断自己是不是目标用户。",
          "label": "最适合谁",
          "value": "需要软件开发与交付能力，并使用 claude的用户"
        },
        {
          "body": "先理解能力边界，再决定是否继续。",
          "label": "核心价值",
          "value": "LangMem helps agents learn and adapt from their interactions over time."
        },
        {
          "body": "未完成验证前保持审慎。",
          "label": "继续前",
          "value": "publish to Doramagic.ai project surfaces"
        }
      ],
      "guardrail_source": "Boundary & Risk Card",
      "guardrails": [
        {
          "body": "Prompt Preview 只展示流程，不证明项目已安装或运行。",
          "label": "Check 1",
          "value": "不要把试用当真实运行"
        },
        {
          "body": "claude, chatgpt",
          "label": "Check 2",
          "value": "确认宿主兼容"
        },
        {
          "body": "publish to Doramagic.ai project surfaces",
          "label": "Check 3",
          "value": "先隔离验证"
        }
      ],
      "mode": "mcp_config, recipe, host_instruction, eval, preflight",
      "pitfall_log": {
        "items": [
          {
            "body": "GitHub 社区证据显示该项目存在一个安装相关的待验证问题：GRAPH_RECURSION_LIMIT",
            "category": "安装坑",
            "evidence": [
              "community_evidence:github | cevd_82b923de03f34d5a9fa8530916b40d14 | https://github.com/langchain-ai/langmem/issues/133 | 来源讨论提到 python 相关条件，需在安装/试用前复核。"
            ],
            "severity": "high",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：GRAPH_RECURSION_LIMIT",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Persistence?",
            "category": "安装坑",
            "evidence": [
              "community_evidence:github | cevd_b9688483fa44468a96801d46825b040f | https://github.com/langchain-ai/langmem/issues/154 | 来源讨论提到 python 相关条件，需在安装/试用前复核。"
            ],
            "severity": "high",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Persistence?",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Enhance error message when summarization fails due to missing HumanMessage in trimmed window",
            "category": "安全/权限坑",
            "evidence": [
              "community_evidence:github | cevd_15b3f9c4829745339b470171f005b3df | https://github.com/langchain-ai/langmem/issues/156 | 来源讨论提到 python 相关条件，需在安装/试用前复核。"
            ],
            "severity": "high",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Enhance error message when summarization fails due to missing HumanMessage in trimmed window",
            "user_impact": "可能影响授权、密钥配置或安全边界。"
          },
          {
            "body": "项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。",
            "category": "配置坑",
            "evidence": [
              "capability.host_targets | github_repo:920242883 | https://github.com/langchain-ai/langmem | host_targets=claude, chatgpt"
            ],
            "severity": "medium",
            "suggested_check": "列出会写入的配置文件、目录和卸载/回滚步骤。",
            "title": "可能修改宿主 AI 配置",
            "user_impact": "安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。"
          },
          {
            "body": "README/documentation is current enough for a first validation pass.",
            "category": "能力坑",
            "evidence": [
              "capability.assumptions | github_repo:920242883 | https://github.com/langchain-ai/langmem | README/documentation is current enough for a first validation pass."
            ],
            "severity": "medium",
            "suggested_check": "将假设转成下游验证清单。",
            "title": "能力判断依赖假设",
            "user_impact": "假设不成立时，用户拿不到承诺的能力。"
          },
          {
            "body": "未记录 last_activity_observed。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | last_activity_observed missing"
            ],
            "severity": "medium",
            "suggested_check": "补 GitHub 最近 commit、release、issue/PR 响应信号。",
            "title": "维护活跃度未知",
            "user_impact": "新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "downstream_validation.risk_items | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "进入安全/权限治理复核队列。",
            "title": "下游验证发现风险项",
            "user_impact": "下游已经要求复核，不能在页面中弱化。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "risks.scoring_risks | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "把风险写入边界卡，并确认是否需要人工复核。",
            "title": "存在评分风险",
            "user_impact": "风险会影响是否适合普通用户安装。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)",
            "category": "安全/权限坑",
            "evidence": [
              "community_evidence:github | cevd_760d72a9519c42a8b1e31d8932383bc2 | https://github.com/langchain-ai/langmem/issues/164 | 来源讨论提到 python 相关条件，需在安装/试用前复核。"
            ],
            "severity": "medium",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "issue_or_pr_quality=unknown。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | issue_or_pr_quality=unknown"
            ],
            "severity": "low",
            "suggested_check": "抽样最近 issue/PR，判断是否长期无人处理。",
            "title": "issue/PR 响应质量未知",
            "user_impact": "用户无法判断遇到问题后是否有人维护。"
          },
          {
            "body": "release_recency=unknown。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | release_recency=unknown"
            ],
            "severity": "low",
            "suggested_check": "确认最近 release/tag 和 README 安装命令是否一致。",
            "title": "发布节奏不明确",
            "user_impact": "安装命令和文档可能落后于代码，用户踩坑概率升高。"
          }
        ],
        "source": "ProjectPitfallLog + ProjectHitPacket + validation + community signals",
        "summary": "发现 11 个潜在踩坑项，其中 3 个为 high/blocking；最高优先级：安装坑 - 来源证据：GRAPH_RECURSION_LIMIT。",
        "title": "踩坑日志"
      },
      "snapshot": {
        "contributors": 12,
        "forks": 167,
        "license": "unknown",
        "note": "站点快照，非实时质量证明；用于开工前背景判断。",
        "stars": 1453
      },
      "source_url": "https://github.com/langchain-ai/langmem",
      "steps": [
        {
          "body": "不安装项目，先体验能力节奏。",
          "code": "preview",
          "title": "先试 Prompt"
        },
        {
          "body": "理解输入、输出、失败模式和边界。",
          "code": "manual",
          "title": "读说明书"
        },
        {
          "body": "把上下文交给宿主 AI 继续工作。",
          "code": "context",
          "title": "带给 AI"
        },
        {
          "body": "进入主力环境前先完成安装入口与风险边界验证。",
          "code": "verify",
          "title": "沙箱验证"
        }
      ],
      "subtitle": "LangMem helps agents learn and adapt from their interactions over time.",
      "title": "langmem 能力包",
      "trial_prompt": "# langmem - Prompt Preview\n\n> Copy the prompt below into your AI host before installing anything.\n> Its purpose is to let you safely feel the project's workflow, not to claim the project has already run.\n\n## Copy this prompt\n\n```text\nYou are using an independent Doramagic capability pack for langchain-ai/langmem.\n\nProject:\n- Name: langmem\n- Repository: https://github.com/langchain-ai/langmem\n- Summary: LangMem helps agents learn and adapt from their interactions over time.\n- Host target: claude, chatgpt\n\nGoal:\nHelp me evaluate this project for the following task without installing it yet: LangMem helps agents learn and adapt from their interactions over time.\n\nBefore taking action:\n1. Restate my task, success standard, and boundary.\n2. Identify whether the next step requires tools, browser access, network access, filesystem access, credentials, package installation, or host configuration.\n3. Use only the Doramagic Project Pack, the upstream repository, and the source-linked evidence listed below.\n4. If a real command, install step, API call, file write, or host integration is required, mark it as \"requires post-install verification\" and ask for approval first.\n5. If evidence is missing, say \"evidence is missing\" instead of filling the gap.\n\nPreviewable capabilities:\n- Capability 1: LangMem helps agents learn and adapt from their interactions over time.\n\nCapabilities that require post-install verification:\n- Capability 1: Use the source-backed project context to guide one small, checkable workflow step.\n\nCore service flow:\n1. system-architecture: System Architecture. Produce one small intermediate artifact and wait for confirmation.\n2. core-concepts: Core Concepts. Produce one small intermediate artifact and wait for confirmation.\n3. memory-tools: Memory Tools - Hot Path Management. Produce one small intermediate artifact and wait for confirmation.\n4. background-memory-manager: Background Memory Manager. Produce one small intermediate artifact and wait for confirmation.\n5. prompt-optimization: Prompt Optimization. Produce one small intermediate artifact and wait for confirmation.\n\nSource-backed evidence to keep in mind:\n- https://github.com/langchain-ai/langmem\n- https://github.com/langchain-ai/langmem#readme\n- src/langmem/__init__.py\n- src/langmem/knowledge/__init__.py\n- src/langmem/prompts/__init__.py\n- src/langmem/short_term/__init__.py\n- langgraph.json\n- src/langmem/utils.py\n- src/langmem/knowledge/extraction.py\n- src/langmem/prompts/types.py\n\nFirst response rules:\n1. Start Step 1 only.\n2. Explain the one service action you will perform first.\n3. Ask exactly three questions about my target workflow, success standard, and sandbox boundary.\n4. Stop and wait for my answers.\n\nStep 1 follow-up protocol:\n- After I answer the first three questions, stay in Step 1.\n- Produce six parts only: clarified task, success standard, boundary conditions, two or three options, tradeoffs for each option, and one recommendation.\n- End by asking whether I confirm the recommendation.\n- Do not move to Step 2 until I explicitly confirm.\n\nConversation rules:\n- Advance one step at a time and wait for confirmation after each small artifact.\n- Write outputs as recommendations or planned checks, not as completed execution.\n- Do not claim tests passed, files changed, commands ran, APIs were called, or the project was installed.\n- If the user asks for execution, first provide the sandbox setup, expected output, rollback, and approval checkpoint.\n```\n",
      "voices": [
        {
          "body": "来源平台：github。github/github_issue: Persistence?（https://github.com/langchain-ai/langmem/issues/154）；github/github_issue: Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)（https://github.com/langchain-ai/langmem/issues/164）；github/github_issue: Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)（https://github.com/langchain-ai/langmem/issues/163）；github/github_issue: Enhance error message when summarization fails due to missing HumanMessa（https://github.com/langchain-ai/langmem/issues/156）；github/github_issue: GRAPH_RECURSION_LIMIT（https://github.com/langchain-ai/langmem/issues/133）。这些是项目级外部声音，不作为单独质量证明。",
          "items": [
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Persistence?",
              "url": "https://github.com/langchain-ai/langmem/issues/154"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)",
              "url": "https://github.com/langchain-ai/langmem/issues/164"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)",
              "url": "https://github.com/langchain-ai/langmem/issues/163"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Enhance error message when summarization fails due to missing HumanMessa",
              "url": "https://github.com/langchain-ai/langmem/issues/156"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "GRAPH_RECURSION_LIMIT",
              "url": "https://github.com/langchain-ai/langmem/issues/133"
            }
          ],
          "status": "已收录 5 条来源",
          "title": "社区讨论"
        }
      ]
    },
    "homepage_card": {
      "category": "软件开发与交付",
      "desc": "LangMem helps agents learn and adapt from their interactions over time.",
      "effort": "安装已验证",
      "forks": 167,
      "icon": "code",
      "name": "langmem 能力包",
      "risk": "可发布",
      "slug": "langmem",
      "stars": 1453,
      "tags": [
        "知识检索",
        "知识库问答",
        "流程自动化",
        "断点恢复流程",
        "评测体系"
      ],
      "thumb": "gray",
      "type": "MCP 配置"
    },
    "manual": {
      "markdown": "# https://github.com/langchain-ai/langmem Project Manual\n\nGenerated on: 2026-05-21 17:59:02 UTC\n\n## Table of Contents\n\n- [Home - LangMem Overview](#home)\n- [Installation and Setup](#installation)\n- [System Architecture](#system-architecture)\n- [Core Concepts](#core-concepts)\n- [Memory Tools - Hot Path Management](#memory-tools)\n- [Background Memory Manager](#background-memory-manager)\n- [Short-term Memory and Summarization](#short-term-memory)\n- [Prompt Optimization](#prompt-optimization)\n- [Reflection Executor](#reflection-executor)\n- [LangGraph Integration](#langgraph-integration)\n\n<a id='home'></a>\n\n## Home - LangMem Overview\n\n### Related Pages\n\nRelated topics: [System Architecture](#system-architecture), [Core Concepts](#core-concepts), [Installation and Setup](#installation)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/prompts/gradient.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n</details>\n\n# Home - LangMem Overview\n\nLangMem is a library for **memory management** and **prompt optimization** in LLM applications. It provides tools for extracting, storing, and retrieving structured memories, as well as optimizing prompts based on conversation trajectories and feedback.\n\n## Core Concepts\n\nLangMem operates across two primary domains: **Long-Term Memory** (knowledge extraction and storage) and **Short-Term Memory** (conversation summarization), with a complementary **Prompt Optimization** system for improving LLM instructions.\n\n### Memory Architecture Overview\n\n```mermaid\ngraph TD\n    A[User Conversation] --> B[Memory Manager]\n    B --> C[Long-Term Memory Store]\n    B --> D[Short-Term Summarization]\n    \n    E[Search/Retrieval] --> C\n    F[Prompt Optimizer] --> G[Optimized Prompts]\n    \n    C --> H[Structured Memories]\n    D --> I[Running Summary]\n```\n\n## Components\n\n### Memory Types\n\nLangMem provides several specialized memory components for different use cases.\n\n| Component | File Location | Purpose |\n|-----------|--------------|---------|\n| `MemoryManager` | `src/langmem/knowledge/extraction.py` | Extracts and manages long-term memories from conversations |\n| `MemoryStoreManager` | `src/langmem/knowledge/extraction.py` | Manages memories with persistent storage (LangGraph BaseStore) |\n| `SummarizationNode` | `src/langmem/short_term/summarization.py` | Provides running summaries for short-term context |\n| `GradientPromptOptimizer` | `src/langmem/prompts/gradient.py` | Optimizes prompts using gradient-based reflection |\n\n### Data Models\n\nLangMem uses TypedDict classes for type-safe data structures.\n\n#### Prompt Structure\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\nSource: [`src/langmem/prompts/types.py:7-22`]()\n\n#### Annotated Trajectory\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage]\n    feedback: dict[str, typing.Any] | str\n```\n\nSource: [`src/langmem/prompts/types.py:24-43`]()\n\n## Memory Management\n\n### Creating a Memory Manager\n\n```python\nfrom langmem import create_memory_manager\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n    enable_inserts=True,\n    enable_updates=True,\n    enable_deletes=True,\n)\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n### Memory Store with LangGraph Integration\n\nThe `MemoryStoreManager` integrates with LangGraph's BaseStore for persistent memory storage.\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n### Search Flow with Query Model\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Manager\n    participant QueryLLM\n    participant Store\n    participant MainLLM\n\n    Client->>Manager: messages\n    Manager->>QueryLLM: generate search query\n    QueryLLM-->>Manager: optimized query\n    Manager->>Store: find memories\n    Store-->>Manager: memories\n    Manager->>MainLLM: analyze & extract\n    MainLLM-->>Manager: memory updates\n    Manager->>Store: apply changes\n    Manager-->>Client: result\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n## Short-Term Memory\n\n### Summarization Node\n\nThe `SummarizationNode` provides running summaries for managing conversation context within a LangGraph workflow.\n\n```python\nfrom langmem.short_term import SummarizationNode, RunningSummary\n\nsummarization_node = SummarizationNode(\n    model=summarization_model,\n    max_tokens=256,\n    max_tokens_before_summary=256,\n    max_summary_tokens=128,\n)\n```\n\nSource: [`src/langmem/short_term/summarization.py`]()\n\n### State Update Format\n\nThe summarization node returns updates in this format:\n\n```json\n{\n    \"output_messages_key\": \"<list of updated messages>\",\n    \"context\": {\"running_summary\": \"<RunningSummary object>\"}\n}\n```\n\nSource: [`src/langmem/short_term/summarization.py`]()\n\n## Prompt Optimization\n\nLangMem provides multiple prompt optimization strategies through the `create_prompt_optimizer` and `create_multi_prompt_optimizer` functions.\n\n### Optimization Strategies\n\n| Strategy | Description | Configuration |\n|----------|-------------|---------------|\n| `gradient` | Hypothesis-driven optimization with reflection loops | `max_reflection_steps`, `min_reflection_steps` |\n| `metaprompt` | Meta-learning based on conversation patterns | Optional reflection step control |\n| `prompt_memory` | Learns from successful conversation patterns | No additional config |\n\nSource: [`src/langmem/prompts/optimization.py`]()\n\n### Single Prompt Optimization\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\n\ntrajectories = [(conversation, feedback)]\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [`src/langmem/prompts/optimization.py`]()\n\n### Multi-Prompt Optimization\n\n```python\nfrom langmem import create_multi_prompt_optimizer\n\noptimizer = create_multi_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"metaprompt\",\n    config={\"max_reflection_steps\": 3, \"min_reflection_steps\": 1},\n)\n\nbetter_prompts = await optimizer.ainvoke({\n    \"trajectories\": trajectories,\n    \"prompts\": prompts\n})\n```\n\nSource: [`src/langmem/prompts/optimization.py`]()\n\n### Gradient Optimizer Workflow\n\n```mermaid\ngraph TD\n    A[Current Prompt] --> B[Generate Hypotheses]\n    B --> C[Hypothesis Analysis]\n    C --> D{Reflection Loop}\n    D -->|Within steps| E[Generate Recommendations]\n    E --> F[Apply Adjustments]\n    F --> D\n    D -->|Complete| G[Optimized Prompt]\n```\n\nSource: [`src/langmem/prompts/gradient.py`]()\n\n## Memory Tools\n\nLangMem provides standalone tools for memory management in agent workflows.\n\n### Create Manage Memory Tool\n\n```python\nfrom langmem import create_manage_memory_tool\nfrom langgraph.prebuilt import create_react_agent\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [`src/langmem/knowledge/tools.py`]()\n\n### Create Search Memory Tool\n\n```python\nfrom langmem import create_search_memory_tool\n\nsearch_tool = create_search_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n\nmemories, _ = await search_tool.ainvoke(\n    {\"query\": \"Python preferences\", \"limit\": 5}\n)\n```\n\nSource: [`src/langmem/knowledge/tools.py`]()\n\n### Tool Configuration Options\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `namespace` | `tuple[str, ...]` | Hierarchical path for memory organization |\n| `actions_permitted` | `list[str]` | Limit actions (create, update, delete) |\n| `schema` | `BaseModel` | Custom memory schema |\n| `query_limit` | `int` | Maximum results to retrieve (default: 10) |\n\nSource: [`src/langmem/knowledge/tools.py`]()\n\n## Usage Patterns\n\n### Standalone Usage\n\nLangMem can be used independently of LangGraph:\n\n```python\nfrom langmem import create_memory_manager\nfrom langmem.schemas import PreferenceMemory\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n)\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\nmemories = await manager.ainvoke({\"messages\": conversation})\n```\n\nSource: [`examples/standalone_examples/README.md`]()\n\n### LangGraph Integration\n\n```python\nfrom langgraph.func import entrypoint\nfrom langgraph.store.memory import InMemoryStore\n\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that\"}\n    await manager.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n## Configuration\n\n### Memory Namespaces\n\nNamespaces use runtime configuration with placeholders:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n\n# Runtime config\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\n# Results in: (\"memories\", \"user123\")\n```\n\nSource: [`src/langmem/knowledge/extraction.py`](), [`src/langmem/knowledge/tools.py`]()\n\n### Default Memory Values\n\nProvide fallback values when no memories are found:\n\n```python\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    default=\"Use a concise and professional tone in all responses.\",\n)\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n## API Reference\n\n### Core Functions\n\n| Function | Return Type | Purpose |\n|----------|-------------|---------|\n| `create_memory_manager` | `MemoryManager` | Extract memories from conversations |\n| `create_memory_searcher` | `Runnable` | Search for relevant memories |\n| `create_memory_store_manager` | `MemoryStoreManager` | Memory with persistent storage |\n| `create_prompt_optimizer` | `Runnable` | Optimize single prompts |\n| `create_multi_prompt_optimizer` | `Runnable` | Optimize multiple prompts |\n| `create_manage_memory_tool` | `BaseTool` | Memory management tool for agents |\n| `create_search_memory_tool` | `BaseTool` | Memory search tool for agents |\n\nSource: [`src/langmem/knowledge/extraction.py`](), [`src/langmem/prompts/optimization.py`](), [`src/langmem/knowledge/tools.py`]()\n\n## Installation and Setup\n\n```bash\nuv venv\nsource .venv/bin/activate\nuv sync\n```\n\nSet your API key:\n\n```bash\nexport OPENAI_API_KEY=your_api_key_here\n```\n\nSource: [`examples/standalone_examples/README.md`]()\n\n## Summary\n\nLangMem provides a comprehensive toolkit for managing both long-term and short-term memory in LLM applications:\n\n- **Long-Term Memory**: Extract, store, search, and update structured memories using memory managers and tools\n- **Short-Term Memory**: Summarize conversations with the SummarizationNode for efficient context management\n- **Prompt Optimization**: Improve prompts using gradient, metaprompt, or memory-based strategies\n- **Agent Integration**: Tools work seamlessly with LangGraph's prebuilt agents and store infrastructure\n\n---\n\n<a id='installation'></a>\n\n## Installation and Setup\n\n### Related Pages\n\nRelated topics: [Home - LangMem Overview](#home), [LangGraph Integration](#langgraph-integration)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [pyproject.toml](https://github.com/langchain-ai/langmem/blob/main/pyproject.toml)\n- [README.md](https://github.com/langchain-ai/langmem/blob/main/README.md)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n</details>\n\n# Installation and Setup\n\n## Overview\n\nLangMem is a Python library for memory management and prompt optimization in LLM applications. The library provides components for short-term summarization, long-term memory storage, and prompt optimization. This page covers the complete installation process, dependencies, environment configuration, and setup for both basic and advanced usage scenarios.\n\n## Prerequisites\n\nBefore installing LangMem, ensure your environment meets the following requirements:\n\n| Requirement | Minimum Version | Notes |\n|-------------|-----------------|-------|\n| Python | 3.10+ | Required for modern typing features |\n| pip/uv | Latest recommended | Package manager for installation |\n| API Keys | Provider-specific | OpenAI, Anthropic, or other LLM providers |\n\nLangMem depends on the LangChain and LangGraph ecosystems. The library is designed to integrate seamlessly with LangGraph's state management and memory store abstractions. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Installation Methods\n\n### Using pip\n\nInstall LangMem directly from PyPI:\n\n```bash\npip install langmem\n```\n\n### Using uv (Recommended)\n\nFor faster dependency resolution and better workspace management:\n\n```bash\nuv pip install langmem\n```\n\n### Development Installation\n\nFor contributors or those wanting the latest unreleased features:\n\n```bash\n# Clone the repository\ngit clone https://github.com/langchain-ai/langmem.git\ncd langmem\n\n# Create virtual environment\nuv venv\nsource .venv/bin/activate\n\n# Install with all dependencies\nuv sync\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Core Dependencies\n\nLangMem relies on several key packages from the Python AI ecosystem:\n\n| Package | Purpose | Import Usage |\n|---------|---------|--------------|\n| `langchain-core` | Base chat models and message types | `from langchain_core.messages import AnyMessage` |\n| `langgraph` | State management and store abstractions | `from langgraph.store.memory import InMemoryStore` |\n| `pydantic` | Data validation and schema definitions | `class UserProfile(BaseModel)` |\n| `typing_extensions` | Enhanced typing support | `from typing_extensions import Required, TypedDict` |\n\nThe library uses `TypedDict` with `Required` for type-safe prompt and trajectory definitions. Source: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### Optional Dependencies\n\nDepending on your use case, you may need additional packages:\n\n```bash\n# For OpenAI integration\npip install langchain-openai\n\n# For Anthropic integration\npip install langchain-anthropic\n\n# For vector store with embeddings\npip install langchain-openai  # includes embedding support\n```\n\n## Environment Configuration\n\n### API Key Setup\n\nLangMem requires API access to language model providers. Set your API keys as environment variables:\n\n```bash\n# For OpenAI\nexport OPENAI_API_KEY=your_api_key_here\n\n# For Anthropic\nexport ANTHROPIC_API_KEY=your_api_key_here\n```\n\nAlternatively, pass API keys directly when configuring models:\n\n```python\nfrom langmem import create_memory_manager\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",  # Model identifier\n    schemas=[PreferenceMemory],\n)\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n### Runtime Configuration\n\nLangMem uses runtime configuration through `RunnableConfig` for namespace and store management:\n\n```python\nfrom langgraph.config import get_config, get_store\n\n# Configure namespace with user-specific identifiers\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\n\n# Access the store within LangGraph context\nstore = get_store()\n```\n\n## Project Structure\n\nUnderstanding the module organization helps with imports and customization:\n\n```\nlangmem/\n├── knowledge/           # Long-term memory management\n│   ├── extraction.py     # Memory extraction and management\n│   └── tools.py          # Memory tools for agents\n├── prompts/             # Prompt optimization\n│   ├── types.py         # TypedDict definitions\n│   ├── optimization.py  # Prompt optimization logic\n│   ├── gradient.py      # Gradient-based optimization\n│   └── prompt.py        # Prompt templates\n└── short_term/          # Short-term memory\n    └── summarization.py # Conversation summarization\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## Quick Start Setup\n\n### 1. Basic Memory Manager Setup\n\n```python\nfrom langmem import create_memory_manager\nfrom pydantic import BaseModel\n\n# Define your memory schema\nclass PreferenceMemory(BaseModel):\n    preference: str\n    context: str | None = None\n\n# Create the memory manager\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n)\n\n# Process a conversation\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\nmemories = await manager.ainvoke({\"messages\": conversation})\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### 2. Memory Store with Vector Embeddings\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langgraph.store.memory import InMemoryStore\n\n# Create store with embedding configuration\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n# Create store manager with namespace\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### 3. Standalone Example Setup\n\nFor use outside of LangGraph:\n\n```python\n# custom_store_example.py\nfrom langmem import create_memory_manager\nfrom pydantic import BaseModel\n\nclass PreferenceMemory(BaseModel):\n    category: str\n    preference: str\n    context: str\n\nmanager = create_memory_manager(\n    \"openai:gpt-4o\",\n    schemas=[PreferenceMemory],\n)\n\n# Process and store memories\nconversation = [\n    {\"role\": \"user\", \"content\": \"User prefers dark mode in all applications.\"},\n]\nmemories = await manager.ainvoke({\"messages\": conversation})\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Integration Setup\n\n### LangGraph Agent Integration\n\n```python\nfrom langgraph.prebuilt import create_react_agent\nfrom langmem import create_memory_store_manager, create_manage_memory_tool\n\n# Create memory manager\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\n# Create agent with memory tool\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(\n            namespace=(\"memories\", \"{langgraph_user_id}\"),\n            actions_permitted=[\"create\", \"update\"],\n        ),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Prompt Optimizer Setup\n\n```python\nfrom langmem import create_prompt_optimizer\n\n# Initialize optimizer\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\n\n# Optimize a prompt with conversation history\ntrajectories = [(conversation, feedback)]\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### Summarization Node Setup\n\n```python\nfrom langmem.short_term import SummarizationNode, RunningSummary\nfrom langchain_openai import ChatOpenAI\n\nmodel = ChatOpenAI(model=\"gpt-4o\")\nsummarization_model = model.bind(max_tokens=128)\n\nsummarization_node = SummarizationNode(\n    model=summarization_model,\n    max_tokens=256,\n    max_tokens_before_summary=256,\n    max_summary_tokens=128,\n)\n```\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n\n## Configuration Options\n\n### Memory Manager Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Language model for memory processing |\n| `schemas` | `list[type]` | Required | Pydantic models for memory structure |\n| `instructions` | `str` | `None` | Custom instructions for extraction |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_updates` | `bool` | `True` | Allow updating existing memories |\n| `enable_deletes` | `bool` | `True` | Allow deleting memories |\n\n### Memory Store Manager Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `query_model` | `str \\| BaseChatModel` | `None` | Separate model for search queries |\n| `query_limit` | `int` | `10` | Number of memories to retrieve |\n| `default` | `Any` | `None` | Default memory value if none found |\n| `default_factory` | `Callable` | `None` | Factory for default memory creation |\n| `namespace` | `tuple[str, ...]` | `(\"memories\", \"{langgraph_user_id}\")` | Storage namespace |\n\n### Prompt Optimizer Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `kind` | `Literal[\"metaprompt\", \"prompt_memory\"]` | Required | Optimization strategy |\n| `max_reflection_steps` | `int` | `3` | Maximum reflection iterations |\n| `min_reflection_steps` | `int` | `1` | Minimum reflection iterations |\n\n## Verification and Testing\n\nAfter installation, verify your setup:\n\n```bash\n# Check version\npython -c \"import langmem; print(langmem.__version__)\"\n\n# Run standalone examples\ncd examples/standalone_examples\nuv run custom_store_example.py\n```\n\nExpected output:\n```\nStarting custom store example...\nProcessing conversation...\nStored memories:\nMemory 31cf472f-3491-4f0c-82ec-09b4fe409cfd:\nContent: {'category': 'User Preference', 'preference': 'Dark Mode', ...}\nExample completed.\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Troubleshooting\n\n### Common Installation Issues\n\n**Missing dependencies:**\n```bash\n# Reinstall with all dependencies\nuv sync\n# or\npip install langmem[all]\n```\n\n**API key not found:**\n```python\n# Verify environment variable is set\nimport os\nprint(os.environ.get(\"OPENAI_API_KEY\"))\n```\n\n**LangGraph store not initialized:**\n```python\n# Ensure store is passed to agent\nagent = create_react_agent(\n    model,\n    tools=[...],\n    store=store,  # Must be provided\n)\n```\n\n### Import Errors\n\nIf you encounter import errors, ensure all required packages are installed:\n\n```bash\npip install langchain-core langgraph pydantic typing-extensions\n```\n\n## Next Steps\n\nAfter completing installation and setup:\n\n1. Review the [Memory Management](../concepts/memory_management.md) guide\n2. Explore [Prompt Optimization](../concepts/prompt_optimization.md)\n3. Try the [Standalone Examples](https://github.com/langchain-ai/langmem/tree/main/examples/standalone_examples)\n4. Integrate with your existing LangGraph application\n\n---\n\n<a id='system-architecture'></a>\n\n## System Architecture\n\n### Related Pages\n\nRelated topics: [Core Concepts](#core-concepts), [Memory Tools - Hot Path Management](#memory-tools), [Prompt Optimization](#prompt-optimization)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\n- [src/langmem/knowledge/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/__init__.py)\n- [src/langmem/prompts/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/__init__.py)\n- [src/langmem/short_term/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [langgraph.json](https://github.com/langchain-ai/langmem/blob/main/langgraph.json)\n</details>\n\n# System Architecture\n\nLangMem is a library designed to enhance AI agents with memory capabilities and prompt optimization. The system architecture consists of three primary modules: **Knowledge** (long-term memory), **Short-term** (session summarization), and **Prompts** (optimization). These modules work together to enable AI agents to store, retrieve, and optimize information over time.\n\n## Overview\n\nLangMem provides a layered architecture that separates concerns across memory management, prompt optimization, and state summarization. The library integrates with LangGraph's store infrastructure and supports both synchronous and asynchronous operations.\n\n```mermaid\ngraph TD\n    A[AI Agent] --> B[LangMem Core]\n    B --> C[Prompts Module]\n    B --> D[Knowledge Module]\n    B --> E[Short-term Module]\n    C --> F[Prompt Optimization]\n    C --> G[Multi-Prompt Optimization]\n    D --> H[Memory Manager]\n    D --> I[Memory Tools]\n    D --> J[Store Manager]\n    E --> K[Summarization Node]\n    J --> L[LangGraph BaseStore]\n    H --> L\n```\n\n## Core Modules\n\n### 1. Prompts Module\n\nThe Prompts module handles prompt management and optimization strategies. It defines core types and provides factories for creating prompt optimizers.\n\n#### Key Components\n\n| Component | File | Purpose |\n|-----------|------|---------|\n| `Prompt` | `types.py` | TypedDict for structured prompt management |\n| `AnnotatedTrajectory` | `types.py` | NamedTuple for conversation history with feedback |\n| `PromptOptimizerInput` | `types.py` | Input schema for single prompt optimization |\n| `MultiPromptOptimizerInput` | `types.py` | Input schema for multi-prompt optimization |\n| `INSTRUCTION_REFLECTION_PROMPT` | `prompt.py` | Template for prompt reflection |\n| `create_prompt_optimizer` | `optimization.py` | Factory for single prompt optimizer |\n| `create_multi_prompt_optimizer` | `optimization.py` | Factory for multi-prompt optimizer |\n\nSource: [src/langmem/prompts/types.py:1-94](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\nSource: [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n#### Data Flow: Prompt Optimization\n\n```mermaid\nsequenceDiagram\n    participant U as User\n    participant O as Prompt Optimizer\n    participant M as Memory\n    participant P as Prompt Store\n\n    U->>O: Trajectories + Current Prompt\n    O->>M: Extract Patterns\n    M-->>O: Success Patterns\n    O->>P: Apply Optimization\n    P-->>O: Optimized Prompt\n    O-->>U: Updated Prompt\n```\n\n### 2. Knowledge Module\n\nThe Knowledge module implements long-term memory management using LangGraph's BaseStore. It supports extraction, storage, search, and manipulation of memories.\n\n#### Key Components\n\n| Component | File | Purpose |\n|-----------|------|---------|\n| `create_memory_manager` | `extraction.py` | Creates a memory manager for extraction and synthesis |\n| `create_memory_searcher` | `extraction.py` | Creates a search pipeline with automatic query generation |\n| `create_memory_store_manager` | `extraction.py` | Creates a store-based memory manager |\n| `create_manage_memory_tool` | `tools.py` | Creates a LangGraph tool for memory CRUD operations |\n| `create_search_memory_tool` | `tools.py` | Creates a search tool for memory retrieval |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n#### Memory Manager Architecture\n\n```mermaid\ngraph TD\n    A[Input: Messages + Existing Memories] --> B[Memory Manager]\n    B --> C[Extract Tool Calls]\n    C --> D{Done?}\n    D -->|No| E[Invoke Extractor]\n    E --> F[Process Responses]\n    F --> G{More Steps?}\n    G -->|Yes| D\n    G -->|No| H[Update Memories]\n    D -->|Yes| H\n    H --> I[Return Updated Memories]\n```\n\n#### Factory Functions\n\n| Function | Return Type | Description |\n|----------|-------------|-------------|\n| `create_memory_manager` | `MemoryManager` | Core extraction and synthesis with configurable schemas |\n| `create_memory_searcher` | `Runnable[MessagesState, Awaitable[list[SearchItem]]]` | Search pipeline with query generation |\n| `create_memory_store_manager` | `MemoryStoreManager` | Direct store operations with search |\n| `create_manage_memory_tool` | `Tool` | LangGraph tool for CRUD operations |\n| `create_search_memory_tool` | `Tool` | LangGraph tool for memory search |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### 3. Short-term Module\n\nThe Short-term module provides session-level summarization to compress conversation history into maintainable state.\n\n#### Key Components\n\n| Component | File | Purpose |\n|-----------|------|---------|\n| `SummarizationNode` | `summarization.py` | LangGraph node for message summarization |\n| `RunningSummary` | `summarization.py` | State container for running summaries |\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n\n## Type System\n\n### Prompt TypedDict\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | `str` | Yes | Unique identifier for the prompt |\n| `prompt` | `str` | Yes | The actual prompt content |\n| `update_instructions` | `str \\| None` | No | Guidelines for modifying the prompt |\n| `when_to_update` | `str \\| None` | No | Dependencies between prompts during optimization |\n\nSource: [src/langmem/prompts/types.py:9-38](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### AnnotatedTrajectory\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage] | str\n    feedback: str | None = None\n```\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `messages` | `Sequence[AnyMessage] \\| str` | Conversation history |\n| `feedback` | `str \\| None` | Optional feedback for optimization |\n\nSource: [src/langmem/prompts/types.py:40-65](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## Memory Management Workflow\n\n### Extraction Pipeline\n\nThe memory manager uses a multi-step extraction process that iteratively invokes an extractor tool until completion:\n\n```mermaid\nsequenceDiagram\n    participant C as Client\n    participant M as Memory Manager\n    participant E as Extractor\n    participant S as Store\n\n    C->>M: Messages + Existing Memories\n    M->>E: Invoke with tools\n    E-->>M: Response with tool calls\n    M->>M: Process results\n    M->>S: Apply changes\n    M-->>C: Updated memories\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Search Pipeline\n\nThe searcher generates optimized queries and retrieves semantically similar memories:\n\n```mermaid\nsequenceDiagram\n    participant C as Client\n    participant S as Searcher\n    participant Q as Query LLM\n    participant T as Store\n\n    C->>S: Query context\n    S->>Q: Generate search query\n    Q-->>S: Optimized query\n    S->>T: Search memories\n    T-->>S: Results\n    S-->>C: Ranked memories\n```\n\n## Tool Integration\n\nLangMem provides LangGraph-native tools that connect to the BaseStore:\n\n### Manage Memory Tool\n\n```python\ncreate_manage_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n    schema=PreferenceMemory,\n    actions_permitted=[\"create\", \"update\", \"delete\"],\n    instructions=\"Update user preferences based on shared information.\"\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Search Memory Tool\n\n```python\ncreate_search_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\n## Namespace Configuration\n\nMemories are organized using hierarchical namespaces that support runtime configuration:\n\n| Pattern | Description |\n|---------|-------------|\n| `(\"memories\", \"{langgraph_user_id}\")` | User-specific memories |\n| `(\"memories\", \"{langgraph_user_id}\", \"user_profile\")` | User profile memories |\n| `(\"project_memories\", \"{langgraph_user_id}\")` | Project-scoped memories |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Entry Points\n\nThe library exposes a clean public API through `__init__.py` files in each module:\n\n| Module | Exports |\n|--------|---------|\n| `langmem` | Memory creation, extraction, and optimization |\n| `langmem.prompts` | Prompt types and optimization |\n| `langmem.knowledge` | Memory managers and tools |\n| `langmem.short_term` | Summarization components |\n\nSource: [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\nSource: [src/langmem/prompts/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/__init__.py)\nSource: [src/langmem/knowledge/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/__init__.py)\nSource: [src/langmem/short_term/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py)\n\n## Integration with LangGraph\n\nLangMem is designed to work seamlessly with LangGraph through:\n\n1. **BaseStore Integration**: Memory operations use LangGraph's `BaseStore` interface\n2. **Tool Protocol**: All tools follow LangGraph's tool conventions\n3. **Runnable Interface**: Managers implement `Runnable` for composable pipelines\n4. **Checkpoint Compatibility**: Summarization nodes integrate with LangGraph's state management\n\n```python\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    manager = create_memory_store_manager(\"anthropic:claude-3-5-sonnet-latest\")\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that\"}\n    await manager.ainvoke({\"messages\": [{\"role\": \"user\", \"content\": message}, response]})\n    return response\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n<a id='core-concepts'></a>\n\n## Core Concepts\n\n### Related Pages\n\nRelated topics: [System Architecture](#system-architecture), [Memory Tools - Hot Path Management](#memory-tools), [Background Memory Manager](#background-memory-manager)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/utils.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/utils.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/prompts/prompt.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/prompt.py)\n- [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n</details>\n\n# Core Concepts\n\nLangMem is a library for memory management and prompt optimization in LLM applications. This page explains the foundational concepts that underpin the library's architecture, including type systems, memory management strategies, and prompt optimization approaches.\n\n## Overview\n\nLangMem provides two primary capabilities:\n\n1. **Memory Management** - Storing, retrieving, and managing conversation context and user preferences\n2. **Prompt Optimization** - Improving LLM prompts based on conversation trajectories and feedback\n\nThe library is designed to integrate with [LangGraph](https://github.com/langchain-ai/langgraph) while also supporting standalone usage in custom applications. Source: [src/langmem/knowledge/extraction.py:1-50]()\n\n## Type System\n\nLangMem defines a robust type system for managing prompts and conversation data. These types serve as the foundation for all optimization and memory operations.\n\n### The Prompt Type\n\nThe `Prompt` TypedDict represents a structured prompt with metadata for optimization control.\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | `str` | Yes | Unique identifier for the prompt |\n| `prompt` | `str` | Yes | The actual prompt content |\n| `update_instructions` | `str \\| None` | No | Guidelines for modifying the prompt |\n| `when_to_update` | `str \\| None` | No | Dependencies or triggers for updates |\n\nSource: [src/langmem/prompts/types.py:10-40]()\n\n**Example usage:**\n\n```python\nfrom langmem import Prompt\n\nprompt = Prompt(\n    name=\"extract_entities\",\n    prompt=\"Extract key entities from the text:\",\n    update_instructions=\"Make minimal changes, only address where errors have occurred.\",\n    when_to_update=\"If there seem to be errors in recall of named entities.\",\n)\n```\n\n### AnnotatedTrajectory\n\nThe `AnnotatedTrajectory` NamedTuple captures conversation history with optional feedback for optimization.\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage]\n    feedback: dict[str, str | int | bool] | str | None = None\n```\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `messages` | `Sequence[AnyMessage]` | List of conversation messages |\n| `feedback` | `dict \\| str \\| None` | Optional feedback for analysis |\n\nSource: [src/langmem/prompts/types.py:56-70]()\n\n### OptimizerInput Types\n\nLangMem provides two input types for prompt optimization:\n\n#### Single Prompt Optimization\n\n```python\nclass OptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompt: str | Prompt\n```\n\n#### Multi-Prompt Optimization\n\n```python\nclass MultiPromptOptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompts: list[Prompt]\n```\n\nSource: [src/langmem/prompts/types.py:73-120]()\n\n## Memory Management\n\nLangMem provides a hierarchical memory management system for storing and retrieving conversation context.\n\n### Architecture Overview\n\n```mermaid\ngraph TD\n    A[Conversation Messages] --> B[Memory Manager]\n    B --> C[Memory Store]\n    D[User Query] --> E[Memory Searcher]\n    E --> F[Retrieved Memories]\n    C --> F\n    F --> G[LLM Response]\n```\n\n### MemoryManager\n\nThe `MemoryManager` class handles in-memory operations for memory extraction and updates.\n\n**Creation via factory function:**\n\n```python\nfrom langmem import create_memory_manager\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n    enable_inserts=True,\n    enable_updates=True,\n    enable_deletes=True,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py:200-250]()\n\n**Supported Operations:**\n\n| Operation | Description |\n|-----------|-------------|\n| `ainvoke` | Asynchronously process messages and update memories |\n| `ainvoke({\"messages\": conversation, \"max_steps\": 3})` | Set max reflection steps for extraction |\n\n### MemoryStoreManager\n\nThe `MemoryStoreManager` extends memory capabilities with persistent storage integration using LangGraph's `BaseStore`.\n\n**Creation:**\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py:50-100]()\n\n**Namespace Configuration:**\n\nNamespaces use runtime configuration with placeholders:\n\n| Format | Description |\n|--------|-------------|\n| `(\"memories\", \"{langgraph_user_id}\")` | User-specific memories |\n\n### Memory Search Pipeline\n\nThe `create_memory_searcher` function creates a search pipeline with automatic query generation.\n\n```python\nfrom langmem import create_memory_searcher\n\nsearcher = create_memory_searcher(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    prompt=\"Search for distinct memories relevant to different aspects of the provided context.\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py:280-320]()\n\n### Memory Search Flow\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Manager\n    participant QueryLLM\n    participant Store\n    participant MainLLM\n\n    Client->>Manager: messages\n    Manager->>QueryLLM: generate search query\n    QueryLLM-->>Manager: optimized query\n    Manager->>Store: find memories\n    Store-->>Manager: memories\n    Manager->>MainLLM: analyze & extract\n    MainLLM-->>Manager: memory updates\n    Manager->>Store: apply changes\n    Manager-->>Client: result\n```\n\n### Memory Tools for LangGraph\n\nLangMem provides pre-built tools for integration with LangGraph's `create_react_agent`.\n\n#### Manage Memory Tool\n\n```python\nfrom langmem import create_manage_memory_tool\n\ntool = create_manage_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n    schema=PreferenceMemory,\n    actions_permitted=[\"create\", \"update\", \"delete\"],\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:50-100]()\n\n#### Search Memory Tool\n\n```python\nfrom langmem import create_search_memory_tool\n\nsearch_tool = create_search_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:200-250]()\n\n### Memory Layer\n\nThe `MemoryLayer` class provides a declarative API for composing memory capabilities in prompts.\n\n```python\nclass MemoryLayer(Runnable):\n    __slots__ = (\n        \"name\",\n        \"namespace\",\n        \"kind\",\n        \"update_instructions\",\n        \"schemas\",\n        \"limit\",\n        \"_manager_tool\",\n        \"_search_tool\",\n    )\n```\n\nSource: [src/langmem/prompts/_layers.py:20-35]()\n\n## Prompt Optimization\n\nLangMem provides multiple strategies for optimizing prompts based on conversation history and feedback.\n\n### Optimization Strategies\n\n| Strategy | Description |\n|----------|-------------|\n| `metaprompt` | Uses reflection-based optimization with configurable steps |\n| `prompt_memory` | Learns from past successful patterns |\n| `instruction_reflection` | Directly modifies prompts based on instructions |\n\n### Single Prompt Optimizer\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"metaprompt\",\n    config={\"max_reflection_steps\": 3, \"min_reflection_steps\": 1},\n)\n\n# Usage\ntrajectories = [(conversation, feedback)]\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [src/langmem/prompts/optimization.py:80-120]()\n\n### Multi-Prompt Optimizer\n\nFor optimizing multiple related prompts together:\n\n```python\nfrom langmem import create_multi_prompt_optimizer\n\noptimizer = create_multi_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"prompt_memory\",\n)\n\nprompts = [\n    {\"name\": \"explain\", \"prompt\": \"Explain the concept\"},\n    {\"name\": \"example\", \"prompt\": \"Provide a practical example\"},\n]\n\nbetter_prompts = await optimizer(trajectories, prompts)\n```\n\nSource: [src/langmem/prompts/optimization.py:150-200]()\n\n### Meta-Prompt Optimization Flow\n\n```mermaid\ngraph TD\n    A[Current Prompt + Trajectory] --> B[Reflection Steps]\n    B --> C{More iterations?}\n    C -->|Yes| D[Apply Instructions]\n    D --> B\n    C -->|No| E[Final Prompt]\n    \n    F[Max Steps Config] --> B\n    G[Min Steps Config] --> B\n```\n\n### Instruction Reflection Prompt\n\nThe instruction reflection mechanism uses structured prompts:\n\n```python\nINSTRUCTION_REFLECTION_PROMPT = \"\"\"You are helping an AI agent improve. You can do this by changing their system prompt.\n\nThese is their current prompt:\n<current_prompt>\n{current_prompt}\n</current_prompt>\n\nHere was the agent's trajectory:\n<trajectory>\n{trajectory}\n</trajectory>\n\nHere is the user's feedback:\n\n<feedback>\n{feedback}\n</feedback>\n\nHere are instructions for updating the agent's prompt:\n\n<instructions>\n{instructions}\n</instructions>\n\n\nBased on this, return an updated prompt\"\"\"\n```\n\nSource: [src/langmem/prompts/prompt.py:1-30]()\n\n### Response Schema\n\nThe optimization returns a structured response:\n\n```python\nclass GeneralResponse(TypedDict):\n    logic: str\n    update_prompt: bool\n    new_prompt: str\n```\n\nSource: [src/langmem/prompts/prompt.py:35-40]()\n\n## Integration Patterns\n\n### Standalone Usage\n\nLangMem can be used independently of LangGraph:\n\n```python\nfrom langmem import create_memory_manager, create_prompt_optimizer\n\n# Memory management\nmanager = create_memory_manager(\"anthropic:claude-3-5-sonnet-latest\")\nmemories = await manager.ainvoke({\"messages\": conversation})\n\n# Prompt optimization\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\nimproved = await optimizer.ainvoke({\"trajectories\": trajectories, \"prompt\": base})\n```\n\nSource: [examples/standalone_examples/README.md:1-50]()\n\n### LangGraph Integration\n\nLangMem integrates with LangGraph's agent and store infrastructure:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\nfrom langgraph.func import entrypoint\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\"))],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:60-80]()\n\n### Configuration Options\n\n#### Memory Manager Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Language model for memory processing |\n| `schemas` | `list[type[BaseModel]]` | `None` | Pydantic schemas for memory validation |\n| `instructions` | `str` | `None` | Custom instructions for the manager |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_updates` | `bool` | `True` | Allow updating existing memories |\n| `enable_deletes` | `bool` | `True` | Allow deleting memories |\n| `query_model` | `str \\| BaseChatModel` | `None` | Separate model for search queries |\n| `query_limit` | `int` | `10` | Maximum memories to retrieve |\n\nSource: [src/langmem/knowledge/extraction.py:50-120]()\n\n#### Prompt Optimizer Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `kind` | `Literal[\"metaprompt\", \"prompt_memory\", \"instruction_reflection\"]` | Required | Optimization strategy |\n| `config` | `dict` | `None` | Strategy-specific configuration |\n| `max_reflection_steps` | `int` | `3` | Maximum reflection iterations |\n| `min_reflection_steps` | `int` | `1` | Minimum reflection iterations |\n\nSource: [src/langmem/prompts/optimization.py:80-120]()\n\n## Summary\n\nLangMem's core concepts provide a comprehensive framework for:\n\n1. **Structured Prompt Management** - Using TypedDict types for prompts with metadata for optimization control\n2. **Memory Storage and Retrieval** - Persisting conversation context with namespace-based organization\n3. **Automatic Memory Extraction** - Using LLMs to extract and synthesize memories from conversations\n4. **Multi-Strategy Prompt Optimization** - Improving prompts through reflection, memory patterns, or instruction following\n\nThese concepts work together to enable intelligent, self-improving LLM applications that maintain context and continuously refine their behavior.\n\n---\n\n<a id='memory-tools'></a>\n\n## Memory Tools - Hot Path Management\n\n### Related Pages\n\nRelated topics: [Core Concepts](#core-concepts), [Background Memory Manager](#background-memory-manager), [LangGraph Integration](#langgraph-integration)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [examples/standalone_examples/custom_store_example.py](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/custom_store_example.py)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n</details>\n\n# Memory Tools - Hot Path Management\n\n## Overview\n\nMemory Tools in LangMem provide real-time, interactive capabilities for managing persistent memories during conversation execution. Unlike the background extraction pipeline (which processes conversation history asynchronously), Hot Path Management enables direct manipulation and retrieval of memories within the active conversation flow.\n\nThe hot path refers to the synchronous execution path where memories are created, updated, deleted, or searched in real-time as part of agent/tool interactions. This approach allows AI assistants to:\n\n- Persist newly discovered user preferences immediately\n- Update outdated memories when corrections occur\n- Delete irrelevant or incorrect memories\n- Search and retrieve relevant context on-demand\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Architecture\n\nThe Memory Tools system consists of three primary components that operate on the hot path:\n\n```mermaid\ngraph TD\n    A[Agent / Workflow] --> B[Manage Memory Tool]\n    A --> C[Search Memory Tool]\n    A --> D[Memory Searcher]\n    B --> E[LangGraph BaseStore]\n    C --> E\n    D --> E\n    E --> F[Namespace: memories, {user_id}]\n    E --> G[Namespace: project_memories, {user_id}]\n```\n\n### Component Responsibilities\n\n| Component | Purpose | Sync/Async |\n|-----------|---------|------------|\n| `create_manage_memory_tool` | CRUD operations for memories | Both |\n| `create_search_memory_tool` | Query-based memory retrieval | Both |\n| `create_memory_searcher` | LLM-powered query generation + search | Async |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py) and [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n## Manage Memory Tool\n\n### Purpose and Scope\n\nThe `create_manage_memory_tool` function creates a StructuredTool that enables AI assistants to perform Create, Update, and Delete (CRUD) operations on persistent memories directly within conversation flow. This tool is designed for proactive memory management where the agent identifies and records important context during interaction.\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Function Signature\n\n```python\ndef create_manage_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = \"Proactively call this tool when you:\\n\\n\"\n        \"1. Identify a new USER preference.\\n\"\n        \"2. Receive an explicit USER request to remember something or otherwise alter your behavior.\\n\"\n        \"3. Are working and want to record important context.\\n\"\n        \"4. Identify that an existing MEMORY is incorrect or outdated.\\n\",\n    schema: typing.Type = str,\n    actions_permitted: typing.Optional[\n        tuple[typing.Literal[\"create\", \"update\", \"delete\"], ...]\n    ] = (\"create\", \"update\", \"delete\"),\n    store: typing.Optional[BaseStore] = None,\n    name: str = \"manage_memory\",\n) -> StructuredTool\n```\n\n### Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `namespace` | `tuple[str, ...] \\| str` | Required | Namespace structure for organizing memories. Supports runtime placeholders like `{langgraph_user_id}`. |\n| `instructions` | `str` | Predefined guidelines | Custom instructions for when the agent should invoke the tool. |\n| `schema` | `Type` | `str` | Pydantic model defining the expected memory structure. |\n| `actions_permitted` | `tuple[Literal[\"create\", \"update\", \"delete\"], ...]` | All actions | Limits which operations the tool can perform. |\n| `store` | `BaseStore \\| None` | `None` | LangGraph BaseStore instance. Uses context store if not provided. |\n| `name` | `str` | `\"manage_memory\"` | Tool name for identification. |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Supported Actions\n\nThe tool dynamically generates its description based on `actions_permitted`:\n\n| Actions Config | Generated Description |\n|----------------|----------------------|\n| `(\"create\",)` | \"Create a memory to persist...\" |\n| `(\"create\", \"update\")` | \"Create or update a memory...\" |\n| `(\"create\", \"update\", \"delete\")` | \"Create, update, or delete a memory...\" |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Tool Function Interface\n\n```python\nasync def amanage_memory(\n    content: typing.Optional[schema] = None,\n    action: action_type = default_action,\n    *,\n    id: typing.Optional[uuid.UUID] = None,\n) -> str:\n    \"\"\"Execute memory management operation.\"\"\"\n    # content: Memory data (required for create/update)\n    # action: \"create\" | \"update\" | \"delete\"\n    # id: Memory UUID (required for update/delete)\n```\n\nThe tool supports both synchronous and asynchronous invocation patterns:\n\n```python\n# Sync usage\nresult = memory_tool.invoke({\"content\": {...}, \"action\": \"create\"})\n\n# Async usage  \nresult = await memory_tool.ainvoke({\"content\": {...}, \"action\": \"create\"})\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n---\n\n## Search Memory Tool\n\n### Purpose and Scope\n\nThe `create_search_memory_tool` function creates a tool for searching memories stored in a LangGraph BaseStore using semantic or exact matching. It returns both memory contents and raw memory objects for advanced usage scenarios.\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Function Signature\n\n```python\ndef create_search_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = _MEMORY_SEARCH_INSTRUCTIONS,\n    store: BaseStore | None = None,\n    response_format: typing.Literal[\"content\", \"content_and_artifact\"] = \"content\",\n    name: str = \"search_memory\",\n) -> StructuredTool\n```\n\n### Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `namespace` | `tuple[str, ...] \\| str` | Required | Namespace structure for organizing memories. |\n| `instructions` | `str` | Empty string | Custom instructions for search behavior. |\n| `store` | `BaseStore \\| None` | `None` | LangGraph BaseStore instance. |\n| `response_format` | `\"content\" \\| \"content_and_artifact\"` | `\"content\"` | Controls return format. |\n| `name` | `str` | `\"search_memory\"` | Tool name for identification. |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Response Formats\n\n```python\n# content: Returns serialized memory contents\nmemories = await search_tool.ainvoke({\"query\": \"Python preferences\", \"limit\": 5})\n\n# content_and_artifact: Returns (serialized memories, raw memories)\nmemories, artifacts = await search_tool.ainvoke({\n    \"query\": \"Python preferences\", \n    \"limit\": 5\n})\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Search Function Interface\n\n```python\nasync def asearch_memory(\n    query: str,\n    *,\n    limit: int = 10,\n    offset: int = 0,\n    filter: typing.Optional[dict] = None,\n):\n    \"\"\"Execute memory search operation.\"\"\"\n```\n\n---\n\n## Memory Searcher Pipeline\n\n### Purpose and Scope\n\nThe `create_memory_searcher` function builds a pipeline that combines query generation, memory search, and result ranking into a single component. Unlike the basic search tool, this pipeline uses an LLM to generate effective search queries based on conversation context.\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Function Signature\n\n```python\ndef create_memory_searcher(\n    model: str | BaseChatModel,\n    prompt: str = \"Search for distinct memories relevant to different aspects of the provided context.\",\n    *,\n    namespace: tuple[str, ...] = (\"memories\", \"{langgraph_user_id}\"),\n) -> Runnable[MessagesState, typing.Awaitable[list[SearchItem]]]:\n```\n\n### Query Generation Flow\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant SearchPipeline\n    participant QueryLLM\n    participant Store\n\n    Client->>SearchPipeline: messages/context\n    SearchPipeline->>QueryLLM: generate search query\n    QueryLLM-->>SearchPipeline: optimized query\n    SearchPipeline->>Store: semantic search\n    Store-->>SearchPipeline: ranked results\n    SearchPipeline-->>Client: list[SearchItem]\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n## Namespace Configuration\n\n### Runtime Template Resolution\n\nNamespaces support runtime placeholders that are resolved from the LangGraph config:\n\n```python\n# Configuration\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\n\n# Namespace with placeholder\nnamespace = (\"memories\", \"{langgraph_user_id}\")\n\n# Resolved at runtime\n# Result: (\"memories\", \"user123\")\n```\n\n### Namespace Configuration Examples\n\n| Configuration | Namespace Pattern | Resolved Example |\n|--------------|-------------------|------------------|\n| Per-user | `(\"memories\", \"{langgraph_user_id}\")` | `(\"memories\", \"user-123\")` |\n| Team-wide | `(\"memories\", \"{langgraph_user_id}\")` | `(\"memories\", \"team-x\")` |\n| Project-specific | `(\"project_memories\", \"{langgraph_user_id}\")` | `(\"project_memories\", \"dev-456\")` |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n---\n\n## Integration with LangGraph\n\n### Prebuilt Agent Integration\n\nMemory tools integrate seamlessly with LangGraph's `create_react_agent`:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\n\ndef prompt(state):\n    config = get_config()\n    memories = get_store().search(\n        (\"memories\", config[\"configurable\"][\"langgraph_user_id\"]),\n    )\n    system_prompt = f\"\"\"You are a helpful assistant.\n<memories>\n{memories}\n</memories>\n\"\"\"\n    return [{\"role\": \"system\", \"content\": system_prompt}, *state[\"messages\"]]\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Entrypoint Integration\n\n```python\nfrom langgraph.func import entrypoint\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n@entrypoint(store=store)\nasync def workflow(state: dict, *, previous=None):\n    result = await memory_tool.ainvoke({\"content\": {...}, \"action\": \"create\"})\n    return result\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n## Standalone Usage\n\nMemory tools can operate independently of LangGraph's context by providing an explicit store:\n\n```python\nfrom langmem import create_manage_memory_tool\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmemory_tool = create_manage_memory_tool(\n    namespace=(\"memories\", \"standalone_user\"),\n    store=store,\n)\n\n# Direct tool invocation\nresult = memory_tool.invoke({\n    \"content\": \"User prefers dark mode in all applications.\",\n    \"action\": \"create\"\n})\n```\n\nSource: [examples/standalone_examples/custom_store_example.py](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/custom_store_example.py)\n\n### Standalone Example Output\n\nWhen running standalone examples, stored memories are returned in this format:\n\n```\nMemory 31cf472f-3491-4f0c-82ec-09b4fe409cfd:\nContent: {'category': 'User Preference', 'preference': 'Dark Mode', 'context': 'User prefers dark mode in all applications.'}\nKind: PreferenceMemory\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n---\n\n## Memory Layer (Declarative API)\n\n### Purpose and Scope\n\nThe `MemoryLayer` class provides a declarative API for composing memories within prompts. It wraps the memory management and search functionality into a single `Runnable` component.\n\nSource: [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n\n### Class Definition\n\n```python\nclass MemoryLayer(Runnable):\n    __slots__ = (\n        \"name\",\n        \"namespace\",\n        \"kind\",\n        \"update_instructions\",\n        \"schemas\",\n        \"limit\",\n        \"_manager_tool\",\n        \"_search_tool\",\n    )\n```\n\n### Supported Configurations\n\n| Kind | Description | Schema Support |\n|------|-------------|----------------|\n| `\"multi\"` | Multiple memories per namespace | `str` or `list[BaseModel]` |\n| `\"single\"` | One memory per namespace | Single schema type |\n\nSource: [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n\n---\n\n## Prompt Types\n\n### Memory Layer Input/Output\n\nThe MemoryLayer uses typed dictionaries for state management:\n\n```python\nclass MessagesState(TypedDict, total=False):\n    messages: list[AnyMessage]\n    query: str | list[str]\n```\n\nSource: [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n\n### Prompt Configuration\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n---\n\n## Best Practices\n\n### When to Use Hot Path Management\n\n| Scenario | Recommended Tool |\n|----------|------------------|\n| Agent proactively identifies user preferences | `create_manage_memory_tool` |\n| User explicitly requests memory storage | `create_manage_memory_tool` |\n| Agent needs to retrieve context for response | `create_search_memory_tool` |\n| Complex multi-step memory retrieval | `create_memory_searcher` |\n| Declarative memory in prompts | `MemoryLayer` |\n\n### Security Considerations\n\n- Always validate that `actions_permitted` includes only necessary operations\n- Use namespace isolation to prevent cross-user memory access\n- Validate memory schema types before storage\n\n### Performance Optimization\n\n- Configure appropriate `limit` values to avoid over-fetching\n- Use `response_format=\"content\"` for simple retrieval scenarios\n- Leverage async invocation for concurrent operations\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n---\n\n## Summary\n\nMemory Tools - Hot Path Management provides the interactive, real-time memory capabilities that enable AI assistants to maintain persistent context across conversations. By integrating with LangGraph's BaseStore and supporting both synchronous and asynchronous patterns, these tools offer flexible options for:\n\n1. **Immediate Memory Persistence** - Create memories as preferences are identified\n2. **Real-time Updates** - Modify outdated information during conversation\n3. **Targeted Retrieval** - Search and retrieve relevant context on-demand\n4. **Declarative Composition** - Embed memories in prompts using the MemoryLayer API\n\nThe tool architecture supports standalone usage outside of LangGraph while maintaining full compatibility with LangGraph agents and workflows.\n\n---\n\n<a id='background-memory-manager'></a>\n\n## Background Memory Manager\n\n### Related Pages\n\nRelated topics: [Core Concepts](#core-concepts), [Memory Tools - Hot Path Management](#memory-tools), [Short-term Memory and Summarization](#short-term-memory)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/graphs/semantic.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/semantic.py)\n- [src/langmem/graphs/prompts.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/prompts.py)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n</details>\n\n# Background Memory Manager\n\nThe Background Memory Manager is a core component of langmem that enables asynchronous, non-blocking memory extraction and storage within agent workflows. It allows memory operations to be executed in background threads or on separate servers, ensuring that the primary agent response latency is not impacted by memory processing overhead.\n\n## Overview\n\nThe Background Memory Manager is primarily implemented through the `ReflectionExecutor` class, which orchestrates memory enrichment operations asynchronously. This approach decouples the memory management from the main agent thread, enabling production-ready applications where memory persistence happens transparently after user interactions are acknowledged. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\nThe system is designed to work seamlessly with LangGraph's `BaseStore` abstraction, allowing memories to be stored, retrieved, updated, and deleted through semantic search capabilities. The background execution model ensures that even complex memory extraction and synthesis operations do not block the agent's response to users.\n\n## Architecture\n\n### High-Level Architecture\n\nThe Background Memory Manager follows a producer-consumer pattern where the main agent produces memory enrichment tasks and the `ReflectionExecutor` consumes them asynchronously.\n\n```mermaid\ngraph TD\n    A[User Message] --> B[Agent Processing]\n    B --> C[User Response]\n    C -->|Schedule Enrichment| D[ReflectionExecutor]\n    D -->|after_seconds=0| E[Background Thread]\n    E --> F[MemoryStoreManager]\n    F --> G[BaseStore]\n    F --> H[Query LLM]\n    G --> I[Vector Search]\n    I --> F\n    H -->|Generate Query| F\n    F --> J[Memory Updates]\n    J --> G\n```\n\n### Component Interactions\n\nThe system consists of several interconnected components that work together to provide background memory management:\n\n| Component | Role | Source |\n|-----------|------|--------|\n| `ReflectionExecutor` | Schedules and executes memory operations in background | [extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py) |\n| `MemoryStoreManager` | Orchestrates memory CRUD operations with search | [extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py) |\n| `MemoryManager` | Core extraction logic with multi-step synthesis | [extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py) |\n| `BaseStore` | LangGraph's storage abstraction for memories | [tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py) |\n\n## Core Components\n\n### ReflectionExecutor\n\nThe `ReflectionExecutor` class is the primary mechanism for background memory processing. It wraps a memory manager and provides async execution capabilities.\n\n```python\nreflection = ReflectionExecutor(manager, store=store)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n#### Key Responsibilities\n\n- Decoupling memory operations from the main agent thread\n- Managing store configuration for memory persistence\n- Providing async invoke capabilities for memory enrichment\n- Supporting background scheduling with configurable delays\n\n### MemoryStoreManager\n\nThe `MemoryStoreManager` extends `MemoryManager` with additional search capabilities and tighter integration with LangGraph's `BaseStore`. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n#### Factory Function\n\nThe primary entry point for creating a memory store manager is `create_memory_store_manager`:\n\n```python\ndef create_memory_store_manager(\n    model: str | BaseChatModel,\n    schemas: list[type[BaseModel]] | None = None,\n    default: str | BaseModel | None = None,\n    default_factory: typing.Callable[[], BaseModel] | None = None,\n    instructions: str | None = None,\n    enable_inserts: bool = True,\n    enable_deletes: bool = True,\n    query_model: str | BaseChatModel | None = None,\n    query_limit: int = 3,\n    namespace: tuple[str, ...] = (\"memories\", \"{langgraph_user_id}\"),\n    store: BaseStore | None = None,\n    phases: tuple[str, ...] | None = None,\n) -> MemoryStoreManager\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### MemoryManager\n\nThe foundational class that handles multi-step memory extraction and synthesis. It supports configurable extraction phases and tool-based memory operations.\n\n```python\nreturn MemoryManager(\n    model,\n    schemas=schemas,\n    instructions=instructions,\n    enable_inserts=enable_inserts,\n    enable_updates=enable_updates,\n    enable_deletes=enable_deletes,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Configuration Options\n\n### MemoryStoreManager Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Main language model for memory processing |\n| `schemas` | `list[type[BaseModel]] \\| None` | `None` | Pydantic models defining memory structure |\n| `default` | `str \\| BaseModel \\| None` | `None` | Default memory when none found |\n| `default_factory` | `Callable[[], BaseModel]` | `None` | Factory function for default memory |\n| `instructions` | `str \\| None` | `None` | Custom instructions for memory management |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_deletes` | `bool` | `True` | Allow deleting memories |\n| `query_model` | `str \\| BaseChatModel \\| None` | `None` | Separate model for search query generation |\n| `query_limit` | `int` | `3` | Maximum memories to retrieve per search |\n| `namespace` | `tuple[str, ...]` | `(\"memories\", \"{langgraph_user_id}\")` | Storage namespace structure |\n| `store` | `BaseStore \\| None` | `None` | LangGraph BaseStore instance |\n| `phases` | `tuple[str, ...] \\| None` | `None` | Custom extraction phases |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Namespace Configuration\n\nMemory namespaces use runtime configuration with placeholders for dynamic values:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n```\n\nThe `{langgraph_user_id}` placeholder is populated from the LangGraph config at runtime. This enables per-user memory isolation while using a single store. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Workflows\n\n### Standard Background Enrichment Workflow\n\n```mermaid\nsequenceDiagram\n    participant Agent\n    participant Background\n    participant Store\n    participant QueryLLM\n    participant MainLLM\n\n    Agent->>Agent: Process user message\n    Agent-->>User: Send response\n    Agent->>Background: Schedule enrichment (after_seconds=0)\n    Note over Background: Memory processing happens<br/>in background thread\n    Background->>QueryLLM: Generate search query\n    QueryLLM-->>Background: Optimized query\n    Background->>Store: Find relevant memories\n    Store-->>Background: Existing memories\n    Background->>MainLLM: Analyze conversation + memories\n    MainLLM-->>Background: Memory updates (insert/update/delete)\n    Background->>Store: Apply changes\n```\n\n### Multi-Step Extraction Workflow\n\nThe memory manager supports multi-step extraction and synthesis for complex memory scenarios:\n\n```python\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n)\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\n# Background execution\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\nawait manager.ainvoke(\n    {\"messages\": conversation},\n    config=config,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Query Model Architecture\n\nWhen a separate query model is configured, the system uses a two-model approach for efficient memory retrieval:\n\n```mermaid\ngraph LR\n    A[Messages] --> B[QueryModel]\n    B --> C[Search Query]\n    C --> D[Vector Store]\n    D --> E[Retrieved Memories]\n    E --> F[MainModel]\n    F --> G[Memory Analysis]\n    G --> H[Store Updates]\n```\n\nThis architecture separates the lightweight query generation from the heavy analysis workload, optimizing cost and latency.\n\n## Integration Patterns\n\n### With LangGraph create_react_agent\n\n```python\nfrom langmem import create_memory_store_manager, ReflectionExecutor\nfrom langgraph.prebuilt import create_react_agent\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{user_id}\"),\n)\n\nreflection = ReflectionExecutor(manager, store=store)\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[...],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### With @entrypoint Decorator\n\n```python\nfrom langmem import create_memory_store_manager, ReflectionExecutor\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\nreflection = ReflectionExecutor(manager, store=store)\n\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that\"}\n    await reflection.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Memory Tools\n\nThe background memory system also provides complementary tools for explicit memory management within agent conversations.\n\n### create_manage_memory_tool\n\nCreates a tool for direct memory CRUD operations by agents:\n\n```python\ndef create_manage_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = \"Proactively call this tool when you:\\n\\n\"\n    \"1. Identify a new USER preference.\\n\"\n    \"2. Receive an explicit USER request to remember something.\\n\",\n    schema: typing.Type = str,\n    actions_permitted: tuple[Literal[\"create\", \"update\", \"delete\"], ...] = (\"create\", \"update\", \"delete\"),\n    store: BaseStore | None = None,\n    name: str = \"manage_memory\",\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### create_search_memory_tool\n\nCreates a tool for semantic memory search within conversations:\n\n```python\ndef create_search_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = _MEMORY_SEARCH_INSTRUCTIONS,\n    store: BaseStore | None = None,\n    response_format: Literal[\"content\", \"content_and_artifact\"] = \"content\",\n    name: str = \"search_memory\",\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Data Models\n\n### Prompt Structure\n\nMemory management uses structured prompts defined in `src/langmem/prompts/types.py`:\n\n```python\nclass Prompt(TypedDict, total=False):\n    \"\"\"TypedDict for structured prompt management and optimization.\"\"\"\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### Annotated Trajectory\n\nConversation histories with feedback for prompt optimization:\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    \"\"\"Conversation history with optional feedback for prompt optimization.\"\"\"\n    messages: list[AnyMessage]\n    feedback: dict[str, typing.Any] | None\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## Best Practices\n\n1. **Use Separate Query Models**: Configure `query_model` with a faster, cheaper model (e.g., Haiku) to reduce costs while keeping the main model for quality analysis.\n\n2. **Namespace Isolation**: Always use user-specific namespaces like `(\"memories\", \"{langgraph_user_id}\")` to ensure proper data isolation.\n\n3. **Background Scheduling**: Schedule enrichment with `after_seconds=0` in production to maintain responsive user interactions.\n\n4. **Schema Definition**: Define explicit Pydantic schemas for memories to ensure consistent structure and enable better extraction quality.\n\n5. **Default Values**: Provide `default` or `default_factory` values for critical memory types to ensure graceful handling when no memories are found.\n\n## Example: Standalone Usage\n\nThe Background Memory Manager can be used independently of LangGraph:\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langchain_openai import ChatOpenAI\n\n# Configure store\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n# Create manager\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schema=PreferenceMemory,\n    namespace=(\"memories\", \"user123\"),\n    store=store,\n)\n\n# Process conversation\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\nawait manager.ainvoke({\"messages\": conversation})\n\n# Search for memories\nresults = manager.search(query=\"app preferences\")\nprint(results)\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Summary\n\nThe Background Memory Manager provides a robust framework for asynchronous memory operations in agent applications. Key features include:\n\n- **Decoupled Processing**: Memory operations execute in background threads without blocking agent responses\n- **Flexible Storage**: Integration with LangGraph's `BaseStore` for vector-based memory retrieval\n- **Multi-Step Extraction**: Configurable phases for complex memory synthesis\n- **Semantic Search**: Automatic query generation with optional dedicated query models\n- **Tool Integration**: Complementary tools for explicit memory management within conversations\n\nThe system is production-ready and scales from simple single-user applications to complex multi-tenant deployments through its namespace-based isolation and background execution model.\n\n---\n\n<a id='short-term-memory'></a>\n\n## Short-term Memory and Summarization\n\n### Related Pages\n\nRelated topics: [Background Memory Manager](#background-memory-manager), [Memory Tools - Hot Path Management](#memory-tools)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/short_term/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py)\n- [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n</details>\n\n# Short-term Memory and Summarization\n\n## Overview\n\nThe short-term memory module in LangMem provides utilities for managing conversation history through summarization. As conversations grow longer, they exceed LLM context windows. This module enables efficient compression of message histories by generating summaries while preserving critical information. Source: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\nThe module exposes a functional API (`summarize_messages`, `asummarize_messages`) for quick integration and a class-based API (`SummarizationNode`) for use within LangGraph workflows. Both interfaces ultimately produce a `SummarizationResult` containing the summarized messages and a `RunningSummary` tracking the compressed state. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n## Architecture\n\nThe summarization system operates on a sliding window principle: messages accumulate until a token threshold is reached, at which point older messages are summarized while recent messages pass through unchanged. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n```mermaid\ngraph TD\n    A[Input Messages] --> B{Tokens > max_tokens_before_summary?}\n    B -->|No| C[Pass through unchanged]\n    B -->|Yes| D[Identify summarization window]\n    D --> E[Generate summary via LLM]\n    E --> F[Replace window with summary message]\n    F --> G[Update RunningSummary in context]\n    G --> H[Output updated messages]\n    C --> H\n```\n\n## Core Components\n\n### SummarizationNode\n\nThe `SummarizationNode` class implements a LangGraph-compatible node that summarizes message histories. It can be integrated directly into a LangGraph workflow. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n#### Constructor Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `model` | `BaseChatModel` | The language model used for generating summaries |\n| `max_tokens` | `int` | Maximum tokens in the final output; enforced after summarization |\n| `max_tokens_before_summary` | `int \\| None` | Token threshold to trigger summarization; defaults to `max_tokens` |\n| `max_summary_tokens` | `int` | Token budget allocated for the summary itself |\n| `token_counter` | `Callable \\| None` | Custom function to count tokens; defaults to approximate counting |\n| `initial_summary_prompt` | `str \\| None` | Prompt template for generating the first summary |\n| `existing_summary_prompt` | `str \\| None` | Prompt template for updating an existing running summary |\n| `final_prompt` | `str \\| None` | Prompt template combining summary with remaining messages |\n| `input_messages_key` | `str` | Key in state containing messages to summarize |\n| `output_messages_key` | `str` | Key for output messages after summarization |\n| `name` | `str` | Name identifier for this node |\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n#### State Update Format\n\nThe node returns a LangGraph state update in the following structure:\n\n```json\n{\n    \"output_messages_key\": \"<list of updated messages ready to be input to the LLM after summarization, including a message with a summary (if any)>\",\n    \"context\": {\"running_summary\": \"<RunningSummary object>\"}\n}\n```\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### RunningSummary\n\nThe `RunningSummary` class maintains a cumulative summary of conversation history. It is stored in the graph's context state and updated incrementally as new summaries are generated. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### SummarizationResult\n\nA result object containing the summarized messages and updated running summary after processing. Source: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\n## Token Management Behavior\n\n### Threshold Triggers\n\nSummarization is triggered when the token count of accumulated messages exceeds `max_tokens_before_summary`. This parameter defaults to the same value as `max_tokens` if not explicitly provided, allowing the summarization LLM to process the full token budget. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Token Budget Enforcement\n\nWhen the number of tokens to be summarized exceeds `max_tokens`, only the last `max_tokens` are summarized. This prevents exceeding the context window of the summarization LLM, which is assumed to be capped at `max_tokens`. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Tool Call Handling\n\nIf the last message within the summarization window is an AI message containing tool calls, all subsequent corresponding tool result messages are also included in the summarization. This ensures tool call and result pairs are summarized together as logical units. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Summary Token Budget\n\nThe `max_summary_tokens` parameter controls the token budget for the summary itself. Critically, this parameter is **not** passed to the summary-generating LLM to limit output length. It is used solely for estimating the maximum allowed token budget during processing. To enforce a length limit, bind the model directly: `model.bind(max_tokens=max_summary_tokens)`. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n## Usage Patterns\n\n### Basic Integration in LangGraph\n\n```python\nfrom typing import Any, TypedDict\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.messages import AnyMessage\nfrom langgraph.graph import StateGraph, START, MessagesState\nfrom langgraph.checkpoint.memory import InMemorySaver\nfrom langmem.short_term import SummarizationNode, RunningSummary\n\nmodel = ChatOpenAI(model=\"gpt-4o\")\nsummarization_model = model.bind(max_tokens=128)\n\nclass State(MessagesState):\n    context: dict[str, Any]\n\nclass LLMInputState(TypedDict):\n    summarized_messages: list[AnyMessage]\n    context: dict[str, Any]\n\nsummarization_node = SummarizationNode(\n    model=summarization_model,\n    max_tokens=256,\n    max_tokens_before_summary=256,\n    max_summary_tokens=128,\n)\n\ndef call_model(state: LLMInputState):\n    response = model.invoke(state[\"summarized_messages\"])\n    return {\"messages\": [response]}\n\ncheckpointer = InMemorySaver()\nworkflow = StateGraph(State)\nworkflow.add_node(call_model)\nworkflow.add_node(\"summarize\", summarization_node)\nworkflow.add_edge(START, \"summarize\")\n```\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Functional API\n\nFor simpler use cases outside of LangGraph, the module provides synchronous and asynchronous functions:\n\n```python\nfrom langmem.short_term import summarize_messages, asummarize_messages\n\n# Synchronous usage\nresult = summarize_messages(\n    messages=conversation_history,\n    model=summarization_model,\n    max_tokens=256\n)\n\n# Asynchronous usage\nresult = await asummarize_messages(\n    messages=conversation_history,\n    model=summarization_model,\n    max_tokens=256\n)\n```\n\nSource: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\n## Workflow Integration\n\nThe following diagram illustrates how `SummarizationNode` integrates into a typical LangGraph workflow:\n\n```mermaid\ngraph LR\n    A[User Messages] --> B[MessagesState]\n    B --> C[LLM Node]\n    C --> D[Model Response]\n    D --> E{Summarization Needed?}\n    E -->|Yes| F[SummarizationNode]\n    E -->|No| G[Return Response]\n    F --> H[Update RunningSummary]\n    H --> I[Compressed Messages]\n    I --> J[Next Turn]\n    G --> J\n```\n\n## Configuration Recommendations\n\n| Scenario | `max_tokens` | `max_tokens_before_summary` | `max_summary_tokens` |\n|----------|--------------|----------------------------|---------------------|\n| Aggressive compression | 512 | 768 | 128 |\n| Balanced | 1024 | 1536 | 256 |\n| High fidelity | 2048 | 3072 | 512 |\n\nWhen using smaller `max_tokens` values, set `max_tokens_before_summary` higher to allow the summarization LLM more content to work with. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n## Public API Summary\n\n| Symbol | Type | Description |\n|--------|------|-------------|\n| `summarize_messages` | Function | Synchronous message summarization |\n| `asummarize_messages` | Function | Asynchronous message summarization |\n| `SummarizationNode` | Class | LangGraph-compatible summarization node |\n| `SummarizationResult` | Class | Result container for summarization output |\n| `RunningSummary` | Class | Cumulative summary state tracker |\n\nSource: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\n---\n\n<a id='prompt-optimization'></a>\n\n## Prompt Optimization\n\n### Related Pages\n\nRelated topics: [Reflection Executor](#reflection-executor), [Core Concepts](#core-concepts)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/prompts/gradient.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n- [src/langmem/prompts/prompt.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/prompt.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n</details>\n\n# Prompt Optimization\n\n## Overview\n\nPrompt Optimization in LangMem is a system for automatically improving AI prompts based on conversation history and feedback. It analyzes trajectories (user-assistant conversations) and feedback to generate enhanced prompts that produce better responses.\n\nThe optimization system supports three distinct approaches:\n\n| Approach | Complexity | LLM Calls | Best For |\n|----------|------------|-----------|----------|\n| **Prompt Memory** | Simplest | 1 | Quick improvements, learning basic patterns |\n| **Metaprompt** | Moderate | 2-5 | Balanced speed and quality |\n| **Gradient** | Highest | 4-10 | Thorough analysis, complex patterns |\n\nSource: [src/langmem/prompts/optimization.py:1-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n## Architecture\n\n### System Components\n\n```mermaid\ngraph TD\n    A[User Input] --> B[Optimizer Factory]\n    B --> C{Select Kind}\n    C -->|gradient| D[Gradient Prompt Optimizer]\n    C -->|metaprompt| E[Metaprompt Optimizer]\n    C -->|prompt_memory| F[Prompt Memory Optimizer]\n    \n    D --> G[Reflection Loop]\n    G --> H[Extract Hypotheses]\n    H --> I[Generate Recommendations]\n    I --> J[Apply Updates]\n    \n    E --> K[Meta Prompt Processing]\n    K --> J\n    \n    F --> L[Memory Pattern Extraction]\n    L --> J\n    \n    J --> M[Optimized Prompt Output]\n```\n\n### Class Hierarchy\n\nThe system is built on LangChain's `Runnable` interface, providing both sync and async invocation patterns:\n\n- `PromptOptimizer` - Single prompt optimization (returns `str`)\n- `MultiPromptOptimizer` - Multiple prompt optimization (returns `list[Prompt]`)\n\nSource: [src/langmem/prompts/optimization.py:150-180](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n## Optimizer Types\n\n### 1. Prompt Memory Optimizer\n\nThe simplest optimization approach that learns from conversation history:\n\n1. Extracts successful patterns from past interactions\n2. Identifies improvement areas from feedback\n3. Applies learned patterns to new prompts\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"prompt_memory\"\n)\n\ntrajectories = [\n    {\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"Tell me about the solar system\"},\n            {\"role\": \"assistant\", \"content\": \"The solar system consists of...\"},\n        ],\n        \"feedback\": {\"clarity\": \"needs more structure\"},\n    }\n]\n\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [src/langmem/prompts/optimization.py:100-130](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### 2. Metaprompt Optimizer\n\nA balanced approach using reflection-based prompt generation:\n\n**Configuration Options:**\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `max_reflection_steps` | `int` | `3` | Maximum meta-learning steps |\n| `min_reflection_steps` | `int` | `1` | Minimum meta-learning steps |\n| `metaprompt` | `str` | See default | Custom meta-prompt template |\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"metaprompt\",\n    config={\"max_reflection_steps\": 3, \"min_reflection_steps\": 1},\n)\n```\n\nSource: [src/langmem/prompts/optimization.py:60-80](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### 3. Gradient Prompt Optimizer\n\nThe most thorough optimization approach, using a hypothesis-recommendation cycle:\n\n```mermaid\ngraph LR\n    A[Current Prompt] --> B[Generate Hypotheses]\n    B --> C[Extract Recommendations]\n    C --> D{Sufficient Analysis?}\n    D -->|No| B\n    D -->|Yes| E[Apply Updates]\n    E --> F[Optimized Prompt]\n```\n\n**Process Flow:**\n\n1. **Hypothesis Generation**: Analyzes trajectory to identify why the prompt underperforms\n2. **Recommendation Extraction**: Generates specific adjustment recommendations\n3. **Reflection Loop**: Iterates up to `max_reflection_steps` for deeper analysis\n4. **Prompt Update**: Applies minimal, necessary changes to the prompt\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"gradient\",\n    config={\n        \"max_reflection_steps\": 5,\n        \"min_reflection_steps\": 2,\n    }\n)\n```\n\nSource: [src/langmem/prompts/gradient.py:1-80](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n\n## Data Models\n\n### Prompt\n\nThe `Prompt` TypedDict defines structured prompt management:\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]                    # Unique identifier\n    prompt: Required[str]                  # The actual prompt text\n    update_instructions: str | None        # Guidelines for modification\n    when_to_update: str | None             # Dependencies during optimization\n```\n\n**Example:**\n\n```python\nprompt = Prompt(\n    name=\"extract_entities\",\n    prompt=\"Extract key entities from the text:\",\n    update_instructions=\"Make minimal changes, only address where errors occurred.\",\n    when_to_update=\"If there seem to be errors in recall of named entities.\",\n)\n```\n\nSource: [src/langmem/prompts/types.py:1-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### AnnotatedTrajectory\n\nRepresents conversation history with optional feedback:\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage]      # Conversation messages\n    feedback: dict[str, str | int | bool] | str | None  # Improvement feedback\n```\n\n**Example:**\n\n```python\ntrajectory = AnnotatedTrajectory(\n    messages=[\n        {\"role\": \"user\", \"content\": \"What pizza is good around here?\"},\n        {\"role\": \"assistant\", \"content\": \"Try LangPizza™️\"},\n        {\"role\": \"user\", \"content\": \"Stop advertising to me.\"},\n        {\"role\": \"assistant\", \"content\": \"BUT YOU'LL LOVE IT!\"},\n    ],\n    feedback={\n        \"developer_feedback\": \"too pushy\",\n        \"score\": 0,\n    },\n)\n```\n\nSource: [src/langmem/prompts/types.py:50-100](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### OptimizerInput\n\nInput structure for single-prompt optimization:\n\n```python\nclass OptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompt: str | Prompt\n```\n\nSource: [src/langmem/prompts/types.py:100-150](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### MultiPromptOptimizerInput\n\nInput structure for optimizing multiple prompts together:\n\n```python\nclass MultiPromptOptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompts: list[Prompt]\n```\n\nThis maintains consistency across related prompts during optimization.\n\nSource: [src/langmem/prompts/types.py:150-200](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## API Reference\n\n### Factory Functions\n\n#### create_prompt_optimizer\n\nCreates a single-prompt optimizer.\n\n```python\ndef create_prompt_optimizer(\n    model: str | BaseChatModel,\n    /,\n    *,\n    kind: typing.Literal[\"gradient\", \"prompt_memory\", \"metaprompt\"] = \"gradient\",\n    config: typing.Optional[dict] = None,\n) -> Runnable[prompt_types.OptimizerInput, str]\n```\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `model` | `str \\| BaseChatModel` | Yes | Model identifier or instance |\n| `kind` | `Literal` | No | Optimization strategy (default: `\"gradient\"`) |\n| `config` | `dict \\| None` | No | Optimization configuration |\n\nSource: [src/langmem/prompts/optimization.py:50-80](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n#### create_multi_prompt_optimizer\n\nCreates an optimizer for managing multiple prompts together.\n\n```python\ndef create_multi_prompt_optimizer(\n    model: str | BaseChatModel,\n    /,\n    *,\n    kind: typing.Literal[\"gradient\", \"prompt_memory\", \"metaprompt\"] = \"gradient\",\n    config: typing.Optional[dict] = None,\n) -> MultiPromptOptimizer\n```\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `model` | `str \\| BaseChatModel` | Yes | Model identifier or instance |\n| `kind` | `Literal` | No | Optimization strategy (default: `\"gradient\"`) |\n| `config` | `dict \\| None` | No | Optimization configuration |\n\nSource: [src/langmem/prompts/optimization.py:130-160](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### Gradient Optimizer Config\n\n```python\nclass GradientOptimizerConfig(TypedDict, total=False):\n    gradient_prompt: str        # Custom gradient analysis prompt\n    metaprompt: str             # Custom update application prompt\n    max_reflection_steps: int   # Maximum iteration count\n    min_reflection_steps: int   # Minimum iteration count\n```\n\nSource: [src/langmem/prompts/gradient.py:40-60](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n\n## Prompt Templates\n\n### Instruction Reflection Prompt\n\nUsed by the prompt memory optimizer for basic reflection:\n\n```python\nINSTRUCTION_REFLECTION_PROMPT = \"\"\"You are helping an AI agent improve. You can do this by changing their system prompt.\n\nThese is their current prompt:\n<current_prompt>\n{current_prompt}\n</current_prompt>\n\nHere was the agent's trajectory:\n<trajectory>\n{trajectory}\n</trajectory>\n\nHere is the user's feedback:\n\n<feedback>\n{feedback}\n</feedback>\n\nHere are instructions for updating the agent's prompt:\n\n<instructions>\n{instructions}\n</instructions>\n\nBased on this, return an updated prompt\"\"\"\n```\n\nSource: [src/langmem/prompts/prompt.py:1-40](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/prompt.py)\n\n### Gradient Metaprompt\n\nUsed by the gradient optimizer for hypothesis generation:\n\n```python\nDEFAULT_GRADIENT_METAPROMPT = \"\"\"You are optimizing a prompt to handle its target task more effectively.\n\n<current_prompt>\n{current_prompt}\n</current_prompt>\n\nWe hypothesize the current prompt underperforms for these reasons:\n\n<hypotheses>\n{hypotheses}\n</hypotheses>\n\nBased on these hypotheses, we recommend the following adjustments:\n\n<recommendations>\n{recommendations}\n</recommendations>\n\nRespond with the updated prompt. Remember to ONLY make changes that are clearly necessary.\"\"\"\n```\n\nSource: [src/langmem/prompts/gradient.py:15-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n\n## Usage Examples\n\n### Single Prompt Optimization with Feedback\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"How do I write a bash script?\"},\n    {\"role\": \"assistant\", \"content\": \"Let me explain bash scripting...\"},\n]\nfeedback = \"Response should include a code example\"\n\ntrajectories = [(conversation, {\"feedback\": feedback})]\nbetter_prompt = await optimizer(trajectories, \"You are a coding assistant\")\n```\n\n### Multi-Prompt Optimization\n\n```python\nfrom langmem import create_multi_prompt_optimizer\n\noptimizer = create_multi_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"prompt_memory\"\n)\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"Tell me about this image\"},\n    {\"role\": \"assistant\", \"content\": \"I see a dog playing in a park\"},\n]\n\ntrajectories = [(conversation, \"Vision model wasn't used for breed detection\")]\n\nprompts = [\n    {\n        \"name\": \"vision_extract\",\n        \"prompt\": \"Extract visual details from the image\",\n    },\n    {\n        \"name\": \"vision_classify\",\n        \"prompt\": \"Classify specific attributes in the image\",\n    },\n]\n\nbetter_prompts = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompts\": prompts}\n)\n```\n\n### Choosing Optimization Strategy\n\n| Use Case | Recommended Kind | Rationale |\n|----------|------------------|-----------|\n| Quick prototyping | `prompt_memory` | Single LLM call, minimal cost |\n| Production with moderate traffic | `metaprompt` | 2-5 calls, balanced improvement |\n| High-stakes, complex tasks | `gradient` | 4-10 calls, thorough analysis |\n\nSource: [src/langmem/prompts/optimization.py:20-45](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n---\n\n<a id='reflection-executor'></a>\n\n## Reflection Executor\n\n### Related Pages\n\nRelated topics: [Prompt Optimization](#prompt-optimization), [Core Concepts](#core-concepts)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/reflection.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/reflection.py)\n- [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/types.py)\n</details>\n\n# Reflection Executor\n\nThe `ReflectionExecutor` is a core component in LangMem that enables asynchronous, background processing of memory enrichment operations. It decouples the memory management workflow from the main agent execution thread, allowing AI agents to respond to users immediately while memory processing occurs in the background.\n\n## Overview\n\nThe `ReflectionExecutor` class serves as a bridge between a `MemoryManager` or `MemoryStoreManager` and the LangGraph `BaseStore`. It provides a mechanism to schedule and execute memory enrichment after the main agent has already produced a response, ensuring that users receive immediate feedback while the system continuously improves its understanding of conversation context.\n\nSource: [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\n\n## Architecture\n\nThe `ReflectionExecutor` operates within a broader architecture that separates concerns between agent execution and memory processing:\n\n```mermaid\ngraph TD\n    A[User Input] --> B[Main Agent]\n    B --> C[User Response]\n    C --> D[ReflectionExecutor]\n    D --> E[Memory Manager / Store Manager]\n    E --> F[BaseStore]\n    \n    B -.->|processes immediately| C\n    D -.->|background processing| F\n```\n\n### Components\n\n| Component | Type | Purpose |\n|-----------|------|---------|\n| `ReflectionExecutor` | Class | Schedules and executes background memory enrichment |\n| `MemoryManager` | Class | Extracts, updates, and deletes memories from conversations |\n| `MemoryStoreManager` | Class | Manages memory storage with vector search capabilities |\n| `BaseStore` | Interface | LangGraph's persistence layer for memories |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Usage Patterns\n\n### Basic Setup with InMemoryStore\n\nThe most common pattern initializes a `ReflectionExecutor` with a memory store manager and a configured store:\n\n```python\nfrom langmem import create_memory_store_manager, ReflectionExecutor\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{user_id}\"),\n)\n\nreflection = ReflectionExecutor(manager, store=store)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Integration with LangGraph Agent\n\nThe `ReflectionExecutor` is designed to work seamlessly with LangGraph's `create_react_agent`:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Execution Flow\n\nThe following sequence diagram illustrates how `ReflectionExecutor` interacts with other components during background enrichment:\n\n```mermaid\nsequenceDiagram\n    participant Agent\n    participant Background\n    participant Store\n    participant Manager\n\n    Agent->>Agent: process message\n    Agent-->>User: response\n    Agent->>Background: schedule enrichment<br/>(after_seconds=0)\n    Note over Background,Store: Memory processing happens<br/>in background thread\n    Background->>Manager: invoke with messages\n    Manager->>Manager: extract & analyze memories\n    Manager->>Store: store/update memories\n    Store-->>Manager: confirmation\n    Manager-->>Background: enrichment complete\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Configuration\n\n### Memory Store Manager Configuration\n\nWhen creating the memory manager for use with `ReflectionExecutor`, several configuration options control memory behavior:\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Language model for memory processing |\n| `schemas` | `list[type]` | Required | Pydantic schemas defining memory structure |\n| `namespace` | `tuple[str, ...]` | `(\"memories\", \"{langgraph_user_id}\")` | Hierarchical path for memory storage |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_updates` | `bool` | `True` | Allow modifying existing memories |\n| `enable_deletes` | `bool` | `True` | Allow removing outdated memories |\n| `query_model` | `str \\| BaseChatModel` | `None` | Separate model for search query generation |\n| `query_limit` | `int` | `5` | Maximum memories to retrieve |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Namespace Template\n\nNamespaces support runtime placeholders that are resolved from the LangGraph configuration:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n```\n\nThis resolves to `[\"memories\", \"user123\"]` when `config[\"configurable\"][\"langgraph_user_id\"]` equals `\"user123\"`.\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Memory Processing Phases\n\nThe `MemoryStoreManager` processes memories through distinct phases, each callable independently or combined:\n\n```mermaid\ngraph LR\n    A[messages] --> B[Recall Phase]\n    B --> C[Enrich Phase]\n    C --> D[Update Phase]\n```\n\n| Phase | Purpose |\n|-------|---------|\n| Recall | Retrieve relevant existing memories using semantic search |\n| Enrich | Extract new information from the conversation |\n| Update | Apply changes to the store (insert, update, delete) |\n\nSource: [src/langmem/knowledge/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/types.py)\n\n## Background Execution Strategy\n\nThe `ReflectionExecutor` supports immediate background execution via the `after_seconds` parameter:\n\n```python\nawait reflection.ainvoke(\n    {\"messages\": conversation, \"existing\": memories},\n    after_seconds=0,\n)\n```\n\nSetting `after_seconds=0` schedules execution on the next event loop iteration, ensuring the main agent response is not delayed. For less time-sensitive applications, a positive value defers execution, reducing resource contention during peak load periods.\n\n## Class Signature\n\nThe `ReflectionExecutor` class implements the following interface:\n\n```python\nclass ReflectionExecutor:\n    def __init__(\n        self,\n        manager: MemoryManager | MemoryStoreManager,\n        *,\n        store: BaseStore | None = None,\n    ) -> None:\n        ...\n```\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `manager` | `MemoryManager \\| MemoryStoreManager` | The memory processing component |\n| `store` | `BaseStore \\| None` | Optional explicit store; otherwise uses context |\n\nSource: [src/langmem/reflection.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/reflection.py)\n\n## Async Support\n\nThe `ReflectionExecutor` provides full async support through its `ainvoke` method, making it compatible with LangGraph's async entrypoints and workflows:\n\n```python\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"}\n    await reflection.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Best Practices\n\n1. **Use with persistent stores in production**: While `InMemoryStore` is suitable for development, production deployments should use persistent stores like PostgreSQL or Redis with vector search capabilities.\n\n2. **Separate query models for efficiency**: When working with large memory stores, use a faster, cheaper model for query generation and a more capable model for memory analysis.\n\n3. **Configure appropriate namespaces**: Always include user-specific namespaces to ensure memory isolation between users.\n\n4. **Set reasonable query limits**: Balance between recall completeness and processing speed by tuning `query_limit` based on your use case.\n\n5. **Leverage background execution**: Schedule memory enrichment with minimal delay (`after_seconds=0`) to keep the system responsive while continuously improving memory quality.\n\n---\n\n<a id='langgraph-integration'></a>\n\n## LangGraph Integration\n\n### Related Pages\n\nRelated topics: [Memory Tools - Hot Path Management](#memory-tools), [System Architecture](#system-architecture)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [langgraph.json](https://github.com/langchain-ai/langmem/blob/main/langgraph.json)\n- [src/langmem/graphs/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/__init__.py)\n- [src/langmem/graphs/auth.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/auth.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/graphs/semantic.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/semantic.py)\n</details>\n\n# LangGraph Integration\n\nLangMem provides comprehensive integration with LangGraph, enabling memory management capabilities within agentic workflows. This integration allows AI applications to store, retrieve, search, and manage conversational memories using LangGraph's [BaseStore](https://langchain-ai.github.io/langgraph/reference/store/#langgraph.store.base.BaseStore) architecture.\n\n## Overview\n\nLangMem's LangGraph integration serves as a bridge between LangGraph's store infrastructure and memory management functionality. It provides:\n\n- **Tools for Agents**: Pre-built tools that agents can invoke to search and manage memories\n- **Store Managers**: Components that handle automatic memory extraction and storage\n- **Configuration Support**: Runtime namespace resolution using configurable parameters\n- **Async/Await Support**: Full support for both synchronous and asynchronous operations\n\nSource: [src/langmem/knowledge/tools.py:1-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Architecture\n\nThe integration follows a layered architecture where LangMem tools and managers connect to LangGraph's `BaseStore` implementation:\n\n```mermaid\ngraph TD\n    A[LangGraph Agent] --> B[LangMem Tools/Managers]\n    B --> C[BaseStore]\n    C --> D[InMemoryStore]\n    C --> E[Persistent Store]\n    \n    F[Config] --> B\n    F --> C\n```\n\n### Component Overview\n\n| Component | Purpose | File Location |\n|-----------|---------|---------------|\n| `create_search_memory_tool` | Search for memories within agent context | `src/langmem/knowledge/tools.py` |\n| `create_manage_memory_tool` | CRUD operations for memories | `src/langmem/knowledge/tools.py` |\n| `create_memory_store_manager` | Automatic memory extraction and storage | `src/langmem/knowledge/extraction.py` |\n| Prebuilt Graphs | `optimize_prompts`, `extract_memories` | `src/langmem/graphs/` |\n\nSource: [src/langmem/graphs/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/__init__.py)\n\n## Memory Tools\n\nLangMem provides two primary tools that agents can invoke during execution.\n\n### Search Memory Tool\n\nThe `create_search_memory_tool` function creates a tool that searches for relevant memories based on a query.\n\n```python\nfrom langmem import create_search_memory_tool\nfrom langgraph.store.memory import InMemoryStore\n\nsearch_tool = create_search_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n```\n\n**Parameters:**\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `namespace` | `tuple[str, ...]` | Hierarchical path for organizing memories | `(\"memories\", \"{langgraph_user_id}\")` |\n| `prompt` | `str` | Custom prompt for search behavior | Context-based default |\n\nSource: [src/langmem/knowledge/tools.py:80-120](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Manage Memory Tool\n\nThe `create_manage_memory_tool` function creates a tool that supports creating, updating, and deleting memories:\n\n```python\nfrom langmem import create_manage_memory_tool\n\nmemory_tool = create_manage_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n```\n\n**Supported Operations:**\n\n| Operation | Description |\n|-----------|-------------|\n| `insert` | Store new memories with generated keys |\n| `update` | Modify existing memory content |\n| `upsert` | Insert or update based on key existence |\n| `delete` | Remove memories from the store |\n\nSource: [src/langmem/knowledge/tools.py:200-280](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Namespace Configuration\n\nNamespaces in LangMem use a template system that allows runtime population of values from LangGraph's configuration.\n\n### Template Syntax\n\nPlaceholders use curly brace notation that maps to configurable values:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n```\n\n### Runtime Resolution\n\nAt runtime, these placeholders are resolved from the `configurable` section:\n\n```python\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user-123\"}}\n# Results in namespace: (\"memories\", \"user-123\")\n```\n\n### Namespace Examples\n\n| Use Case | Namespace Template | Runtime Config |\n|----------|-------------------|----------------|\n| Per-user memories | `(\"memories\", \"{langgraph_user_id}\")` | `{\"langgraph_user_id\": \"user-123\"}` |\n| Team memories | `(\"memories\", \"{team_id}\")` | `{\"team_id\": \"team-x\"}` |\n| Project memories | `(\"project_memories\", \"{project_id}\")` | `{\"project_id\": \"proj-1\"}` |\n\nSource: [src/langmem/knowledge/tools.py:140-180](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Store Configuration\n\nLangMem requires a `BaseStore` implementation to be configured in the LangGraph entrypoint or graph.\n\n### InMemoryStore Example\n\n```python\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n@entrypoint(store=store)\nasync def workflow(state: dict, *, previous=None):\n    # Store is automatically available via get_store()\n    ...\n```\n\n### Configuration in langgraph.json\n\nThe `langgraph.json` file defines the default store configuration for deployed graphs:\n\n```json\n{\n  \"store\": {\n    \"index\": {\n      \"embed\": \"openai:text-embedding-3-small\",\n      \"dims\": 1536,\n      \"fields\": [\"$\"]\n    }\n  }\n}\n```\n\nSource: [langgraph.json:1-20](https://github.com/langchain-ai/langmem/blob/main/langgraph.json)\n\n## Prebuilt Graphs\n\nLangMem includes prebuilt LangGraph graphs for common memory operations.\n\n### Extract Memories Graph\n\nLocated at `src/langmem/graphs/semantic.py`, this graph combines memory storage with automatic extraction:\n\n```python\nfrom langgraph.func import entrypoint\nfrom langgraph.store.memory import InMemoryStore\nfrom langmem import create_memory_store_manager\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\n@entrypoint(store=store)\nasync def graph(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"}\n    await manager.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\n**Graph Endpoint:** `./src/langmem/graphs/semantic.py:graph`\n\nSource: [src/langmem/graphs/semantic.py:1-40](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/semantic.py)\n\n### Optimize Prompts Graph\n\nUsed for prompt optimization workflows with memory-backed feedback.\n\n**Graph Endpoint:** `./src/langmem/graphs/prompts.py:optimize_prompts`\n\nSource: [src/langmem/graphs/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/__init__.py)\n\n## Integration with create_react_agent\n\nLangMem tools integrate seamlessly with LangGraph's prebuilt `create_react_agent`:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\nfrom langgraph.config import get_config, get_store\nfrom langmem import create_manage_memory_tool\n\ndef prompt(state):\n    config = get_config()\n    memories = get_store().search(\n        (\"memories\", config[\"configurable\"][\"langgraph_user_id\"]),\n    )\n    system_prompt = f\"\"\"You are a helpful assistant.\n<memories>\n{memories}\n</memories>\n\"\"\"\n    system_message = {\"role\": \"system\", \"content\": system_prompt}\n    return [system_message, *state[\"messages\"]]\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:300-350](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Memory Store Manager\n\nThe `create_memory_store_manager` function creates a manager that handles automatic memory extraction and storage using LangGraph's store infrastructure.\n\n### Query Model Architecture\n\nThe manager supports using a separate (faster) model for search query generation:\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Manager\n    participant QueryLLM\n    participant Store\n    participant MainLLM\n\n    Client->>Manager: messages\n    Manager->>QueryLLM: generate search query\n    QueryLLM-->>Manager: optimized query\n    Manager->>Store: find memories\n    Store-->>Manager: memories\n    Manager->>MainLLM: analyze & extract\n    MainLLM-->>Manager: memory updates\n    Manager->>Store: apply changes\n    Manager-->>Client: result\n```\n\n### Configuration Options\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `model` | `str \\| BaseChatModel` | Main model for memory processing | Required |\n| `query_model` | `str \\| BaseChatModel` | Faster model for search queries | Same as model |\n| `query_limit` | `int` | Number of memories to retrieve | `10` |\n| `namespace` | `tuple[str, ...]` | Memory namespace template | `(\"memories\", \"{langgraph_user_id}\")` |\n| `schemas` | `list[type[BaseModel]]` | Pydantic schemas for memories | `None` |\n| `enable_inserts` | `bool` | Allow creating new memories | `True` |\n| `enable_updates` | `bool` | Allow updating existing memories | `True` |\n| `enable_deletes` | `bool` | Allow deleting memories | `True` |\n\nSource: [src/langmem/knowledge/extraction.py:200-300](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Authentication\n\nLangMem graphs support authentication via the auth endpoint defined in `langgraph.json`:\n\n```json\n{\n  \"auth\": {\n    \"path\": \"./src/langmem/graphs/auth.py:auth\"\n  }\n}\n```\n\nThe auth function handles authentication for deployed LangGraph applications.\n\nSource: [src/langmem/graphs/auth.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/auth.py)\n\n## Complete Workflow Example\n\n```mermaid\ngraph LR\n    A[User Input] --> B[Agent]\n    B --> C[Memory Search Tool]\n    C --> D[BaseStore]\n    D --> E[Vector Index]\n    B --> F[Response]\n    B --> G[Memory Manage Tool]\n    G --> D\n    F --> H[User]\n```\n\n### Full Implementation\n\n```python\nfrom langmem import create_search_memory_tool, create_manage_memory_tool\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.prebuilt import create_react_agent\n\n# Configure store\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n# Create tools\nsearch_tool = create_search_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\nmanage_tool = create_manage_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\n# Create agent with memory tools\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[search_tool, manage_tool],\n    store=store,\n)\n\n# Invoke with user context\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user-123\"}}\nresult = agent.invoke(\n    {\"messages\": [{\"role\": \"user\", \"content\": \"I prefer dark mode\"}]},\n    config=config,\n)\n```\n\n## Summary\n\nLangMem's LangGraph integration provides a complete solution for memory management in agentic applications:\n\n1. **Tools** enable agents to search and manage memories during conversation\n2. **Managers** automate memory extraction and storage\n3. **Namespace templates** allow flexible per-user/per-conversation organization\n4. **Store abstraction** supports multiple storage backends\n5. **Prebuilt graphs** accelerate common use cases\n\nAll integration points are designed to work seamlessly with LangGraph's configuration system, enabling production-ready deployments with proper authentication, store configuration, and multi-tenant support.\n\n---\n\n---\n\n## Doramagic Pitfall Log\n\nProject: langchain-ai/langmem\n\nSummary: Found 11 potential pitfall items; 3 are high/blocking. Highest priority: installation - 来源证据：GRAPH_RECURSION_LIMIT.\n\n## 1. installation · 来源证据：GRAPH_RECURSION_LIMIT\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：GRAPH_RECURSION_LIMIT\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_82b923de03f34d5a9fa8530916b40d14 | https://github.com/langchain-ai/langmem/issues/133 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 2. installation · 来源证据：Persistence?\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Persistence?\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_b9688483fa44468a96801d46825b040f | https://github.com/langchain-ai/langmem/issues/154 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 3. security_permissions · 来源证据：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n- User impact: 可能影响授权、密钥配置或安全边界。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_15b3f9c4829745339b470171f005b3df | https://github.com/langchain-ai/langmem/issues/156 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 4. configuration · 可能修改宿主 AI 配置\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: 项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- User impact: 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- Suggested check: 列出会写入的配置文件、目录和卸载/回滚步骤。\n- Guardrail action: 涉及宿主配置目录时必须给回滚路径，不能只给安装命令。\n- Evidence: capability.host_targets | github_repo:920242883 | https://github.com/langchain-ai/langmem | host_targets=claude, chatgpt\n\n## 5. capability · 能力判断依赖假设\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: README/documentation is current enough for a first validation pass.\n- User impact: 假设不成立时，用户拿不到承诺的能力。\n- Suggested check: 将假设转成下游验证清单。\n- Guardrail action: 假设必须转成验证项；没有验证结果前不能写成事实。\n- Evidence: capability.assumptions | github_repo:920242883 | https://github.com/langchain-ai/langmem | README/documentation is current enough for a first validation pass.\n\n## 6. maintenance · 维护活跃度未知\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: 未记录 last_activity_observed。\n- User impact: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- Suggested check: 补 GitHub 最近 commit、release、issue/PR 响应信号。\n- Guardrail action: 维护活跃度未知时，推荐强度不能标为高信任。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | last_activity_observed missing\n\n## 7. security_permissions · 下游验证发现风险项\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: no_demo\n- User impact: 下游已经要求复核，不能在页面中弱化。\n- Suggested check: 进入安全/权限治理复核队列。\n- Guardrail action: 下游风险存在时必须保持 review/recommendation 降级。\n- Evidence: downstream_validation.risk_items | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n\n## 8. security_permissions · 存在评分风险\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: no_demo\n- User impact: 风险会影响是否适合普通用户安装。\n- Suggested check: 把风险写入边界卡，并确认是否需要人工复核。\n- Guardrail action: 评分风险必须进入边界卡，不能只作为内部分数。\n- Evidence: risks.scoring_risks | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n\n## 9. security_permissions · 来源证据：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_760d72a9519c42a8b1e31d8932383bc2 | https://github.com/langchain-ai/langmem/issues/164 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 10. maintenance · issue/PR 响应质量未知\n\n- Severity: low\n- Evidence strength: source_linked\n- Finding: issue_or_pr_quality=unknown。\n- User impact: 用户无法判断遇到问题后是否有人维护。\n- Suggested check: 抽样最近 issue/PR，判断是否长期无人处理。\n- Guardrail action: issue/PR 响应未知时，必须提示维护风险。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | issue_or_pr_quality=unknown\n\n## 11. maintenance · 发布节奏不明确\n\n- Severity: low\n- Evidence strength: source_linked\n- Finding: release_recency=unknown。\n- User impact: 安装命令和文档可能落后于代码，用户踩坑概率升高。\n- Suggested check: 确认最近 release/tag 和 README 安装命令是否一致。\n- Guardrail action: 发布节奏未知或过期时，安装说明必须标注可能漂移。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | release_recency=unknown\n\n<!-- canonical_name: langchain-ai/langmem; human_manual_source: deepwiki_human_wiki -->\n",
      "markdown_key": "langmem",
      "pages": "draft",
      "source_refs": [
        {
          "evidence_id": "github_repo:920242883",
          "kind": "repo",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/langchain-ai/langmem"
        },
        {
          "evidence_id": "art_077cc72d9cfe41168e5ca54ce4148dfd",
          "kind": "docs",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/langchain-ai/langmem#readme"
        }
      ],
      "summary": "DeepWiki/Human Wiki output with a Doramagic pitfall appendix.",
      "title": "langmem 说明书",
      "toc": [
        "https://github.com/langchain-ai/langmem Project Manual",
        "Table of Contents",
        "Home - LangMem Overview",
        "Core Concepts",
        "Components",
        "Memory Management",
        "Short-Term Memory",
        "Prompt Optimization",
        "Doramagic 踩坑日志"
      ]
    }
  },
  "quality_gate": {
    "blocking_gaps": [],
    "category_confidence": "medium",
    "compile_status": "ready_for_review",
    "five_assets_present": true,
    "install_sandbox_verified": true,
    "missing_evidence": [],
    "next_action": "publish to Doramagic.ai project surfaces",
    "prompt_preview_boundary_ok": true,
    "publish_status": "publishable",
    "quick_start_verified": true,
    "repo_clone_verified": true,
    "repo_commit": "dc1f1e1525f0877458730c6e8088c235e017c873",
    "repo_inspection_error": null,
    "repo_inspection_files": [
      "pyproject.toml",
      "README.md",
      "uv.lock",
      "docs/mkdocs.yml",
      "docs/README.md",
      "docs/docs/hot_path_quickstart.md",
      "docs/docs/background_quickstart.md",
      "docs/docs/index.md",
      "docs/_scripts/generate_api_reference_links.py",
      "docs/_scripts/notebook_hooks.py",
      "docs/_scripts/notebook_convert.py",
      "docs/docs/reference/tools.md",
      "docs/docs/reference/index.md",
      "docs/docs/reference/memory.md",
      "docs/docs/reference/utils.md",
      "docs/docs/reference/.meta.yml",
      "docs/docs/reference/short_term.md",
      "docs/docs/reference/prompt_optimization.md",
      "docs/docs/concepts/conceptual_guide.md",
      "docs/docs/guides/use_tools_in_crewai.md",
      "docs/docs/guides/optimize_compound_system.md",
      "docs/docs/guides/use_tools_in_custom_agent.md",
      "docs/docs/guides/memory_tools.md",
      "docs/docs/guides/dynamically_configure_namespaces.md",
      "docs/docs/guides/extract_semantic_memories.md",
      "docs/docs/guides/optimize_memory_prompt.md",
      "docs/docs/guides/manage_user_profile.md",
      "docs/docs/guides/extract_episodic_memories.md",
      "docs/docs/guides/delayed_processing.md",
      "docs/docs/guides/summarization.md",
      "docs/_scripts/notebook_convert_templates/mdoutput/conf.json",
      "examples/standalone_examples/custom_store_example.py",
      "examples/standalone_examples/README.md",
      "src/langmem/reflection.py",
      "src/langmem/utils.py",
      "src/langmem/errors.py",
      "src/langmem/__init__.py",
      "src/langmem/graph_rag.py",
      "src/langmem/prompts/optimization.py",
      "src/langmem/prompts/_layers.py"
    ],
    "repo_inspection_verified": true,
    "review_reasons": [],
    "tag_count_ok": true,
    "unsupported_claims": []
  },
  "schema_version": "0.1",
  "user_assets": {
    "ai_context_pack": {
      "asset_id": "ai_context_pack",
      "filename": "AI_CONTEXT_PACK.md",
      "markdown": "# langmem - Doramagic AI Context Pack\n\n> 定位：安装前体验与判断资产。它帮助宿主 AI 有一个好的开始，但不代表已经安装、执行或验证目标项目。\n\n## 充分原则\n\n- **充分原则，不是压缩原则**：AI Context Pack 应该充分到让宿主 AI 在开工前理解项目价值、能力边界、使用入口、风险和证据来源；它可以分层组织，但不以最短摘要为目标。\n- **压缩策略**：只压缩噪声和重复内容，不压缩会影响判断和开工质量的上下文。\n\n## 给宿主 AI 的使用方式\n\n你正在读取 Doramagic 为 langmem 编译的 AI Context Pack。请把它当作开工前上下文：帮助用户理解适合谁、能做什么、如何开始、哪些必须安装后验证、风险在哪里。不要声称你已经安装、运行或执行了目标项目。\n\n## Claim 消费规则\n\n- **事实来源**：Repo Evidence + Claim/Evidence Graph；Human Wiki 只提供显著性、术语和叙事结构。\n- **事实最低状态**：`supported`\n- `supported`：可以作为项目事实使用，但回答中必须引用 claim_id 和证据路径。\n- `weak`：只能作为低置信度线索，必须要求用户继续核实。\n- `inferred`：只能用于风险提示或待确认问题，不能包装成项目事实。\n- `unverified`：不得作为事实使用，应明确说证据不足。\n- `contradicted`：必须展示冲突来源，不得替用户强行选择一个版本。\n\n## 它最适合谁\n\n- **正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**：README 或插件配置提到多个宿主 AI。 证据：`README.md` Claim：`clm_0002` supported 0.86\n\n## 它能做什么\n\n- **命令行启动或安装流程**（需要安装后验证）：项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 证据：`README.md` Claim：`clm_0001` supported 0.86\n\n## 怎么开始\n\n- `pip install -U langmem` 证据：`README.md` Claim：`clm_0003` supported 0.86\n\n## 继续前判断卡\n\n- **当前建议**：需要管理员/安全审批\n- **为什么**：继续前可能涉及密钥、账号、外部服务或敏感上下文，建议先经过管理员或安全审批。\n\n### 30 秒判断\n\n- **现在怎么做**：需要管理员/安全审批\n- **最小安全下一步**：先跑 Prompt Preview；若涉及凭证或企业环境，先审批再试装\n- **先别相信**：角色质量和任务匹配不能直接相信。\n- **继续会触碰**：角色选择偏差、命令执行、本地环境或项目文件\n\n### 现在可以相信\n\n- **适合人群线索：正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`README.md` Claim：`clm_0002` supported 0.86\n- **能力存在：命令行启动或安装流程**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`README.md` Claim：`clm_0001` supported 0.86\n- **存在 Quick Start / 安装命令线索**（supported）：可以相信项目文档出现过启动或安装入口；不要因此直接在主力环境运行。 证据：`README.md` Claim：`clm_0003` supported 0.86\n\n### 现在还不能相信\n\n- **角色质量和任务匹配不能直接相信。**（unverified）：角色库证明有很多角色，不证明每个角色都适合你的具体任务，也不证明角色能产生高质量结果。\n- **不能把角色文案当成真实执行能力。**（unverified）：安装前只能判断角色描述和任务画像是否匹配，不能证明它能在宿主 AI 里完成任务。\n- **真实输出质量不能在安装前相信。**（unverified）：Prompt Preview 只能展示引导方式，不能证明真实项目中的结果质量。\n- **宿主 AI 版本兼容性不能在安装前相信。**（unverified）：Claude、Cursor、Codex、Gemini 等宿主加载规则和版本差异必须在真实环境验证。\n- **不会污染现有宿主 AI 行为，不能直接相信。**（inferred）：Skill、plugin、AGENTS/CLAUDE/GEMINI 指令可能改变宿主 AI 的默认行为。\n- **可安全回滚不能默认相信。**（unverified）：除非项目明确提供卸载和恢复说明，否则必须先在隔离环境验证。\n- **真实安装后是否与用户当前宿主 AI 版本兼容？**（unverified）：兼容性只能通过实际宿主环境验证。\n- **项目输出质量是否满足用户具体任务？**（unverified）：安装前预览只能展示流程和边界，不能替代真实评测。\n\n### 继续会触碰什么\n\n- **角色选择偏差**：用户对任务应该由哪个专家角色处理的判断。 原因：选错角色会让 AI 从错误专业视角回答，浪费时间或误导决策。\n- **命令执行**：包管理器、网络下载、本地插件目录、项目配置或用户主目录。 原因：运行第一条命令就可能产生环境改动；必须先判断是否值得跑。 证据：`README.md`\n- **本地环境或项目文件**：安装结果、插件缓存、项目配置或本地依赖目录。 原因：安装前无法证明写入范围和回滚方式，需要隔离验证。 证据：`README.md`\n- **环境变量 / API Key**：项目入口文档明确出现 API key、token、secret 或账号凭证配置。 原因：如果真实安装需要凭证，应先使用测试凭证并经过权限/合规判断。 证据：`README.md`, `docs/docs/background_quickstart.md`, `docs/docs/hot_path_quickstart.md`, `src/langmem/knowledge/extraction.py`\n- **宿主 AI 上下文**：AI Context Pack、Prompt Preview、Skill 路由、风险规则和项目事实。 原因：导入上下文会影响宿主 AI 后续判断，必须避免把未验证项包装成事实。\n\n### 最小安全下一步\n\n- **先跑 Prompt Preview**：先用交互式试用验证任务画像和角色匹配，不要先导入整套角色库。（适用：任何项目都适用，尤其是输出质量未知时。）\n- **只在隔离目录或测试账号试装**：避免安装命令污染主力宿主 AI、真实项目或用户主目录。（适用：存在命令执行、插件配置或本地写入线索时。）\n- **不要使用真实生产凭证**：环境变量/API key 一旦进入宿主或工具链，可能产生账号和合规风险。（适用：出现 API、TOKEN、KEY、SECRET 等环境线索时。）\n- **安装后只验证一个最小任务**：先验证加载、兼容、输出质量和回滚，再决定是否深用。（适用：准备从试用进入真实工作流时。）\n\n### 退出方式\n\n- **保留安装前状态**：记录原始宿主配置和项目状态，后续才能判断是否可恢复。\n- **保留原始角色选择记录**：如果输出偏题，可以回到任务画像阶段重新选择角色，而不是继续沿着错误角色推进。\n- **记录安装命令和写入路径**：没有明确卸载说明时，至少要知道哪些目录或配置需要手动清理。\n- **准备撤销测试 API key 或 token**：测试凭证泄露或误用时，可以快速止损。\n- **如果没有回滚路径，不进入主力环境**：不可回滚是继续前阻断项，不应靠信任或运气继续。\n\n## 哪些只能预览\n\n- 解释项目适合谁和能做什么\n- 基于项目文档演示典型对话流程\n- 帮助用户判断是否值得安装或继续研究\n\n## 哪些必须安装后验证\n\n- 真实安装 Skill、插件或 CLI\n- 执行脚本、修改本地文件或访问外部服务\n- 验证真实输出质量、性能和兼容性\n\n## 边界与风险判断卡\n\n- **把安装前预览误认为真实运行**：用户可能高估项目已经完成的配置、权限和兼容性验证。 处理方式：明确区分 prompt_preview_can_do 与 runtime_required。 Claim：`clm_0004` inferred 0.45\n- **命令执行会修改本地环境**：安装命令可能写入用户主目录、宿主插件目录或项目配置。 处理方式：先在隔离环境或测试账号中运行。 证据：`README.md` Claim：`clm_0005` supported 0.86\n- **待确认**：真实安装后是否与用户当前宿主 AI 版本兼容？。原因：兼容性只能通过实际宿主环境验证。\n- **待确认**：项目输出质量是否满足用户具体任务？。原因：安装前预览只能展示流程和边界，不能替代真实评测。\n- **待确认**：安装命令是否需要网络、权限或全局写入？。原因：这影响企业环境和个人环境的安装风险。\n\n## 开工前工作上下文\n\n### 加载顺序\n\n- 先读取 how_to_use.host_ai_instruction，建立安装前判断资产的边界。\n- 读取 claim_graph_summary，确认事实来自 Claim/Evidence Graph，而不是 Human Wiki 叙事。\n- 再读取 intended_users、capabilities 和 quick_start_candidates，判断用户是否匹配。\n- 需要执行具体任务时，优先查 role_skill_index，再查 evidence_index。\n- 遇到真实安装、文件修改、网络访问、性能或兼容性问题时，转入 risk_card 和 boundaries.runtime_required。\n\n### 任务路由\n\n- **命令行启动或安装流程**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`README.md` Claim：`clm_0001` supported 0.86\n\n### 上下文规模\n\n- 文件总数：81\n- 重要文件覆盖：35/81\n- 证据索引条目：34\n- 角色 / Skill 条目：24\n\n### 证据不足时的处理\n\n- **missing_evidence**：说明证据不足，要求用户提供目标文件、README 段落或安装后验证记录；不要补全事实。\n- **out_of_scope_request**：说明该任务超出当前 AI Context Pack 证据范围，并建议用户先查看 Human Manual 或真实安装后验证。\n- **runtime_request**：给出安装前检查清单和命令来源，但不要替用户执行命令或声称已执行。\n- **source_conflict**：同时展示冲突来源，标记为待核实，不要强行选择一个版本。\n\n## Prompt Recipes\n\n### 适配判断\n\n- 目标：判断这个项目是否适合用户当前任务。\n- 预期输出：适配结论、关键理由、证据引用、安装前可预览内容、必须安装后验证内容、下一步建议。\n\n```text\n请基于 langmem 的 AI Context Pack，先问我 3 个必要问题，然后判断它是否适合我的任务。回答必须包含：适合谁、能做什么、不能做什么、是否值得安装、证据来自哪里。所有项目事实必须引用 evidence_refs、source_paths 或 claim_id。\n```\n\n### 安装前体验\n\n- 目标：让用户在安装前感受核心工作流，同时避免把预览包装成真实能力或营销承诺。\n- 预期输出：一段带边界标签的体验剧本、安装后验证清单和谨慎建议；不含真实运行承诺或强营销表述。\n\n```text\n请把 langmem 当作安装前体验资产，而不是已安装工具或真实运行环境。\n\n请严格输出四段：\n1. 先问我 3 个必要问题。\n2. 给出一段“体验剧本”：用 [安装前可预览]、[必须安装后验证]、[证据不足] 三种标签展示它可能如何引导工作流。\n3. 给出安装后验证清单：列出哪些能力只有真实安装、真实宿主加载、真实项目运行后才能确认。\n4. 给出谨慎建议：只能说“值得继续研究/试装”“先补充信息后再判断”或“不建议继续”，不得替项目背书。\n\n硬性边界：\n- 不要声称已经安装、运行、执行测试、修改文件或产生真实结果。\n- 不要写“自动适配”“确保通过”“完美适配”“强烈建议安装”等承诺性表达。\n- 如果描述安装后的工作方式，必须使用“如果安装成功且宿主正确加载 Skill，它可能会……”这种条件句。\n- 体验剧本只能写成“示例台词/假设流程”：使用“可能会询问/可能会建议/可能会展示”，不要写“已写入、已生成、已通过、正在运行、正在生成”。\n- Prompt Preview 不负责给安装命令；如用户准备试装，只能提示先阅读 Quick Start 和 Risk Card，并在隔离环境验证。\n- 所有项目事实必须来自 supported claim、evidence_refs 或 source_paths；inferred/unverified 只能作风险或待确认项。\n\n```\n\n### 角色 / Skill 选择\n\n- 目标：从项目里的角色或 Skill 中挑选最匹配的资产。\n- 预期输出：候选角色或 Skill 列表，每项包含适用场景、证据路径、风险边界和是否需要安装后验证。\n\n```text\n请读取 role_skill_index，根据我的目标任务推荐 3-5 个最相关的角色或 Skill。每个推荐都要说明适用场景、可能输出、风险边界和 evidence_refs。\n```\n\n### 风险预检\n\n- 目标：安装或引入前识别环境、权限、规则冲突和质量风险。\n- 预期输出：环境、权限、依赖、许可、宿主冲突、质量风险和未知项的检查清单。\n\n```text\n请基于 risk_card、boundaries 和 quick_start_candidates，给我一份安装前风险预检清单。不要替我执行命令，只说明我应该检查什么、为什么检查、失败会有什么影响。\n```\n\n### 宿主 AI 开工指令\n\n- 目标：把项目上下文转成一次对话开始前的宿主 AI 指令。\n- 预期输出：一段边界明确、证据引用明确、适合复制给宿主 AI 的开工前指令。\n\n```text\n请基于 langmem 的 AI Context Pack，生成一段我可以粘贴给宿主 AI 的开工前指令。这段指令必须遵守 not_runtime=true，不能声称项目已经安装、运行或产生真实结果。\n```\n\n\n## 角色 / Skill 索引\n\n- 共索引 24 个角色 / Skill / 项目文档条目。\n\n- **Setup**（project_doc）：To setup requirements for building docs you can run: 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/README.md`\n- **LangMem**（project_doc）：LangMem helps agents learn and adapt from their interactions over time. 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`README.md`\n- **Standalone Examples**（project_doc）：This directory contains examples demonstrating how to use LangMem independently of LangGraph's context. These examples show how to integrate LangMem into your own applications and frameworks. 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`examples/standalone_examples/README.md`\n- **Background Quickstart Guide**（project_doc）：Get started processing memories \"in the background\". 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/background_quickstart.md`\n- **Long-term Memory in LLM Applications**（project_doc）：Long-term Memory in LLM Applications 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/concepts/conceptual_guide.md`\n- **Delayed Background Memory Processing**（project_doc）：Process memories during conversation quiet periods 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/delayed_processing.md`\n- **How to configure dynamic namespaces**（project_doc）：How to configure dynamic namespaces 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/dynamically_configure_namespaces.md`\n- **How to Extract Episodic Memories**（project_doc）：Need your agent to learn from experience? Here's how to use LangMem for experience replay—capturing not just what happened, but the complete chain of thought that led to success. While semantic memory ./extract semantic memories.md builds knowledge \"what\" , episodic memory captures expertise \"how\" . 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/extract_episodic_memories.md`\n- **How to Extract Semantic Memories**（project_doc）：Need to extract multiple related facts from conversations? Here's how to use LangMem's collection pattern for semantic memories. For single-document patterns like user profiles, see Manage User Profile ./manage user profile.md . 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/extract_semantic_memories.md`\n- **How to Manage User Profiles**（project_doc）：User profiles help your LLM maintain consistent, up-to-date information about users across conversations. Unlike semantic memory collections ./extract semantic memories.md which track evolving knowledge, profiles focus on maintaining a concise, structured representation of the user or the agent itself . 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/manage_user_profile.md`\n- **How to Use Memory Tools**（project_doc）：LangMem provides tools that let your agent store and search memories in a LangGraph store. 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/memory_tools.md`\n- **How to Optimize Multiple Prompts**（project_doc）：Optimize multiple prompts in a system based on conversation logs and feedback. This algorithm seeks to do three things: 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/optimize_compound_system.md`\n- **How to Optimize a Prompt**（project_doc）：Update system prompts based on conversation logs or agent trajectories. Feed past conversations and feedback into an optimizer to fix common issues like missed requirements or poor response structure. 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/optimize_memory_prompt.md`\n- **How to Manage Long Context with Summarization**（project_doc）：How to Manage Long Context with Summarization 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/summarization.md`\n- **How to Use Memory Tools in CrewAI**（project_doc）：LangMem's memory tools let your CrewAI agents store and search memories, enabling persistent knowledge across conversations. 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/use_tools_in_crewai.md`\n- **How to Use Memory Tools in Custom Agents**（project_doc）：How to Use Memory Tools in Custom Agents 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/guides/use_tools_in_custom_agent.md`\n- **Hot Path Quickstart Guide**（project_doc）：Get started with LangMem 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/hot_path_quickstart.md`\n- **Index**（project_doc）： 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/index.md`\n- **API Reference**（project_doc）：API reference for LangMem 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/reference/index.md`\n- **Memory API Reference**（project_doc）：::: langmem handler: python options: members: - create memory manager - create memory store manager - MemoryStoreManager 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/reference/memory.md`\n- **Prompt Optimization API Reference**（project_doc）：::: langmem handler: python options: members: - create prompt optimizer - create multi prompt optimizer 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/reference/prompt_optimization.md`\n- **Short Term Memory API Reference**（project_doc）：::: langmem.short term handler: python options: members: - summarize messages - SummarizationNode - SummarizationResult - RunningSummary 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/reference/short_term.md`\n- **Memory Tools API Reference**（project_doc）：::: langmem handler: python options: members: - create manage memory tool - create search memory tool 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/reference/tools.md`\n- **Utilities API Reference**（project_doc）：::: langmem.utils handler: python options: members: - NamespaceTemplate 激活提示：当用户需要理解项目结构、安装方式或边界时参考。 证据：`docs/docs/reference/utils.md`\n\n## 证据索引\n\n- 共索引 34 条证据。\n\n- **Setup**（documentation）：To setup requirements for building docs you can run: 证据：`docs/README.md`\n- **LangMem**（documentation）：LangMem helps agents learn and adapt from their interactions over time. 证据：`README.md`\n- **Standalone Examples**（documentation）：This directory contains examples demonstrating how to use LangMem independently of LangGraph's context. These examples show how to integrate LangMem into your own applications and frameworks. 证据：`examples/standalone_examples/README.md`\n- **License**（source_file）：Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files the \"Software\" , to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 证据：`LICENSE`\n- **Background Quickstart Guide**（documentation）：Memories can be created in two ways: 证据：`docs/docs/background_quickstart.md`\n- **Long-term Memory in LLM Applications**（documentation）：Long-term Memory in LLM Applications 证据：`docs/docs/concepts/conceptual_guide.md`\n- **Delayed Background Memory Processing**（documentation）：Delayed Background Memory Processing 证据：`docs/docs/guides/delayed_processing.md`\n- **How to configure dynamic namespaces**（documentation）：How to configure dynamic namespaces 证据：`docs/docs/guides/dynamically_configure_namespaces.md`\n- **How to Extract Episodic Memories**（documentation）：Need your agent to learn from experience? Here's how to use LangMem for experience replay—capturing not just what happened, but the complete chain of thought that led to success. While semantic memory ./extract semantic memories.md builds knowledge \"what\" , episodic memory captures expertise \"how\" . 证据：`docs/docs/guides/extract_episodic_memories.md`\n- **How to Extract Semantic Memories**（documentation）：Need to extract multiple related facts from conversations? Here's how to use LangMem's collection pattern for semantic memories. For single-document patterns like user profiles, see Manage User Profile ./manage user profile.md . 证据：`docs/docs/guides/extract_semantic_memories.md`\n- **How to Manage User Profiles**（documentation）：User profiles help your LLM maintain consistent, up-to-date information about users across conversations. Unlike semantic memory collections ./extract semantic memories.md which track evolving knowledge, profiles focus on maintaining a concise, structured representation of the user or the agent itself . 证据：`docs/docs/guides/manage_user_profile.md`\n- **How to Use Memory Tools**（documentation）：LangMem provides tools that let your agent store and search memories in a LangGraph store. 证据：`docs/docs/guides/memory_tools.md`\n- **How to Optimize Multiple Prompts**（documentation）：Optimize multiple prompts in a system based on conversation logs and feedback. This algorithm seeks to do three things: 证据：`docs/docs/guides/optimize_compound_system.md`\n- **How to Optimize a Prompt**（documentation）：Update system prompts based on conversation logs or agent trajectories. Feed past conversations and feedback into an optimizer to fix common issues like missed requirements or poor response structure. 证据：`docs/docs/guides/optimize_memory_prompt.md`\n- **How to Manage Long Context with Summarization**（documentation）：How to Manage Long Context with Summarization 证据：`docs/docs/guides/summarization.md`\n- **How to Use Memory Tools in CrewAI**（documentation）：LangMem's memory tools let your CrewAI agents store and search memories, enabling persistent knowledge across conversations. 证据：`docs/docs/guides/use_tools_in_crewai.md`\n- **How to Use Memory Tools in Custom Agents**（documentation）：How to Use Memory Tools in Custom Agents 证据：`docs/docs/guides/use_tools_in_custom_agent.md`\n- **Hot Path Quickstart Guide**（documentation）：Memories can be created in two ways: 证据：`docs/docs/hot_path_quickstart.md`\n- **Index**（documentation）：--- hide comments: true title: Introduction --- {!README.md!} 证据：`docs/docs/index.md`\n- **API Reference**（documentation）：Welcome to the LangMem API reference! The documentation is organized into three main sections: 证据：`docs/docs/reference/index.md`\n- **Memory API Reference**（documentation）：::: langmem handler: python options: members: - create memory manager - create memory store manager - MemoryStoreManager 证据：`docs/docs/reference/memory.md`\n- **Prompt Optimization API Reference**（documentation）：::: langmem handler: python options: members: - create prompt optimizer - create multi prompt optimizer 证据：`docs/docs/reference/prompt_optimization.md`\n- **Short Term Memory API Reference**（documentation）：::: langmem.short term handler: python options: members: - summarize messages - SummarizationNode - SummarizationResult - RunningSummary 证据：`docs/docs/reference/short_term.md`\n- **Memory Tools API Reference**（documentation）：::: langmem handler: python options: members: - create manage memory tool - create search memory tool 证据：`docs/docs/reference/tools.md`\n- **Utilities API Reference**（documentation）：::: langmem.utils handler: python options: members: - NamespaceTemplate 证据：`docs/docs/reference/utils.md`\n- **Langgraph**（structured_config）：{ \"dependencies\": \".\" , \"graphs\": { \"optimize prompts\": \"./src/langmem/graphs/prompts.py:optimize prompts\", \"extract memories\": \"./src/langmem/graphs/semantic.py:graph\" }, \"env\": \".env\", \"auth\": { \"path\": \"./src/langmem/graphs/auth.py:auth\" }, \"store\": { \"index\": { \"embed\": \"openai:text-embedding-3-small\", \"dims\": 1536, \"fields\": \"$\" } } } 证据：`langgraph.json`\n- **Conf**（structured_config）：{ \"mimetypes\": { \"text/markdown\": true } } 证据：`docs/_scripts/notebook_convert_templates/mdoutput/conf.json`\n- **Byte-compiled / optimized / DLL files**（source_file）：Byte-compiled / optimized / DLL files pycache / .py cod $py.class 证据：`.gitignore`\n- **Run format against the project documentation.**（source_file）：.PHONY: lint-docs format-docs build-docs serve-docs serve-clean-docs clean-docs codespell build-typedoc doctest 证据：`Makefile`\n- **docs/.gitignore**（source_file）：site/ docs/cloud/reference/sdk/js ts sdk ref.md 证据：`docs/.gitignore`\n- **- github-callouts**（source_file）：site name: \"LangMem\" site description: Build language agents as graphs site url: https://langchain-ai.github.io/langmem/ repo url: https://github.com/langchain-ai/langmem edit uri: edit/main/docs/docs/ theme: name: material custom dir: overrides logo dark mode: static/wordmark light.svg logo light mode: static/wordmark dark.svg favicon: static/favicon.png icon: repo: fontawesome/brands/git-alt features: - announce.dismiss - content.code.annotate - content.code.copy - content.code.select - content.tabs.link - content.action.edit - content.tooltips - header.autohide - navigation.indexes - navigation.expand - navigation.footer - navigation.instant - navigation.sections - navigation.instant.pre… 证据：`docs/mkdocs.yml`\n- **Pyproject**（source_file）：project name = \"langmem\" version = \"0.0.30\" description = \"Prebuilt utilities for memory management and retrieval.\" readme = \"README.md\" requires-python = \" =3.10\" license = { file = \"LICENSE\" } dependencies = \"langchain =0.3.15\", \"langchain-core =0.3.46\", \"langchain-openai =0.3.1\", \"trustcall =0.0.39\", \"langgraph =0.6.0, =0.3.3\", \"langsmith =0.3.8\", \"langgraph-checkpoint =2.0.12\", 证据：`pyproject.toml`\n- **Pytest**（source_file）：pytest python files = test .py python classes = Test python functions = test 证据：`pytest.ini`\n- **Conftest**（source_file）：@pytest.fixture def anyio backend : return \"asyncio\" 证据：`tests/conftest.py`\n\n## 宿主 AI 必须遵守的规则\n\n- **把本资产当作开工前上下文，而不是运行环境。**：AI Context Pack 只包含证据化项目理解，不包含目标项目的可执行状态。 证据：`docs/README.md`, `README.md`, `examples/standalone_examples/README.md`\n- **回答用户时区分可预览内容与必须安装后才能验证的内容。**：安装前体验的消费者价值来自降低误装和误判，而不是伪装成真实运行。 证据：`docs/README.md`, `README.md`, `examples/standalone_examples/README.md`\n\n## 用户开工前应该回答的问题\n\n- 你准备在哪个宿主 AI 或本地环境中使用它？\n- 你只是想先体验工作流，还是准备真实安装？\n- 你最在意的是安装成本、输出质量、还是和现有规则的冲突？\n\n## 验收标准\n\n- 所有能力声明都能回指到 evidence_refs 中的文件路径。\n- AI_CONTEXT_PACK.md 没有把预览包装成真实运行。\n- 用户能在 3 分钟内看懂适合谁、能做什么、如何开始和风险边界。\n\n---\n\n## Doramagic Context Augmentation\n\nThe following material strengthens the Repomix/AI Context Pack body. Human Manual is only a reading skeleton; pitfall logs become hard operating constraints for the host AI.\n\n## Human Manual Skeleton\n\nUsage rule: this is only a reading path and salience signal, not factual authority. Concrete facts must still come from repo evidence / Claim Graph.\n\nHard rules for the host AI:\n- Do not treat page titles, order, summaries, or importance as project facts.\n- When explaining the Human Manual skeleton, state that it is only a reading path / salience signal.\n- Capability, installation, compatibility, runtime status, and risk judgments must cite repo evidence, source paths, or Claim Graph.\n\n- **Home - LangMem Overview**：importance `high`\n  - source_paths: README.md, src/langmem/__init__.py\n- **Installation and Setup**：importance `high`\n  - source_paths: pyproject.toml, README.md\n- **System Architecture**：importance `high`\n  - source_paths: src/langmem/__init__.py, src/langmem/knowledge/__init__.py, src/langmem/prompts/__init__.py, src/langmem/short_term/__init__.py, langgraph.json\n- **Core Concepts**：importance `high`\n  - source_paths: src/langmem/utils.py, src/langmem/knowledge/extraction.py, src/langmem/prompts/types.py\n- **Memory Tools - Hot Path Management**：importance `high`\n  - source_paths: src/langmem/knowledge/tools.py, src/langmem/__init__.py, examples/standalone_examples/custom_store_example.py\n- **Background Memory Manager**：importance `high`\n  - source_paths: src/langmem/knowledge/extraction.py, src/langmem/knowledge/__init__.py, src/langmem/graphs/semantic.py, src/langmem/graphs/prompts.py\n- **Short-term Memory and Summarization**：importance `medium`\n  - source_paths: src/langmem/short_term/__init__.py, src/langmem/short_term/summarization.py\n- **Prompt Optimization**：importance `high`\n  - source_paths: src/langmem/prompts/optimization.py, src/langmem/prompts/gradient.py, src/langmem/prompts/metaprompt.py, src/langmem/prompts/prompt.py\n\n## Repo Inspection Evidence\n\n- repo_clone_verified: true\n- repo_inspection_verified: true\n- repo_commit: `dc1f1e1525f0877458730c6e8088c235e017c873`\n- inspected_files: `pyproject.toml`, `README.md`, `uv.lock`, `docs/mkdocs.yml`, `docs/README.md`, `docs/docs/hot_path_quickstart.md`, `docs/docs/background_quickstart.md`, `docs/docs/index.md`, `docs/_scripts/generate_api_reference_links.py`, `docs/_scripts/notebook_hooks.py`, `docs/_scripts/notebook_convert.py`, `docs/docs/reference/tools.md`, `docs/docs/reference/index.md`, `docs/docs/reference/memory.md`, `docs/docs/reference/utils.md`, `docs/docs/reference/.meta.yml`, `docs/docs/reference/short_term.md`, `docs/docs/reference/prompt_optimization.md`, `docs/docs/concepts/conceptual_guide.md`, `docs/docs/guides/use_tools_in_crewai.md`\n\nHard rules for the host AI:\n- Without repo_clone_verified=true, do not claim the source code has been read.\n- Without repo_inspection_verified=true, do not turn README/docs/package observations into facts.\n- Without quick_start_verified=true, do not claim the Quick Start has been successfully run.\n\n## Doramagic Pitfall Constraints\n\nThese rules come from Doramagic discovery, validation, or compilation pitfalls. The host AI must treat them as operating constraints, not general background notes.\n\n### Constraint 1: 来源证据：GRAPH_RECURSION_LIMIT\n\n- Trigger: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：GRAPH_RECURSION_LIMIT\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_82b923de03f34d5a9fa8530916b40d14 | https://github.com/langchain-ai/langmem/issues/133 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 2: 来源证据：Persistence?\n\n- Trigger: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Persistence?\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_b9688483fa44468a96801d46825b040f | https://github.com/langchain-ai/langmem/issues/154 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 3: 来源证据：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n\n- Trigger: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能影响授权、密钥配置或安全边界。\n- Evidence: community_evidence:github | cevd_15b3f9c4829745339b470171f005b3df | https://github.com/langchain-ai/langmem/issues/156 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 4: 可能修改宿主 AI 配置\n\n- Trigger: 项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- Host AI rule: 列出会写入的配置文件、目录和卸载/回滚步骤。\n- Why it matters: 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- Evidence: capability.host_targets | github_repo:920242883 | https://github.com/langchain-ai/langmem | host_targets=claude, chatgpt\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 5: 能力判断依赖假设\n\n- Trigger: README/documentation is current enough for a first validation pass.\n- Host AI rule: 将假设转成下游验证清单。\n- Why it matters: 假设不成立时，用户拿不到承诺的能力。\n- Evidence: capability.assumptions | github_repo:920242883 | https://github.com/langchain-ai/langmem | README/documentation is current enough for a first validation pass.\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 6: 维护活跃度未知\n\n- Trigger: 未记录 last_activity_observed。\n- Host AI rule: 补 GitHub 最近 commit、release、issue/PR 响应信号。\n- Why it matters: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | last_activity_observed missing\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 7: 下游验证发现风险项\n\n- Trigger: no_demo\n- Host AI rule: 进入安全/权限治理复核队列。\n- Why it matters: 下游已经要求复核，不能在页面中弱化。\n- Evidence: downstream_validation.risk_items | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 8: 存在评分风险\n\n- Trigger: no_demo\n- Host AI rule: 把风险写入边界卡，并确认是否需要人工复核。\n- Why it matters: 风险会影响是否适合普通用户安装。\n- Evidence: risks.scoring_risks | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 9: 来源证据：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n\n- Trigger: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_760d72a9519c42a8b1e31d8932383bc2 | https://github.com/langchain-ai/langmem/issues/164 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n\n### Constraint 10: issue/PR 响应质量未知\n\n- Trigger: issue_or_pr_quality=unknown。\n- Host AI rule: 抽样最近 issue/PR，判断是否长期无人处理。\n- Why it matters: 用户无法判断遇到问题后是否有人维护。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | issue_or_pr_quality=unknown\n- Hard boundary: do not present this pitfall as solved, verified, or safe to ignore unless later validation evidence explicitly closes it.\n",
      "summary": "Context and operating boundaries for host AI agents.",
      "title": "AI Context Pack"
    },
    "boundary_risk_card": {
      "asset_id": "boundary_risk_card",
      "filename": "BOUNDARY_RISK_CARD.md",
      "markdown": "# Boundary & Risk Card\n\nProject: langchain-ai/langmem\n\n## Doramagic Trial Decision\n\nCurrent decision: it can enter pre-publication recommendation checks. First use should still start with least privilege, a temporary directory, and reversible configuration.\n\n## What The User Can Do Now\n\n- Read the Human Manual first to understand the project purpose and main workflows.\n- Use Prompt Preview for pre-install exploration; it validates interaction shape, not real execution.\n- Run official Quick Start commands only inside an isolated environment, not a primary setup.\n\n## Do Not Do Yet\n\n- Do not treat Prompt Preview as a real project execution result.\n- Do not treat metadata-only validation as sandbox installation validation.\n- Do not describe unverified capabilities as supported, working, or safe to install.\n- Do not provide production data, private files, real secrets, or primary host configuration on first trial.\n\n## Pre-Install Checklist\n\n- Host AI match: claude, chatgpt\n- Official installation entry status: official entry point found\n- Isolated temporary directory, temporary host, or container validation: required\n- Configuration rollback path: required\n- API keys, network access, file access, or host configuration changes: treat as high risk until confirmed\n- Installation command, actual output, and failure logs: must be recorded\n\n## Current Blockers\n\n- No blockers.\n\n## Project-Specific Pitfalls\n\n- 来源证据：GRAPH_RECURSION_LIMIT (high): 可能增加新用户试用和生产接入成本。 Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 来源证据：Persistence? (high): 可能增加新用户试用和生产接入成本。 Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 来源证据：Enhance error message when summarization fails due to missing HumanMessage in trimmed window (high): 可能影响授权、密钥配置或安全边界。 Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 可能修改宿主 AI 配置 (medium): 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。 Suggested check: 列出会写入的配置文件、目录和卸载/回滚步骤。\n- 能力判断依赖假设 (medium): 假设不成立时，用户拿不到承诺的能力。 Suggested check: 将假设转成下游验证清单。\n\n## Risk And Permission Notes\n\n- no_demo: medium\n\n## Evidence Gaps\n\n- No structured evidence gaps are currently visible.\n",
      "summary": "Installation, permission, validation, and pre-recommendation risks.",
      "title": "Boundary & Risk Card"
    },
    "human_manual": {
      "asset_id": "human_manual",
      "filename": "HUMAN_MANUAL.md",
      "markdown": "# https://github.com/langchain-ai/langmem Project Manual\n\nGenerated on: 2026-05-21 17:59:02 UTC\n\n## Table of Contents\n\n- [Home - LangMem Overview](#home)\n- [Installation and Setup](#installation)\n- [System Architecture](#system-architecture)\n- [Core Concepts](#core-concepts)\n- [Memory Tools - Hot Path Management](#memory-tools)\n- [Background Memory Manager](#background-memory-manager)\n- [Short-term Memory and Summarization](#short-term-memory)\n- [Prompt Optimization](#prompt-optimization)\n- [Reflection Executor](#reflection-executor)\n- [LangGraph Integration](#langgraph-integration)\n\n<a id='home'></a>\n\n## Home - LangMem Overview\n\n### Related Pages\n\nRelated topics: [System Architecture](#system-architecture), [Core Concepts](#core-concepts), [Installation and Setup](#installation)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/prompts/gradient.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n</details>\n\n# Home - LangMem Overview\n\nLangMem is a library for **memory management** and **prompt optimization** in LLM applications. It provides tools for extracting, storing, and retrieving structured memories, as well as optimizing prompts based on conversation trajectories and feedback.\n\n## Core Concepts\n\nLangMem operates across two primary domains: **Long-Term Memory** (knowledge extraction and storage) and **Short-Term Memory** (conversation summarization), with a complementary **Prompt Optimization** system for improving LLM instructions.\n\n### Memory Architecture Overview\n\n```mermaid\ngraph TD\n    A[User Conversation] --> B[Memory Manager]\n    B --> C[Long-Term Memory Store]\n    B --> D[Short-Term Summarization]\n    \n    E[Search/Retrieval] --> C\n    F[Prompt Optimizer] --> G[Optimized Prompts]\n    \n    C --> H[Structured Memories]\n    D --> I[Running Summary]\n```\n\n## Components\n\n### Memory Types\n\nLangMem provides several specialized memory components for different use cases.\n\n| Component | File Location | Purpose |\n|-----------|--------------|---------|\n| `MemoryManager` | `src/langmem/knowledge/extraction.py` | Extracts and manages long-term memories from conversations |\n| `MemoryStoreManager` | `src/langmem/knowledge/extraction.py` | Manages memories with persistent storage (LangGraph BaseStore) |\n| `SummarizationNode` | `src/langmem/short_term/summarization.py` | Provides running summaries for short-term context |\n| `GradientPromptOptimizer` | `src/langmem/prompts/gradient.py` | Optimizes prompts using gradient-based reflection |\n\n### Data Models\n\nLangMem uses TypedDict classes for type-safe data structures.\n\n#### Prompt Structure\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\nSource: [`src/langmem/prompts/types.py:7-22`]()\n\n#### Annotated Trajectory\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage]\n    feedback: dict[str, typing.Any] | str\n```\n\nSource: [`src/langmem/prompts/types.py:24-43`]()\n\n## Memory Management\n\n### Creating a Memory Manager\n\n```python\nfrom langmem import create_memory_manager\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n    enable_inserts=True,\n    enable_updates=True,\n    enable_deletes=True,\n)\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n### Memory Store with LangGraph Integration\n\nThe `MemoryStoreManager` integrates with LangGraph's BaseStore for persistent memory storage.\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n### Search Flow with Query Model\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Manager\n    participant QueryLLM\n    participant Store\n    participant MainLLM\n\n    Client->>Manager: messages\n    Manager->>QueryLLM: generate search query\n    QueryLLM-->>Manager: optimized query\n    Manager->>Store: find memories\n    Store-->>Manager: memories\n    Manager->>MainLLM: analyze & extract\n    MainLLM-->>Manager: memory updates\n    Manager->>Store: apply changes\n    Manager-->>Client: result\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n## Short-Term Memory\n\n### Summarization Node\n\nThe `SummarizationNode` provides running summaries for managing conversation context within a LangGraph workflow.\n\n```python\nfrom langmem.short_term import SummarizationNode, RunningSummary\n\nsummarization_node = SummarizationNode(\n    model=summarization_model,\n    max_tokens=256,\n    max_tokens_before_summary=256,\n    max_summary_tokens=128,\n)\n```\n\nSource: [`src/langmem/short_term/summarization.py`]()\n\n### State Update Format\n\nThe summarization node returns updates in this format:\n\n```json\n{\n    \"output_messages_key\": \"<list of updated messages>\",\n    \"context\": {\"running_summary\": \"<RunningSummary object>\"}\n}\n```\n\nSource: [`src/langmem/short_term/summarization.py`]()\n\n## Prompt Optimization\n\nLangMem provides multiple prompt optimization strategies through the `create_prompt_optimizer` and `create_multi_prompt_optimizer` functions.\n\n### Optimization Strategies\n\n| Strategy | Description | Configuration |\n|----------|-------------|---------------|\n| `gradient` | Hypothesis-driven optimization with reflection loops | `max_reflection_steps`, `min_reflection_steps` |\n| `metaprompt` | Meta-learning based on conversation patterns | Optional reflection step control |\n| `prompt_memory` | Learns from successful conversation patterns | No additional config |\n\nSource: [`src/langmem/prompts/optimization.py`]()\n\n### Single Prompt Optimization\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\n\ntrajectories = [(conversation, feedback)]\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [`src/langmem/prompts/optimization.py`]()\n\n### Multi-Prompt Optimization\n\n```python\nfrom langmem import create_multi_prompt_optimizer\n\noptimizer = create_multi_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"metaprompt\",\n    config={\"max_reflection_steps\": 3, \"min_reflection_steps\": 1},\n)\n\nbetter_prompts = await optimizer.ainvoke({\n    \"trajectories\": trajectories,\n    \"prompts\": prompts\n})\n```\n\nSource: [`src/langmem/prompts/optimization.py`]()\n\n### Gradient Optimizer Workflow\n\n```mermaid\ngraph TD\n    A[Current Prompt] --> B[Generate Hypotheses]\n    B --> C[Hypothesis Analysis]\n    C --> D{Reflection Loop}\n    D -->|Within steps| E[Generate Recommendations]\n    E --> F[Apply Adjustments]\n    F --> D\n    D -->|Complete| G[Optimized Prompt]\n```\n\nSource: [`src/langmem/prompts/gradient.py`]()\n\n## Memory Tools\n\nLangMem provides standalone tools for memory management in agent workflows.\n\n### Create Manage Memory Tool\n\n```python\nfrom langmem import create_manage_memory_tool\nfrom langgraph.prebuilt import create_react_agent\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [`src/langmem/knowledge/tools.py`]()\n\n### Create Search Memory Tool\n\n```python\nfrom langmem import create_search_memory_tool\n\nsearch_tool = create_search_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n\nmemories, _ = await search_tool.ainvoke(\n    {\"query\": \"Python preferences\", \"limit\": 5}\n)\n```\n\nSource: [`src/langmem/knowledge/tools.py`]()\n\n### Tool Configuration Options\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `namespace` | `tuple[str, ...]` | Hierarchical path for memory organization |\n| `actions_permitted` | `list[str]` | Limit actions (create, update, delete) |\n| `schema` | `BaseModel` | Custom memory schema |\n| `query_limit` | `int` | Maximum results to retrieve (default: 10) |\n\nSource: [`src/langmem/knowledge/tools.py`]()\n\n## Usage Patterns\n\n### Standalone Usage\n\nLangMem can be used independently of LangGraph:\n\n```python\nfrom langmem import create_memory_manager\nfrom langmem.schemas import PreferenceMemory\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n)\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\nmemories = await manager.ainvoke({\"messages\": conversation})\n```\n\nSource: [`examples/standalone_examples/README.md`]()\n\n### LangGraph Integration\n\n```python\nfrom langgraph.func import entrypoint\nfrom langgraph.store.memory import InMemoryStore\n\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that\"}\n    await manager.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n## Configuration\n\n### Memory Namespaces\n\nNamespaces use runtime configuration with placeholders:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n\n# Runtime config\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\n# Results in: (\"memories\", \"user123\")\n```\n\nSource: [`src/langmem/knowledge/extraction.py`](), [`src/langmem/knowledge/tools.py`]()\n\n### Default Memory Values\n\nProvide fallback values when no memories are found:\n\n```python\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    default=\"Use a concise and professional tone in all responses.\",\n)\n```\n\nSource: [`src/langmem/knowledge/extraction.py`]()\n\n## API Reference\n\n### Core Functions\n\n| Function | Return Type | Purpose |\n|----------|-------------|---------|\n| `create_memory_manager` | `MemoryManager` | Extract memories from conversations |\n| `create_memory_searcher` | `Runnable` | Search for relevant memories |\n| `create_memory_store_manager` | `MemoryStoreManager` | Memory with persistent storage |\n| `create_prompt_optimizer` | `Runnable` | Optimize single prompts |\n| `create_multi_prompt_optimizer` | `Runnable` | Optimize multiple prompts |\n| `create_manage_memory_tool` | `BaseTool` | Memory management tool for agents |\n| `create_search_memory_tool` | `BaseTool` | Memory search tool for agents |\n\nSource: [`src/langmem/knowledge/extraction.py`](), [`src/langmem/prompts/optimization.py`](), [`src/langmem/knowledge/tools.py`]()\n\n## Installation and Setup\n\n```bash\nuv venv\nsource .venv/bin/activate\nuv sync\n```\n\nSet your API key:\n\n```bash\nexport OPENAI_API_KEY=your_api_key_here\n```\n\nSource: [`examples/standalone_examples/README.md`]()\n\n## Summary\n\nLangMem provides a comprehensive toolkit for managing both long-term and short-term memory in LLM applications:\n\n- **Long-Term Memory**: Extract, store, search, and update structured memories using memory managers and tools\n- **Short-Term Memory**: Summarize conversations with the SummarizationNode for efficient context management\n- **Prompt Optimization**: Improve prompts using gradient, metaprompt, or memory-based strategies\n- **Agent Integration**: Tools work seamlessly with LangGraph's prebuilt agents and store infrastructure\n\n---\n\n<a id='installation'></a>\n\n## Installation and Setup\n\n### Related Pages\n\nRelated topics: [Home - LangMem Overview](#home), [LangGraph Integration](#langgraph-integration)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [pyproject.toml](https://github.com/langchain-ai/langmem/blob/main/pyproject.toml)\n- [README.md](https://github.com/langchain-ai/langmem/blob/main/README.md)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n</details>\n\n# Installation and Setup\n\n## Overview\n\nLangMem is a Python library for memory management and prompt optimization in LLM applications. The library provides components for short-term summarization, long-term memory storage, and prompt optimization. This page covers the complete installation process, dependencies, environment configuration, and setup for both basic and advanced usage scenarios.\n\n## Prerequisites\n\nBefore installing LangMem, ensure your environment meets the following requirements:\n\n| Requirement | Minimum Version | Notes |\n|-------------|-----------------|-------|\n| Python | 3.10+ | Required for modern typing features |\n| pip/uv | Latest recommended | Package manager for installation |\n| API Keys | Provider-specific | OpenAI, Anthropic, or other LLM providers |\n\nLangMem depends on the LangChain and LangGraph ecosystems. The library is designed to integrate seamlessly with LangGraph's state management and memory store abstractions. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Installation Methods\n\n### Using pip\n\nInstall LangMem directly from PyPI:\n\n```bash\npip install langmem\n```\n\n### Using uv (Recommended)\n\nFor faster dependency resolution and better workspace management:\n\n```bash\nuv pip install langmem\n```\n\n### Development Installation\n\nFor contributors or those wanting the latest unreleased features:\n\n```bash\n# Clone the repository\ngit clone https://github.com/langchain-ai/langmem.git\ncd langmem\n\n# Create virtual environment\nuv venv\nsource .venv/bin/activate\n\n# Install with all dependencies\nuv sync\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Core Dependencies\n\nLangMem relies on several key packages from the Python AI ecosystem:\n\n| Package | Purpose | Import Usage |\n|---------|---------|--------------|\n| `langchain-core` | Base chat models and message types | `from langchain_core.messages import AnyMessage` |\n| `langgraph` | State management and store abstractions | `from langgraph.store.memory import InMemoryStore` |\n| `pydantic` | Data validation and schema definitions | `class UserProfile(BaseModel)` |\n| `typing_extensions` | Enhanced typing support | `from typing_extensions import Required, TypedDict` |\n\nThe library uses `TypedDict` with `Required` for type-safe prompt and trajectory definitions. Source: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### Optional Dependencies\n\nDepending on your use case, you may need additional packages:\n\n```bash\n# For OpenAI integration\npip install langchain-openai\n\n# For Anthropic integration\npip install langchain-anthropic\n\n# For vector store with embeddings\npip install langchain-openai  # includes embedding support\n```\n\n## Environment Configuration\n\n### API Key Setup\n\nLangMem requires API access to language model providers. Set your API keys as environment variables:\n\n```bash\n# For OpenAI\nexport OPENAI_API_KEY=your_api_key_here\n\n# For Anthropic\nexport ANTHROPIC_API_KEY=your_api_key_here\n```\n\nAlternatively, pass API keys directly when configuring models:\n\n```python\nfrom langmem import create_memory_manager\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",  # Model identifier\n    schemas=[PreferenceMemory],\n)\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n### Runtime Configuration\n\nLangMem uses runtime configuration through `RunnableConfig` for namespace and store management:\n\n```python\nfrom langgraph.config import get_config, get_store\n\n# Configure namespace with user-specific identifiers\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\n\n# Access the store within LangGraph context\nstore = get_store()\n```\n\n## Project Structure\n\nUnderstanding the module organization helps with imports and customization:\n\n```\nlangmem/\n├── knowledge/           # Long-term memory management\n│   ├── extraction.py     # Memory extraction and management\n│   └── tools.py          # Memory tools for agents\n├── prompts/             # Prompt optimization\n│   ├── types.py         # TypedDict definitions\n│   ├── optimization.py  # Prompt optimization logic\n│   ├── gradient.py      # Gradient-based optimization\n│   └── prompt.py        # Prompt templates\n└── short_term/          # Short-term memory\n    └── summarization.py # Conversation summarization\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## Quick Start Setup\n\n### 1. Basic Memory Manager Setup\n\n```python\nfrom langmem import create_memory_manager\nfrom pydantic import BaseModel\n\n# Define your memory schema\nclass PreferenceMemory(BaseModel):\n    preference: str\n    context: str | None = None\n\n# Create the memory manager\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n)\n\n# Process a conversation\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\nmemories = await manager.ainvoke({\"messages\": conversation})\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### 2. Memory Store with Vector Embeddings\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langgraph.store.memory import InMemoryStore\n\n# Create store with embedding configuration\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n# Create store manager with namespace\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### 3. Standalone Example Setup\n\nFor use outside of LangGraph:\n\n```python\n# custom_store_example.py\nfrom langmem import create_memory_manager\nfrom pydantic import BaseModel\n\nclass PreferenceMemory(BaseModel):\n    category: str\n    preference: str\n    context: str\n\nmanager = create_memory_manager(\n    \"openai:gpt-4o\",\n    schemas=[PreferenceMemory],\n)\n\n# Process and store memories\nconversation = [\n    {\"role\": \"user\", \"content\": \"User prefers dark mode in all applications.\"},\n]\nmemories = await manager.ainvoke({\"messages\": conversation})\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Integration Setup\n\n### LangGraph Agent Integration\n\n```python\nfrom langgraph.prebuilt import create_react_agent\nfrom langmem import create_memory_store_manager, create_manage_memory_tool\n\n# Create memory manager\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\n# Create agent with memory tool\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(\n            namespace=(\"memories\", \"{langgraph_user_id}\"),\n            actions_permitted=[\"create\", \"update\"],\n        ),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Prompt Optimizer Setup\n\n```python\nfrom langmem import create_prompt_optimizer\n\n# Initialize optimizer\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\n\n# Optimize a prompt with conversation history\ntrajectories = [(conversation, feedback)]\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### Summarization Node Setup\n\n```python\nfrom langmem.short_term import SummarizationNode, RunningSummary\nfrom langchain_openai import ChatOpenAI\n\nmodel = ChatOpenAI(model=\"gpt-4o\")\nsummarization_model = model.bind(max_tokens=128)\n\nsummarization_node = SummarizationNode(\n    model=summarization_model,\n    max_tokens=256,\n    max_tokens_before_summary=256,\n    max_summary_tokens=128,\n)\n```\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n\n## Configuration Options\n\n### Memory Manager Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Language model for memory processing |\n| `schemas` | `list[type]` | Required | Pydantic models for memory structure |\n| `instructions` | `str` | `None` | Custom instructions for extraction |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_updates` | `bool` | `True` | Allow updating existing memories |\n| `enable_deletes` | `bool` | `True` | Allow deleting memories |\n\n### Memory Store Manager Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `query_model` | `str \\| BaseChatModel` | `None` | Separate model for search queries |\n| `query_limit` | `int` | `10` | Number of memories to retrieve |\n| `default` | `Any` | `None` | Default memory value if none found |\n| `default_factory` | `Callable` | `None` | Factory for default memory creation |\n| `namespace` | `tuple[str, ...]` | `(\"memories\", \"{langgraph_user_id}\")` | Storage namespace |\n\n### Prompt Optimizer Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `kind` | `Literal[\"metaprompt\", \"prompt_memory\"]` | Required | Optimization strategy |\n| `max_reflection_steps` | `int` | `3` | Maximum reflection iterations |\n| `min_reflection_steps` | `int` | `1` | Minimum reflection iterations |\n\n## Verification and Testing\n\nAfter installation, verify your setup:\n\n```bash\n# Check version\npython -c \"import langmem; print(langmem.__version__)\"\n\n# Run standalone examples\ncd examples/standalone_examples\nuv run custom_store_example.py\n```\n\nExpected output:\n```\nStarting custom store example...\nProcessing conversation...\nStored memories:\nMemory 31cf472f-3491-4f0c-82ec-09b4fe409cfd:\nContent: {'category': 'User Preference', 'preference': 'Dark Mode', ...}\nExample completed.\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Troubleshooting\n\n### Common Installation Issues\n\n**Missing dependencies:**\n```bash\n# Reinstall with all dependencies\nuv sync\n# or\npip install langmem[all]\n```\n\n**API key not found:**\n```python\n# Verify environment variable is set\nimport os\nprint(os.environ.get(\"OPENAI_API_KEY\"))\n```\n\n**LangGraph store not initialized:**\n```python\n# Ensure store is passed to agent\nagent = create_react_agent(\n    model,\n    tools=[...],\n    store=store,  # Must be provided\n)\n```\n\n### Import Errors\n\nIf you encounter import errors, ensure all required packages are installed:\n\n```bash\npip install langchain-core langgraph pydantic typing-extensions\n```\n\n## Next Steps\n\nAfter completing installation and setup:\n\n1. Review the [Memory Management](../concepts/memory_management.md) guide\n2. Explore [Prompt Optimization](../concepts/prompt_optimization.md)\n3. Try the [Standalone Examples](https://github.com/langchain-ai/langmem/tree/main/examples/standalone_examples)\n4. Integrate with your existing LangGraph application\n\n---\n\n<a id='system-architecture'></a>\n\n## System Architecture\n\n### Related Pages\n\nRelated topics: [Core Concepts](#core-concepts), [Memory Tools - Hot Path Management](#memory-tools), [Prompt Optimization](#prompt-optimization)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\n- [src/langmem/knowledge/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/__init__.py)\n- [src/langmem/prompts/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/__init__.py)\n- [src/langmem/short_term/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [langgraph.json](https://github.com/langchain-ai/langmem/blob/main/langgraph.json)\n</details>\n\n# System Architecture\n\nLangMem is a library designed to enhance AI agents with memory capabilities and prompt optimization. The system architecture consists of three primary modules: **Knowledge** (long-term memory), **Short-term** (session summarization), and **Prompts** (optimization). These modules work together to enable AI agents to store, retrieve, and optimize information over time.\n\n## Overview\n\nLangMem provides a layered architecture that separates concerns across memory management, prompt optimization, and state summarization. The library integrates with LangGraph's store infrastructure and supports both synchronous and asynchronous operations.\n\n```mermaid\ngraph TD\n    A[AI Agent] --> B[LangMem Core]\n    B --> C[Prompts Module]\n    B --> D[Knowledge Module]\n    B --> E[Short-term Module]\n    C --> F[Prompt Optimization]\n    C --> G[Multi-Prompt Optimization]\n    D --> H[Memory Manager]\n    D --> I[Memory Tools]\n    D --> J[Store Manager]\n    E --> K[Summarization Node]\n    J --> L[LangGraph BaseStore]\n    H --> L\n```\n\n## Core Modules\n\n### 1. Prompts Module\n\nThe Prompts module handles prompt management and optimization strategies. It defines core types and provides factories for creating prompt optimizers.\n\n#### Key Components\n\n| Component | File | Purpose |\n|-----------|------|---------|\n| `Prompt` | `types.py` | TypedDict for structured prompt management |\n| `AnnotatedTrajectory` | `types.py` | NamedTuple for conversation history with feedback |\n| `PromptOptimizerInput` | `types.py` | Input schema for single prompt optimization |\n| `MultiPromptOptimizerInput` | `types.py` | Input schema for multi-prompt optimization |\n| `INSTRUCTION_REFLECTION_PROMPT` | `prompt.py` | Template for prompt reflection |\n| `create_prompt_optimizer` | `optimization.py` | Factory for single prompt optimizer |\n| `create_multi_prompt_optimizer` | `optimization.py` | Factory for multi-prompt optimizer |\n\nSource: [src/langmem/prompts/types.py:1-94](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\nSource: [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n#### Data Flow: Prompt Optimization\n\n```mermaid\nsequenceDiagram\n    participant U as User\n    participant O as Prompt Optimizer\n    participant M as Memory\n    participant P as Prompt Store\n\n    U->>O: Trajectories + Current Prompt\n    O->>M: Extract Patterns\n    M-->>O: Success Patterns\n    O->>P: Apply Optimization\n    P-->>O: Optimized Prompt\n    O-->>U: Updated Prompt\n```\n\n### 2. Knowledge Module\n\nThe Knowledge module implements long-term memory management using LangGraph's BaseStore. It supports extraction, storage, search, and manipulation of memories.\n\n#### Key Components\n\n| Component | File | Purpose |\n|-----------|------|---------|\n| `create_memory_manager` | `extraction.py` | Creates a memory manager for extraction and synthesis |\n| `create_memory_searcher` | `extraction.py` | Creates a search pipeline with automatic query generation |\n| `create_memory_store_manager` | `extraction.py` | Creates a store-based memory manager |\n| `create_manage_memory_tool` | `tools.py` | Creates a LangGraph tool for memory CRUD operations |\n| `create_search_memory_tool` | `tools.py` | Creates a search tool for memory retrieval |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n#### Memory Manager Architecture\n\n```mermaid\ngraph TD\n    A[Input: Messages + Existing Memories] --> B[Memory Manager]\n    B --> C[Extract Tool Calls]\n    C --> D{Done?}\n    D -->|No| E[Invoke Extractor]\n    E --> F[Process Responses]\n    F --> G{More Steps?}\n    G -->|Yes| D\n    G -->|No| H[Update Memories]\n    D -->|Yes| H\n    H --> I[Return Updated Memories]\n```\n\n#### Factory Functions\n\n| Function | Return Type | Description |\n|----------|-------------|-------------|\n| `create_memory_manager` | `MemoryManager` | Core extraction and synthesis with configurable schemas |\n| `create_memory_searcher` | `Runnable[MessagesState, Awaitable[list[SearchItem]]]` | Search pipeline with query generation |\n| `create_memory_store_manager` | `MemoryStoreManager` | Direct store operations with search |\n| `create_manage_memory_tool` | `Tool` | LangGraph tool for CRUD operations |\n| `create_search_memory_tool` | `Tool` | LangGraph tool for memory search |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### 3. Short-term Module\n\nThe Short-term module provides session-level summarization to compress conversation history into maintainable state.\n\n#### Key Components\n\n| Component | File | Purpose |\n|-----------|------|---------|\n| `SummarizationNode` | `summarization.py` | LangGraph node for message summarization |\n| `RunningSummary` | `summarization.py` | State container for running summaries |\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n\n## Type System\n\n### Prompt TypedDict\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | `str` | Yes | Unique identifier for the prompt |\n| `prompt` | `str` | Yes | The actual prompt content |\n| `update_instructions` | `str \\| None` | No | Guidelines for modifying the prompt |\n| `when_to_update` | `str \\| None` | No | Dependencies between prompts during optimization |\n\nSource: [src/langmem/prompts/types.py:9-38](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### AnnotatedTrajectory\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage] | str\n    feedback: str | None = None\n```\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `messages` | `Sequence[AnyMessage] \\| str` | Conversation history |\n| `feedback` | `str \\| None` | Optional feedback for optimization |\n\nSource: [src/langmem/prompts/types.py:40-65](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## Memory Management Workflow\n\n### Extraction Pipeline\n\nThe memory manager uses a multi-step extraction process that iteratively invokes an extractor tool until completion:\n\n```mermaid\nsequenceDiagram\n    participant C as Client\n    participant M as Memory Manager\n    participant E as Extractor\n    participant S as Store\n\n    C->>M: Messages + Existing Memories\n    M->>E: Invoke with tools\n    E-->>M: Response with tool calls\n    M->>M: Process results\n    M->>S: Apply changes\n    M-->>C: Updated memories\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Search Pipeline\n\nThe searcher generates optimized queries and retrieves semantically similar memories:\n\n```mermaid\nsequenceDiagram\n    participant C as Client\n    participant S as Searcher\n    participant Q as Query LLM\n    participant T as Store\n\n    C->>S: Query context\n    S->>Q: Generate search query\n    Q-->>S: Optimized query\n    S->>T: Search memories\n    T-->>S: Results\n    S-->>C: Ranked memories\n```\n\n## Tool Integration\n\nLangMem provides LangGraph-native tools that connect to the BaseStore:\n\n### Manage Memory Tool\n\n```python\ncreate_manage_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n    schema=PreferenceMemory,\n    actions_permitted=[\"create\", \"update\", \"delete\"],\n    instructions=\"Update user preferences based on shared information.\"\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Search Memory Tool\n\n```python\ncreate_search_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\n## Namespace Configuration\n\nMemories are organized using hierarchical namespaces that support runtime configuration:\n\n| Pattern | Description |\n|---------|-------------|\n| `(\"memories\", \"{langgraph_user_id}\")` | User-specific memories |\n| `(\"memories\", \"{langgraph_user_id}\", \"user_profile\")` | User profile memories |\n| `(\"project_memories\", \"{langgraph_user_id}\")` | Project-scoped memories |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Entry Points\n\nThe library exposes a clean public API through `__init__.py` files in each module:\n\n| Module | Exports |\n|--------|---------|\n| `langmem` | Memory creation, extraction, and optimization |\n| `langmem.prompts` | Prompt types and optimization |\n| `langmem.knowledge` | Memory managers and tools |\n| `langmem.short_term` | Summarization components |\n\nSource: [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\nSource: [src/langmem/prompts/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/__init__.py)\nSource: [src/langmem/knowledge/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/__init__.py)\nSource: [src/langmem/short_term/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py)\n\n## Integration with LangGraph\n\nLangMem is designed to work seamlessly with LangGraph through:\n\n1. **BaseStore Integration**: Memory operations use LangGraph's `BaseStore` interface\n2. **Tool Protocol**: All tools follow LangGraph's tool conventions\n3. **Runnable Interface**: Managers implement `Runnable` for composable pipelines\n4. **Checkpoint Compatibility**: Summarization nodes integrate with LangGraph's state management\n\n```python\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    manager = create_memory_store_manager(\"anthropic:claude-3-5-sonnet-latest\")\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that\"}\n    await manager.ainvoke({\"messages\": [{\"role\": \"user\", \"content\": message}, response]})\n    return response\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n<a id='core-concepts'></a>\n\n## Core Concepts\n\n### Related Pages\n\nRelated topics: [System Architecture](#system-architecture), [Memory Tools - Hot Path Management](#memory-tools), [Background Memory Manager](#background-memory-manager)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/utils.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/utils.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/prompts/prompt.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/prompt.py)\n- [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n</details>\n\n# Core Concepts\n\nLangMem is a library for memory management and prompt optimization in LLM applications. This page explains the foundational concepts that underpin the library's architecture, including type systems, memory management strategies, and prompt optimization approaches.\n\n## Overview\n\nLangMem provides two primary capabilities:\n\n1. **Memory Management** - Storing, retrieving, and managing conversation context and user preferences\n2. **Prompt Optimization** - Improving LLM prompts based on conversation trajectories and feedback\n\nThe library is designed to integrate with [LangGraph](https://github.com/langchain-ai/langgraph) while also supporting standalone usage in custom applications. Source: [src/langmem/knowledge/extraction.py:1-50]()\n\n## Type System\n\nLangMem defines a robust type system for managing prompts and conversation data. These types serve as the foundation for all optimization and memory operations.\n\n### The Prompt Type\n\nThe `Prompt` TypedDict represents a structured prompt with metadata for optimization control.\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | `str` | Yes | Unique identifier for the prompt |\n| `prompt` | `str` | Yes | The actual prompt content |\n| `update_instructions` | `str \\| None` | No | Guidelines for modifying the prompt |\n| `when_to_update` | `str \\| None` | No | Dependencies or triggers for updates |\n\nSource: [src/langmem/prompts/types.py:10-40]()\n\n**Example usage:**\n\n```python\nfrom langmem import Prompt\n\nprompt = Prompt(\n    name=\"extract_entities\",\n    prompt=\"Extract key entities from the text:\",\n    update_instructions=\"Make minimal changes, only address where errors have occurred.\",\n    when_to_update=\"If there seem to be errors in recall of named entities.\",\n)\n```\n\n### AnnotatedTrajectory\n\nThe `AnnotatedTrajectory` NamedTuple captures conversation history with optional feedback for optimization.\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage]\n    feedback: dict[str, str | int | bool] | str | None = None\n```\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `messages` | `Sequence[AnyMessage]` | List of conversation messages |\n| `feedback` | `dict \\| str \\| None` | Optional feedback for analysis |\n\nSource: [src/langmem/prompts/types.py:56-70]()\n\n### OptimizerInput Types\n\nLangMem provides two input types for prompt optimization:\n\n#### Single Prompt Optimization\n\n```python\nclass OptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompt: str | Prompt\n```\n\n#### Multi-Prompt Optimization\n\n```python\nclass MultiPromptOptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompts: list[Prompt]\n```\n\nSource: [src/langmem/prompts/types.py:73-120]()\n\n## Memory Management\n\nLangMem provides a hierarchical memory management system for storing and retrieving conversation context.\n\n### Architecture Overview\n\n```mermaid\ngraph TD\n    A[Conversation Messages] --> B[Memory Manager]\n    B --> C[Memory Store]\n    D[User Query] --> E[Memory Searcher]\n    E --> F[Retrieved Memories]\n    C --> F\n    F --> G[LLM Response]\n```\n\n### MemoryManager\n\nThe `MemoryManager` class handles in-memory operations for memory extraction and updates.\n\n**Creation via factory function:**\n\n```python\nfrom langmem import create_memory_manager\n\nmanager = create_memory_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schemas=[PreferenceMemory],\n    enable_inserts=True,\n    enable_updates=True,\n    enable_deletes=True,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py:200-250]()\n\n**Supported Operations:**\n\n| Operation | Description |\n|-----------|-------------|\n| `ainvoke` | Asynchronously process messages and update memories |\n| `ainvoke({\"messages\": conversation, \"max_steps\": 3})` | Set max reflection steps for extraction |\n\n### MemoryStoreManager\n\nThe `MemoryStoreManager` extends memory capabilities with persistent storage integration using LangGraph's `BaseStore`.\n\n**Creation:**\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py:50-100]()\n\n**Namespace Configuration:**\n\nNamespaces use runtime configuration with placeholders:\n\n| Format | Description |\n|--------|-------------|\n| `(\"memories\", \"{langgraph_user_id}\")` | User-specific memories |\n\n### Memory Search Pipeline\n\nThe `create_memory_searcher` function creates a search pipeline with automatic query generation.\n\n```python\nfrom langmem import create_memory_searcher\n\nsearcher = create_memory_searcher(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    prompt=\"Search for distinct memories relevant to different aspects of the provided context.\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py:280-320]()\n\n### Memory Search Flow\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Manager\n    participant QueryLLM\n    participant Store\n    participant MainLLM\n\n    Client->>Manager: messages\n    Manager->>QueryLLM: generate search query\n    QueryLLM-->>Manager: optimized query\n    Manager->>Store: find memories\n    Store-->>Manager: memories\n    Manager->>MainLLM: analyze & extract\n    MainLLM-->>Manager: memory updates\n    Manager->>Store: apply changes\n    Manager-->>Client: result\n```\n\n### Memory Tools for LangGraph\n\nLangMem provides pre-built tools for integration with LangGraph's `create_react_agent`.\n\n#### Manage Memory Tool\n\n```python\nfrom langmem import create_manage_memory_tool\n\ntool = create_manage_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n    schema=PreferenceMemory,\n    actions_permitted=[\"create\", \"update\", \"delete\"],\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:50-100]()\n\n#### Search Memory Tool\n\n```python\nfrom langmem import create_search_memory_tool\n\nsearch_tool = create_search_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:200-250]()\n\n### Memory Layer\n\nThe `MemoryLayer` class provides a declarative API for composing memory capabilities in prompts.\n\n```python\nclass MemoryLayer(Runnable):\n    __slots__ = (\n        \"name\",\n        \"namespace\",\n        \"kind\",\n        \"update_instructions\",\n        \"schemas\",\n        \"limit\",\n        \"_manager_tool\",\n        \"_search_tool\",\n    )\n```\n\nSource: [src/langmem/prompts/_layers.py:20-35]()\n\n## Prompt Optimization\n\nLangMem provides multiple strategies for optimizing prompts based on conversation history and feedback.\n\n### Optimization Strategies\n\n| Strategy | Description |\n|----------|-------------|\n| `metaprompt` | Uses reflection-based optimization with configurable steps |\n| `prompt_memory` | Learns from past successful patterns |\n| `instruction_reflection` | Directly modifies prompts based on instructions |\n\n### Single Prompt Optimizer\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"metaprompt\",\n    config={\"max_reflection_steps\": 3, \"min_reflection_steps\": 1},\n)\n\n# Usage\ntrajectories = [(conversation, feedback)]\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [src/langmem/prompts/optimization.py:80-120]()\n\n### Multi-Prompt Optimizer\n\nFor optimizing multiple related prompts together:\n\n```python\nfrom langmem import create_multi_prompt_optimizer\n\noptimizer = create_multi_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"prompt_memory\",\n)\n\nprompts = [\n    {\"name\": \"explain\", \"prompt\": \"Explain the concept\"},\n    {\"name\": \"example\", \"prompt\": \"Provide a practical example\"},\n]\n\nbetter_prompts = await optimizer(trajectories, prompts)\n```\n\nSource: [src/langmem/prompts/optimization.py:150-200]()\n\n### Meta-Prompt Optimization Flow\n\n```mermaid\ngraph TD\n    A[Current Prompt + Trajectory] --> B[Reflection Steps]\n    B --> C{More iterations?}\n    C -->|Yes| D[Apply Instructions]\n    D --> B\n    C -->|No| E[Final Prompt]\n    \n    F[Max Steps Config] --> B\n    G[Min Steps Config] --> B\n```\n\n### Instruction Reflection Prompt\n\nThe instruction reflection mechanism uses structured prompts:\n\n```python\nINSTRUCTION_REFLECTION_PROMPT = \"\"\"You are helping an AI agent improve. You can do this by changing their system prompt.\n\nThese is their current prompt:\n<current_prompt>\n{current_prompt}\n</current_prompt>\n\nHere was the agent's trajectory:\n<trajectory>\n{trajectory}\n</trajectory>\n\nHere is the user's feedback:\n\n<feedback>\n{feedback}\n</feedback>\n\nHere are instructions for updating the agent's prompt:\n\n<instructions>\n{instructions}\n</instructions>\n\n\nBased on this, return an updated prompt\"\"\"\n```\n\nSource: [src/langmem/prompts/prompt.py:1-30]()\n\n### Response Schema\n\nThe optimization returns a structured response:\n\n```python\nclass GeneralResponse(TypedDict):\n    logic: str\n    update_prompt: bool\n    new_prompt: str\n```\n\nSource: [src/langmem/prompts/prompt.py:35-40]()\n\n## Integration Patterns\n\n### Standalone Usage\n\nLangMem can be used independently of LangGraph:\n\n```python\nfrom langmem import create_memory_manager, create_prompt_optimizer\n\n# Memory management\nmanager = create_memory_manager(\"anthropic:claude-3-5-sonnet-latest\")\nmemories = await manager.ainvoke({\"messages\": conversation})\n\n# Prompt optimization\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\nimproved = await optimizer.ainvoke({\"trajectories\": trajectories, \"prompt\": base})\n```\n\nSource: [examples/standalone_examples/README.md:1-50]()\n\n### LangGraph Integration\n\nLangMem integrates with LangGraph's agent and store infrastructure:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\nfrom langgraph.func import entrypoint\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\"))],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:60-80]()\n\n### Configuration Options\n\n#### Memory Manager Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Language model for memory processing |\n| `schemas` | `list[type[BaseModel]]` | `None` | Pydantic schemas for memory validation |\n| `instructions` | `str` | `None` | Custom instructions for the manager |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_updates` | `bool` | `True` | Allow updating existing memories |\n| `enable_deletes` | `bool` | `True` | Allow deleting memories |\n| `query_model` | `str \\| BaseChatModel` | `None` | Separate model for search queries |\n| `query_limit` | `int` | `10` | Maximum memories to retrieve |\n\nSource: [src/langmem/knowledge/extraction.py:50-120]()\n\n#### Prompt Optimizer Configuration\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `kind` | `Literal[\"metaprompt\", \"prompt_memory\", \"instruction_reflection\"]` | Required | Optimization strategy |\n| `config` | `dict` | `None` | Strategy-specific configuration |\n| `max_reflection_steps` | `int` | `3` | Maximum reflection iterations |\n| `min_reflection_steps` | `int` | `1` | Minimum reflection iterations |\n\nSource: [src/langmem/prompts/optimization.py:80-120]()\n\n## Summary\n\nLangMem's core concepts provide a comprehensive framework for:\n\n1. **Structured Prompt Management** - Using TypedDict types for prompts with metadata for optimization control\n2. **Memory Storage and Retrieval** - Persisting conversation context with namespace-based organization\n3. **Automatic Memory Extraction** - Using LLMs to extract and synthesize memories from conversations\n4. **Multi-Strategy Prompt Optimization** - Improving prompts through reflection, memory patterns, or instruction following\n\nThese concepts work together to enable intelligent, self-improving LLM applications that maintain context and continuously refine their behavior.\n\n---\n\n<a id='memory-tools'></a>\n\n## Memory Tools - Hot Path Management\n\n### Related Pages\n\nRelated topics: [Core Concepts](#core-concepts), [Background Memory Manager](#background-memory-manager), [LangGraph Integration](#langgraph-integration)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n- [examples/standalone_examples/custom_store_example.py](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/custom_store_example.py)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n</details>\n\n# Memory Tools - Hot Path Management\n\n## Overview\n\nMemory Tools in LangMem provide real-time, interactive capabilities for managing persistent memories during conversation execution. Unlike the background extraction pipeline (which processes conversation history asynchronously), Hot Path Management enables direct manipulation and retrieval of memories within the active conversation flow.\n\nThe hot path refers to the synchronous execution path where memories are created, updated, deleted, or searched in real-time as part of agent/tool interactions. This approach allows AI assistants to:\n\n- Persist newly discovered user preferences immediately\n- Update outdated memories when corrections occur\n- Delete irrelevant or incorrect memories\n- Search and retrieve relevant context on-demand\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Architecture\n\nThe Memory Tools system consists of three primary components that operate on the hot path:\n\n```mermaid\ngraph TD\n    A[Agent / Workflow] --> B[Manage Memory Tool]\n    A --> C[Search Memory Tool]\n    A --> D[Memory Searcher]\n    B --> E[LangGraph BaseStore]\n    C --> E\n    D --> E\n    E --> F[Namespace: memories, {user_id}]\n    E --> G[Namespace: project_memories, {user_id}]\n```\n\n### Component Responsibilities\n\n| Component | Purpose | Sync/Async |\n|-----------|---------|------------|\n| `create_manage_memory_tool` | CRUD operations for memories | Both |\n| `create_search_memory_tool` | Query-based memory retrieval | Both |\n| `create_memory_searcher` | LLM-powered query generation + search | Async |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py) and [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n## Manage Memory Tool\n\n### Purpose and Scope\n\nThe `create_manage_memory_tool` function creates a StructuredTool that enables AI assistants to perform Create, Update, and Delete (CRUD) operations on persistent memories directly within conversation flow. This tool is designed for proactive memory management where the agent identifies and records important context during interaction.\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Function Signature\n\n```python\ndef create_manage_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = \"Proactively call this tool when you:\\n\\n\"\n        \"1. Identify a new USER preference.\\n\"\n        \"2. Receive an explicit USER request to remember something or otherwise alter your behavior.\\n\"\n        \"3. Are working and want to record important context.\\n\"\n        \"4. Identify that an existing MEMORY is incorrect or outdated.\\n\",\n    schema: typing.Type = str,\n    actions_permitted: typing.Optional[\n        tuple[typing.Literal[\"create\", \"update\", \"delete\"], ...]\n    ] = (\"create\", \"update\", \"delete\"),\n    store: typing.Optional[BaseStore] = None,\n    name: str = \"manage_memory\",\n) -> StructuredTool\n```\n\n### Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `namespace` | `tuple[str, ...] \\| str` | Required | Namespace structure for organizing memories. Supports runtime placeholders like `{langgraph_user_id}`. |\n| `instructions` | `str` | Predefined guidelines | Custom instructions for when the agent should invoke the tool. |\n| `schema` | `Type` | `str` | Pydantic model defining the expected memory structure. |\n| `actions_permitted` | `tuple[Literal[\"create\", \"update\", \"delete\"], ...]` | All actions | Limits which operations the tool can perform. |\n| `store` | `BaseStore \\| None` | `None` | LangGraph BaseStore instance. Uses context store if not provided. |\n| `name` | `str` | `\"manage_memory\"` | Tool name for identification. |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Supported Actions\n\nThe tool dynamically generates its description based on `actions_permitted`:\n\n| Actions Config | Generated Description |\n|----------------|----------------------|\n| `(\"create\",)` | \"Create a memory to persist...\" |\n| `(\"create\", \"update\")` | \"Create or update a memory...\" |\n| `(\"create\", \"update\", \"delete\")` | \"Create, update, or delete a memory...\" |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Tool Function Interface\n\n```python\nasync def amanage_memory(\n    content: typing.Optional[schema] = None,\n    action: action_type = default_action,\n    *,\n    id: typing.Optional[uuid.UUID] = None,\n) -> str:\n    \"\"\"Execute memory management operation.\"\"\"\n    # content: Memory data (required for create/update)\n    # action: \"create\" | \"update\" | \"delete\"\n    # id: Memory UUID (required for update/delete)\n```\n\nThe tool supports both synchronous and asynchronous invocation patterns:\n\n```python\n# Sync usage\nresult = memory_tool.invoke({\"content\": {...}, \"action\": \"create\"})\n\n# Async usage  \nresult = await memory_tool.ainvoke({\"content\": {...}, \"action\": \"create\"})\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n---\n\n## Search Memory Tool\n\n### Purpose and Scope\n\nThe `create_search_memory_tool` function creates a tool for searching memories stored in a LangGraph BaseStore using semantic or exact matching. It returns both memory contents and raw memory objects for advanced usage scenarios.\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Function Signature\n\n```python\ndef create_search_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = _MEMORY_SEARCH_INSTRUCTIONS,\n    store: BaseStore | None = None,\n    response_format: typing.Literal[\"content\", \"content_and_artifact\"] = \"content\",\n    name: str = \"search_memory\",\n) -> StructuredTool\n```\n\n### Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `namespace` | `tuple[str, ...] \\| str` | Required | Namespace structure for organizing memories. |\n| `instructions` | `str` | Empty string | Custom instructions for search behavior. |\n| `store` | `BaseStore \\| None` | `None` | LangGraph BaseStore instance. |\n| `response_format` | `\"content\" \\| \"content_and_artifact\"` | `\"content\"` | Controls return format. |\n| `name` | `str` | `\"search_memory\"` | Tool name for identification. |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Response Formats\n\n```python\n# content: Returns serialized memory contents\nmemories = await search_tool.ainvoke({\"query\": \"Python preferences\", \"limit\": 5})\n\n# content_and_artifact: Returns (serialized memories, raw memories)\nmemories, artifacts = await search_tool.ainvoke({\n    \"query\": \"Python preferences\", \n    \"limit\": 5\n})\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Search Function Interface\n\n```python\nasync def asearch_memory(\n    query: str,\n    *,\n    limit: int = 10,\n    offset: int = 0,\n    filter: typing.Optional[dict] = None,\n):\n    \"\"\"Execute memory search operation.\"\"\"\n```\n\n---\n\n## Memory Searcher Pipeline\n\n### Purpose and Scope\n\nThe `create_memory_searcher` function builds a pipeline that combines query generation, memory search, and result ranking into a single component. Unlike the basic search tool, this pipeline uses an LLM to generate effective search queries based on conversation context.\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Function Signature\n\n```python\ndef create_memory_searcher(\n    model: str | BaseChatModel,\n    prompt: str = \"Search for distinct memories relevant to different aspects of the provided context.\",\n    *,\n    namespace: tuple[str, ...] = (\"memories\", \"{langgraph_user_id}\"),\n) -> Runnable[MessagesState, typing.Awaitable[list[SearchItem]]]:\n```\n\n### Query Generation Flow\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant SearchPipeline\n    participant QueryLLM\n    participant Store\n\n    Client->>SearchPipeline: messages/context\n    SearchPipeline->>QueryLLM: generate search query\n    QueryLLM-->>SearchPipeline: optimized query\n    SearchPipeline->>Store: semantic search\n    Store-->>SearchPipeline: ranked results\n    SearchPipeline-->>Client: list[SearchItem]\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n## Namespace Configuration\n\n### Runtime Template Resolution\n\nNamespaces support runtime placeholders that are resolved from the LangGraph config:\n\n```python\n# Configuration\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\n\n# Namespace with placeholder\nnamespace = (\"memories\", \"{langgraph_user_id}\")\n\n# Resolved at runtime\n# Result: (\"memories\", \"user123\")\n```\n\n### Namespace Configuration Examples\n\n| Configuration | Namespace Pattern | Resolved Example |\n|--------------|-------------------|------------------|\n| Per-user | `(\"memories\", \"{langgraph_user_id}\")` | `(\"memories\", \"user-123\")` |\n| Team-wide | `(\"memories\", \"{langgraph_user_id}\")` | `(\"memories\", \"team-x\")` |\n| Project-specific | `(\"project_memories\", \"{langgraph_user_id}\")` | `(\"project_memories\", \"dev-456\")` |\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n---\n\n## Integration with LangGraph\n\n### Prebuilt Agent Integration\n\nMemory tools integrate seamlessly with LangGraph's `create_react_agent`:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\n\ndef prompt(state):\n    config = get_config()\n    memories = get_store().search(\n        (\"memories\", config[\"configurable\"][\"langgraph_user_id\"]),\n    )\n    system_prompt = f\"\"\"You are a helpful assistant.\n<memories>\n{memories}\n</memories>\n\"\"\"\n    return [{\"role\": \"system\", \"content\": system_prompt}, *state[\"messages\"]]\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Entrypoint Integration\n\n```python\nfrom langgraph.func import entrypoint\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n@entrypoint(store=store)\nasync def workflow(state: dict, *, previous=None):\n    result = await memory_tool.ainvoke({\"content\": {...}, \"action\": \"create\"})\n    return result\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n---\n\n## Standalone Usage\n\nMemory tools can operate independently of LangGraph's context by providing an explicit store:\n\n```python\nfrom langmem import create_manage_memory_tool\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmemory_tool = create_manage_memory_tool(\n    namespace=(\"memories\", \"standalone_user\"),\n    store=store,\n)\n\n# Direct tool invocation\nresult = memory_tool.invoke({\n    \"content\": \"User prefers dark mode in all applications.\",\n    \"action\": \"create\"\n})\n```\n\nSource: [examples/standalone_examples/custom_store_example.py](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/custom_store_example.py)\n\n### Standalone Example Output\n\nWhen running standalone examples, stored memories are returned in this format:\n\n```\nMemory 31cf472f-3491-4f0c-82ec-09b4fe409cfd:\nContent: {'category': 'User Preference', 'preference': 'Dark Mode', 'context': 'User prefers dark mode in all applications.'}\nKind: PreferenceMemory\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n---\n\n## Memory Layer (Declarative API)\n\n### Purpose and Scope\n\nThe `MemoryLayer` class provides a declarative API for composing memories within prompts. It wraps the memory management and search functionality into a single `Runnable` component.\n\nSource: [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n\n### Class Definition\n\n```python\nclass MemoryLayer(Runnable):\n    __slots__ = (\n        \"name\",\n        \"namespace\",\n        \"kind\",\n        \"update_instructions\",\n        \"schemas\",\n        \"limit\",\n        \"_manager_tool\",\n        \"_search_tool\",\n    )\n```\n\n### Supported Configurations\n\n| Kind | Description | Schema Support |\n|------|-------------|----------------|\n| `\"multi\"` | Multiple memories per namespace | `str` or `list[BaseModel]` |\n| `\"single\"` | One memory per namespace | Single schema type |\n\nSource: [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n\n---\n\n## Prompt Types\n\n### Memory Layer Input/Output\n\nThe MemoryLayer uses typed dictionaries for state management:\n\n```python\nclass MessagesState(TypedDict, total=False):\n    messages: list[AnyMessage]\n    query: str | list[str]\n```\n\nSource: [src/langmem/prompts/_layers.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/_layers.py)\n\n### Prompt Configuration\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n---\n\n## Best Practices\n\n### When to Use Hot Path Management\n\n| Scenario | Recommended Tool |\n|----------|------------------|\n| Agent proactively identifies user preferences | `create_manage_memory_tool` |\n| User explicitly requests memory storage | `create_manage_memory_tool` |\n| Agent needs to retrieve context for response | `create_search_memory_tool` |\n| Complex multi-step memory retrieval | `create_memory_searcher` |\n| Declarative memory in prompts | `MemoryLayer` |\n\n### Security Considerations\n\n- Always validate that `actions_permitted` includes only necessary operations\n- Use namespace isolation to prevent cross-user memory access\n- Validate memory schema types before storage\n\n### Performance Optimization\n\n- Configure appropriate `limit` values to avoid over-fetching\n- Use `response_format=\"content\"` for simple retrieval scenarios\n- Leverage async invocation for concurrent operations\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n---\n\n## Summary\n\nMemory Tools - Hot Path Management provides the interactive, real-time memory capabilities that enable AI assistants to maintain persistent context across conversations. By integrating with LangGraph's BaseStore and supporting both synchronous and asynchronous patterns, these tools offer flexible options for:\n\n1. **Immediate Memory Persistence** - Create memories as preferences are identified\n2. **Real-time Updates** - Modify outdated information during conversation\n3. **Targeted Retrieval** - Search and retrieve relevant context on-demand\n4. **Declarative Composition** - Embed memories in prompts using the MemoryLayer API\n\nThe tool architecture supports standalone usage outside of LangGraph while maintaining full compatibility with LangGraph agents and workflows.\n\n---\n\n<a id='background-memory-manager'></a>\n\n## Background Memory Manager\n\n### Related Pages\n\nRelated topics: [Core Concepts](#core-concepts), [Memory Tools - Hot Path Management](#memory-tools), [Short-term Memory and Summarization](#short-term-memory)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/graphs/semantic.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/semantic.py)\n- [src/langmem/graphs/prompts.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/prompts.py)\n- [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n</details>\n\n# Background Memory Manager\n\nThe Background Memory Manager is a core component of langmem that enables asynchronous, non-blocking memory extraction and storage within agent workflows. It allows memory operations to be executed in background threads or on separate servers, ensuring that the primary agent response latency is not impacted by memory processing overhead.\n\n## Overview\n\nThe Background Memory Manager is primarily implemented through the `ReflectionExecutor` class, which orchestrates memory enrichment operations asynchronously. This approach decouples the memory management from the main agent thread, enabling production-ready applications where memory persistence happens transparently after user interactions are acknowledged. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\nThe system is designed to work seamlessly with LangGraph's `BaseStore` abstraction, allowing memories to be stored, retrieved, updated, and deleted through semantic search capabilities. The background execution model ensures that even complex memory extraction and synthesis operations do not block the agent's response to users.\n\n## Architecture\n\n### High-Level Architecture\n\nThe Background Memory Manager follows a producer-consumer pattern where the main agent produces memory enrichment tasks and the `ReflectionExecutor` consumes them asynchronously.\n\n```mermaid\ngraph TD\n    A[User Message] --> B[Agent Processing]\n    B --> C[User Response]\n    C -->|Schedule Enrichment| D[ReflectionExecutor]\n    D -->|after_seconds=0| E[Background Thread]\n    E --> F[MemoryStoreManager]\n    F --> G[BaseStore]\n    F --> H[Query LLM]\n    G --> I[Vector Search]\n    I --> F\n    H -->|Generate Query| F\n    F --> J[Memory Updates]\n    J --> G\n```\n\n### Component Interactions\n\nThe system consists of several interconnected components that work together to provide background memory management:\n\n| Component | Role | Source |\n|-----------|------|--------|\n| `ReflectionExecutor` | Schedules and executes memory operations in background | [extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py) |\n| `MemoryStoreManager` | Orchestrates memory CRUD operations with search | [extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py) |\n| `MemoryManager` | Core extraction logic with multi-step synthesis | [extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py) |\n| `BaseStore` | LangGraph's storage abstraction for memories | [tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py) |\n\n## Core Components\n\n### ReflectionExecutor\n\nThe `ReflectionExecutor` class is the primary mechanism for background memory processing. It wraps a memory manager and provides async execution capabilities.\n\n```python\nreflection = ReflectionExecutor(manager, store=store)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n#### Key Responsibilities\n\n- Decoupling memory operations from the main agent thread\n- Managing store configuration for memory persistence\n- Providing async invoke capabilities for memory enrichment\n- Supporting background scheduling with configurable delays\n\n### MemoryStoreManager\n\nThe `MemoryStoreManager` extends `MemoryManager` with additional search capabilities and tighter integration with LangGraph's `BaseStore`. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n#### Factory Function\n\nThe primary entry point for creating a memory store manager is `create_memory_store_manager`:\n\n```python\ndef create_memory_store_manager(\n    model: str | BaseChatModel,\n    schemas: list[type[BaseModel]] | None = None,\n    default: str | BaseModel | None = None,\n    default_factory: typing.Callable[[], BaseModel] | None = None,\n    instructions: str | None = None,\n    enable_inserts: bool = True,\n    enable_deletes: bool = True,\n    query_model: str | BaseChatModel | None = None,\n    query_limit: int = 3,\n    namespace: tuple[str, ...] = (\"memories\", \"{langgraph_user_id}\"),\n    store: BaseStore | None = None,\n    phases: tuple[str, ...] | None = None,\n) -> MemoryStoreManager\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### MemoryManager\n\nThe foundational class that handles multi-step memory extraction and synthesis. It supports configurable extraction phases and tool-based memory operations.\n\n```python\nreturn MemoryManager(\n    model,\n    schemas=schemas,\n    instructions=instructions,\n    enable_inserts=enable_inserts,\n    enable_updates=enable_updates,\n    enable_deletes=enable_deletes,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Configuration Options\n\n### MemoryStoreManager Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Main language model for memory processing |\n| `schemas` | `list[type[BaseModel]] \\| None` | `None` | Pydantic models defining memory structure |\n| `default` | `str \\| BaseModel \\| None` | `None` | Default memory when none found |\n| `default_factory` | `Callable[[], BaseModel]` | `None` | Factory function for default memory |\n| `instructions` | `str \\| None` | `None` | Custom instructions for memory management |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_deletes` | `bool` | `True` | Allow deleting memories |\n| `query_model` | `str \\| BaseChatModel \\| None` | `None` | Separate model for search query generation |\n| `query_limit` | `int` | `3` | Maximum memories to retrieve per search |\n| `namespace` | `tuple[str, ...]` | `(\"memories\", \"{langgraph_user_id}\")` | Storage namespace structure |\n| `store` | `BaseStore \\| None` | `None` | LangGraph BaseStore instance |\n| `phases` | `tuple[str, ...] \\| None` | `None` | Custom extraction phases |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Namespace Configuration\n\nMemory namespaces use runtime configuration with placeholders for dynamic values:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n```\n\nThe `{langgraph_user_id}` placeholder is populated from the LangGraph config at runtime. This enables per-user memory isolation while using a single store. Source: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Workflows\n\n### Standard Background Enrichment Workflow\n\n```mermaid\nsequenceDiagram\n    participant Agent\n    participant Background\n    participant Store\n    participant QueryLLM\n    participant MainLLM\n\n    Agent->>Agent: Process user message\n    Agent-->>User: Send response\n    Agent->>Background: Schedule enrichment (after_seconds=0)\n    Note over Background: Memory processing happens<br/>in background thread\n    Background->>QueryLLM: Generate search query\n    QueryLLM-->>Background: Optimized query\n    Background->>Store: Find relevant memories\n    Store-->>Background: Existing memories\n    Background->>MainLLM: Analyze conversation + memories\n    MainLLM-->>Background: Memory updates (insert/update/delete)\n    Background->>Store: Apply changes\n```\n\n### Multi-Step Extraction Workflow\n\nThe memory manager supports multi-step extraction and synthesis for complex memory scenarios:\n\n```python\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    query_model=\"anthropic:claude-3-5-haiku-latest\",\n    query_limit=10,\n)\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\n# Background execution\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user123\"}}\nawait manager.ainvoke(\n    {\"messages\": conversation},\n    config=config,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Query Model Architecture\n\nWhen a separate query model is configured, the system uses a two-model approach for efficient memory retrieval:\n\n```mermaid\ngraph LR\n    A[Messages] --> B[QueryModel]\n    B --> C[Search Query]\n    C --> D[Vector Store]\n    D --> E[Retrieved Memories]\n    E --> F[MainModel]\n    F --> G[Memory Analysis]\n    G --> H[Store Updates]\n```\n\nThis architecture separates the lightweight query generation from the heavy analysis workload, optimizing cost and latency.\n\n## Integration Patterns\n\n### With LangGraph create_react_agent\n\n```python\nfrom langmem import create_memory_store_manager, ReflectionExecutor\nfrom langgraph.prebuilt import create_react_agent\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{user_id}\"),\n)\n\nreflection = ReflectionExecutor(manager, store=store)\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[...],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### With @entrypoint Decorator\n\n```python\nfrom langmem import create_memory_store_manager, ReflectionExecutor\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\nreflection = ReflectionExecutor(manager, store=store)\n\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that\"}\n    await reflection.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Memory Tools\n\nThe background memory system also provides complementary tools for explicit memory management within agent conversations.\n\n### create_manage_memory_tool\n\nCreates a tool for direct memory CRUD operations by agents:\n\n```python\ndef create_manage_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = \"Proactively call this tool when you:\\n\\n\"\n    \"1. Identify a new USER preference.\\n\"\n    \"2. Receive an explicit USER request to remember something.\\n\",\n    schema: typing.Type = str,\n    actions_permitted: tuple[Literal[\"create\", \"update\", \"delete\"], ...] = (\"create\", \"update\", \"delete\"),\n    store: BaseStore | None = None,\n    name: str = \"manage_memory\",\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### create_search_memory_tool\n\nCreates a tool for semantic memory search within conversations:\n\n```python\ndef create_search_memory_tool(\n    namespace: tuple[str, ...] | str,\n    *,\n    instructions: str = _MEMORY_SEARCH_INSTRUCTIONS,\n    store: BaseStore | None = None,\n    response_format: Literal[\"content\", \"content_and_artifact\"] = \"content\",\n    name: str = \"search_memory\",\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Data Models\n\n### Prompt Structure\n\nMemory management uses structured prompts defined in `src/langmem/prompts/types.py`:\n\n```python\nclass Prompt(TypedDict, total=False):\n    \"\"\"TypedDict for structured prompt management and optimization.\"\"\"\n    name: Required[str]\n    prompt: Required[str]\n    update_instructions: str | None\n    when_to_update: str | None\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### Annotated Trajectory\n\nConversation histories with feedback for prompt optimization:\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    \"\"\"Conversation history with optional feedback for prompt optimization.\"\"\"\n    messages: list[AnyMessage]\n    feedback: dict[str, typing.Any] | None\n```\n\nSource: [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## Best Practices\n\n1. **Use Separate Query Models**: Configure `query_model` with a faster, cheaper model (e.g., Haiku) to reduce costs while keeping the main model for quality analysis.\n\n2. **Namespace Isolation**: Always use user-specific namespaces like `(\"memories\", \"{langgraph_user_id}\")` to ensure proper data isolation.\n\n3. **Background Scheduling**: Schedule enrichment with `after_seconds=0` in production to maintain responsive user interactions.\n\n4. **Schema Definition**: Define explicit Pydantic schemas for memories to ensure consistent structure and enable better extraction quality.\n\n5. **Default Values**: Provide `default` or `default_factory` values for critical memory types to ensure graceful handling when no memories are found.\n\n## Example: Standalone Usage\n\nThe Background Memory Manager can be used independently of LangGraph:\n\n```python\nfrom langmem import create_memory_store_manager\nfrom langchain_openai import ChatOpenAI\n\n# Configure store\nfrom langgraph.store.memory import InMemoryStore\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n# Create manager\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    schema=PreferenceMemory,\n    namespace=(\"memories\", \"user123\"),\n    store=store,\n)\n\n# Process conversation\nconversation = [\n    {\"role\": \"user\", \"content\": \"I prefer dark mode in all my apps\"},\n    {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"},\n]\n\nawait manager.ainvoke({\"messages\": conversation})\n\n# Search for memories\nresults = manager.search(query=\"app preferences\")\nprint(results)\n```\n\nSource: [examples/standalone_examples/README.md](https://github.com/langchain-ai/langmem/blob/main/examples/standalone_examples/README.md)\n\n## Summary\n\nThe Background Memory Manager provides a robust framework for asynchronous memory operations in agent applications. Key features include:\n\n- **Decoupled Processing**: Memory operations execute in background threads without blocking agent responses\n- **Flexible Storage**: Integration with LangGraph's `BaseStore` for vector-based memory retrieval\n- **Multi-Step Extraction**: Configurable phases for complex memory synthesis\n- **Semantic Search**: Automatic query generation with optional dedicated query models\n- **Tool Integration**: Complementary tools for explicit memory management within conversations\n\nThe system is production-ready and scales from simple single-user applications to complex multi-tenant deployments through its namespace-based isolation and background execution model.\n\n---\n\n<a id='short-term-memory'></a>\n\n## Short-term Memory and Summarization\n\n### Related Pages\n\nRelated topics: [Background Memory Manager](#background-memory-manager), [Memory Tools - Hot Path Management](#memory-tools)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/short_term/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py)\n- [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py)\n</details>\n\n# Short-term Memory and Summarization\n\n## Overview\n\nThe short-term memory module in LangMem provides utilities for managing conversation history through summarization. As conversations grow longer, they exceed LLM context windows. This module enables efficient compression of message histories by generating summaries while preserving critical information. Source: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\nThe module exposes a functional API (`summarize_messages`, `asummarize_messages`) for quick integration and a class-based API (`SummarizationNode`) for use within LangGraph workflows. Both interfaces ultimately produce a `SummarizationResult` containing the summarized messages and a `RunningSummary` tracking the compressed state. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n## Architecture\n\nThe summarization system operates on a sliding window principle: messages accumulate until a token threshold is reached, at which point older messages are summarized while recent messages pass through unchanged. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n```mermaid\ngraph TD\n    A[Input Messages] --> B{Tokens > max_tokens_before_summary?}\n    B -->|No| C[Pass through unchanged]\n    B -->|Yes| D[Identify summarization window]\n    D --> E[Generate summary via LLM]\n    E --> F[Replace window with summary message]\n    F --> G[Update RunningSummary in context]\n    G --> H[Output updated messages]\n    C --> H\n```\n\n## Core Components\n\n### SummarizationNode\n\nThe `SummarizationNode` class implements a LangGraph-compatible node that summarizes message histories. It can be integrated directly into a LangGraph workflow. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n#### Constructor Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `model` | `BaseChatModel` | The language model used for generating summaries |\n| `max_tokens` | `int` | Maximum tokens in the final output; enforced after summarization |\n| `max_tokens_before_summary` | `int \\| None` | Token threshold to trigger summarization; defaults to `max_tokens` |\n| `max_summary_tokens` | `int` | Token budget allocated for the summary itself |\n| `token_counter` | `Callable \\| None` | Custom function to count tokens; defaults to approximate counting |\n| `initial_summary_prompt` | `str \\| None` | Prompt template for generating the first summary |\n| `existing_summary_prompt` | `str \\| None` | Prompt template for updating an existing running summary |\n| `final_prompt` | `str \\| None` | Prompt template combining summary with remaining messages |\n| `input_messages_key` | `str` | Key in state containing messages to summarize |\n| `output_messages_key` | `str` | Key for output messages after summarization |\n| `name` | `str` | Name identifier for this node |\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n#### State Update Format\n\nThe node returns a LangGraph state update in the following structure:\n\n```json\n{\n    \"output_messages_key\": \"<list of updated messages ready to be input to the LLM after summarization, including a message with a summary (if any)>\",\n    \"context\": {\"running_summary\": \"<RunningSummary object>\"}\n}\n```\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### RunningSummary\n\nThe `RunningSummary` class maintains a cumulative summary of conversation history. It is stored in the graph's context state and updated incrementally as new summaries are generated. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### SummarizationResult\n\nA result object containing the summarized messages and updated running summary after processing. Source: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\n## Token Management Behavior\n\n### Threshold Triggers\n\nSummarization is triggered when the token count of accumulated messages exceeds `max_tokens_before_summary`. This parameter defaults to the same value as `max_tokens` if not explicitly provided, allowing the summarization LLM to process the full token budget. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Token Budget Enforcement\n\nWhen the number of tokens to be summarized exceeds `max_tokens`, only the last `max_tokens` are summarized. This prevents exceeding the context window of the summarization LLM, which is assumed to be capped at `max_tokens`. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Tool Call Handling\n\nIf the last message within the summarization window is an AI message containing tool calls, all subsequent corresponding tool result messages are also included in the summarization. This ensures tool call and result pairs are summarized together as logical units. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Summary Token Budget\n\nThe `max_summary_tokens` parameter controls the token budget for the summary itself. Critically, this parameter is **not** passed to the summary-generating LLM to limit output length. It is used solely for estimating the maximum allowed token budget during processing. To enforce a length limit, bind the model directly: `model.bind(max_tokens=max_summary_tokens)`. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n## Usage Patterns\n\n### Basic Integration in LangGraph\n\n```python\nfrom typing import Any, TypedDict\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.messages import AnyMessage\nfrom langgraph.graph import StateGraph, START, MessagesState\nfrom langgraph.checkpoint.memory import InMemorySaver\nfrom langmem.short_term import SummarizationNode, RunningSummary\n\nmodel = ChatOpenAI(model=\"gpt-4o\")\nsummarization_model = model.bind(max_tokens=128)\n\nclass State(MessagesState):\n    context: dict[str, Any]\n\nclass LLMInputState(TypedDict):\n    summarized_messages: list[AnyMessage]\n    context: dict[str, Any]\n\nsummarization_node = SummarizationNode(\n    model=summarization_model,\n    max_tokens=256,\n    max_tokens_before_summary=256,\n    max_summary_tokens=128,\n)\n\ndef call_model(state: LLMInputState):\n    response = model.invoke(state[\"summarized_messages\"])\n    return {\"messages\": [response]}\n\ncheckpointer = InMemorySaver()\nworkflow = StateGraph(State)\nworkflow.add_node(call_model)\nworkflow.add_node(\"summarize\", summarization_node)\nworkflow.add_edge(START, \"summarize\")\n```\n\nSource: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n### Functional API\n\nFor simpler use cases outside of LangGraph, the module provides synchronous and asynchronous functions:\n\n```python\nfrom langmem.short_term import summarize_messages, asummarize_messages\n\n# Synchronous usage\nresult = summarize_messages(\n    messages=conversation_history,\n    model=summarization_model,\n    max_tokens=256\n)\n\n# Asynchronous usage\nresult = await asummarize_messages(\n    messages=conversation_history,\n    model=summarization_model,\n    max_tokens=256\n)\n```\n\nSource: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\n## Workflow Integration\n\nThe following diagram illustrates how `SummarizationNode` integrates into a typical LangGraph workflow:\n\n```mermaid\ngraph LR\n    A[User Messages] --> B[MessagesState]\n    B --> C[LLM Node]\n    C --> D[Model Response]\n    D --> E{Summarization Needed?}\n    E -->|Yes| F[SummarizationNode]\n    E -->|No| G[Return Response]\n    F --> H[Update RunningSummary]\n    H --> I[Compressed Messages]\n    I --> J[Next Turn]\n    G --> J\n```\n\n## Configuration Recommendations\n\n| Scenario | `max_tokens` | `max_tokens_before_summary` | `max_summary_tokens` |\n|----------|--------------|----------------------------|---------------------|\n| Aggressive compression | 512 | 768 | 128 |\n| Balanced | 1024 | 1536 | 256 |\n| High fidelity | 2048 | 3072 | 512 |\n\nWhen using smaller `max_tokens` values, set `max_tokens_before_summary` higher to allow the summarization LLM more content to work with. Source: [src/langmem/short_term/summarization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/summarization.py).\n\n## Public API Summary\n\n| Symbol | Type | Description |\n|--------|------|-------------|\n| `summarize_messages` | Function | Synchronous message summarization |\n| `asummarize_messages` | Function | Asynchronous message summarization |\n| `SummarizationNode` | Class | LangGraph-compatible summarization node |\n| `SummarizationResult` | Class | Result container for summarization output |\n| `RunningSummary` | Class | Cumulative summary state tracker |\n\nSource: [src/langmem/short_term/__init__.py:1-12](https://github.com/langchain-ai/langmem/blob/main/src/langmem/short_term/__init__.py).\n\n---\n\n<a id='prompt-optimization'></a>\n\n## Prompt Optimization\n\n### Related Pages\n\nRelated topics: [Reflection Executor](#reflection-executor), [Core Concepts](#core-concepts)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/prompts/optimization.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n- [src/langmem/prompts/gradient.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n- [src/langmem/prompts/prompt.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/prompt.py)\n- [src/langmem/prompts/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n</details>\n\n# Prompt Optimization\n\n## Overview\n\nPrompt Optimization in LangMem is a system for automatically improving AI prompts based on conversation history and feedback. It analyzes trajectories (user-assistant conversations) and feedback to generate enhanced prompts that produce better responses.\n\nThe optimization system supports three distinct approaches:\n\n| Approach | Complexity | LLM Calls | Best For |\n|----------|------------|-----------|----------|\n| **Prompt Memory** | Simplest | 1 | Quick improvements, learning basic patterns |\n| **Metaprompt** | Moderate | 2-5 | Balanced speed and quality |\n| **Gradient** | Highest | 4-10 | Thorough analysis, complex patterns |\n\nSource: [src/langmem/prompts/optimization.py:1-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n## Architecture\n\n### System Components\n\n```mermaid\ngraph TD\n    A[User Input] --> B[Optimizer Factory]\n    B --> C{Select Kind}\n    C -->|gradient| D[Gradient Prompt Optimizer]\n    C -->|metaprompt| E[Metaprompt Optimizer]\n    C -->|prompt_memory| F[Prompt Memory Optimizer]\n    \n    D --> G[Reflection Loop]\n    G --> H[Extract Hypotheses]\n    H --> I[Generate Recommendations]\n    I --> J[Apply Updates]\n    \n    E --> K[Meta Prompt Processing]\n    K --> J\n    \n    F --> L[Memory Pattern Extraction]\n    L --> J\n    \n    J --> M[Optimized Prompt Output]\n```\n\n### Class Hierarchy\n\nThe system is built on LangChain's `Runnable` interface, providing both sync and async invocation patterns:\n\n- `PromptOptimizer` - Single prompt optimization (returns `str`)\n- `MultiPromptOptimizer` - Multiple prompt optimization (returns `list[Prompt]`)\n\nSource: [src/langmem/prompts/optimization.py:150-180](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n## Optimizer Types\n\n### 1. Prompt Memory Optimizer\n\nThe simplest optimization approach that learns from conversation history:\n\n1. Extracts successful patterns from past interactions\n2. Identifies improvement areas from feedback\n3. Applies learned patterns to new prompts\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"prompt_memory\"\n)\n\ntrajectories = [\n    {\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"Tell me about the solar system\"},\n            {\"role\": \"assistant\", \"content\": \"The solar system consists of...\"},\n        ],\n        \"feedback\": {\"clarity\": \"needs more structure\"},\n    }\n]\n\nbetter_prompt = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompt\": \"You are an astronomy expert\"}\n)\n```\n\nSource: [src/langmem/prompts/optimization.py:100-130](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### 2. Metaprompt Optimizer\n\nA balanced approach using reflection-based prompt generation:\n\n**Configuration Options:**\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `max_reflection_steps` | `int` | `3` | Maximum meta-learning steps |\n| `min_reflection_steps` | `int` | `1` | Minimum meta-learning steps |\n| `metaprompt` | `str` | See default | Custom meta-prompt template |\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"metaprompt\",\n    config={\"max_reflection_steps\": 3, \"min_reflection_steps\": 1},\n)\n```\n\nSource: [src/langmem/prompts/optimization.py:60-80](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### 3. Gradient Prompt Optimizer\n\nThe most thorough optimization approach, using a hypothesis-recommendation cycle:\n\n```mermaid\ngraph LR\n    A[Current Prompt] --> B[Generate Hypotheses]\n    B --> C[Extract Recommendations]\n    C --> D{Sufficient Analysis?}\n    D -->|No| B\n    D -->|Yes| E[Apply Updates]\n    E --> F[Optimized Prompt]\n```\n\n**Process Flow:**\n\n1. **Hypothesis Generation**: Analyzes trajectory to identify why the prompt underperforms\n2. **Recommendation Extraction**: Generates specific adjustment recommendations\n3. **Reflection Loop**: Iterates up to `max_reflection_steps` for deeper analysis\n4. **Prompt Update**: Applies minimal, necessary changes to the prompt\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"gradient\",\n    config={\n        \"max_reflection_steps\": 5,\n        \"min_reflection_steps\": 2,\n    }\n)\n```\n\nSource: [src/langmem/prompts/gradient.py:1-80](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n\n## Data Models\n\n### Prompt\n\nThe `Prompt` TypedDict defines structured prompt management:\n\n```python\nclass Prompt(TypedDict, total=False):\n    name: Required[str]                    # Unique identifier\n    prompt: Required[str]                  # The actual prompt text\n    update_instructions: str | None        # Guidelines for modification\n    when_to_update: str | None             # Dependencies during optimization\n```\n\n**Example:**\n\n```python\nprompt = Prompt(\n    name=\"extract_entities\",\n    prompt=\"Extract key entities from the text:\",\n    update_instructions=\"Make minimal changes, only address where errors occurred.\",\n    when_to_update=\"If there seem to be errors in recall of named entities.\",\n)\n```\n\nSource: [src/langmem/prompts/types.py:1-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### AnnotatedTrajectory\n\nRepresents conversation history with optional feedback:\n\n```python\nclass AnnotatedTrajectory(typing.NamedTuple):\n    messages: typing.Sequence[AnyMessage]      # Conversation messages\n    feedback: dict[str, str | int | bool] | str | None  # Improvement feedback\n```\n\n**Example:**\n\n```python\ntrajectory = AnnotatedTrajectory(\n    messages=[\n        {\"role\": \"user\", \"content\": \"What pizza is good around here?\"},\n        {\"role\": \"assistant\", \"content\": \"Try LangPizza™️\"},\n        {\"role\": \"user\", \"content\": \"Stop advertising to me.\"},\n        {\"role\": \"assistant\", \"content\": \"BUT YOU'LL LOVE IT!\"},\n    ],\n    feedback={\n        \"developer_feedback\": \"too pushy\",\n        \"score\": 0,\n    },\n)\n```\n\nSource: [src/langmem/prompts/types.py:50-100](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### OptimizerInput\n\nInput structure for single-prompt optimization:\n\n```python\nclass OptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompt: str | Prompt\n```\n\nSource: [src/langmem/prompts/types.py:100-150](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n### MultiPromptOptimizerInput\n\nInput structure for optimizing multiple prompts together:\n\n```python\nclass MultiPromptOptimizerInput(TypedDict):\n    trajectories: typing.Sequence[AnnotatedTrajectory] | str\n    prompts: list[Prompt]\n```\n\nThis maintains consistency across related prompts during optimization.\n\nSource: [src/langmem/prompts/types.py:150-200](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/types.py)\n\n## API Reference\n\n### Factory Functions\n\n#### create_prompt_optimizer\n\nCreates a single-prompt optimizer.\n\n```python\ndef create_prompt_optimizer(\n    model: str | BaseChatModel,\n    /,\n    *,\n    kind: typing.Literal[\"gradient\", \"prompt_memory\", \"metaprompt\"] = \"gradient\",\n    config: typing.Optional[dict] = None,\n) -> Runnable[prompt_types.OptimizerInput, str]\n```\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `model` | `str \\| BaseChatModel` | Yes | Model identifier or instance |\n| `kind` | `Literal` | No | Optimization strategy (default: `\"gradient\"`) |\n| `config` | `dict \\| None` | No | Optimization configuration |\n\nSource: [src/langmem/prompts/optimization.py:50-80](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n#### create_multi_prompt_optimizer\n\nCreates an optimizer for managing multiple prompts together.\n\n```python\ndef create_multi_prompt_optimizer(\n    model: str | BaseChatModel,\n    /,\n    *,\n    kind: typing.Literal[\"gradient\", \"prompt_memory\", \"metaprompt\"] = \"gradient\",\n    config: typing.Optional[dict] = None,\n) -> MultiPromptOptimizer\n```\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `model` | `str \\| BaseChatModel` | Yes | Model identifier or instance |\n| `kind` | `Literal` | No | Optimization strategy (default: `\"gradient\"`) |\n| `config` | `dict \\| None` | No | Optimization configuration |\n\nSource: [src/langmem/prompts/optimization.py:130-160](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n### Gradient Optimizer Config\n\n```python\nclass GradientOptimizerConfig(TypedDict, total=False):\n    gradient_prompt: str        # Custom gradient analysis prompt\n    metaprompt: str             # Custom update application prompt\n    max_reflection_steps: int   # Maximum iteration count\n    min_reflection_steps: int   # Minimum iteration count\n```\n\nSource: [src/langmem/prompts/gradient.py:40-60](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n\n## Prompt Templates\n\n### Instruction Reflection Prompt\n\nUsed by the prompt memory optimizer for basic reflection:\n\n```python\nINSTRUCTION_REFLECTION_PROMPT = \"\"\"You are helping an AI agent improve. You can do this by changing their system prompt.\n\nThese is their current prompt:\n<current_prompt>\n{current_prompt}\n</current_prompt>\n\nHere was the agent's trajectory:\n<trajectory>\n{trajectory}\n</trajectory>\n\nHere is the user's feedback:\n\n<feedback>\n{feedback}\n</feedback>\n\nHere are instructions for updating the agent's prompt:\n\n<instructions>\n{instructions}\n</instructions>\n\nBased on this, return an updated prompt\"\"\"\n```\n\nSource: [src/langmem/prompts/prompt.py:1-40](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/prompt.py)\n\n### Gradient Metaprompt\n\nUsed by the gradient optimizer for hypothesis generation:\n\n```python\nDEFAULT_GRADIENT_METAPROMPT = \"\"\"You are optimizing a prompt to handle its target task more effectively.\n\n<current_prompt>\n{current_prompt}\n</current_prompt>\n\nWe hypothesize the current prompt underperforms for these reasons:\n\n<hypotheses>\n{hypotheses}\n</hypotheses>\n\nBased on these hypotheses, we recommend the following adjustments:\n\n<recommendations>\n{recommendations}\n</recommendations>\n\nRespond with the updated prompt. Remember to ONLY make changes that are clearly necessary.\"\"\"\n```\n\nSource: [src/langmem/prompts/gradient.py:15-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/gradient.py)\n\n## Usage Examples\n\n### Single Prompt Optimization with Feedback\n\n```python\nfrom langmem import create_prompt_optimizer\n\noptimizer = create_prompt_optimizer(\"anthropic:claude-3-5-sonnet-latest\")\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"How do I write a bash script?\"},\n    {\"role\": \"assistant\", \"content\": \"Let me explain bash scripting...\"},\n]\nfeedback = \"Response should include a code example\"\n\ntrajectories = [(conversation, {\"feedback\": feedback})]\nbetter_prompt = await optimizer(trajectories, \"You are a coding assistant\")\n```\n\n### Multi-Prompt Optimization\n\n```python\nfrom langmem import create_multi_prompt_optimizer\n\noptimizer = create_multi_prompt_optimizer(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    kind=\"prompt_memory\"\n)\n\nconversation = [\n    {\"role\": \"user\", \"content\": \"Tell me about this image\"},\n    {\"role\": \"assistant\", \"content\": \"I see a dog playing in a park\"},\n]\n\ntrajectories = [(conversation, \"Vision model wasn't used for breed detection\")]\n\nprompts = [\n    {\n        \"name\": \"vision_extract\",\n        \"prompt\": \"Extract visual details from the image\",\n    },\n    {\n        \"name\": \"vision_classify\",\n        \"prompt\": \"Classify specific attributes in the image\",\n    },\n]\n\nbetter_prompts = await optimizer.ainvoke(\n    {\"trajectories\": trajectories, \"prompts\": prompts}\n)\n```\n\n### Choosing Optimization Strategy\n\n| Use Case | Recommended Kind | Rationale |\n|----------|------------------|-----------|\n| Quick prototyping | `prompt_memory` | Single LLM call, minimal cost |\n| Production with moderate traffic | `metaprompt` | 2-5 calls, balanced improvement |\n| High-stakes, complex tasks | `gradient` | 4-10 calls, thorough analysis |\n\nSource: [src/langmem/prompts/optimization.py:20-45](https://github.com/langchain-ai/langmem/blob/main/src/langmem/prompts/optimization.py)\n\n---\n\n<a id='reflection-executor'></a>\n\n## Reflection Executor\n\n### Related Pages\n\nRelated topics: [Prompt Optimization](#prompt-optimization), [Core Concepts](#core-concepts)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [src/langmem/reflection.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/reflection.py)\n- [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/knowledge/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/types.py)\n</details>\n\n# Reflection Executor\n\nThe `ReflectionExecutor` is a core component in LangMem that enables asynchronous, background processing of memory enrichment operations. It decouples the memory management workflow from the main agent execution thread, allowing AI agents to respond to users immediately while memory processing occurs in the background.\n\n## Overview\n\nThe `ReflectionExecutor` class serves as a bridge between a `MemoryManager` or `MemoryStoreManager` and the LangGraph `BaseStore`. It provides a mechanism to schedule and execute memory enrichment after the main agent has already produced a response, ensuring that users receive immediate feedback while the system continuously improves its understanding of conversation context.\n\nSource: [src/langmem/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/__init__.py)\n\n## Architecture\n\nThe `ReflectionExecutor` operates within a broader architecture that separates concerns between agent execution and memory processing:\n\n```mermaid\ngraph TD\n    A[User Input] --> B[Main Agent]\n    B --> C[User Response]\n    C --> D[ReflectionExecutor]\n    D --> E[Memory Manager / Store Manager]\n    E --> F[BaseStore]\n    \n    B -.->|processes immediately| C\n    D -.->|background processing| F\n```\n\n### Components\n\n| Component | Type | Purpose |\n|-----------|------|---------|\n| `ReflectionExecutor` | Class | Schedules and executes background memory enrichment |\n| `MemoryManager` | Class | Extracts, updates, and deletes memories from conversations |\n| `MemoryStoreManager` | Class | Manages memory storage with vector search capabilities |\n| `BaseStore` | Interface | LangGraph's persistence layer for memories |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Usage Patterns\n\n### Basic Setup with InMemoryStore\n\nThe most common pattern initializes a `ReflectionExecutor` with a memory store manager and a configured store:\n\n```python\nfrom langmem import create_memory_store_manager, ReflectionExecutor\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{user_id}\"),\n)\n\nreflection = ReflectionExecutor(manager, store=store)\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Integration with LangGraph Agent\n\nThe `ReflectionExecutor` is designed to work seamlessly with LangGraph's `create_react_agent`:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Execution Flow\n\nThe following sequence diagram illustrates how `ReflectionExecutor` interacts with other components during background enrichment:\n\n```mermaid\nsequenceDiagram\n    participant Agent\n    participant Background\n    participant Store\n    participant Manager\n\n    Agent->>Agent: process message\n    Agent-->>User: response\n    Agent->>Background: schedule enrichment<br/>(after_seconds=0)\n    Note over Background,Store: Memory processing happens<br/>in background thread\n    Background->>Manager: invoke with messages\n    Manager->>Manager: extract & analyze memories\n    Manager->>Store: store/update memories\n    Store-->>Manager: confirmation\n    Manager-->>Background: enrichment complete\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Configuration\n\n### Memory Store Manager Configuration\n\nWhen creating the memory manager for use with `ReflectionExecutor`, several configuration options control memory behavior:\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | `str \\| BaseChatModel` | Required | Language model for memory processing |\n| `schemas` | `list[type]` | Required | Pydantic schemas defining memory structure |\n| `namespace` | `tuple[str, ...]` | `(\"memories\", \"{langgraph_user_id}\")` | Hierarchical path for memory storage |\n| `enable_inserts` | `bool` | `True` | Allow creating new memories |\n| `enable_updates` | `bool` | `True` | Allow modifying existing memories |\n| `enable_deletes` | `bool` | `True` | Allow removing outdated memories |\n| `query_model` | `str \\| BaseChatModel` | `None` | Separate model for search query generation |\n| `query_limit` | `int` | `5` | Maximum memories to retrieve |\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n### Namespace Template\n\nNamespaces support runtime placeholders that are resolved from the LangGraph configuration:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n```\n\nThis resolves to `[\"memories\", \"user123\"]` when `config[\"configurable\"][\"langgraph_user_id\"]` equals `\"user123\"`.\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Memory Processing Phases\n\nThe `MemoryStoreManager` processes memories through distinct phases, each callable independently or combined:\n\n```mermaid\ngraph LR\n    A[messages] --> B[Recall Phase]\n    B --> C[Enrich Phase]\n    C --> D[Update Phase]\n```\n\n| Phase | Purpose |\n|-------|---------|\n| Recall | Retrieve relevant existing memories using semantic search |\n| Enrich | Extract new information from the conversation |\n| Update | Apply changes to the store (insert, update, delete) |\n\nSource: [src/langmem/knowledge/types.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/types.py)\n\n## Background Execution Strategy\n\nThe `ReflectionExecutor` supports immediate background execution via the `after_seconds` parameter:\n\n```python\nawait reflection.ainvoke(\n    {\"messages\": conversation, \"existing\": memories},\n    after_seconds=0,\n)\n```\n\nSetting `after_seconds=0` schedules execution on the next event loop iteration, ensuring the main agent response is not delayed. For less time-sensitive applications, a positive value defers execution, reducing resource contention during peak load periods.\n\n## Class Signature\n\nThe `ReflectionExecutor` class implements the following interface:\n\n```python\nclass ReflectionExecutor:\n    def __init__(\n        self,\n        manager: MemoryManager | MemoryStoreManager,\n        *,\n        store: BaseStore | None = None,\n    ) -> None:\n        ...\n```\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `manager` | `MemoryManager \\| MemoryStoreManager` | The memory processing component |\n| `store` | `BaseStore \\| None` | Optional explicit store; otherwise uses context |\n\nSource: [src/langmem/reflection.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/reflection.py)\n\n## Async Support\n\nThe `ReflectionExecutor` provides full async support through its `ainvoke` method, making it compatible with LangGraph's async entrypoints and workflows:\n\n```python\n@entrypoint(store=store)\nasync def my_agent(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"}\n    await reflection.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\nSource: [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Best Practices\n\n1. **Use with persistent stores in production**: While `InMemoryStore` is suitable for development, production deployments should use persistent stores like PostgreSQL or Redis with vector search capabilities.\n\n2. **Separate query models for efficiency**: When working with large memory stores, use a faster, cheaper model for query generation and a more capable model for memory analysis.\n\n3. **Configure appropriate namespaces**: Always include user-specific namespaces to ensure memory isolation between users.\n\n4. **Set reasonable query limits**: Balance between recall completeness and processing speed by tuning `query_limit` based on your use case.\n\n5. **Leverage background execution**: Schedule memory enrichment with minimal delay (`after_seconds=0`) to keep the system responsive while continuously improving memory quality.\n\n---\n\n<a id='langgraph-integration'></a>\n\n## LangGraph Integration\n\n### Related Pages\n\nRelated topics: [Memory Tools - Hot Path Management](#memory-tools), [System Architecture](#system-architecture)\n\n<details>\n<summary>Relevant source files</summary>\n\nThe following source files were used to generate this page:\n\n- [langgraph.json](https://github.com/langchain-ai/langmem/blob/main/langgraph.json)\n- [src/langmem/graphs/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/__init__.py)\n- [src/langmem/graphs/auth.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/auth.py)\n- [src/langmem/knowledge/tools.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n- [src/langmem/knowledge/extraction.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n- [src/langmem/graphs/semantic.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/semantic.py)\n</details>\n\n# LangGraph Integration\n\nLangMem provides comprehensive integration with LangGraph, enabling memory management capabilities within agentic workflows. This integration allows AI applications to store, retrieve, search, and manage conversational memories using LangGraph's [BaseStore](https://langchain-ai.github.io/langgraph/reference/store/#langgraph.store.base.BaseStore) architecture.\n\n## Overview\n\nLangMem's LangGraph integration serves as a bridge between LangGraph's store infrastructure and memory management functionality. It provides:\n\n- **Tools for Agents**: Pre-built tools that agents can invoke to search and manage memories\n- **Store Managers**: Components that handle automatic memory extraction and storage\n- **Configuration Support**: Runtime namespace resolution using configurable parameters\n- **Async/Await Support**: Full support for both synchronous and asynchronous operations\n\nSource: [src/langmem/knowledge/tools.py:1-50](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Architecture\n\nThe integration follows a layered architecture where LangMem tools and managers connect to LangGraph's `BaseStore` implementation:\n\n```mermaid\ngraph TD\n    A[LangGraph Agent] --> B[LangMem Tools/Managers]\n    B --> C[BaseStore]\n    C --> D[InMemoryStore]\n    C --> E[Persistent Store]\n    \n    F[Config] --> B\n    F --> C\n```\n\n### Component Overview\n\n| Component | Purpose | File Location |\n|-----------|---------|---------------|\n| `create_search_memory_tool` | Search for memories within agent context | `src/langmem/knowledge/tools.py` |\n| `create_manage_memory_tool` | CRUD operations for memories | `src/langmem/knowledge/tools.py` |\n| `create_memory_store_manager` | Automatic memory extraction and storage | `src/langmem/knowledge/extraction.py` |\n| Prebuilt Graphs | `optimize_prompts`, `extract_memories` | `src/langmem/graphs/` |\n\nSource: [src/langmem/graphs/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/__init__.py)\n\n## Memory Tools\n\nLangMem provides two primary tools that agents can invoke during execution.\n\n### Search Memory Tool\n\nThe `create_search_memory_tool` function creates a tool that searches for relevant memories based on a query.\n\n```python\nfrom langmem import create_search_memory_tool\nfrom langgraph.store.memory import InMemoryStore\n\nsearch_tool = create_search_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n```\n\n**Parameters:**\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `namespace` | `tuple[str, ...]` | Hierarchical path for organizing memories | `(\"memories\", \"{langgraph_user_id}\")` |\n| `prompt` | `str` | Custom prompt for search behavior | Context-based default |\n\nSource: [src/langmem/knowledge/tools.py:80-120](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n### Manage Memory Tool\n\nThe `create_manage_memory_tool` function creates a tool that supports creating, updating, and deleting memories:\n\n```python\nfrom langmem import create_manage_memory_tool\n\nmemory_tool = create_manage_memory_tool(\n    namespace=(\"project_memories\", \"{langgraph_user_id}\"),\n)\n```\n\n**Supported Operations:**\n\n| Operation | Description |\n|-----------|-------------|\n| `insert` | Store new memories with generated keys |\n| `update` | Modify existing memory content |\n| `upsert` | Insert or update based on key existence |\n| `delete` | Remove memories from the store |\n\nSource: [src/langmem/knowledge/tools.py:200-280](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Namespace Configuration\n\nNamespaces in LangMem use a template system that allows runtime population of values from LangGraph's configuration.\n\n### Template Syntax\n\nPlaceholders use curly brace notation that maps to configurable values:\n\n```python\nnamespace=(\"memories\", \"{langgraph_user_id}\")\n```\n\n### Runtime Resolution\n\nAt runtime, these placeholders are resolved from the `configurable` section:\n\n```python\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user-123\"}}\n# Results in namespace: (\"memories\", \"user-123\")\n```\n\n### Namespace Examples\n\n| Use Case | Namespace Template | Runtime Config |\n|----------|-------------------|----------------|\n| Per-user memories | `(\"memories\", \"{langgraph_user_id}\")` | `{\"langgraph_user_id\": \"user-123\"}` |\n| Team memories | `(\"memories\", \"{team_id}\")` | `{\"team_id\": \"team-x\"}` |\n| Project memories | `(\"project_memories\", \"{project_id}\")` | `{\"project_id\": \"proj-1\"}` |\n\nSource: [src/langmem/knowledge/tools.py:140-180](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Store Configuration\n\nLangMem requires a `BaseStore` implementation to be configured in the LangGraph entrypoint or graph.\n\n### InMemoryStore Example\n\n```python\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.func import entrypoint\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n@entrypoint(store=store)\nasync def workflow(state: dict, *, previous=None):\n    # Store is automatically available via get_store()\n    ...\n```\n\n### Configuration in langgraph.json\n\nThe `langgraph.json` file defines the default store configuration for deployed graphs:\n\n```json\n{\n  \"store\": {\n    \"index\": {\n      \"embed\": \"openai:text-embedding-3-small\",\n      \"dims\": 1536,\n      \"fields\": [\"$\"]\n    }\n  }\n}\n```\n\nSource: [langgraph.json:1-20](https://github.com/langchain-ai/langmem/blob/main/langgraph.json)\n\n## Prebuilt Graphs\n\nLangMem includes prebuilt LangGraph graphs for common memory operations.\n\n### Extract Memories Graph\n\nLocated at `src/langmem/graphs/semantic.py`, this graph combines memory storage with automatic extraction:\n\n```python\nfrom langgraph.func import entrypoint\nfrom langgraph.store.memory import InMemoryStore\nfrom langmem import create_memory_store_manager\n\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\nmanager = create_memory_store_manager(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\n@entrypoint(store=store)\nasync def graph(message: str):\n    response = {\"role\": \"assistant\", \"content\": \"I'll remember that preference\"}\n    await manager.ainvoke(\n        {\"messages\": [{\"role\": \"user\", \"content\": message}, response]}\n    )\n    return response\n```\n\n**Graph Endpoint:** `./src/langmem/graphs/semantic.py:graph`\n\nSource: [src/langmem/graphs/semantic.py:1-40](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/semantic.py)\n\n### Optimize Prompts Graph\n\nUsed for prompt optimization workflows with memory-backed feedback.\n\n**Graph Endpoint:** `./src/langmem/graphs/prompts.py:optimize_prompts`\n\nSource: [src/langmem/graphs/__init__.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/__init__.py)\n\n## Integration with create_react_agent\n\nLangMem tools integrate seamlessly with LangGraph's prebuilt `create_react_agent`:\n\n```python\nfrom langgraph.prebuilt import create_react_agent\nfrom langgraph.config import get_config, get_store\nfrom langmem import create_manage_memory_tool\n\ndef prompt(state):\n    config = get_config()\n    memories = get_store().search(\n        (\"memories\", config[\"configurable\"][\"langgraph_user_id\"]),\n    )\n    system_prompt = f\"\"\"You are a helpful assistant.\n<memories>\n{memories}\n</memories>\n\"\"\"\n    system_message = {\"role\": \"system\", \"content\": system_prompt}\n    return [system_message, *state[\"messages\"]]\n\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[\n        create_manage_memory_tool(namespace=(\"memories\", \"{langgraph_user_id}\")),\n    ],\n    store=store,\n)\n```\n\nSource: [src/langmem/knowledge/tools.py:300-350](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/tools.py)\n\n## Memory Store Manager\n\nThe `create_memory_store_manager` function creates a manager that handles automatic memory extraction and storage using LangGraph's store infrastructure.\n\n### Query Model Architecture\n\nThe manager supports using a separate (faster) model for search query generation:\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Manager\n    participant QueryLLM\n    participant Store\n    participant MainLLM\n\n    Client->>Manager: messages\n    Manager->>QueryLLM: generate search query\n    QueryLLM-->>Manager: optimized query\n    Manager->>Store: find memories\n    Store-->>Manager: memories\n    Manager->>MainLLM: analyze & extract\n    MainLLM-->>Manager: memory updates\n    Manager->>Store: apply changes\n    Manager-->>Client: result\n```\n\n### Configuration Options\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `model` | `str \\| BaseChatModel` | Main model for memory processing | Required |\n| `query_model` | `str \\| BaseChatModel` | Faster model for search queries | Same as model |\n| `query_limit` | `int` | Number of memories to retrieve | `10` |\n| `namespace` | `tuple[str, ...]` | Memory namespace template | `(\"memories\", \"{langgraph_user_id}\")` |\n| `schemas` | `list[type[BaseModel]]` | Pydantic schemas for memories | `None` |\n| `enable_inserts` | `bool` | Allow creating new memories | `True` |\n| `enable_updates` | `bool` | Allow updating existing memories | `True` |\n| `enable_deletes` | `bool` | Allow deleting memories | `True` |\n\nSource: [src/langmem/knowledge/extraction.py:200-300](https://github.com/langchain-ai/langmem/blob/main/src/langmem/knowledge/extraction.py)\n\n## Authentication\n\nLangMem graphs support authentication via the auth endpoint defined in `langgraph.json`:\n\n```json\n{\n  \"auth\": {\n    \"path\": \"./src/langmem/graphs/auth.py:auth\"\n  }\n}\n```\n\nThe auth function handles authentication for deployed LangGraph applications.\n\nSource: [src/langmem/graphs/auth.py](https://github.com/langchain-ai/langmem/blob/main/src/langmem/graphs/auth.py)\n\n## Complete Workflow Example\n\n```mermaid\ngraph LR\n    A[User Input] --> B[Agent]\n    B --> C[Memory Search Tool]\n    C --> D[BaseStore]\n    D --> E[Vector Index]\n    B --> F[Response]\n    B --> G[Memory Manage Tool]\n    G --> D\n    F --> H[User]\n```\n\n### Full Implementation\n\n```python\nfrom langmem import create_search_memory_tool, create_manage_memory_tool\nfrom langgraph.store.memory import InMemoryStore\nfrom langgraph.prebuilt import create_react_agent\n\n# Configure store\nstore = InMemoryStore(\n    index={\n        \"dims\": 1536,\n        \"embed\": \"openai:text-embedding-3-small\",\n    }\n)\n\n# Create tools\nsearch_tool = create_search_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\nmanage_tool = create_manage_memory_tool(\n    namespace=(\"memories\", \"{langgraph_user_id}\"),\n)\n\n# Create agent with memory tools\nagent = create_react_agent(\n    \"anthropic:claude-3-5-sonnet-latest\",\n    tools=[search_tool, manage_tool],\n    store=store,\n)\n\n# Invoke with user context\nconfig = {\"configurable\": {\"langgraph_user_id\": \"user-123\"}}\nresult = agent.invoke(\n    {\"messages\": [{\"role\": \"user\", \"content\": \"I prefer dark mode\"}]},\n    config=config,\n)\n```\n\n## Summary\n\nLangMem's LangGraph integration provides a complete solution for memory management in agentic applications:\n\n1. **Tools** enable agents to search and manage memories during conversation\n2. **Managers** automate memory extraction and storage\n3. **Namespace templates** allow flexible per-user/per-conversation organization\n4. **Store abstraction** supports multiple storage backends\n5. **Prebuilt graphs** accelerate common use cases\n\nAll integration points are designed to work seamlessly with LangGraph's configuration system, enabling production-ready deployments with proper authentication, store configuration, and multi-tenant support.\n\n---\n\n---\n\n## Doramagic Pitfall Log\n\nProject: langchain-ai/langmem\n\nSummary: Found 11 potential pitfall items; 3 are high/blocking. Highest priority: installation - 来源证据：GRAPH_RECURSION_LIMIT.\n\n## 1. installation · 来源证据：GRAPH_RECURSION_LIMIT\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：GRAPH_RECURSION_LIMIT\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_82b923de03f34d5a9fa8530916b40d14 | https://github.com/langchain-ai/langmem/issues/133 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 2. installation · 来源证据：Persistence?\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Persistence?\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_b9688483fa44468a96801d46825b040f | https://github.com/langchain-ai/langmem/issues/154 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 3. security_permissions · 来源证据：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n- User impact: 可能影响授权、密钥配置或安全边界。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_15b3f9c4829745339b470171f005b3df | https://github.com/langchain-ai/langmem/issues/156 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 4. configuration · 可能修改宿主 AI 配置\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: 项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- User impact: 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- Suggested check: 列出会写入的配置文件、目录和卸载/回滚步骤。\n- Guardrail action: 涉及宿主配置目录时必须给回滚路径，不能只给安装命令。\n- Evidence: capability.host_targets | github_repo:920242883 | https://github.com/langchain-ai/langmem | host_targets=claude, chatgpt\n\n## 5. capability · 能力判断依赖假设\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: README/documentation is current enough for a first validation pass.\n- User impact: 假设不成立时，用户拿不到承诺的能力。\n- Suggested check: 将假设转成下游验证清单。\n- Guardrail action: 假设必须转成验证项；没有验证结果前不能写成事实。\n- Evidence: capability.assumptions | github_repo:920242883 | https://github.com/langchain-ai/langmem | README/documentation is current enough for a first validation pass.\n\n## 6. maintenance · 维护活跃度未知\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: 未记录 last_activity_observed。\n- User impact: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- Suggested check: 补 GitHub 最近 commit、release、issue/PR 响应信号。\n- Guardrail action: 维护活跃度未知时，推荐强度不能标为高信任。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | last_activity_observed missing\n\n## 7. security_permissions · 下游验证发现风险项\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: no_demo\n- User impact: 下游已经要求复核，不能在页面中弱化。\n- Suggested check: 进入安全/权限治理复核队列。\n- Guardrail action: 下游风险存在时必须保持 review/recommendation 降级。\n- Evidence: downstream_validation.risk_items | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n\n## 8. security_permissions · 存在评分风险\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: no_demo\n- User impact: 风险会影响是否适合普通用户安装。\n- Suggested check: 把风险写入边界卡，并确认是否需要人工复核。\n- Guardrail action: 评分风险必须进入边界卡，不能只作为内部分数。\n- Evidence: risks.scoring_risks | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n\n## 9. security_permissions · 来源证据：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_760d72a9519c42a8b1e31d8932383bc2 | https://github.com/langchain-ai/langmem/issues/164 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 10. maintenance · issue/PR 响应质量未知\n\n- Severity: low\n- Evidence strength: source_linked\n- Finding: issue_or_pr_quality=unknown。\n- User impact: 用户无法判断遇到问题后是否有人维护。\n- Suggested check: 抽样最近 issue/PR，判断是否长期无人处理。\n- Guardrail action: issue/PR 响应未知时，必须提示维护风险。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | issue_or_pr_quality=unknown\n\n## 11. maintenance · 发布节奏不明确\n\n- Severity: low\n- Evidence strength: source_linked\n- Finding: release_recency=unknown。\n- User impact: 安装命令和文档可能落后于代码，用户踩坑概率升高。\n- Suggested check: 确认最近 release/tag 和 README 安装命令是否一致。\n- Guardrail action: 发布节奏未知或过期时，安装说明必须标注可能漂移。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | release_recency=unknown\n\n<!-- canonical_name: langchain-ai/langmem; human_manual_source: deepwiki_human_wiki -->\n",
      "summary": "DeepWiki/Human Wiki output with a Doramagic pitfall appendix.",
      "title": "Human Manual"
    },
    "pitfall_log": {
      "asset_id": "pitfall_log",
      "filename": "PITFALL_LOG.md",
      "markdown": "# Pitfall Log\n\nProject: langchain-ai/langmem\n\nSummary: Found 11 potential pitfall items; 3 are high/blocking. Highest priority: installation - 来源证据：GRAPH_RECURSION_LIMIT.\n\n## 1. installation · 来源证据：GRAPH_RECURSION_LIMIT\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：GRAPH_RECURSION_LIMIT\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_82b923de03f34d5a9fa8530916b40d14 | https://github.com/langchain-ai/langmem/issues/133 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 2. installation · 来源证据：Persistence?\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Persistence?\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_b9688483fa44468a96801d46825b040f | https://github.com/langchain-ai/langmem/issues/154 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 3. security_permissions · 来源证据：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n\n- Severity: high\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Enhance error message when summarization fails due to missing HumanMessage in trimmed window\n- User impact: 可能影响授权、密钥配置或安全边界。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_15b3f9c4829745339b470171f005b3df | https://github.com/langchain-ai/langmem/issues/156 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 4. configuration · 可能修改宿主 AI 配置\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: 项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。\n- User impact: 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。\n- Suggested check: 列出会写入的配置文件、目录和卸载/回滚步骤。\n- Guardrail action: 涉及宿主配置目录时必须给回滚路径，不能只给安装命令。\n- Evidence: capability.host_targets | github_repo:920242883 | https://github.com/langchain-ai/langmem | host_targets=claude, chatgpt\n\n## 5. capability · 能力判断依赖假设\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: README/documentation is current enough for a first validation pass.\n- User impact: 假设不成立时，用户拿不到承诺的能力。\n- Suggested check: 将假设转成下游验证清单。\n- Guardrail action: 假设必须转成验证项；没有验证结果前不能写成事实。\n- Evidence: capability.assumptions | github_repo:920242883 | https://github.com/langchain-ai/langmem | README/documentation is current enough for a first validation pass.\n\n## 6. maintenance · 维护活跃度未知\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: 未记录 last_activity_observed。\n- User impact: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- Suggested check: 补 GitHub 最近 commit、release、issue/PR 响应信号。\n- Guardrail action: 维护活跃度未知时，推荐强度不能标为高信任。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | last_activity_observed missing\n\n## 7. security_permissions · 下游验证发现风险项\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: no_demo\n- User impact: 下游已经要求复核，不能在页面中弱化。\n- Suggested check: 进入安全/权限治理复核队列。\n- Guardrail action: 下游风险存在时必须保持 review/recommendation 降级。\n- Evidence: downstream_validation.risk_items | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n\n## 8. security_permissions · 存在评分风险\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: no_demo\n- User impact: 风险会影响是否适合普通用户安装。\n- Suggested check: 把风险写入边界卡，并确认是否需要人工复核。\n- Guardrail action: 评分风险必须进入边界卡，不能只作为内部分数。\n- Evidence: risks.scoring_risks | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium\n\n## 9. security_permissions · 来源证据：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n\n- Severity: medium\n- Evidence strength: source_linked\n- Finding: GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)\n- User impact: 可能增加新用户试用和生产接入成本。\n- Suggested check: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Guardrail action: 不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- Evidence: community_evidence:github | cevd_760d72a9519c42a8b1e31d8932383bc2 | https://github.com/langchain-ai/langmem/issues/164 | 来源讨论提到 python 相关条件，需在安装/试用前复核。\n\n## 10. maintenance · issue/PR 响应质量未知\n\n- Severity: low\n- Evidence strength: source_linked\n- Finding: issue_or_pr_quality=unknown。\n- User impact: 用户无法判断遇到问题后是否有人维护。\n- Suggested check: 抽样最近 issue/PR，判断是否长期无人处理。\n- Guardrail action: issue/PR 响应未知时，必须提示维护风险。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | issue_or_pr_quality=unknown\n\n## 11. maintenance · 发布节奏不明确\n\n- Severity: low\n- Evidence strength: source_linked\n- Finding: release_recency=unknown。\n- User impact: 安装命令和文档可能落后于代码，用户踩坑概率升高。\n- Suggested check: 确认最近 release/tag 和 README 安装命令是否一致。\n- Guardrail action: 发布节奏未知或过期时，安装说明必须标注可能漂移。\n- Evidence: evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | release_recency=unknown\n",
      "summary": "Identity, installation, configuration, runtime, and safety pitfalls before user trial.",
      "title": "Pitfall Log"
    },
    "prompt_preview": {
      "asset_id": "prompt_preview",
      "filename": "PROMPT_PREVIEW.md",
      "markdown": "# langmem - Prompt Preview\n\n> Copy the prompt below into your AI host before installing anything.\n> Its purpose is to let you safely feel the project's workflow, not to claim the project has already run.\n\n## Copy this prompt\n\n```text\nYou are using an independent Doramagic capability pack for langchain-ai/langmem.\n\nProject:\n- Name: langmem\n- Repository: https://github.com/langchain-ai/langmem\n- Summary: LangMem helps agents learn and adapt from their interactions over time.\n- Host target: claude, chatgpt\n\nGoal:\nHelp me evaluate this project for the following task without installing it yet: LangMem helps agents learn and adapt from their interactions over time.\n\nBefore taking action:\n1. Restate my task, success standard, and boundary.\n2. Identify whether the next step requires tools, browser access, network access, filesystem access, credentials, package installation, or host configuration.\n3. Use only the Doramagic Project Pack, the upstream repository, and the source-linked evidence listed below.\n4. If a real command, install step, API call, file write, or host integration is required, mark it as \"requires post-install verification\" and ask for approval first.\n5. If evidence is missing, say \"evidence is missing\" instead of filling the gap.\n\nPreviewable capabilities:\n- Capability 1: LangMem helps agents learn and adapt from their interactions over time.\n\nCapabilities that require post-install verification:\n- Capability 1: Use the source-backed project context to guide one small, checkable workflow step.\n\nCore service flow:\n1. system-architecture: System Architecture. Produce one small intermediate artifact and wait for confirmation.\n2. core-concepts: Core Concepts. Produce one small intermediate artifact and wait for confirmation.\n3. memory-tools: Memory Tools - Hot Path Management. Produce one small intermediate artifact and wait for confirmation.\n4. background-memory-manager: Background Memory Manager. Produce one small intermediate artifact and wait for confirmation.\n5. prompt-optimization: Prompt Optimization. Produce one small intermediate artifact and wait for confirmation.\n\nSource-backed evidence to keep in mind:\n- https://github.com/langchain-ai/langmem\n- https://github.com/langchain-ai/langmem#readme\n- src/langmem/__init__.py\n- src/langmem/knowledge/__init__.py\n- src/langmem/prompts/__init__.py\n- src/langmem/short_term/__init__.py\n- langgraph.json\n- src/langmem/utils.py\n- src/langmem/knowledge/extraction.py\n- src/langmem/prompts/types.py\n\nFirst response rules:\n1. Start Step 1 only.\n2. Explain the one service action you will perform first.\n3. Ask exactly three questions about my target workflow, success standard, and sandbox boundary.\n4. Stop and wait for my answers.\n\nStep 1 follow-up protocol:\n- After I answer the first three questions, stay in Step 1.\n- Produce six parts only: clarified task, success standard, boundary conditions, two or three options, tradeoffs for each option, and one recommendation.\n- End by asking whether I confirm the recommendation.\n- Do not move to Step 2 until I explicitly confirm.\n\nConversation rules:\n- Advance one step at a time and wait for confirmation after each small artifact.\n- Write outputs as recommendations or planned checks, not as completed execution.\n- Do not claim tests passed, files changed, commands ran, APIs were called, or the project was installed.\n- If the user asks for execution, first provide the sandbox setup, expected output, rollback, and approval checkpoint.\n```\n",
      "summary": "不安装项目也能感受能力节奏的安全试用 Prompt。",
      "title": "Prompt Preview / 安装前试用 Prompt"
    },
    "quick_start": {
      "asset_id": "quick_start",
      "filename": "QUICK_START.md",
      "markdown": "# Quick Start\n\nProject: langchain-ai/langmem\n\n## Official Entry Points\n\n### Python / pip · 官方安装入口\n\n```bash\npip install -U langmem\n```\n\nSource：https://github.com/langchain-ai/langmem#readme\n\n## Sources\n\n- repo: https://github.com/langchain-ai/langmem\n- docs: https://github.com/langchain-ai/langmem#readme\n",
      "summary": "Entry points extracted from official README or installation documentation.",
      "title": "Quick Start"
    }
  },
  "validation_id": "dval_769f6bd591314079a9e33348a317fb5d"
}
