媽媽的消息
一句話:把一段家人聊天記錄變成一個數字、一個標籤、一句可以發出去的話。
使用者不需要 AI 來告訴他媽媽愛他。他需要的是三樣東西:① 他從來沒數過的數字(「你回了 38 次『嗯』」);② 一個台階(「軟體說我欠你一個電話」比「我想你了」容易發出去);③ 一張能曬的圖(曬愧疚 = 曬良心)。報告的每個模組都在服務這三件事。它不是心理學分析,媽媽不需要依戀類型。
流程:拿到記錄 → 確認兩個人 → 轉成 messages.json → stats.py 算數 → 問三個問題 → 寫文字 → render.py 出報告和卡片。練習模式和對照組是附加入口。
支援檔案在這個目錄下,按需讀:
references/metrics.md— 每個數字怎麼算(使用者問「這個怎麼算的」看這裡)references/types.md— 10 個她的類型 + 6 個你的類型 + 五檔評級references/dictionary.md— 黑話翻譯表的基礎詞典和生成規則references/writing-rules.md— 文字部分的規矩、反 AI 黑名單、什麼時候要收著references/report-template.md— 報告模板和 narrative.json 欄位references/practice.md— 練習模式references/export-guide.md— 分平台的匯出 / 截圖指南(使用者問「怎麼匯出」看這裡,先推薦截圖)scripts/—parse_export.pyvalidate.pystats.pyrender.pycompare.pyredact.py,只用標準庫,不聯網assets/— 報告和兩張卡片的 HTML 模板
隱私(先於一切)
- 只讀使用者給的截圖 / 檔案。不解密微信資料庫,不聯網,不把記錄存到任何使用者沒要求的地方。 腳本產物(messages.json / stats.json / reports/)都在當前目錄,告訴使用者在哪、可以隨時刪。
- 報告不複述整段原文,只引用短句。轉帳只記次數不記金額。
- 使用者沒打碼:提醒一次「名字和敏感內容可以先用
scripts/redact.py打掉」,不重複。 - 使用者問「會不會洩露」:如實回答——你在哪個工具裡跑,記錄就發給了誰;腳本本身不發任何東西。
第一步:拿到記錄
先問有沒有電腦版微信。 匯出檔案比截圖好太多——半年的記錄一次拿全,時間戳完整,不用一屏一屏截、也不用 AI 逐張轉錄(幾十張截圖只能覆蓋幾百條,還容易轉錯)。
優先級:
- 匯出檔案(首選):用 WeFlow(微信 4.0+)或留痕 / WeChatMsg / PyWxDump(微信 3.x)把和這個人的記錄導成 JSON / CSV / TXT,
scripts/parse_export.py認得。具體分平台的步驟在references/export-guide.md,按使用者的情況答對應的一段,不要一次唸完。 - 截圖(兜底):只有手機、用 Mac、或者不想在電腦上裝東西時用。微信 / QQ / 簡訊都行,安卓可以用長截圖。
- 直接貼上的文字。
使用者什麼都沒給,只說「想分析我和我媽的聊天」,先問一句:
你電腦上裝微信了嗎?裝了的話我教你把和她的記錄導出來,一次能拿全半年的,比截圖準得多。只有手機也行,那就截圖——從最近往上翻,每一屏截一張。
走截圖路徑時再補:相鄰兩張有一兩條重疊最好;十幾張能出報告,三四十張數字才穩;名字和敏感內容可以先打碼。
第二步:確認兩個人
- 哪邊是用戶,哪邊是家人。 微信截圖右側綠色氣泡是用戶,左側白色是對方。匯出檔案看發送者欄位。分不清就問一次。
- 對方是誰、怎麼稱呼、用「她」還是「他」。 使用者說「我媽」用「媽媽/她」,說「我爸」用「爸爸/他」,說「外婆」用「外婆/她」。報告標題、類型名、節日(母親節/父親節)全部跟著換。skill 叫「媽媽的消息」,但一半使用者會拿來分析爸爸。
- 生日(可選):她的和使用者的(MM-DD),進節日記分牌和倒數計時。
第三步:轉成工作表
目標是 messages.json:
{"me": "我", "her": "媽媽", "her_pronoun": "她", "source": "screenshots",
"messages": [
{"ts": "2026-05-12T21:03:14", "sender": "her", "type": "text", "content": "吃飯了嗎", "dur": null},
{"ts": null, "sender": "me", "type": "text", "content": "吃了", "dur": null},
{"ts": "2026-05-12T21:05:00", "sender": "her", "type": "voice", "content": "", "dur": 23}
]}
type ∈ text / voice / image / video / sticker / transfer / link / call_voice / call_video / recall / location / file。語音和通話把秒數寫進 dur。link 的 content 放標題。轉帳 content 只寫「轉帳」,不寫金額。
截圖路徑:逐張轉錄。規則——
- 相鄰截圖重疊的訊息只記一次,按內容和位置對齊,不靠猜。
- 微信只在間隔較久時顯示時間戳。有時間戳的填
ts;沒有的填null(腳本會計數但不參與時間計算)。不要給沒時間戳的訊息編時間。 - 語音記秒數,表情包記
sticker(內置表情如 [玫瑰] 放content),轉帳記次數。 - 截圖太糊或中間明顯缺一段:轉能看清的,在資料說明裡寫。不為了報告好看補資料。
- 轉錄完跑一遍
python scripts/validate.py messages.json:它會檢查格式、時間順序、疑似重複(相鄰截圖重疊沒去掉)、轉帳有沒有寫金額,並列印條數和時間範圍。把這份摘要給使用者確認,再算。
匯出路徑(首選):
python scripts/parse_export.py 匯出檔案 --her 記錄裡的名字 --call 媽媽 --out messages.json
# 不知道對方在記錄裡叫什麼:先不加 --her 跑一次,腳本會列出名字
# 記錄跨了好幾年:加 --since 2026-01-01(或 --last-days 180)只取最近一段,報告更有針對性
WeFlow 的匯出格式選 JSON(自帶 isSend 發送方標記,不用填 --her;TXT 和 weclone CSV 也認,但資訊少一些)。WeFlow / 留痕這類工具匯出的是全量記錄,可能有幾萬條。跨度太長的話報告會被稀釋(「她最常問」變成三年的平均),預設建議取最近 6–12 個月。注意:WeFlow 不匯出語音秒數,「最長語音」這項會缺,正常。
第四步:算數
python scripts/stats.py messages.json --out stats.json --today 2026-08-30 --her-birthday 10-20 --my-birthday 06-03
終端會打一份摘要,stats.json 裡是全部數字。報告裡的每個數字都從這裡來,不自己心算。定義在 references/metrics.md。stats.json 裡的 warnings 要照抄進報告末尾的資料說明。
沒法跑腳本(比如在只有對話的環境裡):按 metrics.md 的定義手算最核心的幾項——誰先開口、回覆中位、短回覆、沒回、最常問、時段——其餘標「需要匯出記錄才能算」。
第五步:問三個問題
算完先給使用者看三個指數和鑑定結果(這是最有意思的部分,先給),然後問:
寫最後一段之前問你三件事,都可以跳過:① 多久沒回家了?② 她最近有沒有什麼事——身體、家裡?③ 你們上次打電話聊了什麼?
第六步:寫文字
按 references/writing-rules.md。要寫的:
- 三個指數各一句扎心話(數字 + 一個細節)
- 她的類型和你的類型各一句(引原話 + 數字)
- 黑話翻譯表 6–10 條(她真說過的話,見
dictionary.md) - 她轉給你的:一句洞察(轉了什麼、和使用者說過的什麼有關)
- 她其實想說的是:120–220 字
- 今晚就做的三件事
- 幫你回:3 條
- 三句打電話的開場白
- 可以直接發給她的一條:60–100 字,帶具體時間
先在對話裡按 report-template.md 的 Markdown 模板給出完整報告,同時把文字寫進 narrative.json。
第七步:出報告和卡片
python scripts/render.py stats.json narrative.json --out reports/
三個檔案:完整報告、親情帳單卡(使用者自己發)、發給她的卡。告訴使用者用瀏覽器打開、截圖,卡片是豎版的。發給她的卡是這個產品真正的出口——如果只推薦一個,推薦它。
附加入口
練習模式(使用者說「練習」「陪我練」「扮演我媽」)→ 讀 references/practice.md。AI 用她的說話方式跟使用者聊 10 回合,使用者回「嗯」當場標出,最後打分。需要 ≥ 40 條記錄。
對照組(使用者說「和朋友比比」「我回誰更快」)→ 讓使用者再給一組和朋友的截圖,走同樣流程出 friend-stats.json,然後:
python scripts/compare.py stats.json friend-stats.json --labels 你媽 朋友 --mode friend
結論只有一行:「你回朋友要 3 分鐘,回你媽要 4 小時 12 分,差了 84 倍。」
偏心報告(使用者給了爸媽兩組)→ --labels 媽 爸 --mode papa。
只要卡片(使用者說「做張卡片」「給我一張圖」)→ 如果已經有 stats 和 narrative 直接 render;沒有就走完整流程,卡片是流程的產物。
幫你回(使用者說「幫我回她」)→ 只寫「沒回」清單的回覆和三句開場白,不出整份報告。
什麼時候要收著
從記錄和使用者語氣裡看,不用他明說。細則在 writing-rules.md 末尾,要點:
- 記錄 < 20 條:只出數字,不寫解讀。
- 記錄裡有衝突、辱罵、控制、持續催婚要錢:中性描述兩邊的模式,不預設誰對,去掉「今晚三件事」和「發給她的那條」。
- 使用者在難受、家裡鬧僵、或提到媽媽已經不在:先回應人,再問要不要繼續;繼續就去掉評級。
- 替別人分析:改第三人稱。
任何情況下不給使用者貼標籤。「短回覆」不是「敷衍」,「沒回」不是「不孝」,評級是章不是判決。
出報告前自檢
- 每個數字能在
stats.json裡找到 - 「她其實想說的是」每句判斷能指到一條原話或一個數字
- 類型那句引了原話
- 發給她的那條有具體時間
- 全文沒有黑名單短語,沒有「敷衍」「不孝」「應該」,沒有驚嘆號
- 稱呼和她/他沒串,節日按人選
- 沒寫任何轉帳金額
- 資料說明了截圖斷層和無時間戳條數