AI Workflow · part 20
[Dev Workflow] AI 味不在破折號,在結構:一篇論文教我怎麼檢查自己的文章
❯ cat --toc
- 前言
- 文風可以事後洗掉,結構不行
- 五個你現在就能拿去問自己稿子的問題
- 一、旁白有沒有自己把主旨講出來?
- 二、情緒是不是全部靠身體感覺表達?
- 三、有沒有任何副線?
- 四、引用有沒有指名道姓?
- 五、有沒有留下不確定的東西?
- 換一家模型不會有幫助
- 每家模型都有結構上的癖好,而 Kimi 的癖好是沒有癖好
- 我掃自己已發布的文章,同一個教訓講了四次
- 病源是模板的格子,不是文筆
- 進階:我把它做成閘的過程,以及量到的兩個負結果
- 有一半的發現不能搬進技術文
- regex 閘我做過原型,召回只有 1/3
- 換成外審之後,3/3 而且多抓一處
- 論文的耐久性主張只有一個實驗,而那個實驗是套套邏輯
- 諷刺的對照:512 token 的基線拿到 99.9%
- 參考文獻
TL;DR
StoryScope 把文風信號全部拿掉,只看敘事結構,分辨人寫與 AI 寫拿到 93.2% macro-F1。最好用的三個落差:旁白自己講出主旨 77% vs 52%、情緒用身體感覺表達 81% vs 38%、整篇沒有副線 79% vs 57%。我拿它掃自己已發布的文章,同一個教訓在四個位置各講了一次。⚠️ 但論文的耐久性只驗過一次,而且驗法接近套套邏輯。
前言
冰箱裡那盒昨天的滷肉,你不用湊近聞就知道不對——顏色、油花凝住的樣子,一眼就有事。但如果有人把它重新加熱、擺盤、淋上新的醬汁呢?
AI 寫的文章現在就在這個階段。大家用來判斷一篇文章是不是 AI 寫的那些記號——破折號用得兇、滿篇「delve」和「tapestry」、每個清單都剛好三項——那些是表面的醬汁,而且正在被洗掉。GPT-5.4 這一版就大幅減少了破折號。更狠的是有研究做過:拿人類小說去微調模型之後,創意寫作的 AI 偵測率從 97% 掉到 3%。
那還剩什麼可以看?
八月底 COLM 2026 有一篇 StoryScope(馬里蘭大學帕克分校 + Google DeepMind)給了答案:把文風信號全部拿掉,只看敘事結構,還是能用 93.2% 的 macro-F1 分出來。
這篇是 AI Workflow 系列第 20 篇。前面 #17 那個從來沒跑過的檢查 講的是規則寫了沒人執行,這篇講的是另一半:規則本身找錯地方了。
文風可以事後洗掉,結構不行
StoryScope 的作者拿了 10,272 篇人類短篇小說,每一篇都反推出一段寫作提示,再讓五家模型各寫一篇對照版(有 24 次模型拒絕生成,所以總數不是整除的 61,632)——Claude Sonnet 4.6、GPT-5.4、Gemini 3 Flash、DeepSeek V3.2、Kimi K2.5。加起來 61,608 篇,平均每篇 4,753 字。
然後他們做了一件關鍵的事:把每篇故事壓成結構化的欄位(誰是主角、情節怎麼走、時間順序、視角、什麼時候揭露什麼),再從這些欄位——不是從文字——去訓練分類器。
結果是這樣:
| 用什麼判斷 | macro-F1 |
|---|---|
| 只看敘事結構(257 個特徵) | 93.2% |
| 結構 + 文風(304 個特徵) | 96.0% |
| 只看文風(39 個特徵) | 85.8% |
| 只用 30 個核心結構特徵 | 84.8% |
只看結構就拿到 93.2%,已經是「結構加文風」的 97%。 而文風單獨只有 85.8%——它不是主力。
而文風那一層,已經有工具在洗了。作者拿一個叫 LAMP 的改寫工具去洗掉 AI 的陳腔濫調和華而不實的堆砌,改完再測,macro-F1 從 95.5% 只掉到 93.9%。
五個你現在就能拿去問自己稿子的問題
論文從 304 個特徵裡挑出 30 個「核心特徵」——也就是五家模型都會穩定出現的那些。我把它們收成五個問題,每一條後面的數字都是論文量到的實際落差:
一、旁白有沒有自己把主旨講出來?
AI 的旁白直接說明主旨的比例是 77%,人類 52%。主旨明講的程度(1 到 5 分)是 3.94 對 3.28。用對話來辯哲學是 59% 對 34%。
論文用的詞是 over-determination:AI 把意義說完,不信任讀者自己接得起來。 故事裡如果有個難過的角色,結尾通常會補一句旁白,告訴你他學到了什麼。
翻成技術文的版本:每一段結尾都補一句「這就是為什麼 X 很重要」。數字明明就在上面兩行。
二、情緒是不是全部靠身體感覺表達?
AI 用身體隱喻表達情緒的比例 81%,人類 38%。嗅覺意象 82% 對 57%。而反過來,直接寫出情緒名稱的比例,人類 29%,AI 只有 8%。
人寫「他很害怕」,AI 寫「胸口收緊、冷汗、燈光轉暗」。
那不是文筆好,那是代償:它知道人在害怕的時候身體會有什麼反應,卻不確定該不該直接寫「他很害怕」。
三、有沒有任何副線?
AI 故事「完全沒有副線」的比例是 79%,人類 57%。結局由主角自己的選擇決定是 69% 對 46%。因果鏈的連續程度 4.20 對 3.92。
AI 寫單軌故事。 開頭給的每一把槍最後都會開,沒有走岔的路、沒有沒收乾淨的線。
四、引用有沒有指名道姓?
人類指名引用真實作品或作者的比例 47%,AI 24%。AI 偏好模糊的暗示(72% 對 50%),避開指名真實的品牌、地點、作品。
技術文的對應很直接:寫「某個版本之後就修好了」還是寫 PR #27752。
五、有沒有留下不確定的東西?
人類的主角道德曖昧的比例 59%,AI 38%。AI 的結局收在「內在領悟或接受」是 47% 對 27%。人類更能接受事情就這樣留白。
五個問題有一個共同形狀:AI 不留破綻,而破綻正是人的痕跡。

