最近做了件事,花了一整天。
不是什么复杂的东西——写了一个脚本,把我和 AI 的所有对话记录,自动同步到了 Obsidian 知识库里。
01 为什么想做这件事
我用 AI 写代码、写文章、做产品、讨论选题,几乎每天都在跟它聊。说实话,很多对话的质量非常高。不是指 AI 给的答案有多对,而是整个对话过程本身非常有价值。
比如有一个项目从零到上线的讨论,我的需求是怎么一步步变的,试过什么方案,为什么放弃了,最后选了哪个方向。这些过程文件中往往只留下最终代码,中间的权衡全丢了。
再比如讨论一篇文章的选题,我先说了什么,AI 追问了什么,我后来又补充了什么判断。这些来回本身就是思考的记录,但它散在 AI 对话框里,没人会回去翻。
我以前的做法是:聊完觉得有用,复制粘贴到笔记里。但大部分时候聊完就聊完了,再也没打开过。时间一长,三四十个会话堆在那里,翻都懒得翻。
我意识到一个问题——==我和 AI 的对话,是我每天思考最密集的产物,但我几乎没有真正保存过它。==保存文章、保存代码、保存笔记,但从不保存对话。文章和代码是结果,对话其实是整个过程。
02 怎么做到的
有了这个判断,我就想要一个自动化的方案,能每天把 AI 对话同步到知识库,不用我手动复制粘贴。
我的 Obsidian 知识库里有一个 01_Sources/AI对话/ 目录,专门用来放原始材料。所以输出目标很清楚:每一条 AI 会话,生成一张 Markdown 卡片,放在这个目录里。

同步后的 AI 对话目录,每张卡片就是一次完整会话
但问题来了——AI 的对话存在哪?
我平时用两个 AI 工具:Codex(VS Code 里的 AI 编辑器)和 WorkBuddy。它们的对话存储格式完全不同。
先说 Codex。它的会话信息存在 ~/.codex/state_5.sqlite 这个 SQLite 数据库里,里面有一张 threads 表,记录了每个会话的标题、模型、创建时间、工作目录。但对话内容不在数据库里,存在 ~/.codex/sessions/ 目录下的 rollout-*.jsonl 文件里。JSONL 就是一行为一个 JSON 对象,按时间顺序排列。每一行标记了 type,区分用户消息、AI 回复、工具调用。
所以 Codex 的处理逻辑就是:从 SQLite 读会话元信息,找到对应的 rollout 文件,解析 JSONL 内容,生成 Markdown 卡片。
然后是 WorkBuddy。它的架构不太一样。会话元数据存在 ~/.workbuddy/workbuddy.db 的 sessions 表里,但对话 transcript 在 ~/.workbuddy/projects/ 目录下,按项目分目录,每个 session 对应一个 {sessionId}.jsonl。JSONL 格式类似,每行也有 type 字段:message、reasoning(AI 推理过程)、function_call(工具调用)。
核心逻辑是一致的——==从 AI 工具的本地存储里找到会话文件,解析成结构化的对话记录,转为 Markdown 卡片。==
03 两个关键问题:太长和更新
最长的一条 WorkBuddy 会话 transcript 有 4MB,对话几十轮,单条 AI 回复动辄上万字。如果全部保留,每张卡片会大到 Obsidian 打开都卡。
我的策略是按角色区别对待:
- ==用户消息不截断==。用户的提问是最高价值的内容,再长也全文保留。
- AI 回复按长度分三档:6000 字以内全文保留;6000~15000 字保留头尾去中间;超过 15000 字只保留开头分析和结尾输出。
另一个问题是对话持续更新。一个会话今天聊了,明天可能继续。如果脚本每次运行都重新生成卡片,之前写过的笔记、标注全丢了。
我的方案是跨天增量同步:卡片头部用 YAML frontmatter 记录 transcript_mtime(transcript 文件的最后修改时间)。每次运行时对比当前 mtime 和记录值,有变化才重新生成。没变化就跳过,一秒都不花。
整个脚本最后用 Windows 定时任务每天 10 点自动执行,pythonw.exe 静默跑,不弹窗口,不输密码。

