记忆存储服务

更新时间:
复制 MD 格式

记忆存储服务(Memory Storage)基于表格存储 Tablestore 构建,为 AI Agent 提供 Serverless 的记忆写入、自动提取与语义检索能力,支持百万租户级数据隔离与跨会话记忆复用。

什么是记忆存储服务

记忆存储服务(Memory Storage)基于表格存储 Tablestore 构建,为 AI Agent 提供 Serverless 的记忆写入、自动提取与语义检索能力。开发者将对话消息或文本写入记忆库,服务保存原始消息为短期记忆,并自动提取可检索的长期记忆单元持久化到表格存储;检索时结合语义检索与文本检索(支持 Rerank 排序)返回相关长期记忆,供 Agent 在后续对话中按需召回。

相比自行实现记忆抽取与检索,开发者无需自建 LLM 调用、向量/全文检索、数据隔离与审计等能力即可使用。服务支持百万租户级数据隔离与跨会话记忆复用。

如需了解记忆存储服务的计费请参见产品计费;如需快速体验记忆存储服务,请参见写入并召回第一条记忆。

说明

记忆存储服务当前支持地域:华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)、中国香港、新加坡。可就近选择区域接入。

功能优势

  • Serverless与弹性

    全托管 Serverless 架构,用户无需关心底层资源的部署和运维。按量付费,零用量零费用;基于分布式架构水平扩展,满足百万租户、百亿条记忆的场景需求。

  • 记忆自动提取,无需额外开发

    入对话或文本后自动提取关键事实和偏好,生成结构化的记忆单元。开发者无需编写额外的提取逻辑,也无需自行处理记忆的抽取和组织。可通过记忆库级别的自定义抽取指令(extractInstructions)引导抽取聚焦业务关键信息。

  • 精准语义检索,节省 Token

    支持向量检索与全文检索的混合检索模式,以自然语言作为查询输入召回相关记忆。相比传入完整对话历史约节省95% 的 Token,避免 O(N²) 增长以及“Lost in the Middle”性能退化。

  • 海量租户隔离

    通过 appId、tenantId、agentId、runId 四级 Scope 实现数据隔离,开发者可按应用、租户、Agent 和会话组织记忆数据边界,满足百万租户级别的多租户隔离需求。

  • 文件视图读取

    服务托管的结构化记忆支持两种读取方式:通过 SDK、CLI 等接口进行结构化读取,或通过文件视图按目录和文件读取。文件视图以只读文件形式呈现记忆数据。应用仍通过结构化接口写入或修改源记忆,避免文件操作与结构化记忆产生冲突。

  • 文件记忆

    已有 Markdown 等 UTF-8 文本文件或需要自行组织记忆目录时,可以直接将文件写入文件记忆库。应用控制文件路径,并可新建、读取、更新、重命名和删除文件,以及查询历史版本。文件记忆 Dream 还能跨 Scope 归并、纠错和重组文本文件,并把结果自动写入指定的输出 Scope。

  • 知识编译与记忆整理

    Wiki 将来源文档异步构建为相互链接的 Markdown 页面供跨会话复用。Agent 可以先搜索 Wiki,再按路径读取命中页面,在不同会话中复用同一 Agent 的持久知识;记忆整理(Dream)在后台异步对已入库内容做二次提炼,可进行归并、去重、更新、提取技能画像等。

典型应用场景

场景

说明

多轮对话连续性

长对话场景中,将历史消息写入记忆库,由服务保留原始消息并提取关键事实。后续对话仅按需召回相关记忆,避免将完整历史全量注入上下文。

跨会话偏好沿用

用户在多个会话中表达的偏好、习惯和约束被提取为长期记忆单元,新会话中通过语义检索召回,使 Agent 在不同时间、不同入口仍能保持一致的应答风格。

多 Agent 知识共享

通过四级 Scope 中 agentId 通配,多个 Agent 可在同一租户范围内共享同一份用户记忆,避免在每个 Agent 中重复抽取和维护相同的事实。

Agent 资料图谱化

把产品说明、操作手册和项目约定作为 Wiki 来源持续维护,服务将资料构建为可搜索、相互链接且带来源引用的页面。不同会话可以共享同一 Agent Scope 的 Wiki,同时只读取当前任务需要的少量页面。

