Doramagic 项目包 · 项目说明书
langmem 项目
LangMem 帮助智能体从持续交互中学习并不断自我适应。
LangMem 概述与系统架构
LangMem 是一个面向长期记忆管理与持续学习的智能体工具库,旨在让 Agent 通过历史交互不断学习、适配并提升表现。根据 README.md 的描述,其目标包含三层:
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. 项目定位与核心价值
LangMem 是一个面向长期记忆管理与持续学习的智能体工具库,旨在让 Agent 通过历史交互不断学习、适配并提升表现。根据 README.md 的描述,其目标包含三层:
- 抽取关键信息:从对话中提炼出结构化知识。
- 优化 Agent 行为:通过提示词迭代改进决策质量。
- 维护长期记忆:跨会话保持一致行为。
库的设计遵循"双轨"原则:既提供与任意存储系统配合的函数式原语(functional primitives),也提供与 LangGraph 存储层深度集成的组件 README.md。这种设计使 LangMem 既可作为独立模块嵌入已有框架,又可借助 LangGraph Platform 的托管能力开箱即用。
主要特性概览 README.md:
- 🧩 Core Memory API:通用存储无关的内存接口。
- 🧠 Memory Management Tools:Agent 在主路径(hot path)中用于记录与检索的工具。
- ⚙️ Background Memory Manager:自动抽取、合并与更新 Agent 知识。
- ⚡ Native LangGraph Integration:在 LangGraph Platform 部署中默认启用长期记忆存储。
2. 系统架构总览
顶层包入口 src/langmem/__init__.py 集中导出了三大能力:知识管理(create_memory_manager、create_memory_store_manager、create_manage_memory_tool、create_search_memory_tool、create_thread_extractor)、提示词优化(create_multi_prompt_optimizer、create_prompt_optimizer、Prompt)以及反思执行器(ReflectionExecutor)。其架构关系如下图:
graph TD
A[Agent / 应用入口] --> B[short_term<br/>短期记忆]
A --> C[knowledge<br/>长期记忆抽取]
A --> D[prompts<br/>提示词优化]
A --> E[reflection<br/>反思执行器]
B -->|summarize_messages<br/>SummarizationNode| F[LangGraph 状态]
C -->|create_memory_store_manager| G[BaseStore<br/>语义存储]
C -->|create_manage_memory_tool<br/>create_search_memory_tool| G
D -->|metaprompt / gradient| H[优化后的 Prompt]
E -->|ReflectionExecutor| I[经验回放]四大子模块协同工作:短期记忆压缩上下文、知识模块沉淀长期事实、提示词优化器基于反馈迭代策略、反思器串起"评估—更新"循环。
3. 核心模块详解
3.1 知识提取与长期记忆(knowledge)
langmem.knowledge 子包同时提供函数式与状态式两种接口 src/langmem/knowledge/__init__.py:
create_memory_manager(model, schemas=None):返回基于 schema 的结构化抽取器,输入消息列表与既有记忆,返回[(namespace, Memory), ...]的更新列表。create_memory_store_manager(model, store=None):把抽取结果直接写入 LangGraph 的BaseStore,完成"抽取即存储"。create_thread_extractor(model, schema=None):将一段对话总结为带title与summary的结构化记录,底层依赖trustcall.create_extractor调用工具 src/langmem/knowledge/extraction.py。create_manage_memory_tool/create_search_memory_tool:暴露为 LangGraph 工具,Agent 能在主动推理路径上增删改查记忆 src/langmem/knowledge/tools.py。
MemoryPhase 枚举用于标注抽取阶段(如观察、反思、整合),从而支持多阶段提取流水线 src/langmem/knowledge/__init__.py。
3.2 提示词优化(prompts)
prompts 子包围绕 Prompt TypedDict 构建 src/langmem/prompts/types.py:name、prompt 为必填字段,update_instructions、when_to_update 用于控制何时/如何更新。AnnotatedTrajectory 则把对话历史与开发者反馈封装为优化器的输入。
两类优化策略 src/langmem/prompts/optimization.py:
- Metaprompt Optimizer:基于元提示的多轮反思,默认
max_reflection_steps=5、min_reflection_steps=1,由 src/langmem/prompts/metaprompt.py 实现DEFAULT_METAPROMPT模板。 - Gradient Optimizer:先诊断失败假设,再生成最小侵入式编辑建议,模板见 src/langmem/prompts/gradient.py。
- Multi-Prompt Optimizer:当存在多个相互依赖的
Prompt(通过when_to_update串联)时统一优化。
为了让 f-string 变量在优化过程中不被破坏,get_prompt_extraction_schema 会扫描原始 prompt 中所有 {var} 并在 schema 中要求保留 src/langmem/prompts/utils.py。
3.3 短期记忆管理(short_term)
当对话历史逼近模型上下文上限时,需要压缩而非丢弃。short_term.summarization 暴露 summarize_messages、asummarize_messages 函数与 SummarizationNode LangGraph 节点 src/langmem/short_term/__init__.py。核心参数见 src/langmem/short_term/summarization.py:
| 参数 | 作用 | 默认/说明 |
|---|---|---|
max_tokens | 输出最终消息列表的最大 token 数 | 在摘要生成后强制截断 |
max_tokens_before_summary | 触发摘要的累计 token 阈值 | 默认同 max_tokens |
max_summary_tokens | 摘要允许占用的预算 | 仅用于估算,不传给 LLM |
token_counter | 消息 token 计数函数 | 默认近似计数,可换 model.get_num_tokens_from_messages |
initial_summary_prompt / existing_summary_prompt / final_prompt | 三段式提示模板 | 分别覆盖首次生成、增量更新、最终合成 |
RunningSummary 与 SummarizationResult 数据类分别追踪已摘要消息 ID 与输出消息列表,确保重复调用不会重复摘要 src/langmem/short_term/summarization.py。
3.4 反思与图编排(reflection / graphs)
顶层导出的 ReflectionExecutor 提供"经验回放式"反思能力 src/langmem/__init__.py。在 src/langmem/graphs/prompts.py](https://github.com/langchain-ai/langmem/blob/7d4fd50f412042995acb9517d793559204258ccf/src/langmem/graphs/prompts.py) 中,预置了一个 LangGraph StateGraph:输入 InputState(prompts, threads),节点 optimize 会根据 configurable.kind 在 gradient / metaprompt 之间切换,并在只有一个 Prompt 且无 when_to_update 时退化为单 Prompt 优化器,输出 OutputState.updated_prompts`。
4. 端到端数据流与典型用法
以"主动记忆 Agent"为例,典型数据流为:
- 用户交互 进入 LangGraph 状态。
- 短期层
SummarizationNode在 token 溢出前对历史做摘要,保持状态紧凑 src/langmem/short_term/summarization.py。 - Agent 主路径 通过
create_manage_memory_tool与create_search_memory_tool即时写入或检索记忆 src/langmem/knowledge/tools.py。 - 后台
create_memory_store_manager异步抽取新事实并合并到BaseStoresrc/langmem/knowledge/extraction.py。 - 离线评估
create_prompt_optimizer基于AnnotatedTrajectory反馈迭代 Prompt src/langmem/prompts/optimization.py。 - 反思闭环
ReflectionExecutor把优化后的 Prompt 重新部署到 Agent,形成持续学习回路。
无需 LangGraph 时,可在独立脚本中使用自定义存储后端 examples/standalone_examples/README.md,例如 custom_store_example.py 展示了在 LangGraph 上下文之外接入 LangMem 的方式。
5. 常见注意事项
- schema 必填字段:自定义 Pydantic schema 时需在
json_schema_extra中保留required列表,工具层通过_ensure_schema_contains_required自动补齐 src/langmem/knowledge/tools.py。 - f-string 变量保留:调用
get_prompt_extraction_schema后再优化,可防止提示词中的{var}被 LLM 改写为非法模板 src/langmem/prompts/utils.py。 - 存储获取失败:在 LangGraph 运行时若取不到
BaseStore,_get_store会抛出errors.ConfigurationError,提示需要传入store=或处于 LangGraph 上下文内 src/langmem/knowledge/tools.py。 - 依赖 LangSmith:优化与反思流程使用了
@langsmith.traceable(如ls模块)作为可观测性后置,需要在生产中配置 LangSmith。
See Also
- LangMem Knowledge Extraction Reference
- LangMem Prompt Optimizers Reference
- LangMem Short-Term Summarization Reference
- LangGraph Long-term Memory Store Documentation
来源:https://github.com/langchain-ai/langmem / 项目说明书
长期记忆管理:提取、工具与后台管理器
langmem.knowledge 子包为长期记忆(Long-term Memory)提供了一组完整的功能层,覆盖了从对话中提取结构化摘要、写入可检索的存储,以及以 LangGraph 工具的形式暴露给智能体调用的全部环节。该模块被设计为与 LangGraph 的 BaseStore 紧密集成,可按用户命名空间(namespace)持久化语义、过程和情节记忆,从而支持"终身...
继续阅读本节完整说明和来源证据。
概述
langmem.knowledge 子包为长期记忆(Long-term Memory)提供了一组完整的功能层,覆盖了从对话中提取结构化摘要、写入可检索的存储,以及以 LangGraph 工具的形式暴露给智能体调用的全部环节。该模块被设计为与 LangGraph 的 BaseStore 紧密集成,可按用户命名空间(namespace)持久化语义、过程和情节记忆,从而支持"终身学习"型智能体。
模块对外导出的核心入口共六个:create_memory_manager、create_memory_store_manager、create_thread_extractor、create_manage_memory_tool、create_search_memory_tool 和 MemoryPhase(src/langmem/knowledge/__init__.py:9-19)。在 langmem 顶层 __init__.py 中,它们与提示优化器一同被再导出(src/langmem/__init__.py:2-23),形成统一的公共 API。
结构化提取:create_thread_extractor
create_thread_extractor 负责把一段对话消息流压缩成由 Pydantic 模型约束的结构化输出(如默认的 SummarizeThread,包含 title 与 summary)。其内部基于 trustcall.create_extractor 配合 tool_choice="any" 实现"工具式"的结构化生成,并以 ChatPromptTemplate 注入 system 与 user 两段指令(src/langmem/knowledge/extraction.py 中的 create_thread_extractor 实现)。
函数提供了两种重载:未指定 schema 时返回 Runnable[MessagesState, SummarizeThread];指定时返回 Runnable[MessagesState, S]。返回值是一个 merge_messages | template | extractor | (lambda out: out["responses"][0]) 链,并通过 .with_config({"run_name": "thread_extractor"}) 显式命名以便 LangSmith 追踪。
典型调用方式如下:
from langmem import create_thread_extractor
summarizer = create_thread_extractor("gpt-4")
summary = await summarizer.ainvoke({"messages": messages})
print(summary.title, summary.summary)
merge_messages 辅助函数通过 utils.get_conversation 把消息列表渲染为字符串,并把其它键透传,与 system 模板中的 {conversation} 占位符对接。
后台存储管理:MemoryStoreManager
对于需要持续累积、增量更新的场景,模块提供了 MemoryStoreManager 类,它是一个 Runnable[MemoryStoreManagerInput, list[dict]],可在节点级别直接被 LangGraph 工作流调用。其关键设计要点(src/langmem/knowledge/extraction.py)包括:
- 阶段化处理:
MemoryPhaseTypedDict 允许按instructions、include_messages、enable_inserts、enable_deletes等维度配置不同处理阶段,实现"提取—清理—整合"的流水线。 - 命名空间隔离:默认
namespace=("memories", "{langgraph_user_id}"),可被get_store()与配置注入的user_id模板替换,做到按用户的多租户记忆隔离。 - 可插拔查询模型:
query_model与query_limit决定了在写入前如何从已有记忆中检索相关上下文,为模型"对比 & 更新"提供依据。 - 运行时配置:
MemoryStoreManagerInput显式声明了messages: list[AnyMessage]与max_steps: int,与 LangGraph 节点的状态保持一致。
注入给 LLM 的核心指令 _MEMORY_INSTRUCTIONS 描述了三步策略:提取并上下文化、对比并更新(去重、压缩、置信度标注)、综合并推理,目标是最大化信噪比(SNR)并保持记忆内部一致性。
工具层:manage / search Memory Tool
为了让 LangGraph 智能体(特别是 create_react_agent)直接调用记忆能力,tools.py 提供了 create_manage_memory_tool 与 create_search_memory_tool 两个 StructuredTool(src/langmem/knowledge/tools.py)。它们的实现细节包含:
_get_store:优先使用调用者传入的BaseStore,否则回退到 LangGraph 上下文中的get_store(),并在RuntimeError时转换为errors.ConfigurationError。_ensure_json_serializable:对原生类型直接放行,对具备model_dump(mode="json")的 Pydantic 模型调用序列化方法,否则降级为str(),确保存储的 value 是 JSON 兼容的。_ToolWithRequired:继承StructuredTool并覆写tool_call_schema,强制把生成的 JSON Schema 注入"required": [],避免工具描述中因缺字段导致 LLM 调用失败。- 搜索工具的描述:
description模板固定以 "Search your long-term memories for information relevant to your current context." 开头,并把instructions拼到尾部,使 LLM 看到一段清晰的调用目的说明。
一个完整的预构建 ReAct 集成示例展示了:先在 prompt 节点用 get_store().search 把相关记忆塞入 system prompt,再把 create_manage_memory_tool 注册为 tools 列表的一员(src/langmem/knowledge/tools.py 中的 docstring 案例)。这使得智能体既能"读"记忆,也能"写"记忆。
架构与数据流
下图概括了从原始对话到持久化记忆的完整路径:提取器、存储管理器和工具层围绕 BaseStore 形成可组合的管线。
flowchart LR
A[MessagesState] --> B[create_thread_extractor]
B --> C[Structured Summary]
A --> D[MemoryStoreManager]
D --> E[phase: 提取/更新]
E --> F[BaseStore]
A --> G[manage_memory_tool]
A --> H[search_memory_tool]
H --> F
G --> F
F --> I[(namespace: memories/user_id)]失败模式与最佳实践
- 存储未配置:当
_get_store在没有 LangGraph 运行上下文且未显式传参时,会抛出ConfigurationError;解决办法是在编译图时显式传入store=BaseStore(...)。 - Schema 不可序列化:当
manage_memory_tool写入的 Pydantic 模型缺少model_dump或不支持 JSON 模式时,_ensure_json_serializable会记录错误并以字符串形式存储,影响后续检索——建议为自定义 Schema 提供稳定的 JSON 编码器。 - 阶段控制:若不希望自动删除或覆盖旧记忆,可通过
phases显式关闭enable_deletes,避免误删关键事实。
See Also
- src/langmem/short_term/summarization.py:短期消息摘要(上下文窗口压缩),可与本模块的长期记忆串联使用。
- src/langmem/prompts/optimization.py:提示词优化器,可在长期记忆抽取策略上进一步迭代。
来源:https://github.com/langchain-ai/langmem / 项目说明书
提示词优化与反思系统
langmem 的提示词优化与反思系统提供了一套自动化机制,用于基于历史对话轨迹和反馈信号持续改进代理或助手的提示词(Prompt)。该系统的核心入口是 createpromptoptimizer 工厂函数,支持三种优化策略:gradient、promptmemory 与 metaprompt,每种策略在复杂度、可解释性与运行成本之间提供不同权衡。资料来源:[src/lan...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
langmem 的提示词优化与反思系统提供了一套自动化机制,用于基于历史对话轨迹和反馈信号持续改进代理或助手的提示词(Prompt)。该系统的核心入口是 create_prompt_optimizer 工厂函数,支持三种优化策略:gradient、prompt_memory 与 metaprompt,每种策略在复杂度、可解释性与运行成本之间提供不同权衡。资料来源:src/langmem/prompts/optimization.py
flowchart LR
A[历史对话轨迹] --> B[create_prompt_optimizer]
C[更新指令] --> B
D[当前 Prompt] --> B
B --> E{优化策略}
E --> F[gradient]
E --> G[metaprompt]
E --> H[prompt_memory]
F --> I[改进后的 Prompt]
G --> I
H --> I优化策略
Gradient 优化器
gradient 策略将"识别问题"与"提出修改建议"两个步骤分离:先用评分 Prompt 找出失败模式,再使用 Meta-Prompt 给出最小侵入的修改。DEFAULT_GRADIENT_PROMPT 指示模型评估助手的有效性、识别偏差并聚焦具体失败模式(如风格不匹配、推理缺陷或幻觉);只有当确实存在性能下降证据时才建议更新,否则直接输出原始 Prompt。DEFAULT_GRADIENT_METAPROMPT 则给出明确的修改指引,避免泛化修改。资料来源:src/langmem/prompts/gradient.py
Metaprompt 优化器
metaprompt 策略在单次 LLM 调用内执行多步骤反思。MetapromptOptimizerConfig(TypedDict)提供三个字段:metaprompt(元提示模板)、max_reflection_steps(默认 5)与 min_reflection_steps(默认 1),用于控制反思深度。DEFAULT_METAPROMPT 强制要求保留原始 Prompt 中的 f-string 变量(如 {variable_name}),从而避免优化过程中破坏模板结构。资料来源:src/langmem/prompts/metaprompt.py
Prompt Memory 优化器
prompt_memory 是最简单的单次元提示(metaprompt)策略,不需要额外配置即可从对话历史中提取成功模式并应用到新提示。它适合快速原型或低风险场景。资料来源:src/langmem/prompts/optimization.py
反思机制
MetapromptOptimizer 在 __init__ 中通过 create_extractor(model, tools=[self.think, self.critique], tool_choice="any") 初始化反思链(reflect_chain),并要求模型在每次反思中至少调用一次 think 或 critique 工具。两个工具的返回值均为空字符串,仅作"思考锚点"驱动结构化推理。ainvoke 与 invoke 方法使用 langsmith.trace 记录调用,标签为 kind: metaprompt,便于事后审计与回放。资料来源:src/langmem/prompts/metaprompt.py
类型与数据模型
Prompt(TypedDict,必填name与prompt,可选update_instructions与when_to_update):表示待优化的提示词及优化元信息。资料来源:src/langmem/prompts/types.pyAnnotatedTrajectory(NamedTuple):封装对话历史(消息列表)与可选反馈,是优化器的输入单元。GradientOptimizerConfig、MetapromptOptimizerConfig:分别用于控制两种策略的子配置。MemoryPhase/MemoryStoreManager:在知识抽取场景下协调更新阶段(详见 src/langmem/knowledge/extraction.py),与提示词优化系统配合使用。
变量保留机制
get_prompt_extraction_schema 会扫描原始 Prompt 中所有的 f-string 变量(如 {variable}),生成带有 OptimizedPromptOutput Pydantic 模型的输出 schema,并在 validate_input_variables 模型验证器中通过 get_var_healer 自动恢复被模型无意删除或修改的占位符,从而确保输出始终保留原始输入变量。该机制与 metaprompt 策略中的变量保护要求相辅相成。资料来源:src/langmem/prompts/utils.py
使用示例
最常见的调用形式为:
from langmem import create_prompt_optimizer
optimizer = create_prompt_optimizer("anthropic:claude-3-5-sonnet-latest")
trajectories = [(conversation, feedback)]
better_prompt = await optimizer.ainvoke(
{"trajectories": trajectories, "prompt": "You are an astronomy expert"}
)
若选择 metaprompt 策略并需要限定反思步数,可使用:
optimizer = create_prompt_optimizer(
model, kind="metaprompt",
config={"max_reflection_steps": 3, "min_reflection_steps": 1},
)
create_prompt_optimizer 通过 @typing.overload 装饰器为不同策略提供精确的返回类型推导:在默认情况下返回 Runnable[OptimizerInput, str],调用方既可同步 invoke 也可异步 ainvoke。资料来源:src/langmem/prompts/optimization.py
失败模式与注意事项
- 当 Prompt 中包含 f-string 变量时,需确认优化器能够保留全部变量;否则模板将无法正常渲染。
metaprompt策略的反思步数若设过小,可能导致模型跳过对失败模式的深度分析;若设过大,则会增加 LLM 调用成本。- 短期记忆压缩(src/langmem/short_term/summarization.py)与知识抽取(src/langmem/knowledge/extraction.py)虽属于相邻模块,但在与提示词优化系统协同时,应避免混淆"消息摘要"与"提示词更新"两类输出。
See Also
- 短期消息摘要:src/langmem/short_term/summarization.py
- 知识抽取与存储管理:src/langmem/knowledge/extraction.py
来源:https://github.com/langchain-ai/langmem / 项目说明书
LangGraph 集成、部署与短期记忆
LangMem 在 LangGraph 生态中承担两层职责:一是提供与 LangGraph 存储层(BaseStore)深度集成的长期记忆工具,二是为 LangGraph 工作流提供短期上下文压缩能力。本页聚焦 LangGraph 集成入口、部署形态,以及短期记忆模块的运行机制。LangMem 的核心 API 在 src/langmem/init.py 顶层汇总,涵盖 cr...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
LangMem 在 LangGraph 生态中承担两层职责:一是提供与 LangGraph 存储层(BaseStore)深度集成的长期记忆工具,二是为 LangGraph 工作流提供短期上下文压缩能力。本页聚焦 LangGraph 集成入口、部署形态,以及短期记忆模块的运行机制。LangMem 的核心 API 在 src/langmem/__init__.py 顶层汇总,涵盖 create_memory_manager、create_manage_memory_tool、create_search_memory_tool、SummarizationNode、create_prompt_optimizer 等关键符号。README 明确指出 LangMem 提供「functional primitives you can use with any storage system and native integration with LangGraph's storage layer」的双轨设计,资料来源:README.md:1-15。
LangGraph 集成形态
LangMem 与 LangGraph 的耦合主要体现在三类入口:工具(Tools)、存储(Store)、图节点(Graph Nodes)。
工具层集成
src/langmem/knowledge/tools.py 中的 create_manage_memory_tool 与 create_search_memory_tool 直接消费 LangGraph 的 BaseStore 抽象。_get_store 工具函数优先使用调用方注入的 initial_store,否则通过 langgraph.utils.config.get_store() 从运行时上下文获取存储实例(资料来源:src/langmem/knowledge/tools.py)。当 get_store() 在 LangGraph 上下文外调用时,会抛出 errors.ConfigurationError("Could not get store"),这是 LangGraph 上下文依赖的明确边界。命名空间(namespace)支持 ("memories", "{langgraph_user_id}") 形式的模板占位符,运行时会从 config["configurable"] 替换变量,便于在 LangGraph Platform 上做多租户隔离。
存储与有状态图
长期记忆写入通过 create_memory_store_manager 把提取出的记忆直接落到 BaseStore;状态化的提示词优化走 src/langmem/prompts/stateful.py 中的 general_reflection_graph,该图以 StateGraph(ReflectionState) 构造,节点 update_general 在 START 与 END 之间执行,对存储中的当前提示执行反思写回。资料来源:src/langmem/prompts/stateful.py。
图节点入口
src/langmem/graphs/prompts.py 把优化逻辑封装为可部署的图节点 optimize:通过 StateGraph、add_node、add_edge 串接 START -> optimize -> END,并在 configurable 中读取 model 与 kind(gradient/metaprompt 等),便于 LangGraph Platform 直接按图部署。资料来源:src/langmem/graphs/prompts.py。
短期记忆模块
短期记忆由 src/langmem/short_term/summarization.py 实现,核心数据结构与对外符号如下。
| 符号 | 类型 | 作用 |
|---|---|---|
summarize_messages | 同步函数 | 在消息累计超出阈值时压缩历史 |
asummarize_messages | 异步函数 | 同上,提供 await 入口 |
SummarizationNode | LangGraph 节点 | 可直接挂到 StateGraph 上 |
RunningSummary | 状态结构 | 携带累积摘要,供下一轮使用 |
SummarizationResult | 结果结构 | 汇总返回的新消息与摘要片段 |
SummarizationNode 通过配置 max_tokens、max_tokens_before_summary、max_summary_tokens 三档阈值控制触发时机:当输入消息累计 token 数达到 max_tokens_before_summary(默认等于 max_tokens)即触发摘要。资料来源:src/langmem/short_term/summarization.py。
需要注意的细节:当最后一条消息是带有工具调用的 AI 消息时,其对应的工具结果也会被纳入摘要范围,避免悬空引用;当待摘要的 token 数超过 max_tokens 时,仅取末尾 max_tokens 个 token 进入摘要模型,以避免上下文溢出。max_summary_tokens 仅用于预算估算,并不会作为参数透传给模型;如需硬性限制,需要在传入前用 model.bind(max_tokens=max_summary_tokens) 自行绑定。token_counter 默认采用近似计数,生产环境建议替换为 model.get_num_tokens_from_messages。资料来源:src/langmem/short_term/summarization.py。
部署形态与运行时配置
LangMem 既可作为独立 Python 库调用,也可作为 LangGraph 图部署到 LangGraph Platform。README 强调「Native integration with LangGraph's Long-term Memory Store, available by default in all LangGraph Platform deployments」(资料来源:README.md:13-15)。在 Platform 上部署时,需要通过 langgraph.json 把 langmem.graphs.prompts.optimize 这类节点注册为可路由图。
短期记忆的部署用法是把 SummarizationNode 嵌入到现有 StateGraph:节点读写 RunningSummary 状态字段,上游节点写入消息,下游节点读取经过压缩的 messages 与持久化的 summary。这样组合既能在 Platform 上保留长会话能力,又能把单次 LLM 调用的上下文控制在预算内。
flowchart LR
A[用户消息] --> B[Agent 节点]
B --> C[SummarizationNode]
C -->|压缩后消息| D[下游 LLM 调用]
C -->|RunningSummary| E[BaseStore]
E -.->|下一轮读取| C常见失败模式
- 存储上下文缺失:在 LangGraph 外直接调用
create_manage_memory_tool,_get_store会触发RuntimeError,被包装为ConfigurationError。修复方式:在 LangGraphentrypoint内调用,或显式传入store=参数。 - 命名空间变量未注入:
namespace=("memories", "{langgraph_user_id}")在运行时依赖config["configurable"]["langgraph_user_id"];缺失该键会导致模板替换失败。 - 短期记忆触发器配置错位:若
max_tokens_before_summary远大于max_tokens,可能导致摘要模型上下文溢出;若太小,则频繁摘要带来额外 LLM 成本。 - 工具调用残留:当 AI 消息附带工具调用时,必须确保摘要逻辑能同时覆盖工具消息,否则压缩后会出现孤立的工具调用记录。资料来源:src/langmem/short_term/summarization.py。
参见
- README.md — 项目总览与安装
src/langmem/knowledge/extraction.py— 记忆提取与搜索管线src/langmem/prompts/optimization.py— 提示词优化器(gradient、metaprompt、memory)
来源:https://github.com/langchain-ai/langmem / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
可能增加新用户试用和生产接入成本。
可能影响授权、密钥配置或安全边界。
安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
假设不成立时,用户拿不到承诺的能力。
Pitfall Log / 踩坑日志
项目:langchain-ai/langmem
摘要:发现 10 个潜在踩坑项,其中 2 个为 high/blocking;最高优先级:安装坑 - 来源证据:Persistence?。
1. 安装坑 · 来源证据:Persistence?
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Persistence?
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/langchain-ai/langmem/issues/154 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
2. 安全/权限坑 · 来源证据:Enhance error message when summarization fails due to missing HumanMessage in trimmed window
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Enhance error message when summarization fails due to missing HumanMessage in trimmed window
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/langchain-ai/langmem/issues/156 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
3. 配置坑 · 可能修改宿主 AI 配置
- 严重度:medium
- 证据强度:source_linked
- 发现:项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主,或安装命令涉及用户配置目录。
- 对用户的影响:安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
- 证据:capability.host_targets | github_repo:920242883 | https://github.com/langchain-ai/langmem | host_targets=claude, chatgpt
4. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | github_repo:920242883 | https://github.com/langchain-ai/langmem | README/documentation is current enough for a first validation pass.
5. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium
7. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | github_repo:920242883 | https://github.com/langchain-ai/langmem | no_demo; severity=medium
8. 安全/权限坑 · 来源证据:Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Security: OWASP Agent Memory Guard for memory poisoning defense (ASI06)
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/langchain-ai/langmem/issues/164 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
9. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | issue_or_pr_quality=unknown
10. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | github_repo:920242883 | https://github.com/langchain-ai/langmem | release_recency=unknown
来源:Doramagic 发现、验证与编译记录