别再让大模型“上一句忘了下一句”!手把手教你用 LangChain 打造会记事、懂上下文、省 Token 的智能对话体。
💡 你有没有遇到过这样的 AI?
用户:“我叫李雷。”
AI:“你好,李雷!”
用户:“我今年30岁。”
AI:“好的,李先生,请问有什么可以帮您?”
用户:“……你刚不是叫我李雷吗?”
AI:“抱歉,我是无状态的。”
😅 是的,大多数 LLM(大语言模型)天生就是“金鱼脑”——7秒记忆,甚至更短。每一次请求都是全新的开始,上一轮聊得再火热,下一轮它就一脸懵:“你是谁?我们在聊啥?”
但现实中的对话,从来不是单轮问答。我们要的是连续、有上下文、能记住偏好和历史的智能体。这时候,Memory(记忆模块) 就成了 AI Agent 的“海马体”——没有它,AI 永远只是个反应快但记性差的“嘴替”。
今天,我们就来聊聊:如何用 LangChain 给大模型装上“脑子” ,让它从“失忆症患者”进化成“人形硬盘”!
🧩 一、Memory 是什么?为什么它比微调还香?
在 AI 工程里,提升模型能力的常见手段有:
- 微调(Fine-tuning) :效果强,但贵、慢、复杂,动辄几千美元+GPU集群。
- RAG(检索增强生成) :引入外部知识库,适合事实性问答。
- Tool Calling:让模型调用函数干活,比如查天气、发邮件。
- Memory(记忆) :成本最低、见效最快、最贴近真实对话体验的方案!
✅ Memory = 对话历史的管理器
它把用户和 AI 的多轮对话存下来,在每次请求时塞进 Prompt,让模型“记得刚才聊了啥”。
而这一切,只需要几行代码 + 一个消息数组(messages)!
🚀 二、LangChain 的 Memory 三剑客
LangChain 提供了多种 Memory 实现,从“临时小本本”到“永久云笔记”,任你挑选:
1️⃣ InMemoryChatMessageHistory:内存里的“便签纸”
- 特点:快!简单!但进程一关,记忆清零。
- 适用场景:Demo、测试、单次会话。
- 代码示例:
const history = new InMemoryChatMessageHistory();
await history.addMessage(new HumanMessage("红烧肉怎么做?"));
const messages = [systemMsg, ...(await history.getMessages())];
⚠️ 缺点:对话越长,Token 越多,账单越厚!
2️⃣ FileSystemChatMessageHistory:写进硬盘的“日记本”
- 特点:持久化!按
sessionId分组,重启不丢! - 适用场景:Web 应用、需要跨会话记忆的 AI 助手。
- 存储格式:JSON 文件,结构清晰,人类可读。
const history = new FileSystemChatMessageHistory({
filePath: "chat_history.json",
sessionId: "user_123"
});
🎉 你可以今天问“红烧肉做法”,明天接着问“需要哪些食材?”,AI 依然记得你在做菜!
3️⃣ 自定义 Memory + 截断策略:聪明的“记忆管家”
问题来了:对话越来越长,Token 爆表怎么办?
LangChain 提供了 trimMessages 工具,配合 js-tiktoken 可以:
- 按消息条数截断(保留最近 N 条)
- 按Token 数量截断(精准控制成本)
- 甚至自动摘要(把前10轮对话总结成1句话)
// 保留最近4条消息
const allMessages = await history.getMessages();
const trimmed = allMessages.slice(-4);
💡 小技巧:SystemMessage 永远放最前面,用户最新问题放最后——这是 LLM 最舒服的阅读顺序!
🤖 三、实战:打造一个“会记事”的做菜助手
我们用 FileSystemChatMessageHistory 实现一个跨天对话的烹饪 AI:
- 第一天:用户问“红烧肉怎么做?” → AI 回答步骤。
- 第二天:用户问“需要哪些食材?” → AI 结合历史,精准列出五花肉、冰糖、酱油……
- 第三天:用户说“上次做的太咸了” → AI 道歉并建议“下次少放10%盐”。
这一切,靠的不是魔法,而是 Memory + SessionID!
🔑 关键设计:每个用户分配唯一
sessionId,实现“千人千面”的记忆隔离。
💰 四、Memory 如何帮你省钱?
你知道吗?40% 的 Token 开销来自重复的历史消息!
通过合理使用 Memory 截断策略,你可以:
- 自动丢弃无关旧对话(比如7天前的闲聊)
- 保留关键上下文(如“用户对花生过敏”)
- 在成本和体验之间找到黄金平衡点
📊 某团队实测:引入滑动窗口 + 摘要后,月度 API 费用下降 35% !
🌟 五、未来展望:Memory + RAG + Tool = 超级智能体
真正的 AI Agent 不止会记事,还会:
- 用 RAG 查菜谱数据库
- 用 Tool 调用计时器提醒“炖肉还有10分钟”
- 用 Memory 记住“用户不喜欢香菜”
而 Memory,正是这一切的基石。没有它,再多的工具也只是散沙。
✅ 结语:给 AI 一颗“心”,它才能懂你
“无状态”是技术的限制,“有记忆”才是产品的温度。
LangChain 的 Memory 模块,看似简单,却是连接冰冷模型与温暖交互的桥梁。它不炫技,却实用;不昂贵,却高效。
下次当你写 AI 应用时,别忘了问自己一句:
“我的 AI,记得用户的名字吗?”
如果答案是否定的——是时候给它装个“脑子”了。