用户画像沉淀

将用户行为、属性和历史事实持续写入记忆库,由服务自动归并为结构化的画像单元,供推荐、客服、营销等下游 Agent 直接召回使用。

说明
  • 记忆提取为异步过程,且由系统自动完成,对写入实时性要求极高或需要完全自定义提取策略的场景需评估。

  • 纯结构化数据查询建议使用表格存储宽表模型或关系型数据库。

  • 仅需上下文窗口管理、不需持久化记忆的场景可直接使用 LLM 上下文窗口。

名词解释

记忆库的数据按以下实体组织。

实体

说明

MemoryStore

记忆库,管理记忆数据的顶层容器

Memory

长期记忆,从对话或文本中提取的可检索信息

Message

短期记忆,写入的原始会话消息记录

Item

带路径和版本的记忆文件

Wiki

按三段 Agent Scope 组织的知识图谱页面集合

Dream Task / Action

异步整理任务及其结构化记忆或文件变更记录

MemoryStore

MemoryStore 是记忆库,管理记忆数据的顶层容器。先创建记忆库,再向记忆库写入消息、检索记忆或查询审计记录。可按应用、环境(开发、测试、生产)或业务线划分记忆库;名称仅含字母、数字、下划线,最长 32 字符。

Memory

Memory 是长期记忆。服务在写入对话消息或文本后,会提取可长期保存和检索的信息,并生成记忆单元。每条通常包含记忆 ID、文本、Scope、元数据、创建时间及版本管理信息。

Message

Message 是短期记忆,即写入记忆库的原始会话消息记录。可通过 ListMemoryStoreMessages 查询;短期记忆的 Scope 规则见 Scope 目录层级管理。

Item

带路径和版本的记忆文件,在文件记忆库中按路径组织文本文件(如 Markdown),支持增删改查与历史版本查询。文件记忆 Dream 的跨 Scope 归并、纠错和重组见 Agentic Task 的记忆整理。

Wiki

按三段 Agent Scope 组织的知识图谱页面集合,供同一 Agent 在不同会话中复用持久知识,详情可参见知识编译(Wiki)。

Dream Task / Action

对已入库内容的异步整理任务(Dream Task),产出结构化记忆或文件变更记录(Dream Action),详情可参见记忆整理(Dream)。

Scope 目录层级管理

Scope 用于表示记忆数据的归属和隔离边界。记忆服务使用 appId 、 tenantId 、 agentId 、runId 四级 Scope。

字段

说明

appId

应用标识,通常对应一个业务应用或产品

tenantId

租户或用户标识

agentId

Agent 标识

runId

会话、运行或任务标识

Scope 的层级为:

appId > tenantId > agentId > runId

核心规则:

  • 写入时,appId 必填,其他字段为空时补为 __default__。写入不允许使用通配符 *。

  • 检索记忆时,appId 必填且不能为 *。其他字段省略时表示 __default__,显式传入 * 才表示通配。

  • 查询短期记忆时,四个字段均为必填且不允许通配符。

常见检索范围示例

检索范围

Scope 设置

适用场景

当前会话内

appId + tenantId + agentId + runId 全部指定

只希望使用当前会话历史

跨会话

appId + tenantId + agentId + runId="*"

同一 Agent 在多次会话中复用用户偏好

跨 Agent、跨会话

appId + tenantId + agentId="*" + runId="*"

多个 Agent 共享用户记忆

Scope 与多记忆库的选择

MemoryStore 支持按应用、环境或业务线创建独立记忆库。当数据属于同一应用中的不同用户或 Agent 时,推荐使用 Scope 在同一记忆库内隔离,管理成本更低,且支持通配符跨 Scope 联合检索。当不同业务域需要完全独立的数据空间时,建议创建多个记忆库。

记忆数据管理

记忆写入

记忆服务支持以下两种方式写入记忆:

  • 对话消息写入 :通过 AddMemories 接口传入 messages 数组。服务保存原始消息为短期记忆,并根据记忆库的 outputTypes 生成结构化记忆、只读记忆文件或两种结果。

  • 文本写入 :通过 AddMemories 接口传入 text 字段,直接提交纯文本内容,并生成记忆库配置的输出。

