我把和AI的所有对话,都存进了自己的知识库
原始來源與檔名:2026-07-09T093825+0800-我把和AI的所有对话,都存进了自己的知识库.md
SOURCE | 資訊源評估
- 準確性:中 - 個人實戰經驗分享,技術細節(SQLite + JSONL 雙層存儲、mtime 增量同步)具體可信且可複現,但無第三方引用、未涵蓋工具改版的長期維護成本
- 易理解性:高 - 敘事線清晰,把「為什麼→怎麼做→用了之後」串成一條線,技術與場景交織,非技術讀者也能跟上價值判斷
- 閱讀策略建議:聚焦三件事——①第 01 章的價值判斷(對話是過程,文章是結果);②第 02~03 章的工程方案(存儲解析、截斷、增量同步);③第 06 章的意外收穫(思維盲區浮現)。技術讀者細讀 02/03,知識管理讀者細讀 01/06。
NAPKIN | 餐巾紙
餐巾紙公式
對話 = 思考過程;過程不存檔 = 知識最大浪費;腳本把 JSONL 轉 Markdown 卡片,過程即資產 作者主張每天與 AI 的對話是「最高頻、最密集的思考產物」,卻從不被保存。用一個 Python 腳本把 AI 工具本地的 SQLite 元資訊 + JSONL transcript 解析成 Obsidian 卡片,配合截斷與增量同步,讓過程變成可檢索、可回溯的知識資產。
一句話
作者寫腳本把 Codex/WorkBuddy 的 AI 對話自動同步進 Obsidian,意外發現對話是最高頻卻最被忽略的思考產物——回看後浮現出寫作素材、決策脈絡,甚至自己的思維盲區。
餐巾紙草圖
(ASCII 圖,方框禁止畫右側直線)
┌──────────────────────────────────────
│ AI 工具本地存儲(資料源)
│ Codex: ~/.codex/state_5.sqlite (threads 表)
│ + ~/.codex/sessions/rollout-*.jsonl
│ WorkBuddy: ~/.workbuddy/workbuddy.db (sessions 表)
│ + ~/.workbuddy/projects/{proj}/{sid}.jsonl
└──────────────────────────────────────
│
▼ 解析 JSONL(每行 type 區分角色)
┌──────────────────────────────────────
│ 處理腳本(Python)
│ ├─ 按角色截斷:用戶全文 / AI 分三檔
│ └─ 增量同步:YAML transcript_mtime 比對
└──────────────────────────────────────
│
▼ Windows 定時任務,每天 10:00,pythonw 靜默
┌──────────────────────────────────────
│ Obsidian 01_Sources/AI對話/
│ 一個會話 = 一張 Markdown 卡片
└──────────────────────────────────────
│
▼ 三大價值浮現
┌──────────────────────────────────────
│ 寫作素材庫 / 決策回溯 / 思維盲區
└──────────────────────────────────────
ROUND 1: SKELETON | 骨架掃描
- 核心問題:如何讓散落在 AI 對話框、聊完即棄的思考過程,變成可檢索、可回溯的知識資產?
- 核心答案:寫腳本把 AI 工具本地存儲的對話(SQLite 元資訊 + JSONL transcript)自動同步成 Obsidian Markdown 卡片,配合「按角色截斷」與「mtime 增量同步」兩個工程機制,最終在三個實戰場景驗證價值。
- 論證結構:問題導向 + 案例驅動(先確立「對話是思考過程」的價值判斷 → 給技術方案 → 用三個實戰場景反向驗證價值 → 昇華到「過程即資產」)
章節骨架
- 01 為什麼想做這件事:對話是思考過程,文章/代碼只是結果;過程比結果更珍貴,卻從不被保存(複製貼上不可持續)。
- 02 怎麼做到的:Codex 用 SQLite(threads 表)+ rollout JSONL;WorkBuddy 用 workbuddy.db(sessions 表)+ projects JSONL;統一邏輯是「找會話檔 → 解析 → 轉 Markdown」。
- 03 兩個關鍵問題:太長和更新:太長用「按角色分檔截斷」;更新用「transcript_mtime 增量同步 + Windows 定時任務」。
- 04 場景一:寫文章的素材庫:寫作瓶頸不是「寫不出來」而是「想不起來」;AI 的追問直接變成文章第一部分素材。
- 05 場景二:項目決策的回溯分析:短影片口播對齊方案演進(2-gram → whisper 時間戳 → 字符比例)全散在對話裡,現在一搜即得。
- 06 場景三:發現自己的思維盲區:三張卡片排在一起,浮現「先啟動、再定義問題」的固定模式——這是全文最意外的收穫。
ROUND 2: DISSECTION | 血肉解剖
論證鏈
(ASCII 流程)
觀察: 每天跟 AI 聊,對話質量高、密度大
▼
判斷: 對話 = 思考過程,比結果(文章/代碼)更珍貴
▼
痛點: 過程散落、聊完即棄、複製貼上不可持續
▼
方案: 腳本解析本地存儲 → Markdown 卡片進 Obsidian
▼
難點1 太長 → 按角色分檔截斷(用戶全文/AI 三檔)
難點2 更新 → mtime 增量同步 + 定時任務
▼
驗證: 三場景(寫作素材/決策回溯/思維盲區)反向證明價值
▼
昇華: 讓最高頻卻最易被忽略的思考產物,變成知識資產
關鍵證據
- Codex 雙層存儲架構:
~/.codex/state_5.sqlite的threads表存會話元資訊(標題、模型、創建時間、工作目錄),對話本體在~/.codex/sessions/rollout-*.jsonl,JSONL 每行一個 JSON 物件,按時間排序,type欄位區分用戶消息/AI 回復/工具調用。 - WorkBuddy 同構但分目錄:
~/.workbuddy/workbuddy.db的sessions表存元資料,transcript 在~/.workbuddy/projects/{project}/{sessionId}.jsonl,type欄位含message/reasoning(AI 推理過程)/function_call(工具調用)。 - 截斷策略三檔:用戶消息一律不截斷(提問是最高價值);AI 回復 ≤6000 字全文保留、6000~15000 字保留頭尾去中間、>15000 字只保留開頭分析+結尾輸出。
- 增量同步機制:卡片頭部 YAML frontmatter 記錄
transcript_mtime,每次運行對比當前 mtime 與記錄值,有變化才重生,沒變化跳過(「一秒都不花」)。 - 規模佐證:最長一條 WorkBuddy 會話 transcript 達 4MB、對話數十輪、單條 AI 回覆動輒上萬字——印證「不截斷 Obsidian 會卡死」是真實痛點。
- 思維盲區案例:三個專案(微信小程序/短影片工具/知識庫)都是先說「我想要一個⋯⋯」,被 AI 一問「場景是什麼?目標用戶是誰?」才發現需求沒想清——單看一次只是「那次沒想清」,三張卡片並列才浮現模式。
隱形假設與邊界
- 隱形假設:AI 工具本地存儲路徑與 JSONL 格式穩定不變(一旦 Codex/WorkBuddy 改版遷移路徑或改 schema,腳本即失效,作者把這當背景未討論長期維護成本);「對話質量高」是主觀判斷,無量化標準區分值得存 vs 純噪音。
- 邊界條件:僅適用「本地優先」的 AI 工具(本地有 sqlite + jsonl 檔);純雲端網頁版(如網頁 ChatGPT 無本地檔)無法這樣抓,需走 API 匯出;用戶需具備基本 Python 腳本與定時任務能力。
ROUND 3: SOUL | 靈魂提取
- 作者盲點:只分享成功與收穫,未提維護成本——工具改版、路徑遷移、JSONL schema breaking change 是長期負擔;把「對話價值高」當自明真理,未區分哪些對話值得全存、哪些是應丟棄的噪音(4MB 裡可能有大量試錯廢話)。把截斷閾值(6000/15000)當常識給出,未說明為何是這兩個數字。
- 知識連接:呼應「工作未捕獲知識/暗材(dark matter)」概念——組織與個人最大的知識浪費不是沒記錄結果,而是沒記錄產生結果的過程;也連接到 Obsidian 的「原子化筆記」與「可檢索性」哲學,以及軟體工程的 ADR(Architecture Decision Record)——記錄「為什麼選 A 不選 B」比記錄最終代碼更重要。
- 行動觸發:盤點自己每天「最高頻、卻最不保存」的思考產物——不只是 AI 對話,也可能是會議錄音、語音備忘錄、草稿與白板照片——為其中一條設計自動入庫管道;並反問:我現在保存的是結果還是過程?
留白提問
- 當 AI 對話量從數十累積到數千張卡片,檢索會不會反而比翻對話框更難?需要什麼樣的自動標籤、摘要、聚類或向量化才能讓「想得起來」不退化成「淹沒在卡片海裡」?
- 對話裡大量是噪音與試錯。長期来看,保留全部 vs 只保留「轉折點」(被 AI 追問後改變想法的那一刻),哪個更有價值?截斷策略是否該從「按長度」升級到「按資訊密度」?
跨域映射
- 在 軟體工程,這叫 commit message / ADR / version history——只留最終代碼不留決策過程,是同樣的知識流失
- 在 科學研究,這叫 lab notebook(實驗紀錄簿)——過程比結論更可重現、更可審計
- 在 組織管理,這叫 decision log / post-mortem——記錄「為什麼這樣決定」比記錄決定本身更珍貴
DEEP READ | 精讀指引
- 03 兩個關鍵問題:太長和更新:截斷策略(按角色分檔)與增量同步(mtime 比對)是整個方案可持續運行的工程基礎,沒有這兩個機制,腳本要麼把 Obsidian 搞卡、要麼覆蓋掉手動標註。值得反覆推敲設計取捨。
- 06 場景三:發現自己的思維盲區:從「存檔」躍升到「自我發現」,是全文最意外也最有啟發的段落——知識庫的價值不只是檢索過去,而是讓模式(pattern)在並列時自己浮現。
STRUCTURE MAP | 全書結構圖
(ASCII 流程圖,方框禁止畫右側直線)
┌───────────────────────────
│ 為什麼(價值判斷)
│ 對話 = 思考過程 > 結果
│ 過程散落、聊完即棄
└───────────────────────────
│
▼
┌───────────────────────────
│ 怎麼做(技術方案)
│ SQLite 元資訊 + JSONL transcript
│ → Markdown 卡片
└───────────────────────────
│
┌─────────────┼─────────────
▼ ▼ ▼
┌──────────── ┌──────────── ┌────────────
│ 截斷策略 │ 增量同步 │ 定時任務
│ 按角色分檔 │ mtime 比對 │ 每天 10:00
│ 用戶全文 │ 有變化才重生 │ pythonw 靜默
│ AI 三檔 │ 無變化跳過 │ 不彈窗
└──────────── └──────────── └────────────
│
▼
┌───────────────────────────
│ 用了之後(三場景驗證)
│ 04 寫作素材 / 05 決策回溯
│ 06 思維盲區(意外收穫)
└───────────────────────────
│
▼
┌───────────────────────────
│ 昇華:過程即資產
│ 最高頻的思考產物
│ 終於被保存、被檢索
└───────────────────────────
我把和AI的所有对话,都存进了自己的知识库 (Architectural Deep Dive)
前言/背景
這篇解決的核心問題是:人們每天與 AI 產生大量高質量對話(思考過程),卻從不系統性地保存它。文章/代碼/筆記都是「結果」,對話才是產生結果的「過程」,但過程散落在 AI 對話框裡,聊完即棄。
作者的做法是寫一個 Python 腳本,把兩個本地 AI 工具(Codex、WorkBuddy)存儲的對話(SQLite 元資訊 + JSONL transcript),自動同步成 Obsidian 的 Markdown 卡片,並用「按角色截斷」與「mtime 增量同步」解決太長與持續更新兩個工程問題。最後用三個實戰場景(寫作素材、決策回溯、思維盲區)反向驗證:保存對話的價值遠超預期。
章節詳細總結
01 為什麼想做這件事
作者用 AI 寫代碼、寫文章、做產品、討論選題,幾乎每天都在跟它聊。他觀察到很多對話的質量非常高——不是指 AI 的答案有多對,而是整個對話過程本身非常有價值。
兩個典型例子:
- 項目從零到上線的討論:需求怎麼一步步變化、試過什麼方案、為什麼放棄、最後選了哪個方向。這些過程在文件裡往往只留下最終代碼,中間的權衡全丟了。
- 文章選題討論:我先說了什麼、AI 追問了什麼、我後來補充了什麼判斷。這些來回本身就是思考紀錄,但散在對話框裡沒人會回去翻。
作者以前的做法是「聊完覺得有用就複製貼上到筆記」,但大部分時候聊完就聊完了,再也沒打開過。時間一長,三四十個會話堆在那裡,翻都懶得翻。
核心洞察是這一句:
我和 AI 的對話,是我每天思考最密集的產物,但我幾乎沒有真正保存過它。保存文章、保存代碼、保存筆記,但從不保存對話。文章和代碼是結果,對話其實是整個過程。
02 怎麼做到的
有了「對話是過程、過程該被保存」的判斷,作者要一個自動化方案:每天把 AI 對話同步到知識庫,不用手動複製貼上。
輸出目標很清楚:Obsidian 知識庫裡有一個 01_Sources/AI對話/ 目錄專門放原始材料,每一條 AI 會話生成一張 Markdown 卡片放進去。
但問題來了——AI 的對話存在哪?作者平時用兩個 AI 工具,存儲格式完全不同:
Codex(VS Code 裡的 AI 編輯器)的雙層存儲:
- 會話元資訊存在
~/.codex/state_5.sqlite這個 SQLite 資料庫,裡面有一張threads表,記錄每個會話的標題、模型、創建時間、工作目錄。 - 對話內容不在資料庫裡,存在
~/.codex/sessions/目錄下的rollout-*.jsonl檔案裡。 - JSONL 就是一行一個 JSON 物件,按時間順序排列,每行標記
type區分用戶消息、AI 回復、工具調用。 - 處理邏輯:從 SQLite 讀會話元資訊 → 找到對應 rollout 檔 → 解析 JSONL → 生成 Markdown 卡片。
WorkBuddy 的分目錄存儲:
- 會話元資料存在
~/.workbuddy/workbuddy.db的sessions表。 - 對話 transcript 在
~/.workbuddy/projects/目錄下,按專案分目錄,每個 session 對應一個{sessionId}.jsonl。 - JSONL 格式類似,每行也有
type欄位:message、reasoning(AI 推理過程)、function_call(工具調用)。
核心邏輯一致——從 AI 工具的本地存儲裡找到會話檔案,解析成結構化的對話紀錄,轉為 Markdown 卡片。差異只在「去哪找檔案」與「JSONL 裡的 type 欄位語義」。
03 兩個關鍵問題:太長和更新
問題一:對話太長
最長一條 WorkBuddy 會話 transcript 有 4MB,對話數十輪,單條 AI 回覆動輒上萬字。如果全部保留,每張卡片會大到 Obsidian 打開都卡。
作者的策略是按角色區別對待:
- 用戶消息不截斷——用戶的提問是最高價值的內容,再長也全文保留。
- AI 回復按長度分三檔:
- 6000 字以內:全文保留
- 6000~15000 字:保留頭尾、去中間
- 超過 15000 字:只保留開頭分析 + 結尾輸出
問題二:對話持續更新
一個會話今天聊了,明天可能繼續。如果腳本每次運行都重新生成卡片,之前寫過的筆記、標註全丟了。
作者的方案是跨天增量同步:
- 卡片頭部用 YAML frontmatter 記錄
transcript_mtime(transcript 檔案的最後修改時間)。 - 每次運行對比當前 mtime 和記錄值,有變化才重新生成;沒變化就跳過,一秒都不花。
整個腳本最後用 Windows 定時任務每天 10 點自動執行,pythonw.exe 靜默跑,不彈窗口、不輸密碼。
實作過程踩了一些坑(例如 mtime 精度問題、pythonw 下 stdout 崩潰),不過都修掉了,作者認為不是重點。
04 場景一:寫文章的素材庫
作者寫公眾號文章,最頭痛的不是「寫不出來」,而是「想不起來」。
很多文章的起點不是完整選題,而是跟 AI 聊著聊著冒出來的想法。例如這篇「我把對話存進知識庫」的文章,最初的討論發生在兩天前——在 WorkBuddy 裡跟 AI 討論知識庫結構怎麼改、對話怎麼存、格式怎麼定。討論過程中作者提了一個觀點:「對話才是思考過程,文章只是結果。」AI 追問了好幾輪——「那保存對話的價值到底是什麼?」「你以前試過什麼方案?」「為什麼不行?」
這些追問直接變成了文章第一部分的素材。如果沒有那天的對話卡片,寫這篇文章時只能憑記憶,很多細節肯定漏了。
現在的做法是:想寫文章時,先去 AI對話/ 裡搜一下,看最近有沒有聊過相關話題;有就直接引用對話裡的思考過程,比從零開始寫順暢得多。
05 場景二:項目決策的回溯分析
做項目時,很多決策是當時拍腦袋下的。過一周回頭看,可能已經忘了為什麼選 A 不選 B。
短影片工作流是典型例子。作者跟 AI 討論過至少十輪關於「配圖和口播文本怎麼對齊」的問題:
- 最早用 2-gram 文本相似度匹配
- 後來試了 whisper 時間戳對齊
- 都不理想
- 最後換成了 字符比例分配
這些討論散在三四次不同時間的會話裡。以前想看決策過程,只能憑記憶回憶「好像有一次聊過這個」——根本找不到。現在直接在 Obsidian 搜「口播對齊」或「字幕時間戳」,所有相關討論瞬間列出來。
更關鍵的是,通過這些對話能回看自己當時的思維軌跡:我為什麼會覺得 2-gram 方案可行?看到什麼文檔?踩了什麼坑?這些資訊寫代碼的時候不會記錄,但對話裡有。
作者現在做項目復盤的習慣變了——打開關聯的幾張對話卡片,一頁一頁翻過去,比看代碼提交日誌更接近真實的決策過程。
06 場景三:發現自己的思維盲區
這是最意外的收穫。
有一天翻之前的對話卡片,發現一個模式:作者跟 AI 討論需求時,總是先說「我想要一個⋯⋯」,然後 AI 問「這個場景是什麼?目標用戶是誰?」——作者答不上來。同樣的情景出現了三次:做微信小程序、做短影片工具、搭這個知識庫。每次都是急著動手,被 AI 一問才發現需求沒想清楚。
如果沒有對話紀錄,不會意識到這個模式。單個對話看,只會覺得「那一次沒想清楚」。但三張卡片排在一起,模式就浮出來了——作者習慣先啟動、再定義問題,而不是先定義清楚再動手。這個認知本身就是一個值得寫的文章選題。
還有一次更直接的:翻到一張討論「做副業要不要追求專業」的卡片,發現 AI 提了一個作者完全沒接茬的問題:「你定義的專業是什麼?誰的標準?」作者直接跳過去繼續說自己的。因為對話被完整記錄下來,才看見這個細節——第一反應不是回答,是迴避。這個信號如果不是事後回看,根本抓不住。
總結與結論
- 對話是思考過程,文章/代碼只是結果——過程比結果更珍貴,卻最容易被忽略。保存結果是常識,保存過程才是知識管理的真正缺口。
- 技術方案的本質是「找檔 → 解析 → 轉 Markdown」:Codex 與 WorkBuddy 雖然存儲路徑與 type 語義不同,但都是「SQLite 元資訊 + JSONL transcript」的雙層結構,統一邏輯即可覆蓋;這個模式可遷移到任何本地優先的 AI 工具。
- 兩個工程機制決定方案能否長期運行:按角色截斷(用戶全文、AI 分三檔)解決「卡片太大 Obsidian 卡死」;transcript_mtime 增量同步解決「重生卡片會覆蓋手動標註」。沒有這兩個機制,自動化反而會破壞知識庫。
- 知識庫的隱藏價值是讓模式浮現:單張對話卡片只看到「那一次」,多張卡片並列才浮現出思維模式(先啟動再定義問題)與迴避信號(被追問就跳過)。這是「檢索過去」之上的「自我發現」層。
- 不複雜,但用了才覺得「之前怎麼沒做」——技術門檻低(一個 Python 腳本 + 定時任務),價值門檻高(改變了思考產物的保存習慣)。每一個高頻使用 AI 的人,都該自問:我跟 AI 的那些對話,現在還在哪兒?