一张对话卡片在 Obsidian 中的效果——完整保留了用户提问和 AI 回复的对话过程
实现过程中遇到了一些细节问题(比如 mtime 精度踩坑、pythonw 下 stdout 崩溃),不过都修掉了,不是重点。
真正让我觉得这件事值得做的,是同步上线后的一周里,我反复用到这些对话记录的地方。
04 场景一:写文章的素材库
我写公众号文章,最头疼的不是"写不出来",而是"想不起来"。
很多文章的起点并不是一个完整的选题,而是跟 AI 聊着聊着冒出来的想法。比如这篇"我把对话存进知识库"的文章,最初的讨论发生在两天前——在 WorkBuddy 里跟 AI 讨论知识库结构怎么改、对话怎么存、格式怎么定。讨论过程中我提了一个观点:"对话才是思考过程,文章只是结果。"AI 追问了我好几轮——"那保存对话的价值到底是什么?""你以前试过什么方案?""为什么不行?"
这些追问直接变成了文章第一部分的素材。如果没有那天的对话卡片,我写这篇文章时只能凭记忆,很多细节肯定漏了。
==现在我的做法是:想写文章的时候,先去 AI对话/ 里搜一下,看最近有没有聊过相关话题。==有,就直接引用对话里的思考过程,比从零开始写顺畅得多。
05 场景二:项目决策的回溯分析
做项目的时候,很多决策是当时拍脑袋下的。过了一周回头看,可能已经忘了为什么选 A 不选 B。
短视频工作流就是典型的例子。我跟 AI 讨论过至少十轮关于"配图和口播文本怎么对齐"的问题:最早用 2-gram 文本相似度匹配,后来试了 whisper 时间戳对齐,都不理想,最后换成了字符比例分配。
这些讨论散在三四次不同时间的会话里。以前想看决策过程,只能凭记忆回忆"好像有一次聊过这个"——根本找不到。现在直接在 Obsidian 搜"口播对齐"或者"字幕时间戳",所有相关讨论瞬间列出来。

在 Obsidian 中搜索"口播对齐",所有相关对话卡片一次列出
更关键的是,通过这些对话能回看自己当时的思维轨迹:我为什么会觉得 2-gram 方案可行?看到什么文档?踩了什么坑?这些信息写代码的时候不会记录,但对话里有。
==我现在做项目复盘的习惯变了——打开关联的几张对话卡片,一页一页翻过去,比看代码提交日志更接近真实的决策过程。==
06 场景三:发现自己的思维盲区
这是最意外的收获。
有一天翻之前的对话卡片,发现一个模式:我跟 AI 讨论需求时,总是先说"我想要一个……",然后 AI 问"这个场景是什么?目标用户是谁?"——我答不上来。同样的情景出现了三次:做微信小程序、做短视频工具、搭这个知识库。每次都是急着动手,被 AI 一问才发现需求没想清楚。
如果没有对话记录,我不会意识到这个模式。单个对话看,只会觉得"那一次没想清楚"。但三张卡片排在一起,模式就浮出来了——==我习惯先启动、再定义问题,而不是先定义清楚再动手。==这个认知本身就是一个值得写的文章选题。
还有一次更直接的:翻到一张讨论"做副业要不要追求专业"的卡片,发现 AI 提了一个我完全没接茬的问题:"你定义的专业是什么?谁的标准?"我直接跳过去继续说自己的。因为对话被完整记录下来了,我才看见这个细节。我的第一反应不是回答,是回避。这个信号如果不是事后回看,根本抓不住。
回头看,这个脚本做的事情很简单——把 AI 对话从 JSONL 转成 Markdown。但它的价值不在于技术,而在于==让"对话"这种最高频、最容易被忽略的思考产物,真正变成了可检索、可回溯的知识资产。==
以前跟 AI 聊完就完了,现在聊完后第二天早上,知识库里自动多一张卡片。想找某个项目的讨论过程,不用凭记忆翻 AI 对话框,直接在 Obsidian 搜索就行。
这东西不复杂,但用了之后,才觉得"之前怎么没做"。
如果你也用 AI 写东西、做项目,可以想想:你跟 AI 的那些对话,现在还在哪儿?