写入时需指定 Scope 信息,其中 appId 必填,tenantId、agentId、runId 为空时自动补为 __default__。写入不允许使用通配符 *。

写入默认异步执行(sync=false):原始消息先落库并可立即作为短期记忆查询,配置的输出在后台生成。可通过 AddMemories 返回的 requestId,调用 GetMemoryTask 跟踪任务状态。包含 file 输出的记忆库只支持异步写入。记忆库还支持自定义抽取指令(extractInstructions),在创建或更新记忆库时设置,注入抽取提示词以引导该库的长期记忆抽取聚焦业务关键信息。

记忆检索

SearchMemories 支持使用自然语言检索长期记忆。服务结合语义检索和文本检索能力,并支持 Rerank 排序,默认启用 Rerank。

检索时 appId 和 tenantId 为必填字段,agentId 和 runId 可使用通配符 * 扩大检索范围。

检索结果同时返回融合得分 score 与归一化相似度 similarity。可通过 minSimilarity 过滤低相关结果。设置 includeEvidence=true,可在结果中附带命中记忆对应的原始消息片段(evidence),便于增强答题模型的可解释性。

长期记忆支持附加元数据(metadata)。元数据可用于存储业务自定义信息,例如记忆来源、标签和优先级等。元数据随记忆单元一起存储,检索结果中会返回对应的元数据字段。

Agentic Task

记忆整理(Dream)

记忆整理(Dream)是对记忆库中已有数据进行二次提炼的异步能力。结构化记忆库和可写文件记忆库使用不同的输入与写入模型。

结构化记忆 Dream

服务在后台分析长期记忆与原始消息,产出可应用的整理动作。整理对象分为三类:

  • 记忆整理( memory):对长期记忆去重、改写、合并,并删除过时项。

  • 技能提取( skill):从历史交互中提取可复用技能

  • 画像提取( profile):沉淀结构化用户画像

结构化记忆整理支持 proposal、safe_auto 和高强度 plan 模式。proposal 生成提案,由人工或程序确认后应用;safe_auto 在达到置信度阈值时自动应用;plan 先等待计划批准,再执行已授权的删除范围。

文件记忆 Dream

对 inputType=file、outputTypes=["file"] 的记忆库,Dream 从一个或多个输入 Scope 冻结文本文件版本,并把整理后的完整结果自动写入一个确定的输出 Scope。文件动作包括新增、更新、改名和删除,所有更新与删除均使用版本前置条件保护并发写入。

文件记忆 Dream 固定使用高强度自动模式,不产生等待人工 Apply 的提案。查询任务和动作仍使用 GetMemoryDreamTask、ListMemoryDreamTasks 和 ListMemoryDreamActions。详细流程参见记忆整理(Dream)。

知识编译(Wiki)

Agent Wiki 把 /.wiki/raw/ 下的来源文件异步构建为相互链接的 Markdown 页面。每个 Wiki 唯一归属于一个记忆库和一个 appId / tenantId / agentId 三段 Scope;同一 Agent 的不同会话共享页面。

应用通过 GetWiki 查询或自动创建 Wiki,使用 IngestWiki 构建,通过 ListWikiPages、SearchWikiPages 和 GetWikiPage 消费已发布页面。新构建发布前,旧页面集合保持可读。详细流程参见知识编译(Wiki)。

企业级能力

请求审计

服务记录记忆库请求,可通过 ListMemoryStoreRequests 查询请求日志。审计记录包含操作类型、响应状态、延迟和失败原因等字段,适用于排查写入、检索和管理操作中的问题。

任务与可观测性

记忆写入与记忆整理均为异步任务,服务提供配套的查询能力:

  • GetMemoryTask 与 ListMemoryTasks:查询记忆抽取任务的状态与产出。

  • GetMemoryDreamTask、ListMemoryDreamTasks 与 ListMemoryDreamActions:查询记忆整理任务与动作。

  • ListMemoryStoreScopes:使用四级 scope 或结构化 filter 列出已登记的 conversation Scope;返回稳定的 scopeKey,便于发现和分页遍历会话范围。

  • ListMemoryStoreRequests:请求审计日志查询。

性能参考

从检索准确率、检索延时和存储规模三个维度对表格存储记忆服务进行了评测,并与业界主流记忆方案 Mem0 进行了对比。

