Conversation Import: Bring Your Memory From Anywhere
neuromem team
你和 ChatGPT 聊了一年,积累了数百条对话。里面包含你的工作偏好、技术决策、生活习惯。然后你换到了 Claude,或者开始用一个新的 AI Agent——这些记忆就全部丢失了。
neuromem 的对话导入功能解决的就是这个问题:把你在其他平台积累的对话历史变成结构化的记忆。
对话导入全流程
① 上传对话文件
支持 ChatGPT、Claude、微信、Markdown、通用 JSON
② 自动检测格式
智能解析,无需手动指定
③ 后台异步处理
逐条提取,可随时查看进度
④ SHA-256 去重
自动跳过已导入的重复对话
⑤ 结构化记忆入库
事实 + 事件 + 知识图谱三元组
支持的平台
neuromem 目前支持以下平台的对话导入:
- ChatGPT:直接上传
conversations.json导出文件。解析器能处理 ChatGPT 特有的 mapping 树结构,按时间排序提取消息。 - Claude:支持包含
chat_messages的 JSON 导出格式,自动识别human/assistant角色映射。 - 微信:支持常见的微信聊天记录导出格式,包括 "日期时间 + 昵称 + 内容" 和 "昵称 + 日期时间 + 内容" 两种模式。
- Markdown:支持多种 Markdown 对话格式(浏览器扩展导出),自动识别
## User/## Assistant标题格式、**角色名:**粗体格式等。 - 通用 JSON:标准的
conversations+messages结构。
系统会自动检测上传文件的格式,无需手动指定。
异步处理流程
导入大量对话可能涉及数百甚至数千条消息,因此整个流程是异步执行的:
- 上传与解析:用户上传文件,系统自动检测格式并解析为标准对话结构
- 任务创建:创建后台导入任务,立即返回任务 ID
- 逐条提取:后台逐条处理 user 消息,每条消息独立触发记忆提取
- 状态跟踪:用户可以随时查询导入进度——已导入数量、已完成提取数量、跳过和失败数量
导入过程中,每条 user 消息会调用 nm.ingest 并开启 auto_extract,自动提取事实、事件和知识图谱三元组。assistant 消息也会被存储,但不触发提取。
去重机制
重复导入是一个常见问题——用户可能不确定之前是否已经导入过某个文件。neuromem 通过内容哈希(SHA-256)实现去重:
def compute_conversation_hash(conv):
content = "|".join(f"{m.role}:{m.content}" for m in conv.messages)
return hashlib.sha256(content.encode()).hexdigest()
每条对话的所有消息内容会被拼接后计算哈希值。如果一条对话的哈希值已经出现过,系统会自动跳过它,避免重复导入。
智能文本解析
除了标准格式的文件上传,neuromem 还支持粘贴文本的智能解析。系统会按优先级依次尝试:
- 规则解析:尝试 Markdown 对话格式、微信格式、
Role: content格式 - LLM 兜底:如果规则无法识别,使用 LLM 分析文本结构,提取对话
即使是非标准格式的对话记录,也能被正确解析。
导入后的效果
导入完成后,对话中的内容会被自动提取为三种类型的记忆:
- 事实(Fact):离散的、可验证的信息,如 "用户在 Google 工作"、"用户喜欢用 pnpm"
- 事件(Episode):绑定时间的一次性事件,如 "2024 年 2 月参加了 Python meetup"
- 知识图谱三元组(Triple):实体间的关系,如 "用户 -> 使用 -> TypeScript"
导入 200 条 ChatGPT 对话后的记忆分布
真实用户导入数据的典型分布
这些记忆会进入 neuromem 的记忆系统,可以被 recall 语义搜索到,也可以在后续的 digest 中被用来发现行为模式。
取消导入
如果导入了错误的文件,或者想要中止一个耗时较长的导入任务,可以随时取消。取消操作会停止后续对话的处理,并尝试取消正在进行的提取任务。
实际应用
对话导入最典型的使用场景是"冷启动":当用户第一次开始使用 neuromem 时,导入历史对话可以让系统快速建立对用户的理解,而不需要从零开始积累。
一个有趣的用法是导入微信群聊记录——让 AI 理解你和朋友们的互动模式、共同话题和沟通风格。这些在传统 AI 记忆系统中是完全无法获取的信息。