iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
AI Engineering

《矽墟》:我把一部科幻小說當成軟體專案來管系列 第 6

Day 6|我寫了 20–35 句的規格,200 回實測有 193 回是 20 句

  • 分享至 

  • xImage
  •  

模組二|敘事規格化(Day 5–9)

昨天講一章只推進三件事。今天把規格再推進一層,講到「第幾句」。

然後講一個我今天才發現的東西:我的規格有一半是死的,而且錯得很有系統。

問題:「好不好看」沒有判定點

昨天那條規則管的是「一章裝多少東西」。但裝對數量不代表好看:同樣三件事,可以寫得很抓人,也可以寫得很悶。

而「抓不抓人」這件事,傳統上只能靠感覺判斷。

感覺判斷有兩個問題。第一,作者對自己的稿子沒有第一次閱讀的體驗,你永遠不知道別人讀起來是什麼感覺。第二,感覺無法交接,你沒辦法把「這裡要更緊一點」變成明天的自己能執行的指令。

所以我試著把它寫成規格。

怎麼做:位置型規格

我的拆章表(NOVEL-200-SHORTFORM-PLAN.md,Day 2 講過的那份排 200 回的拆章表)裡,每回的規格長這樣:

  • 長度:20–35 句;先寫動作,再補必要資訊。
  • 0–4 句|鉤住:角色要一件立刻看得懂的事,或讀者拿到一個可猜的問題;第 5 句必改變原本目標。
  • 5–9 句|先給回報:角色嘗試、讀者先得到一個具體答案、戰術優勢或視覺爽點;第 10 句立刻揭露它的代價/更深的一層。
  • 10–14 句|加碼而非拖延:危險升級,但角色必須做出聰明、主動的選擇;第 15 句給一個人物回報。
  • 15–19 句|假勝與更大門:解決本回立即問題的至少一部分;第 20 句再打開一個比本回更想知道的問題。

注意它的形式:不是「要有起伏」,是「第 5 句、第 10 句、第 15 句、第 20 句各要發生什麼」。

這種寫法的好處是它有判定點。我寫完一回,可以逐句數過去,指著第 10 句問「這句有沒有揭露代價」。答案只有有或沒有。

而「這回夠不夠緊湊」永遠沒有答案。

實測:規格的上限從來沒被用到

寫這篇的時候,我對已完稿的 200 回跑了一次統計。原本只是想確認有沒有超規格,結果數字長這樣:

回數: 200
最少: 20  最多: 21  中位數: 20.0  平均: 20.0

落在 20–35 句規格內: 200/200 = 100.0%
低於 20 句: 0   高於 35 句: 0

句數分布: [(20, 193), (21, 7)]

200 回全部合規。但 193 回剛好 20 句,7 回 21 句。

規格寫的是 20 到 35,實際使用範圍是 20 到 21。

上面那 14 句的空間,一次都沒用過。

為什麼會塌到下限

https://ithelp.ithome.com.tw/upload/images/20260811/20183479PIQcaZjUw8.png

我一直在壓這根彈簧,而沒有任何一條規則會把它往上拉

我想了一下,這不是巧合,是兩條規則交互作用的必然結果。

我還有另一條規則叫刪稿判準:

一段文字若拿掉後,角色仍會做同樣的選擇、讀者仍知道下一步要做什麼、伏筆也沒有少,該段就刪或縮成一句。

這條規則是單向的:它只會讓文字變少,永遠不會讓文字變多。

所以流程實際上是這樣跑的:

  1. 我寫出 26 句
  2. 套刪稿判準,砍掉不合格的
  3. 剩下 20 句
  4. 檢查:在 20–35 範圍內,合規,收工

下限 20 是硬的(低於就補),上限 35 是軟的(本來就到不了)。 於是每一回都停在 20。

換句話說:當你的規格是一個範圍,而流程裡有另一條規則會把結果推向某一端,那這個範圍實際上只有那一端存在。

更糟的是:位置規格默默假設了長度 20

https://ithelp.ithome.com.tw/upload/images/20260811/20183479q0dsmF2tU5.png
我提著最後一盞燈站在路的後半段,地上一個插孔也沒有

這才是我今天真正的發現。

那四個節拍點寫的是「第 5 句」「第 10 句」「第 15 句」「第 20 句」:絕對位置。

在 20 句的回裡,這四個點落在:

