上周我构建了一个AI Agent,这周我添加了记忆功能!
摘要
一位开发者分享了他们使用 Anthropic SDK 和 TypeScript 构建具有记忆功能的 AI 智能体的经验,解释了工作记忆、情景记忆、语义记忆和程序记忆之间的区别,以及为生产环境扩展记忆所面临的挑战。
从头构建一个电商 AI 代理。也许你已经在 Reddit 上看到过之前的帖子了 🤫 没有用 LangChain。只用原始的 Anthropic SDK + TypeScript 搭配 Node.js。在让基础的工具调用循环跑通之后,我添加的第一个功能就是记忆。这个想法看起来很简单:保存对话。用户回来时再次加载它。(情景记忆)
```javascript
// 每轮对话后保存消息
ConversationStore.saveMessages(sessionId, result.messages);
// 恢复对话
const history = ConversationStore.getMessages(sessionId);
```
它确实有效。代理重启后仍然能记住之前的对话。但过了几天我查看了存储的 JSON 文件……
```json
{
"sessions": {
"USER_1": {
"messages": [
{ "role": "user", "content": "hi" },
{ "role": "assistant", "content": [
{ "type": "tool_use", "name": "search_products" }
]
}
// 还有几百条消息……
]
}
}
}
```
我又制造了一个问题。每次请求都要发送:
- 旧的用户消息
- 助手的回复
- 工具调用
- 工具结果
- 中间推理上下文
每次请求都要把几百条消息送回 LLM。记忆确实工作了,但成本增加了,上下文也很快就被填满了。
错误在于把所有记忆都一视同仁。AI 代理通常需要不同类型的记忆:
## 工作记忆
这就是你当前的 messages 数组。代理正在使用的短期上下文。
```javascript
while (true) {
const response = await llm(messages);
if (!toolCalls) break;
const results = await runTools(toolCalls);
messages.push(results);
}
```
快速且简单。但一旦重启进程,它就消失了。
## 情景记忆
这是我最初实现的东西。基本上就是对话时间线。
```javascript
class ConversationStore {
saveMessages(sessionId, messages) {
store.sessions[sessionId] = {
updatedAt: new Date(),
messages
};
saveStore(store);
}
}
```
这很有用,因为代理能准确记住发生了什么。但把所有东西永远存下来扩展性很差。10 分钟的对话没问题。但用户用了你代理几个月呢?那就不行了。
## 语义记忆
这是更好的长期记忆方案。不要记住每一句话。而是记住重要的事实。
例子:
不再存储:
- "用户询问了跑鞋"
- "助手搜索了耐克鞋"
- "工具返回了 20 个商品"
- "用户选择了 10 码"
而是存储:
```
{
"name": "Nikhil",
"preferences": [
"喜欢跑鞋",
"鞋码 10",
"偏好耐克"
]
}
```
在会话结束后,运行一个更便宜的模型:
```javascript
const memory = await anthropic.messages.create({
model: "claude-haiku-4-5",
system: `
提取重要用户事实。仅返回 JSON。
`,
messages: [{ role: "user", content: JSON.stringify(messages) }]
});
```
下一次对话:发送 5 条有用的事实,而不是 500 条旧消息。同样的个性化,上下文小得多,成本低得多。
## 程序性记忆
这不是关于用户的。而是关于代理自身的行为方式。类似于 Claude Skills 或 Cursor 规则。
例子:
- 始终以印度卢比(INR)显示价格。
- 绝不推荐不可用商品。
- 推荐鞋之前先询问尺码。
这种记忆很少变化。它基本上就是代理的操作手册。
## 我正在转向的架构
- 工作记忆 = 当前对话
- 情景记忆 = 需要时使用的原始历史
- 语义记忆 = 长期用户知识
- 程序性记忆 = 代理行为 / 你知道的 SKILLS MD 文件
有趣的是,“添加记忆”很容易。设计一个在成千上万用户之后仍然能正常工作的记忆系统才是真正的挑战。
接下来我要构建语义提取层。很想知道大家在生产环境中是怎么处理这个问题的。你肯定需要使用数据库,比如向量数据库或 PostgreSQL。
参考视频见评论。
相似文章
@0xMovez: Anthropic AI 工程师刚刚展示了如何用4个步骤给AI智能体真正的记忆——这改变了一切,在28分钟内……
Anthropic AI 工程师演示了一种免费的4步方法,赋予AI智能体跨会话的持久记忆,包括记忆存储和梦境功能,实现了95%的缓存命中率。
AI 智能体记忆机制详解(28 分钟阅读)
本文全面介绍了 AI 智能体记忆机制的技术原理,区分了工作记忆与长期记忆的实现方式,并探讨了上下文管理、基于嵌入的检索以及数据生命周期治理等关键策略。
大家是如何处理 AI 智能体的长期记忆 + 回放/调试问题的?
一位开发者探讨了当前 AI 智能体记忆系统的局限性,并提出了一款具有片段存储和回放调试功能的新记忆层工具,希望获得社区的验证。
@Av1dlive:OpenAI 工程师关于 Agent 记忆的 26 分钟演讲,能让你在真正掌握构建 Agent 记忆的方法方面,收获远超独自摸索数月所得……
OpenAI 工程师带来一场 26 分钟的分享,探讨如何为 AI Agent 搭建高效的记忆系统,为 Agent 架构开发者提供极具价值的实战洞察。
关于智能体、RAG 和记忆的一些笔记与经验教训
作者分享了在大规模构建 AI 智能体过程中积累的笔记与经验教训,重点探讨 RAG 和记忆管理,以帮助他人。