昨天談長度。今天談縮短。
文件太長,就摘要。摘要讀得快、抓重點、沒有錯。然後有一天你需要一個細節,回頭看摘要,它不在那裡。
我目前把它寫成這樣:
若摘要取得目標資訊的唯一途徑是原文,則摘要與目標的互資訊不超過原文與目標的互資訊。
這是資料處理不等式的直接應用。前提是那條鏈:目標、原文、摘要,摘要只從原文來,不從別處拿。前提成立,不等式就成立,這是數學,不是實驗結論。
它也不是在說摘要沒用。等號可以成立,摘要也可以讓能力有限的回答者答得更準。兩者都不反駁不等式。如果哪天結果看起來違反了,先查外部資訊、實驗洩漏、量的定義,不能拿幾題答對率說推翻了數學性質。
還有一條老規矩:沒跑過的實驗不能寫得像有結果;小樣本不能說成普遍現象。
既然是數學性質,今晚不是要「驗證」它,是示範它的一個後果長什麼樣。
一份虛構的專案環境說明,兩百多字。裡面寫測試環境 Python 3.11.4、正式環境 Python 3.10.12,還解釋為什麼不同。
一份摘要,八十多字。寫「測試與正式兩個環境都用 Python」,版本號沒了。摘要沒有錯,它只是把一個當時看起來不重要的細節刪掉了。
三組,問同一題:正式環境的 Python 版本是多少。允許回答「無法得知」。
| 組 | 給什麼 | 工具 |
|---|---|---|
| F | 原文 | 無 |
| Sm | 只有摘要 | 無 |
| Sr | 摘要,加上原文檔案的路徑 | 只允許讀那個檔案 |
模型是 Claude Haiku 4.5,每組五次,共十五次。
四類,程式判:輸出含 3.10.12;輸出「無法得知」且沒有任何版本號;輸出別的版本號;其他。
F 應該答對。Sm 是示範點:版本號不在摘要裡,答對只能靠猜或洩漏,預期落在「無法得知」或「別的版本號」。如果 Sm 答對了,先查洩漏,不得說摘要把資訊變回來了。Sr 看模型會不會回頭查原文。
也事先寫了:Sm 五次都「無法得知」是摘要的正確使用,不是反例。
材料、判準、預期,在第一次呼叫之前提交進版本控制。
| 組 | 答 3.10.12 | 無法得知 | 別的版本號 | 讀了原文 |
|---|---|---|---|---|
| F 原文 | 5 | 0 | 0 | 不適用 |
| Sm 只有摘要 | 0 | 5 | 0 | 不能 |
| Sr 摘要加路徑 | 5 | 0 | 0 | 5 |
三組乾淨分開。
Sm 五次全答「無法得知」。沒有一次編一個版本號出來。
Sr 五次都回頭讀了原文檔案,然後答對。用量比 Sm 多了大約一萬 token,跟讀進一份原文相符。
我想先講這件事。
那份摘要是我寫的。我刻意刪掉版本號,但刪的方式是合理的:寫摘要的當下,「兩個環境都用 Python」就是重點,版本號是細節。任何人寫這份摘要都可能這樣寫。
然後問題來了:正式環境的版本。這個問題在寫摘要時不存在,寫完之後才變重要。摘要不可能預知它。
這就是不等式說的事。摘要能給的,不會多於原文能給的。它可以等於,可以少於,不能多於。今晚少了一個版本號。
Sm 五次全答無法得知,我認為是今晚最好的結果。
模型手上只有摘要。摘要沒有版本號。它可以猜一個,3.11 或 3.12,看起來都合理,說不定還猜中。它沒有。五次都說不知道。
這是摘要的正確用法:讀摘要,知道摘要沒說的就是不知道,去找原文。Sr 組做的正是這件事:摘要沒有,有路回原文,就回去。
得說清楚,提示詞明給了「無法得知」這個出口。沒給出口,模型會不會編一個版本號,本次沒測。
第一,一份原文、一種摘要、每組五次。
第二,摘要是我寫的,不是模型寫的。 模型自己摘要時會刪什麼,是另一個問題。
第三,出口明給。 沒出口的情況未知。
它是數學性質,不被答題結果推翻。能被推翻的是前提:如果摘要不只從原文來,還從別處拿了資訊,那條鏈就斷了,不等式不適用。今晚摘要只從原文來,前提成立。
如果 Sm 出現答對,不是推翻,是要查洩漏。今晚零次。
留一條回原文的路。
摘要拿來讀,原文拿來查。兩者一起留著,摘要就是加速器。只留摘要,它就是一道門,門後面的東西再也拿不回來。Sr 組跟 Sm 組的差別,只是多了一行路徑。
紀錄表這次加的是一欄:「原文在哪」。
本文的協作紀錄是:原文、摘要、三份提示詞、判定程式與預期在任何一次呼叫之前提交,之後未修改;十五次輸出逐字保留,判定由程式執行;Sr 組是否讀檔由工具呼叫次數與用量反推。提示詞裡的檔案路徑在版本控制中存為佔位,實際呼叫用本機路徑。文章由 Claude 根據作者整理的寫作規則起草,作者尚未核對。這篇沒有做 Day 2 那種六個審查者的檢查。
下一篇談記憶可取用律:存起來了,跟用得到,不是同一件事。