節拍 第幾句 佔全文
鉤住轉向 5 25%
揭露代價 10 50%
人物回報 15 75%
打開更大的門 20 100%

漂亮的四等分。

現在假設某一回真的寫到規格允許的 35 句:

節拍 第幾句 佔全文
鉤住轉向 5 14%
揭露代價 10 29%
人物回報 15 43%
打開更大的門 20 57%

「打開更大的門」發生在 57% 的位置,然後還有 15 句沒有任何節拍規範。

這回的後 43% 是規格的空白地帶。

也就是說:**我的規格在它自己允許的上限處是壞的。**它只在長度剛好 20 的時候自洽。

而我之所以沒發現,正是因為實際上每一回都是 20 句,那 193 回一直在替我掩蓋這個 bug。

這件事的形狀我在工程上見過很多次:一段程式只在最常見的輸入下正確,而那個輸入常見到你從來沒踩到別的分支。 它不會報錯,它只是從來沒有被真正測過。

那規格該怎麼寫

正確的寫法有兩種:

A. 老實承認長度是固定的:把規格改成「每回 20 句」,節拍點寫絕對位置。簡單、自洽、可驗證。

B. 改成相對位置:節拍點寫成 25%/50%/75%/100%,長度才能真的浮動。

我的實際狀況是 A:規格寫成 B 的形式,執行成 A 的內容,兩邊都沒對齊。

我還沒改,因為改規格文字要連帶審視 200 回。但至少現在我知道那個 35 是假的。

代價

代價一:句子被切碎。

一句一段、每回 20 句的形式,副作用是長句被迫拆開。

有些描寫本來是一個連續的動作,寫成一句比較順。但在這個格式下,它會被拆成兩句佔兩個位置,而位置是有預算的。

所以我的文字整體偏短促。這是格式帶來的文體,不完全是我選的。

代價二:反轉的品質沒有被規格保護。

規格只能檢查「第 10 句有沒有揭露代價」,不能檢查那個代價揭露得好不好。

我可以在第 10 句放一個很敷衍的轉折,形式上完全合規。規格擋得住空白,擋不住敷衍。

這是位置型規格的天花板:它保證結構,不保證內容。

代價三:這也是模組二裡唯一能自動檢查的東西。

句數可以用腳本數(我這篇就是這樣跑出來的)。但「第 5 句有沒有改變目標」沒辦法自動判定,得靠人讀。

所以規格的可檢查程度是分層的:長度 100% 可自動化,節拍 0%。

帶走什麼

一、範圍型規格要檢查它會不會塌到某一端。

寫下「20–35」「重試 3–5 次」「2–4 個 reviewer」之前,先問:

流程裡有沒有另一條規則,會系統性地把結果推向某一端?

有的話,這個範圍就是假的,你實際上只有那個端點。而假範圍最大的害處是它給你一種彈性還在的錯覺。

我如果一開始就寫「每回 20 句」,就會立刻發現節拍點必須配合 20 句設計。是那個「35」讓我以為長度可以浮動,於是規格帶著矛盾活了 200 回。

二、位置型規格必須跟長度綁在一起說。

「第 5 句要 X」這種寫法,隱含了一個長度假設。如果長度可變,位置就必須寫成比例。

同樣的錯在別的地方也很常見:「前三個結果要顯示縮圖」,那如果只有兩個結果呢?「第 8 個字元後截斷」,那如果是全形字呢?

絕對位置 + 可變長度 = 一定有一個區間是沒被規範到的。

三、你的規格如果從沒被違反過,先懷疑它沒被真的用到。

200/200 合規,看起來很棒。但拆開來看,是因為實際使用範圍只有規格的 7%。

合規率 100% 有兩種可能:規格很好,或規格很鬆。 分辨方式是看實際值的分布:如果全部擠在一個點上,那你量的其實是別的東西。


明天 Day 7,講那四個節拍點背後的完整引擎:鉤住 → 回報 → 加碼 → 人物獎勵 → 更大問題。重點會放在第四段:為什麼「人物獎勵」是這五段裡最容易被跳過、但拿掉之後讀者就不會回來的一段。


上一篇
Day 5|一章只允許推進三件事,為什麼是三
下一篇
Day 7|追讀引擎的第四段最容易被跳過,而它是讀者回來的唯一理由
系列文
《矽墟》:我把一部科幻小說當成軟體專案來管11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言