換一家模型不會有幫助
這是論文裡我覺得最實用的一個發現。
如果你的草稿讀起來有 AI 味,直覺是換一家再生一遍。但論文量了五家模型在敘事空間裡的位置:人類與 AI 的重心距離,是 AI 彼此之間平均距離的 1.6 倍(6.6 對 4.3)。更狠的是——最接近人類的那一家 AI,都比距離最遠的兩家 AI 之間還要遠(6.2 對 6.0)。
六個最容易被搞混的配對,全部是 AI 對 AI。

要離開那個區,只能改敘事決策。
每家模型都有結構上的癖好,而 Kimi 的癖好是沒有癖好
論文還做了六選一的作者辨識(人類 + 五家),純看結構拿到 68.4%。每家模型都有自己的「指紋特徵」——它在那個維度上跟其他四家明顯不同:
| 指紋數 | 最明顯的特徵 | |
|---|---|---|
| 人類 | 32 | 用對話介紹角色、單一焦點、把揭露押到後面 |
| Claude | 26 | 最克制——情節幾乎沒有愈演愈烈,愛寫後記、避開夢境,對文學傳統採「尊崇延續」而非顛覆(62%,其他家 39-56%) |
| GPT | 11 | 靠八卦推動情節(64%,其他家 44-55%),愛用「多年後回望」的敘事距離 |
| Gemini | 11 | 結局收得最乾淨、尾聲最長,氣氛最陰鬱(88% 被標為 bleak) |
| DeepSeek | 7 | 把關鍵背景前置,別家會留到後面 |
| Kimi | 3 | 最沒有個性——F1 最低(0.55),坐在最制式的 LLM 敘事正中央 |
我掃自己已發布的文章,同一個教訓講了四次
看完之後我把這五問寫成一張卡,掛進自己的 blog 寫作流程,再挑一篇最近發的文章實測——#16 我把 2080 Ti 的 NCCL 修好了,15,194 字。
四個位置,一模一樣的意思。
前言(L32):
那句話是錯的。 而且錯得很瞎——我當時連錯誤訊息都沒存下來,就直接說它不能用。
修正那節(L236 與 L238),兩段:
part 14 的 FAQ 裡我寫了「目前判定是 NO-GO」。那是錯的,而且錯的方式值得記下來:當時沒有留下錯誤訊息,就把「試不起來」寫成了「不能用」。
從「試不起來」到「不能用」中間差了一整個診斷,而我跳過了。
收穫那節(L304),第三次:
沒有錯誤訊息就不要下判決。 「試不起來」和「不能用」中間差一整個診斷。
前言那次建立動機、收穫那次收尾,兩個都該留。中間那兩段完全多餘,而第二段的開頭是把第一段換句話說。
改完之後全篇少 42 個字,沒有任何事實消失。
病源是模板的格子,不是文筆
這件事最值得記的不是「我囉唆」,是為什麼會囉唆。
## 這篇要修正的事 和 ## 這篇的收穫 是我文章模板裡的兩個小節。這兩節寫著寫著就會重複——一個講「我錯在哪」,一個講「學到什麼」,而那本來就是同一件事的兩面。
我在七月底診斷過一次同型的病,當時的講法是「格子在那裡,我就會找話填」。那次的例子是文末的 收穫 小節——實測 152 篇裡有 100 篇剛好塞滿四對 FAQ,那不是「有四個真問題」的分佈,是把格子填到頂的分佈。
同一個病,這次長在段落層而不是章節層。
進階:我把它做成閘的過程,以及量到的兩個負結果
不讀這節不影響前面那五個問題的使用。這節是實作紀錄:我怎麼決定哪些檢查該做成機械閘、哪些不該,以及這篇論文論證最薄弱的地方。
有一半的發現不能搬進技術文
論文說人類寫作偏好非線性:時間跳接、倒敘、把關鍵揭露押後(倒敘強度 2.58 對 2.31,非線性延遲揭露 1.96 對 1.68)。
這條不能照抄。 技術文的 H2 標題是 answer-first——那有 GEO 理由,搜尋引擎要的是直接給結論。而且我七月底被明確糾正過兩次:偵探式的寫法(扣著不講、要到破案才知道前三節在幹嘛)比教學式的難讀,正確做法是先把架構和結論講清楚,踩坑收在後半並標明可跳過。
所以那張卡我特別開了一節叫「明確不適用」,把這條連同理由寫進去。
regex 閘我做過原型,召回只有 1/3
寫成卡之後的下一個問題是:能不能做成 git commit 前會擋人的檢查?
我先寫了個原型:抓「換句話說 / 也就是說 / 講白了 / 簡單說」這類重述標記詞開頭、而且短、獨立成段的句子。刻意不收「其實 / 反正 / 說穿了」——那幾個是我的轉折習慣,不是重述標記。
拿全部 172 篇 zh-TW 文章下去掃:
命中 8 篇(4%),總共 10 次,中位數 1
然後做正向對照——拿改之前的那篇 nccl 原檔測,看它抓不抓得到已知的三處:
✗ 漏掉 修正節那句重述(沒有任何標記詞)
✓ 抓到 「換句話說,上一篇那句話的有效範圍…」
✗ 漏掉 收穫節那句重複
recall 1/3。 而且它命中的兩處裡有一處是誤報——「也就是說,開雙卡等於放棄 CUDA graph」那句引出了新結論,不是重述。precision 1/2。
以這個語料的基礎率,上限訂 2 永遠不會響,訂 0 會誤報既有文章。這跟 #17 裡量「連續 3 句字數差不多」的結果一樣(全語料最大值 4 段、中位數 0-1,新舊文完全分不開):量過了,量不出病,所以不做。
regex 抓的是字串,而要判斷兩段是不是在講同一件事,得看語意 —— 所以我把這題交給讀得懂語意的東西。
換成外審之後,3/3 而且多抓一處
不做 regex,改把這條加進既有的外部審稿流程——我的發布前檢查本來就會發兩家外部模型讀一遍抓翻譯腔,加一題就好。
拿同一份原檔跑,Codex 抓到 3 處、零誤報,而且多抓到一處我自己漏掉的:
L216 **那條匯流排本來就沒被用滿。** ← 主句
L218 最忙的一格也只佔 Gen3 x16 的 8.2%。 ← 數字證據
L218 把 8.2% 降到 0.1%,你省下來的是一條本來就空著的路。 ← 第三次講同一件事
它自己判斷出了合理的例外,原話是:「結論段本身的收束不會因為是 recap 就自動算病。」
那個分寸——全篇留一兩句收束洞察是聲音,每段一句是說教——正是我寫在卡裡的判準,而它讀懂了。

