一、核心事件:LangChain Agent 记忆方案升级
作者推出两套总结压缩策略:基于消息数量触发与基于 Token 数量触发,结合 Milvus 向量数据库实现语义检索,解决传统截断导致关键信息丢失问题。
- 核心组件:@langchain/openai、@zilliz/milvus2-sdk-node、js-tiktoken
- 关键能力:LLM 摘要压缩 + 向量存储 + 语义召回
- 开放状态:方案代码开源,具备完整可复现性
二、截断策略的致命缺陷与总结思路
传统上下文截断(如 slice(-4))直接丢弃历史消息,导致重要上下文永久丢失——例如用户自称"李四"、职业"设计师"等信息被清空,模型返部失忆。
总结压缩的核心思想是:不直接丢弃老消息,而是用 LLM 将其压缩成一段摘要,再与最近消息组合。8 条原始消息可压缩为 3 条(摘要 + 最近 2 条),关键信息如名字、职业、技能均被保留。
两种触发策略:
- 消息数量阈值:超过 maxMessages(如 6 条)触发总结,保留 keepRecent(如 2 条)最近消息
- Token 预算控制:通过 js-tiktoken 精确计算,按 token 预算保留最近消息(如 keepRecentTokens = 80)
其中 Token 计算算法存在一个关键反差点:一条消息可能是 4 个 token(如"我叫李四"),也可能是 20 个 token(如"设计师很有创造力…"),按固定消息数截断无法精确控制上下文长度,而 token 预算策略可动态适配不同消息的 token 密度。
三、技术实现细节与向量检索闭环
总结函数实现
- getBufferString():将 Message 对象数组转为可读字符串(格式:用户: xxx / 助手: xxx)
- SystemMessage 注入总结提示词,调用 LLM 生成摘要
- history.clear() + 重组:清空历史,加回最近消息 + 摘要消息
向量检索架构
- Milvus:开源向量数据库,支持 Docker 单机部署(milvus-standalone-docker-compose.yml)
- Embedding 流程:对话文本 → 向量化 → 存入 Milvus → 基于相似度检索
- 核心能力:突破 token 限制,实现语义级长期记忆(“过目不忘"级别)
项目结构包含 8 个测试文件,覆盖从内存记忆、文件持久化、截断、总结(两种策略)、Milvus 写入到语义检索的完整链路。
四、落地建议与适用场景
适合立即尝试者:
- 使用 LangChain 构建 Agent 的开发者,需应对长对话上下文管理
- 希望控制 tokens 成本但又不想丢失历史关键信息的应用
建议再等等的场景:
- 无 Milvus 运维能力的团队:向量数据库部署与维护需额外运维投入
- 对延迟极其敏感的实时问答:语义检索引入额外向量计算开销
五、写在最后
LangChain 的记忆方案正从"选择性失忆"进化到"过目不忘”。当上下文窗口成为能力天花板,如何智能管理历史信息,比单纯扩大窗口更具工程意义——这是 Agent 系统走向实用化的必经之路。
