数据截至 (上游 commit 149589ae7e6b)
数据与心智模型:文档 / 记忆 / 画像 / 空间
30 秒导读: 本章确立 Supermemory 全书的词汇表和 API 边界。你会先分清四个核心名词——文档 / 记忆 / 画像 / 空间——分别是什么、字段长什么样;再看它们如何被一层叫
SupermemoryClient的"HTTP 门面"暴露成 9 个方法。后面每一章(MCP 服务器、中间件、Memory Tool、图可视化)都建立在这套词汇之上。
本章只讲**"数据是什么、API 长什么样"。它不讲** MCP 工具怎么注册(见 02)、不讲框架中间件(见 03)、不讲图怎么渲染(见 05)。
上游重构提示: MCP 侧的
src/client.ts已拆成src/server/client/index.ts(门面类)与src/shared/types.ts(Zod/TS 类型)两处,本章引用已随迁;「project(项目)」在产品语义上已改称 「space(空间)」(同一个 containerTag 概念,工具面叫listSpaces);旧x-sm-project请求头 与getProjects方法已移除,换成listContainerTags+ 活跃空间 DO(见 §5)。
1. 先建立心智模型:四个名词
Supermemory 的对外数据只有四类东西。先用一句话各自点破,再逐个深入。
| 名词 | 白话 | 一句话 |
|---|---|---|
| document(文档) | 你喂进去的原始内容 | 一篇 PDF / 网页 / 一段文本,进来后被处理成可检索的东西 |
| memory entry(记忆) | 从文档里抽取出的一条事实 | "用户偏好 TypeScript"——是文档的产物,不是文档本身 |
| profile(画像) | 把记忆聚合成的用户速写 | 两串字符串:稳定偏好 + 近期活动 |
| space(空间) | 一个隔离的记忆分区 | 用 container tag 圈起来,A 空间看不到 B 空间 |
一句话直觉: 把 document 当"原始档案"、memory 当"从档案里划出来的重点句"。你存的是档案,但 AI 助手日常检索、拼进上下文的,是那些重点句。
三者是包含关系——一个文档"生出"多条记忆:
document(原始内容)
└── memoryEntries: [
memory entry #1 ← 从内容抽出的一条事实
memory entry #2
memory entry #3
]
这个包含关系在类型里是直接写死的:DocumentWithMemories 接口就带一个
memoryEntries: DocumentMemoryEntry[] 字段(apps/mcp/src/shared/types.ts:94-104,
documentWithMemoriesSchema)。
2. 数据的三层形态
上面的四个名词里,document 和 memory 之间还有更细的层次。理解这三层,是读懂后面所有 API 返回值的前提。
2.1 三层是什么
第 1 层 document 一份原始内容(有 title / summary / type)
│
│ 处理管线抽取
▼
第 2 层 memory entry 一条事实(有 version / parentMemoryId / isLatest …)
│
│ 被检索时命中
▼
第 3 层 chunk / result 搜索时返回的片段(memory 或 chunk 二选一)
- document = 原始内容的容器,本身不参与相似度检索,只作为"这条记忆从哪来"的出处。
- memory entry = 真正被 AI 用的知识单元,带版本链(见 §3)。
- 搜索结果(
Memory) = 检索时命中的东西,可能是一条完整记忆(memory字段),也可能是文档的一个切片(chunk字段)——二者互斥。