在人工智能飞速发展的今天,大语言模型(LLM)已经能帮我们写代码、做菜、解答问题……但你有没有想过一个问题:为什么每次和AI聊天,它好像都不记得上一句说了什么?
答案很简单:大模型本身是“无状态”的(Stateless) 。就像HTTP协议一样,每一次请求都是独立的——这是为了高并发、低延迟、节省算力而设计的。但现实中的任务往往是连续的、有上下文依赖的。比如:
“红烧肉怎么做?” “好吃吗?” “需要哪些食材?”
如果AI不记得前面聊过“红烧肉”,第二句“好吃吗?”它根本不知道你在问什么!
于是,Agent记忆模块(Memory) 就成了智能体(Agent)的基石。
✅ 结论:LLM + Tool(干活) + RAG(知识库) + Memory(记忆) = 真正的 AI Agent
在 LangChain 等框架中,一次对话的上下文通常由一个 messages 数组表示:
arduino 体验AI代码助手 代码解读复制代码[
new SystemMessage("你是一个做菜助手"),
new HumanMessage("红烧肉怎么做?"),
new AIMessage("首先准备五花肉..."),
new HumanMessage("好吃吗?")
]这个数组会被完整传给 LLM,让它“知道上下文”。
但问题来了:对话越长,Token 越多,成本越高,还可能超出模型上下文窗口(比如 128K)!
就像手机聊天记录自动滚动,我们只保留最新的 N 条消息:
ini 体验AI代码助手 代码解读复制代码const maxMessages = 4;
const allMessages = await history.getMessages();
const trimmedMessages = allMessages.slice(-maxMessages); // 保留最后4条这叫 滑动窗口(Sliding Window) 或 LRU(最近最少使用)策略。
💡 优点:简单高效 ❌ 缺点:可能丢掉重要早期信息(比如“我叫张三”)
把前面的对话压缩成一段摘要,再和新消息拼接:
原始对话:
→ 总结为:“用户是名叫张三的程序员。”
这样既保留关键信息,又大幅减少 Token。
LangChain 支持自动触发总结(比如当 Token 使用率达 80% 时),也可以手动触发命令如 /compact。
把历史对话存到文件或数据库,下次需要时再“召回”:
这正是 Cursor、Devon 等 AI 编程工具的做法:它们不仅能记住你上次写的代码,还能跨会话理解你的编程风格!
下面这段代码展示了如何用 FileSystemChatMessageHistory 把对话存到本地文件:
javascript 体验AI代码助手 代码解读复制代码import { FileSystemChatMessageHistory } from "@langchain/community/stores/message/file_system";
import { HumanMessage, AIMessage, SystemMessage } from "@langchain/core/messages";
const filePath = "chat_history.json";
const sessionId = "user_session_001";
const history = new FileSystemChatMessageHistory({ filePath, sessionId });
// 用户提问
await history.addMessage(new HumanMessage("红烧肉怎么做?"));
// 获取全部历史(含系统提示)
const messages = [systemMessage, ...(await history.getMessages())];
// 调用模型
const response = await model.invoke(messages);
// 保存AI回复
await history.addMessage(response);下次运行程序时,只需用相同的 sessionId,就能恢复整个对话上下文!
🎯 这就是“有状态”(Stateful)对话的实现方式。
好的 Agent 会动态监控 Token 消耗:
ini 体验AI代码助手 代码解读复制代码import { getEncoding } from 'js-tiktoken';
const enc = getEncoding("cl100k_base");
const tokens = enc.encode(fullPrompt).length;
if (tokens / contextWindow > 0.8) {
// 自动触发总结或截断
}开发者甚至可以提供命令:
/clear:清空记忆,开启新任务(省 Token!)/compact:手动压缩历史👨💻 既能 vibe coding(沉浸式编程),又能控制成本——这才是聪明的 AI 工程师!
记住:
通过 messages 数组 + 截断/总结 + 文件持久化 + RAG 检索,我们就能构建一个既聪明又省钱的 AI Agent。
未来,你的 AI 助手不仅能记住你爱吃的菜,还能记得你讨厌的编程风格、常用的函数命名习惯……这一切,都始于一个小小的 记忆模块。
🌟 Agent 的进化 = 记忆的积累 从 Stateless 到 Stateful,从一次性问答到终身学习伙伴—— 记忆,让 AI 真正“认识”你。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。