实体与知识图谱
实体是记忆库在存储时自动识别的人、组织、地点、概念等命名元素。每条记忆中提到的实体不会被单独存储,而是作为知识图谱的节点,将分散在不同记忆中的相关信息连接起来。
例如,当多条记忆中都提到了"Alice",系统会识别出这是同一个实体,并将所有提到 Alice 的事实、经验和观察关联在一起。这样,当检索"Alice 的项目情况"时,即使某些记忆本身没有直接提到 Alice,也能通过实体关系被发现。
实体的产生
自动识别
在Retain 存储阶段,系统会自动从写入内容中识别并提取实体,无需手动标注。常见的识别类型包括:
| 类型 | 示例 |
|---|---|
| 人物 | Alice、Dr. Smith、Bob Chen |
| 组织 | Google、百度、MIT |
| 地点 | 北京、巴黎、硅谷 |
| 技术与概念 | React、PostgreSQL、微服务架构 |
| 项目与产品 | Atlas 项目、iPhone 17 |
实体解析
同一个实体可能以不同名称出现在不同记忆中,系统会自动将它们归一化为同一个实体:
| 存储内容 | 识别结果 |
|---|---|
| "Alice 参与了前端重构" | Alice |
| "Alice Chen 提交了代码评审" | Alice(与上面同一人) |
| "Alice C. 在周会上提出了方案" | Alice(与上面同一人) |
这样,检索"Alice 的贡献"时,所有提到 Alice、Alice Chen、Alice C. 的记忆都会被返回。
上下文消歧
当不同的人拥有相同名字时,系统会根据共现模式进行区分。例如,如果"Alice"多次与"Google"和"Stanford"同时出现,那么一条新的提到"Alice"和"Google"的记忆,大概率指的是同一位 Alice,而非另一位同名者。
手动指定实体
如果某些实体对业务很重要,但可能被模型遗漏或称呼不一致,可以在存储时通过 entities 参数显式指定:
1curl "$MEMORY_API_BASE_URL/memories/retain" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bank_id": "'"$MEMORY_BANK_ID"'",
6 "items": [{
7 "content": "项目 Atlas 使用 Kubernetes 部署,负责人是 Bob Chen。",
8 "entities": [
9 {"text": "Atlas", "type": "PROJECT"},
10 {"text": "Bob Chen", "type": "PERSON"}
11 ],
12 "tags": ["project:atlas"]
13 }]
14 }'
手动指定的实体会与自动识别的实体合并,确保关键实体始终被正确识别和关联。
实体标签
实体标签是一种自定义的分类标签体系,在存储时由模型按定义的规范自动提取。提取出的标签值会作为实体存入知识图谱,因此不同记忆中相同标签的值会自动关联。
| 配置项 | 说明 |
|---|---|
| key | 标签组名称,如 tech_stack、priority |
| type | 取值方式:value(单值)、multi-values(多值累积)、text(自由文本)、map(键值对) |
| values | 可选的受控取值列表,模型只从列表中选择 |
| tag | 设为 true 时,提取的标签值同时写入记忆的 tags,支持在检索时按标签过滤 |
示例:定义技术栈和优先级标签
1{
2 "entity_labels": [
3 {
4 "key": "tech_stack",
5 "type": "multi-values",
6 "values": [
7 {"value": "react", "description": "React 前端框架"},
8 {"value": "python", "description": "Python 编程语言"},
9 {"value": "kubernetes", "description": "Kubernetes 容器编排"}
10 ]
11 },
12 {
13 "key": "priority",
14 "type": "value",
15 "tag": true,
16 "values": [
17 {"value": "high", "description": "紧急或阻塞"},
18 {"value": "low", "description": "非紧急"}
19 ]
20 }
21 ]
22}
存储时模型会自动分类——如果内容涉及 React,会提取 tech_stack:react;如果标记为紧急,会提取 priority:high。由于设置了 tag: true,priority:high 还会作为标签写入记忆,检索时可以通过 tags: ["priority:high"] 精确过滤。
实体标签适用于需要统一分类体系的场景,例如按技术栈、优先级、业务领域或客户类型对记忆进行结构化管理。
知识图谱
实体不是孤立存在的。系统在存储时自动构建知识图谱,通过四种连接将记忆关联起来:
| 连接类型 | 说明 | 检索时的价值 |
|---|---|---|
| 实体连接 | 提到同一实体的所有事实互相连接 | 查询"Alice 的项目"可以找到所有与 Alice 相关的事实 |
| 时间连接 | 时间相近的事实互相连接,越近连接越强 | 查询"当时还发生了什么"可以找到同一时期的相关事件 |
| 语义连接 | 含义相近的事实互相连接 | 查询"类似的技术方案"可以找到语义相关的记忆 |
| 因果连接 | 明确的因果关系被追踪 | 查询"为什么会这样"可以沿因果链追溯原因 |
因果连接示例: 当记忆中记录了"Alice 感到倦怠",同时记录了"她连续两周每天工作 12 小时",系统会建立因果连接。之后询问"Alice 为什么感到倦怠?"时,反思可以通过因果链找到原因。
图谱检索
在Recall 检索阶段,"知识图谱"是四路并行检索策略之一(语义、关键词、图谱、时间)。图谱检索从查询中识别实体作为起点,沿着实体关系向外探索,发现语义不远但结构相连的信息。
典型场景:
| 查询 | 图谱检索路径 | 发现的内容 |
|---|---|---|
| "Alice 参与了哪些项目?" | Alice → 实体连接 → 项目 Atlas、项目 Beacon | 所有 Alice 关联的项目事实 |
| "Alice 的团队成员有哪些?" | Alice → 项目 Atlas → Bob、Carol | 即使 Alice 和 Bob 从未被同时提及,也能通过共享项目发现 |
| "项目 Atlas 有什么风险?" | Atlas → 延迟部署 → 依赖阻塞 | 通过因果连接追溯到风险根因 |
与语义检索的互补: 语义检索擅长找到"意思相近"的内容,但如果两段记忆措辞完全不同、只是因为涉及同一个实体而相关,语义检索可能漏掉——图谱检索恰好弥补这个缺口。
使用建议
- 保留原始内容:不要在存储前预总结或精简,否则实体关系、时间标记和因果上下文会丢失,图谱质量下降
- 用实体标签统一分类:定义业务相关的标签体系(如
tech_stack、priority、domain),让模型按规范分类,而非自由发挥 - 查询中保留专有名词:检索时在 query 中写入人名、项目名、产品名等,帮助图谱检索定位正确的实体起点
- 关键实体可手动指定:对业务重要但可能被模型遗漏的实体,存储时通过
entities参数显式传入 - 关闭自由形式提取需谨慎:记忆库配置中"自由形式实体提取"默认开启,关闭后模型只会提取你定义的实体标签,可能遗漏人物、组织等重要实体
评价此篇文章