维度

表格存储记忆服务

行业对比

综合检索准确率

88.25%

较 Mem0(64.20%)提升约 37.4%

P50 检索延时

\~155 ms

同类方案通常 200-500 ms,降低约 75%

已验证存储规模

亿级别条记忆,可水平扩展无上限

同类方案多为百万至千万级

Token 节省

95%

较 Plan A(全量注入)节省约 95%

上述数据用于展示服务能力边界,实际效果会受到数据规模、查询方式、网络环境、模型配置和业务数据分布影响。以下是各维度的评测详情。

评测详情

检索准确率

评测基准:LoCoMo 数据集

LoCoMo 是当前记忆系统评测领域最具代表性的基准之一。与早期评测集只覆盖 3-5 轮短对话不同,LoCoMo 平均每条测试数据包含 300 轮对话、跨 35 个会话,贴近真实用户与 AI 助手长期交互的场景。

LoCoMo 原始定义了五类推理问答(单跳、多跳、时间推理、开放领域、对抗性问题),基于其中四类进行了评测。

评测维度

含义

日常对话中的典型场景

单跳推理

从单次会话中直接定位事实

"我上次说我喜欢喝什么来着?"

多跳推理

综合多个会话中的信息得出答案

"根据我的饮食偏好和体检报告,推荐一份午餐"

时间推理

理解时间线索和先后顺序

"我先说想换工作,后来又说留下了,现在的想法是?"

开放领域

结合用户历史信息与外部常识推理

"我说过我对花生过敏,沙爹酱能吃吗?"

评测结果:

记忆库方案

单跳推理

多跳推理

时间推理

开放领域

综合准确率

记忆存储服务

88.94%

90.78%

88.16%

75.00%

88.25%

Mem0

68.97%

61.70%

58.26%

50.00%

64.20%

在四类推理上表格存储记忆服务的准确率均高于 Mem0:单跳推理(直接检索单条事实)高出约 20 个百分点;多跳推理和时间推理场景差距更大,分别高出约 29 和 30 个百分点。当用户的问题需要 AI 把多次对话串联起来、理解时间先后做出判断时,表格存储记忆服务的检索质量明显更高。

说明

口径说明:表格存储记忆服务的评测数据来自 LoCoMo 全量 10 段对话、4 类推理题共 1540 题;答题采用 Mem0 官方最新的 LoCoMo 答题 Prompt,答题模型与裁判模型均为 qwen-max,并采用 Mem0 提供的宽松裁判。Mem0 的对比数据来自其公开评测结果。

检索延时

测试条件为单记忆库 120 万租户、1 亿+ 条记忆数据的超大规模场景,且不开启Rerank的场景。

opK

平均延时

P50 延时

P95 延时

5

164 ms

155 ms

269 ms

10

198 ms

174 ms

288 ms

50

234 ms

222 ms

384 ms

亿级数据量下 P50 延时稳定在 200 ms 左右,即使返回 Top50 结果,P95 也在 384 ms 以内。换个直观说法:即使一个百万日活 App 的所有用户记忆汇总到一个库里,每次对话中的记忆检索依然能在 200 毫秒内完成,用户几乎感知不到等待。如果开启Rerank,检索延时会增长200-300毫秒。

存储规模

单记忆库已验证支持 120 万租户、1 亿+ 条记忆的存储与检索。基于表格存储的分布式架构,系统支持水平扩展,无理论上限。无需按租户数量做分库分表的容量规划,业务增长时存储层自动跟上。

Token 成本

Plan A(每轮注入完整对话历史)vs Plan B(一次性抽取 + 每轮只注入检索到的记忆)。对话 Token 通过模型服务返回的 usage 字段精确统计;抽取 Token 使用生产环境的抽取 Prompt 复现计算,数据偏保守。

评测维度(基于 LoCoMo 4 段对话)

Plan A

Plan B

单次对话 Token:单题平均对话 token

24,985

823

记忆抽取 Token:一次性抽取 token(4 段)

---

320,667

全量对话含上下文 Token:按 4 段对话共 827 题外推的总消耗

20,662,543

1,001,153

纯对话节省

---

96.7%

含抽取总节省

---

95.1%