Mnemon

August 30, 2026 · View on GitHub

English | 中文

本文档说明如何将历史聊天记录或外部上下文批量导入 Mnemon 的记忆图谱。


工作流概览

聊天导出 / Markdown -> LLM 提取提示词 -> memory_draft.json -> mnemon import <file>
  1. 将原始聊天记录或笔记导出为 Markdown 或纯文本。
  2. 将文本连同下方的参考提示词一起发送给 LLM,生成符合本文档格式的 memory_draft.json
  3. 运行 mnemon import memory_draft.json,Mnemon 自动完成去重、图谱边构建、 可用时的向量嵌入和生命周期评分。

导入文件格式(schema_version: "1"

{
  "schema_version": "1",
  "source": "chat-export",
  "insights": [
    {
      "content": "选择了 Qdrant 而非 Milvus 作为向量搜索引擎,主要原因是其过滤查询性能更好。",
      "category": "decision",
      "importance": 5,
      "tags": ["architecture", "search", "vector-db"],
      "entities": ["Qdrant", "Milvus"],
      "source": "agent",
      "created_at": "2024-03-15T09:30:00Z"
    },
    {
      "content": "用户偏好简洁的 API 响应,不希望看到多余的解释文本。",
      "category": "preference",
      "importance": 4,
      "tags": ["ux", "api"]
    }
  ],
  "edges": [
    {
      "source_index": 0,
      "target_index": 1,
      "edge_type": "causal",
      "weight": 0.7,
      "reason": "向量引擎选型决策影响了 API 响应设计偏好"
    }
  ]
}

字段说明

顶层字段

字段类型必填说明
schema_versionstring必须为 "1"
sourcestring整批导入的来源标签,如 "chat-export""manual"。单条 insight 可通过自身的 source 覆盖此值
insightsarray记忆节点列表,至少包含一项
edgesarray显式关系列表;Mnemon 的图引擎也会自动创建边,此处用于补充已知的强关联

insights 条目字段

字段类型必填约束说明
contentstring最多 8000 字符记忆文本
categorystring见下表,默认 general知识类型
importanceinteger1-5,默认 3重要程度;影响保留优先级和排序
tagsarray最多 20 项,每项最多 100 字符用于检索和过滤的自由标签
entitiesarray最多 50 项,每项最多 200 字符记忆中涉及的命名主体,如人名、项目名、工具、库或组织;会与 Mnemon 自动提取结果合并
sourcestring-覆盖顶层 source,表示该条记忆的具体来源
created_atstringRFC 3339 格式原始创建时间;省略时使用导入时间

category 可选值

适用场景
preference用户偏好、习惯、风格要求
decision已确定的技术或产品决策
fact客观事实、数据、限制、规格参数
insight推断、分析结论、经验总结
context项目背景、状态、约束条件
general其他不适合上述分类的记忆

importance 赋值建议

含义
5核心决策或强烈偏好,应长期保留
4重要上下文,通常需要保留
3一般记忆,默认值
2次要细节,后续可能被剪枝
1临时或低价值信息

edges 条目字段

字段类型必填约束说明
source_indexintegerinsights 数组的零基索引边的起点
target_indexinteger不能等于 source_index边的终点
edge_typestring见下表关系类型
weightfloat0.0-1.0,默认 0.5关系强度
reasonstring-说明该关系存在的原因,会作为边元数据保存

edge_type 可选值

含义
temporal时间顺序关系,事件 A 发生在事件 B 之前
causal因果关系,A 导致或影响 B
semantic语义相似关系,A 与 B 讨论同一主题
entity实体共现关系,A 与 B 涉及同一命名主体

使用命令

# 基本导入
mnemon import memory_draft.json

# 验证格式但不写入数据库
mnemon import --dry-run memory_draft.json

# 跳过去重检测,将所有条目作为新记忆插入
mnemon import --no-diff memory_draft.json

# 指定具体 store
mnemon import --store project-alpha memory_draft.json

输出示例

{
  "imported": 8,
  "updated": 1,
  "skipped": 2,
  "errors": 0,
  "edges_inserted": 3,
  "auto_pruned": 0,
  "auto_pruned_ids": [],
  "results": [
    {"index": 0, "id": "a1b2c3d4...", "content": "选择了 Qdrant...", "action": "added"},
    {"index": 1, "id": "e5f6a7b8...", "content": "用户偏好简洁的...", "action": "skipped"}
  ]
}
字段说明
imported新增的记忆数量
updated替换了已有冲突记忆的数量
skipped检测为重复而跳过的数量
errors写入失败的数量;导入允许部分成功,脚本调用方应检查此字段是否为 0
edges_inserted成功插入的显式边数量
auto_pruned超出容量限制后自动删除的记忆数量
auto_pruned_ids被自动软删除的准确 ID;每个 ID 都有对应的 prune oplog 记录

参考提示词(用于生成 memory_draft.json

将以下提示词和你的聊天记录一起发送给 LLM:

你是一个记忆提取助手。请从下方的聊天记录或文档中提取有价值的长期知识片段,
生成一个符合 Mnemon memory draft 格式(schema_version: "1")的 JSON 文件。

## 提取规则

1. 每条 insight 必须是独立、完整的知识单元,不依赖原始上下文即可理解。
2. 去除闲聊、重复表述和无长期价值的内容。
3. 如果同一主题多次出现,合并为一条最完整的表述,不要重复。
4. 按以下优先级分配 importance:
   - 5:关键架构决策、明确的用户核心偏好
   - 4:重要上下文、反复出现的模式
   - 3:一般事实和背景信息
   - 2:细节或一次性提及的内容
   - 1:临时状态或极低价值信息
5. entities 填写记忆中出现的具体名词:人名、项目名、工具/库名、组织名、
   API、服务或产品名。
6. tags 使用小写英文,用连字符分隔词语,如 "vector-db"、"api-design"。
7. 如果能从上下文推断出原始时间,在 created_at 中填写 RFC 3339 格式时间。
8. edges 只填写显而易见的强关联关系,不要过度连接。

## 输出要求

- 只输出 JSON,不要有任何解释文字。
- 严格遵守以下 schema:

{
  "schema_version": "1",
  "source": "chat-export",
  "insights": [
    {
      "content": "...",
      "category": "preference|decision|fact|insight|context|general",
      "importance": 1-5,
      "tags": ["tag1", "tag2"],
      "entities": ["Entity1", "Entity2"],
      "created_at": "2024-01-15T09:30:00Z"
    }
  ],
  "edges": [
    {
      "source_index": 0,
      "target_index": 1,
      "edge_type": "causal|semantic|temporal|entity",
      "weight": 0.0-1.0,
      "reason": "..."
    }
  ]
}

## 待处理内容

[在此粘贴你的聊天记录或文档]

常见问题

Q: created_at 必须填吗?
不必须。省略时 Mnemon 使用导入时间。如果原始聊天记录有时间戳,建议填写以保留历史顺序。

Q: 导入后如何验证结果?
运行 mnemon logmnemon statusmnemon search <关键词> 确认导入结果。

Q: edges 数组必须填吗?
不必须。Mnemon 会自动创建时序、语义和实体边。显式 edges 用于指定 LLM 能明确判断的强关联关系。

Q: 如何分批导入大型聊天记录?
将聊天记录按时间段或主题切分为多个文件,依次执行 mnemon import。重复内容会被内置 diff 自动跳过,除非使用 --no-diff

Q: 可以导入非英文内容吗?
可以,contenttagsentities 均支持 Unicode 文本。