但這組數字的樣本是一篇文章。regex 那條路我掃了全部 172 篇,外審 3/3 與五問卡的效果卻只在 nccl 那一篇上測過。而我下一節正要批評論文「耐久性主張只有一個實驗」。
論文的耐久性主張只有一個實驗,而那個實驗是套套邏輯
這篇論文的整個論證掛在一句話上:文風易改、結構難改,所以結構特徵更耐久。
而支持這句話的證據只有一個實驗:拿 278 篇 Gemini 生成的故事跑 LAMP 改寫,改完仍偵測到 93.9%。
問題是 LAMP 設計上就不碰結構——它針對的是陳腔濫調、冗贅鋪陳、堆砌辭藻那些句子層的東西。這個實驗證明的是套套邏輯。
真正的對抗測試應該是:直接叫模型寫非線性、留白、多副線的故事,或者用人類小說微調。而作者自己引用的 Chakrabarty 2026 正是「微調讓創意寫作偵測率從 97% 掉到 3%」那篇——引了,沒對打。
還有兩個藏在附錄裡的數字值得知道:
一、標註者之間的一致性(κ=0.74)低於模型與標註者的一致性(κ=0.84)。 模型跟人的意見比兩個人彼此的意見還一致。樣本只有 12 篇故事、240 個項目、2 個標註者,而 61,608 篇的標註全部建立在這個驗證上。
二、附錄說「最稀有的尾端是混合的」,那是沒有除以母數的原始篇數。 人類故事的平均稀有度百分位是 0.71,AI 0.49(Cohen's d = 0.83)。看最稀有的前 10%,論文報的是 340 篇人類對 487 篇 AI,前 1% 是 42 對 41,結論寫 mixed。
但測試集裡 AI 故事本來就是人類的五倍——6,885 對 1,377,而那個數字就印在同一頁的 Cohen's d 旁邊。換算成比率,前 10% 是人類 24.7% 對 AI 7.1%,前 1% 是 3.0% 對 0.6%。人類在尾端領先得比平均值那一格還多。
我第一次讀就讀反了,把它寫進這篇的初稿,是發布前的外部審稿抓出來的。
諷刺的對照:512 token 的基線拿到 99.9%
論文最強的偵測器是它自己的對照組:同一份資料上,一個 fine-tune 過的 ModernBERT 拿到 99.9%——而它的輸入長度上限是 512 token,也就是只讀了 5,000 字故事的前兩三段。
換句話說,光看開頭,AI 味就已經明顯到不需要這整套管線。這篇論文的價值不在偵測力,在它把「破綻長什麼樣」拆解成 304 個可以逐條檢查的問題。
而那 304 個問題裡,真正能拿來改自己稿子的,是最前面那五個。
同系列其他文章:Part 19:一張工單從 41 分鐘壓到 73 秒 · Part 17:那個從來沒跑過的檢查
參考文獻
Jenna Russell、Rishanth Rajendhran、Chau Minh Pham、Mohit Iyyer(馬里蘭大學帕克分校)與 John Wieting(Google DeepMind),StoryScope: Investigating idiosyncrasies in AI fiction,COLM 2026(arXiv:2604.03136)。
常見問題
- 怎麼判斷一篇文章是不是 AI 寫的?
- 別只看破折號和「delve」這種詞,那層每半年就被新模型洗掉一次。改看結構:旁白會不會自己把主旨講出來、情緒是不是全靠身體感覺表達、有沒有副線、引用具不具名。研究量到 AI 旁白解釋主旨的比例是 77%,人類 52%。
- 為什麼 AI 寫的東西讀起來「太整齊」?
- 因為它不留破綻。AI 故事沒有任何副線的比例是 79%,人類 57%;結局由主角自己的選擇決定是 69% 對 46%。它把因果接滿、把意義說完,不留讓讀者自己接的縫。
- 把 AI 草稿換一家模型重寫,會比較沒有 AI 味嗎?
- 不會。五家模型在敘事空間裡擠成一團——人類與 AI 的重心距離是 AI 彼此距離的 1.6 倍,而且最接近人類的那家 AI,都比距離最遠的兩家 AI 之間還遠。換模型不會離開那個區。
接著讀
- 2026-08-21[AI Agent] 從 41 分鐘到 73 秒:一張小工單的病理解剖
派給 Codex CLI 的小工單常常一跑就是 40 分鐘起跳。這篇拆開近兩週 41 個執行紀錄,量出「牆鐘時間≈工具呼叫次數×14.3 秒」的公式,揪出 41 分鐘裡機器真正做事只有 4.4 分鐘,再用四刀把同型工單壓到 73 秒。
- 2026-07-29[Dev Workflow] Skill 裡的檢查完全寫對了,但它一次都沒跑過
一篇技術文五關全過,唯一的人類讀者一句話就命中:同一個句型在稿子裡出現了五次。查下去發現該抓的規則白紙黑字寫在 skill 裡、內容也對,但它標著「人工掃」——沒有指令、沒有 exit code、擋不住任何東西,所以從來沒運作過。門檻怎麼用五篇舊文校準、兩次真實攔截、以及一個機械檢查永遠抓不到的變體。
- 2026-07-17[Dev Workflow] 幫 AI agent 的 skill 減肥:193 個塞爆 2% 預算,砍到剩 7 個
AI Workflow 系列第 15 篇。某天早上我讀 codex 紀錄,滑到一行:skill 描述被剪短,才塞得進 2% 的 context 預算。我共用的 root 累到 193 個 skill,全載進去撐爆上限,每條描述都被截斷——我天天在用的,被剪掉是為了替我從不碰的一百多個騰位子。這篇講怎麼用 per-agent allowlist(不是刪)砍到 7 個、薄殼配深引擎壓低每個 skill 的載入成本,再用一個閘門加稽核加可逆退場區守住,不讓它肥回去。
- 2026-07-16[Dev Workflow] 一群 AI 交接工作卻不用重講:原來是同一套系統的兩條軸
這是 AI Workflow 系列裡『兩軸合流』這一段的收尾。回頭看整段路,前面六篇其實在蓋同一套系統的兩條軸:持久知識(我知道什麼,長效、要用再查)和即時狀態(我現在做到哪,易逝、隨時寫)。這篇講清楚兩條軸為什麼互不代替、怎麼匯流到『多 AI 交接』、又受同一套哲學管——以及那條讓一群不完全信任的模型還能安全協作的中心律:沒有收據就不信。
不想錯過新文章?
訂閱我確保不漏接!
隨時一鍵退訂。