模組二|選題與素材庫(Day 6–11)
模組一講產線的形狀,從今天開始進裡面。第一站是最前端:新聞要怎麼存,才能直接拿來口播。
我的答案是一個 438 則的結構化條目庫。單則平均 7,523 個字元,全庫用過 36 個不同的欄位。
而這一篇真正的內容是一組填充率數字,因為它們是一場沒有人設計的自然實驗。
一則新聞抓下來,它是給人「讀」的。
口播需要的是給人「唸」的,而這兩件事的結構完全不同:
新聞原文一項都不滿足。所以中間需要一層轉換,而那層轉換的產物就是條目。

整排抽屜裡,只有兩格的把手被我摸得發亮
438 則裡,欄位填充率長這樣(節選):
| 欄位 | 有內容 | 填充率 |
|---|---|---|
| 開場鉤子 | 438 | 100% |
| 事件核心 | 438 | 100% |
| 事實查核 | 437 | 99.8% |
| 深度分析 | 434 | 99.1% |
| 事件故事 | 419 | 95.7% |
| 常見問答 | 181 | 41.3% |
| 時間軸 | 182 | 41.6% |
| 人物 | 142 | 32.4% |
| 金句 | 19 | 4.3% |
| 追蹤更新 | 20 | 4.6% |
從 100% 一路掉到 4.3%。
唯二 100% 全覆蓋的,是開場鉤子與事件核心。
沒有任何程式強制它們必填。Day 7 會講模板規格的落實率只有 8%,也就是說,規格根本沒在執行。
那這兩個欄位為什麼會滿?
因為它們每一集都要用。少了鉤子,這一段沒有開場;少了核心,這一段沒有內容。其他欄位是「有就好」,這兩個是「沒有就播不了」。
需求執行了規格沒能執行的東西。
更有意思的是這兩個欄位的內部形狀:
| 平均字元 | 含條列的則數 | |
|---|---|---|
| 開場鉤子 | 367 | 5 / 438 |
| 事件核心 | 661 | 276 / 438(63%) |
鉤子幾乎不用條列,核心大量用條列。
這不是巧合,它剛好對應規則書裡對這兩個欄位的要求:
鉤子是一句話,要點是一張表。 而這件事在寫的時候沒有人檢查,是資料自己長成這樣的。
再看兩個小樣本的欄位:常見問答 181 則、追蹤更新 20 則,兩者的條列率都是 100%。
規律很清楚:凡是為口播設計的欄位,格式都會自己收斂。 因為唸的時候格式不對就會卡住,卡住就會回頭改。

這一格我只能淘,不能填
這是我看這組數字時最不舒服的一格。
金句欄位(一句可以直接朗讀、可以轉貼的引語)438 則裡只有 19 則有。
而它明明是最口播的欄位。
我想了一下,結論是:因為它不能被「填」,只能被「挑」。 鉤子跟核心我可以從新聞裡整理出來,金句必須是原文裡真的有一句夠好的話。多數新聞沒有。
這其實是個好消息,它代表那 19 則的金句是真的,不是為了填欄位硬湊的。
填充率低不一定是問題,要看那個欄位是「整理得出來」還是「碰得到才有」。 整理得出來的欄位填充率低,代表流程有漏;碰得到才有的欄位填充率低,那叫誠實。
回頭看這 36 個欄位,它們不是一次設計出來的。
看得出來的痕跡是:先有幾個核心欄位,然後每遇到一種講不清楚的新聞,就長一個欄位出來。
法律爭議講不清楚 → 長出法律分析欄位。
經濟影響講不清楚 → 長出經濟欄位。
某類議題需要特定視角 → 長出對應的視角欄位。
這個成長方式跟 Day 2 講的產線一模一樣:痛一次,長一個。
好處是每個欄位都對應一種真實的表達需求;壞處 Day 7 整篇講:36 個欄位裡,有一半以上的填充率在 10% 以下,而它們全部都還在 schema 裡。
條目是 JSON,一則一個物件,全部塞在同一個檔案裡。
這個決定在 Day 10 跟 Day 13 各爆炸一次:單一巨型 JSON 檔在兩台機器上同時寫,必然衝突;而有一次衝突標記被直接 commit 進檔案,瀏覽器整個載不動,還在解衝突時掉了 6 則資料。
如果重來,我會拆成一則一個檔。當時沒拆的原因很單純:一開始只有幾十則。
「一開始只有幾十則」是所有單檔資料庫的墓誌銘。
這套 schema 最大的代價是它讓「收一則新聞」變成一件有摩擦的事。
一則新聞要進庫,我得填鉤子、填核心、填查核、標可信度。這比「存個連結」貴太多了。
結果是:有些該收的新聞我沒收,因為當下沒力氣填。 我沒辦法量化這件事(沒進庫的東西不會留下痕跡),但我知道它發生過。
結構化的成本是即時的,收益是延後的。 而人在累的時候會選擇便宜的那個。
第二個代價:36 個欄位裡有一半以上是低填充率的長尾,它們讓每次填條目都要面對一長串「這個要不要填」的判斷。選項多本身就是成本,這件事 Day 5 講過:AI 省的是產出時間,而選項多消耗的是決定時間。
看填充率,不要看 schema。
schema 告訴你「你當初以為需要什麼」,填充率告訴你「實際上什麼被需要」。這兩份清單的差距,就是你的規格跟現實的距離。
具體怎麼做:把你的資料表每個欄位的非空比例算出來,然後分三堆:
第二條,關於為什麼有些規則不用執行就會被遵守:
當一條規則對應到一個「不做就完不成工作」的需求時,它不需要被執行。 開場鉤子沒有任何程式在檢查,但它 438/438,因為少了它,那一段就開不了口。
這是這個系列的主軸(規則怎麼才不會懸空)的第三種答案。前兩種是「寫成程式的斷言」跟「執行者是人的文件」,這一種是把規則綁進工作流程本身,讓不遵守變得不可能完成。
明天講那些沒有這個特性的欄位,以及為什麼 438 則裡只有 35 則符合我自己定的模板。