Mastra — 记忆三件套(处理器式记忆)
本章讲 Mastra 怎么给 agent"记忆"。核心洞见:记忆是处理器,不是服务——它在 §01 那张图的"输入处理器"和"输出处理器"两端各插一脚。
1. 这一章解决的问题
LLM 没有记忆。每次调用它只看到你这次给的消息。要让 agent"记得"上次说了什么、记得这个用户的偏好、记得三个月前另一个会话里提过的事,你得在每次调用前,把相关的历史塞进 prompt。
Mastra 把"塞什么、怎么塞"拆成三个独立的处理器,各管一块:
| 处理器 | 管什么 | 一句话 |
|---|---|---|
MessageHistory | 最近的对话 | 把当前 thread 的最近 N 条消息载进来 |
SemanticRecall | 久远但相关的对话 | 用向量检索,跨 thread 找"语义相似"的旧消息 |
WorkingMemory | 结构化的"用户档案" | 维护一份模板化的持久笔记,作为系统消息注入 |
它们都在 packages/core/src/processors/memory/。
2. 两个核心概念:thread 与 resource
读记忆代码前先记住两个 ID:
- thread:一次会话(一个聊天窗口)。
- resource:一个用户 / 实体。一个 resource 下可以有很多 thread。
记忆的作用域就是围绕这两者:scope: 'thread' 只在当前会话里找,scope: 'resource' 跨该用户的所有会话找(语义召回默认 'resource',semantic-recall.ts:52 的 @default 'resource')。