上下文服务(Context0)提供完全兼容 Mem0 API 的长期记忆(Agent Memory)服务,让 AI Agent 跨会话记住用户偏好与业务事实,已有 Agent 零改造迁移。本文介绍长期记忆的能力边界、三层记忆数据模型、记忆作用域与生命周期,以及记忆写入、检索、装配、管理与晋升的 API 概览。
功能简介
AI Agent 每次会话结束后会「失忆」,上一轮对话中确认过的技术选型、用户偏好与业务约定无法延续到下一轮。长期记忆让 Agent 跨会话记住用户偏好与业务事实:对话写入后,Context0 自动蒸馏出结构化事实与实体画像,后续会话按需召回。
Mem0 API 兼容性
已使用 Mem0 的项目可以直接切换到 Context0,不需要改代码。Context0 完全兼容 Mem0 v1 全部 7 个端点(/v1/memories 的增删改查、搜索与清空)。唯一差异:DELETE /v1/memories 对应 DELETE /v1/memories/clear。
Context0 还提供 V3 增强端点,兼容 Mem0 v1.1 SDK:
V3 端点 | 说明 |
| 带去重的记忆写入,返回 |
| 信封响应 |
| 请求体过滤 + 分页信封响应 |
核心概念
三层记忆模型
对话写入后,Context0 自动完成三层蒸馏。可以类比为:L2 是录音笔(完整录下全部内容),L1 是笔记本(提取关键信息),L0 是人物档案(一页纸了解一个人)。
三层蒸馏的数据流向如下:
对话写入 ──► L2 原始对话 ──LLM 抽取──► L1 原子事实 ──实体识别──► L0 实体画像
(不可变,溯源) (单条事实,带时效) (结构化实体卡)层级 | 是什么 | 特性 | 示例 |
L2 原始对话 | 完整对话本体 | 不可变,永久保留,用于溯源与审计 | 用户和 Agent 逐字逐句的消息 |
L1 原子事实 | LLM 从对话中提取的事实 | 带置信度与时间窗( | “用户偏好 TypeScript”、“目标内存 < 50MB” |
L0 实体画像 | 结构化档案卡(约 150 token) | 可聚合、可演化,支持关系图谱 |
|
Token 经济性:一个用户累计 1000 句对话(约 30K token),经两次蒸馏后压缩至约 0.75K token 的 L0 画像,信息密度远高于散落的原始对话。
记忆作用域
每条记忆都归属一个作用域,作用域决定记忆的可见范围与生命周期:
作用域 | 范围 | 生命周期 | 典型用途 |
| 单个会话 | 随会话结束而归档 | 当前任务上下文、临时偏好 |
| 同一终端用户 | 长期保留,跨会话可召回 | 技术栈偏好、个人习惯、历史决策 |
| 整个工作空间 | 长期保留,工作空间内所有成员可见 | 团队约定、项目规范、共享知识 |
session 作用域的记忆在会话结束后仍被保留在 L2 层,但只有 user 和 workspace 级别的 L1 事实才会出现在跨会话召回结果中。
记忆生命周期

一条记忆从写入到演化,经历以下阶段:
写入 → 异步蒸馏(L2→L1→L0) → 检索召回 → 热度衰减/失效标记 → Dream 夜间演化阶段 | 说明 |
写入 | 通过 |
异步蒸馏 | 后台 LLM 从 L2 提取 L1 原子事实,再聚合为 L0 实体画像 |
检索召回 | 向量 kNN + BM25 词法两路融合,RRF 排序后取 top-k |
热度衰减 | 长期未被召回的记忆自然降权,置顶记忆不受衰减影响 |
Dream 演化 | 夜间自动执行:衰减过时偏好、检测矛盾记忆、归纳实体画像 |
准备工作
调用本文示例前,请确认以下准备项已就绪:
准备项 | 说明 |
Context0 服务 | 已开通实例,或使用团队已部署的服务 |
API Key | 数据面 API 使用 User Key;管理操作使用 Owner Key |
连接地址 | 数据面端口 |
下文示例统一使用以下环境变量,请将占位符替换为您自己的地址与 Key:
export API_KEY="<YOUR_API_KEY>" # 数据面用 User Key
export HOST="http://<your-endpoint>" # 数据面地址(端口 4040)
export OWNER_KEY="<YOUR_OWNER_KEY>" # 管理操作用 Owner Key
export OPS_HOST="http://<your-endpoint>:8080" # 管理面端口开通实例、获取连接地址与签发 API Key 的步骤,请参见快速入门。Admin Key、Owner Key、User Key 三级权限体系的完整说明,请参见权限与访问控制的API Key 三级体系章节。
API 概览
本节给出长期记忆相关端点的调用概览,帮助您判断哪个能力对应哪个接口。
写入记忆
方式一:ingest 接口(推荐)
POST /v1/context/ingest 是上下文管道的入口,写入对话的同时自动触发记忆抽取、去重和来源索引。
curl -X POST "$HOST/v1/context/ingest" \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{
"session_id": "sess_001",
"user_id": "user_001",
"messages": [
{"role": "user", "content": "项目偏好 TypeScript,ORM 选 Prisma"},
{"role": "assistant", "content": "好的,已记下技术栈选型"}
]
}'参数 | 必填 | 说明 |
| 是 | 会话 ID,相同 ID 的消息归入同一会话 |
| 否 | 终端用户标识;User Key 自动绑定自身 |
| 是 | 消息数组,每条含 |
ingest 写入后,后台异步执行记忆抽取。新记忆需数秒后才可通过搜索检索到。
方式二:Mem0 兼容接口
POST /v1/memories 直接从一段对话提取记忆,响应中包含提取结果。
curl -X POST "$HOST/v1/memories" \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "鉴权方案选 NextAuth"}
],
"user_id": "user_001",
"metadata": {"source": "manual"}
}'响应示例:
{
"results": [
{
"id": "mem_124",
"memory": "鉴权方案选 NextAuth",
"subject": "鉴权",
"validity": "durable",
"event": "ADD"
}
]
}检索记忆
语义搜索:
POST /v1/memories/search(V1、V2、V3 三个版本可选)。curl -X POST "$HOST/v2/memories/search" \ -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \ -d '{ "query": "技术栈选型", "user_id": "user_001", "limit": 10 }'参数
必填
说明
query是
查询文本,按语义匹配相关记忆
user_id否
限定用户;User Key 自动绑定自身
limit否
返回条数
[1,200],默认 10(别名top_k亦可)cosine_threshold否
相似度下限
[0,1],V1/V2 默认 0.2,V3 默认 0.1vector_only否
true时仅向量召回,关闭 BM25filters否
时间范围等附加过滤
三个版本的区别:
路径
L1 事实
L2 源文本
响应格式
POST /v1/memories/search返回
不返回
裸 JSON 数组
POST /v2/memories/search返回
返回(默认开启)
裸 JSON 数组
POST /v3/memories/search返回
返回
{"results": [...]}信封说明V3 端点与 Mem0 v1.1 SDK 对齐,
user_id等实体参数推荐放在filtersmap 内传递。获取单条记忆:
GET /v1/memories/{id}。curl "$HOST/v1/memories/mem_123" -H "X-API-Key: $API_KEY"
在对话中使用记忆
通过 assemble 自动注入(推荐)
POST /v1/context/assemble 是 Agent 集成的核心端点——按查询召回相关记忆与知识,在 Token 预算内精选,输出结构化 prompt_blocks,直接拼入 LLM 的 system prompt。
curl -X POST "$HOST/v1/context/assemble" \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{
"session_id": "sess_002",
"user_id": "user_001",
"query": "如何部署应用?",
"token_budget": 4000,
"include_memories": true,
"recall": {"top_k": 8}
}'参数 | 必填 | 说明 |
| 与 | 会话 ID |
| 与 | 终端用户标识 |
| 否 | 召回查询;为空时触发零查询冷启动 |
| 否 | 输出 token 预算 |
| 否 | 布尔值,是否包含记忆召回 |
| 否 | 布尔值,是否包含知识库召回 |
| 否 | 指定召回的知识库 ID 列表 |
| 否 | 召回条数 |
调用 assemble 后,Context0 自动完成召回与预算分配。Agent 将 prompt_blocks 注入 LLM 即可。
响应中 prompt_blocks 包含按优先级排列的上下文块:
{
"code": 0,
"data": {
"prompt_blocks": [
{
"role": "system",
"tag": "user_profile",
"content": "用户偏好 TypeScript + Prisma,鉴权选 NextAuth",
"tokens": 30,
"sources": []
},
{
"role": "system",
"tag": "knowledge",
"content": "部署流程:1. 准备 .env ...",
"tokens": 120,
"sources": ["runbook.pdf"]
}
]
}
}通过 Mem0 兼容接口手动注入
如果不使用 assemble,您也可以手动调用 /v1/memories/search 检索相关记忆,将结果拼接到 system prompt 中:
# 1. 搜索相关记忆
curl -X POST "$HOST/v1/memories/search" \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"query": "技术栈偏好", "user_id": "user_001", "limit": 5}'
# 2. 将返回的记忆内容拼入 system prompt,发送给 LLM管理记忆
记忆的查看、修改、置顶、失效标记与统计由以下端点提供:
操作 | 端点 | 说明 |
列表 |
| 分页列出记忆,支持 |
详情 |
| 获取单条记忆 |
更新 |
| 更新内容,生成新版本 |
删除 |
| 删除单条 |
置顶 |
| 高优先级,不参与热度衰减 |
取消置顶 |
| 恢复正常衰减 |
标记失效 |
| 召回时直接排除,而非降权 |
反馈 |
| 赞或踩,影响热度与 Dream 评估 |
编辑实体卡 |
| 修改 L0 画像的 |
溯源 |
| 查看产生该事实的原始对话 |
版本历史 |
| 查看历次修改 |
统计 |
| 记忆数量统计 |
清空 |
| 批量删除,不可逆 |
置顶记忆示例:
curl -X POST "$HOST/v1/memories/mem_123/pin" -H "X-API-Key: $API_KEY"标记失效示例:
curl -X POST "$HOST/v3/memories/mem_123/invalidate" -H "X-API-Key: $API_KEY"编辑 L0 实体卡示例:
curl -X POST "$HOST/v3/entity_cards/card_1_2_alice/edit" \ -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \ -d '{ "role": "资深后端工程师", "preferences": ["Java", "Spring Boot"], "attributes": {"domain": "分布式数据库"} }'
DELETE /v1/memories/clear不可逆,confirm必须为true。已失效的记忆不接受
feedback或update,返回 400。PUT /v1/memories/{id}请求体需包含data或metadata至少一项。
Dashboard 操作入口
除 API 外,您也可以在 Dashboard 中完成记忆的浏览、编辑与检索:
在 Dashboard 的记忆页面选择实体页签,可浏览所有 L0 实体卡并编辑
role、preferences、attributes等字段。在 Dashboard 的记忆页面选择搜索页签,输入查询文本后结果按相似度排序,支持时间范围筛选和反馈(赞或踩)。
高级功能
自定义蒸馏规则
蒸馏规则控制「从对话中提取什么、怎么提取」。您可以定义让 Context0 重点关注的内容类型。优先级链:ingest 请求的 custom_instructions > member 级规则 > workspace 默认规则 > 内置默认。
蒸馏规则的完整配置说明请参见使用指南的自定义蒸馏规则章节。
API参考
设置成员级规则(数据面,User Key):
curl -X PUT "$HOST/v1/memories/distill-prompt" \ -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \ -d '{ "custom_prompt": "重点提取技术栈选型和架构决策,忽略闲聊内容", "enabled": true }'设置 workspace 级规则(管理面,Owner Key):
curl -X PUT "$OPS_HOST/ops/distill-prompt" \ -H "X-API-Key: $OWNER_KEY" -H "Content-Type: application/json" \ -d '{ "custom_prompt": "提取技术决策、项目约定和团队规范", "enabled": true }'
Dashboard操作
在 Dashboard 的记忆页面选择蒸馏规则页签,可选择成员、编辑提示词、查看生效状态。
Dream 夜间演化
Dream 是 Context0 的后台演化引擎,定期自动执行以下任务:
偏好衰减:长期未被召回的偏好自动降权。
矛盾检测:发现同一主题的冲突记忆并标记。
实体归纳:从 L1 事实聚合生成或更新 L0 实体画像。
手动触发 Dream(Owner Key)示例:
curl -X POST "$HOST/v1/dream/run" \
-H "X-API-Key: $OWNER_KEY" -H "Content-Type: application/json" \
-d '{}'Dream 异步执行,返回 run_id。同一 workspace 同时只允许一个 Dream 作业运行。通过 GET /v1/dream/status 查看运行状态。
记忆晋升知识库
记忆晋升将同一主题下的高价值记忆(L1 事实)聚合为一篇知识库文档。生成的文档经人工审核后入库,之后像普通文档一样被检索和引用。端到端的场景化实践请参见让您的 Agent 越用越懂您的业务。
如时使用
某个主题的记忆反复出现,且对团队其他成员也有价值(如技术选型、排障经验)。
个人对话中沉淀出的领域知识,值得升级为团队共享文档。
Agent 积累了足够多同主题事实,手动整理成本高。
记忆晋升审核通过时,目标知识库下拉列表只显示您拥有「编辑者」权限的知识库。
操作示例
API参考
分为触发生成、查看状态、审核三步。
触发生成
curl -X POST "$HOST/v1/memory_promotions/generate" \ -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \ -d '{"topic": "总结本周架构决策", "target_member_id": 1}'参数
类型
必填
说明
topicstring
是
晋升主题或提示词
target_member_idlong
是
目标成员 ID,从谁的记忆中提炼
返回
{"code": 0}表示已提交,生成异步执行。查看状态
# 列表 curl "$HOST/v1/memory_promotions?page=0&pageSize=10" -H "X-API-Key: $API_KEY" # 详情 curl "$HOST/v1/memory_promotions/1" -H "X-API-Key: $API_KEY"详情响应的关键字段:
字段
说明
statusgenerating/pending_review/approved/rejected/generation_failedtitleLLM 生成的文档标题
contentMarkdown 正文
source_memory_ids被引用的记忆 ID 列表
target_kb_id审核通过后写入的知识库 ID
target_document_id入库后生成的文档 ID
审核(Owner Key,管理面)
# 通过 curl -X POST "$OPS_HOST/ops/promotion/approve" \ -H "X-API-Key: $OWNER_KEY" -H "Content-Type: application/json" \ -d '{"promotion_id": 1, "knowledge_base_id": 3}' # 拒绝 curl -X POST "$OPS_HOST/ops/promotion/reject" \ -H "X-API-Key: $OWNER_KEY" -H "Content-Type: application/json" \ -d '{"promotion_id": 1, "reason": "内容不够准确"}'
Dashboard操作
Tab 2 正文 上的完整操作流程(选择目标成员、生成、审阅疑问项、通过或拒绝)请参见使用指南的记忆晋升章节;
进入控制台侧边栏记忆蒸馏页面。
在手动触发晋升面板中选择目标成员,输入晋升主题(如“Python 性能优化”),单击生成。
等待状态从generating变为pending_review,单击列表行打开详情抽屉。
审阅生成的文档内容。如有疑问项(doubts),先解决疑问,也可直接编辑标题和正文。
单击通过 → 选择目标知识库 → 确认通过,或单击拒绝并填写原因。
审核通过时,下拉列表只显示你拥有编辑者权限的知识库。
晋升后效果
原始记忆保留:晋升不会删除或修改来源记忆,
source_memory_ids记录了引用关系。知识库新增文档:审核通过后,一篇新文档写入目标知识库,后续通过知识库检索路径召回。
状态可追溯:每条晋升记录保留完整审核链(生成、审核、入库),可通过列表接口按
status过滤查看。
数据安全
长期记忆涉及终端用户的对话内容与偏好画像,Context0 通过以下机制保障数据隔离与可审计:
安全机制 | 说明 |
Workspace 级物理隔离 | 索引按 Workspace 物理切分,跨 Workspace 数据完全不可见 |
Member 级权限控制 | User Key 只能访问自身绑定的 |
ES 查询强制隔离 | 所有 ES 查询强制携带 |
API Key 三级权限 | Admin Key(管理面)/ Owner Key(工作空间所有者)/ User Key(绑定终端用户) |
审计日志 | 记忆读写操作均记录审计日志 |
生产环境中,请为不同的 Agent 和终端用户分配独立的 user_id,避免记忆混淆。
常见问题
现象 | 处理方式 |
写入后搜索不到 | 蒸馏为异步过程,L1 事实需数秒后可检索。稍等片刻再试。 |
L0 实体卡未更新 | L0 更新频率较低(由 Dream 或实体识别触发),可调用 |
Mem0 SDK连接失败 | 确认 |
记忆检索结果不相关 | 调整 |
| 检查 |
清空记忆报400错误 | 请求 body 中 |
更新或反馈记忆报400错误 | 可能原因:①记忆已失效(invalidated),不可修改或反馈;②更新请求未包含 |
Dream报409错误 | 同一 workspace 已有运行中的 Dream 作业,等待完成后重试。 |