要比較產生籤餅訊息的不同做法,可以同時評估四個面向:資料庫來源從哪裡來、如何從該資料庫中選取一行、選取方法是否能偏好某些項目,以及該工具是否做出任何預測性或建議性的宣稱。最乾淨的比較方式,是把靜態資料庫查詢、單鍵隨機選取搭配簡單取模、真正的隨機選取搭配拒絕採樣,以及人工智慧生成的文字分開來看。一個基於瀏覽器的工具,透過 Web Crypto API 並使用拒絕採樣,從 36 則原創短訊中抽取一則,恰好佔據了比較圖譜中一個明確且可驗證的位置:原創內容、無偏差的索引對應,以及零預測、零幸運號碼、零個人化建議輸出。這件事之所以重要,是因為「fortune cookie」聽起來像占卜術語,雖然它的形式其實只是一句簡短有趣的話,所以比較時必須先把界線講清楚,讀者才能選擇做法。本文接下來會逐一檢視各個面向,再示範 Fortune Cookie Generator 方式的完整步驟。

產生籤餅訊息的做法
大多數自稱為籤餅產生器的工具大致可分為四類。第一類是靜態資料庫:工具內建一份固定清單,點擊時依索引挑出一行,並可能會在每次工作階段之間重新洗牌。第二類是有偏差的隨機挑選器:它向作業系統或瀏覽器取得一個數字,再把該數字除以題庫長度取餘數;在無法整除隨機空間的題庫下,這會讓前面的項目佔到極微小的統計優勢。第三類是無偏差的隨機挑選器:它要求一個隨機的 32 位元無符號值,並使用拒絕採樣去除不完整的尾段,再把可接受的值對應到題庫索引。第四類則使用生成模型即時組合一行文字,通常根本沒有固定題庫。
正確的比較很少是「哪一個最好」,而是「哪一種取捨最符合你真正想要的」。靜態資料庫可預測且易於稽核。有偏差的隨機挑選器易於實作,且在題庫剛好整除 2^32 時是可接受的。拒絕採樣挑選器的程式碼較多,但能在整個題庫上產生均勻分布。生成模型每次都能產生新措辭,但這些措辭沒有可稽核的來源。本文介紹的瀏覽器工具屬於第三類,採用一份為產品原創、而非借用自公開清單、引文檔案庫或商業籤語資料庫的 36 行題庫。
選取方法的差異
對一個 36 行題庫來說,單一 32 位元無符號值的範圍是 0 到 4,294,967,295。這個範圍不是 36 的整數倍,因此對該值取模 36 會留下一段不完整的餘數帶,讓索引 0 到 3 的對應項目出現機率略高。數值差距雖然很小,但是真實存在的,這也是無偏差工具採用拒絕採樣而非單一取模的原因。
Fortune Cookie Generator 採用的是第三種做法:它向 globalThis.crypto.getRandomValues 取得一個全新的安全 32 位元值,計算低於 2^32 且能完整容納的最大倍數作為題庫長度的倍數,並拒絕落在不完整尾段中的任何值。純粹的選取函式會持續以新的安全值重試,直到取得可接受的值為止;若注入的損壞來源提供了無效熵,則設有 128 次嘗試的安全上限。可接受的值接著會均勻地對應到陣列索引。整個過程不使用 Math.random、Date.now 或渲染當下的時間戳,也不涉及任何伺服器端點。相同做法在 這篇關於無偏差選取的分析 中有詳細說明,直接示範了拒絕採樣的數學原理。
如何使用瀏覽器工具產生籤餅
- 在目前的瀏覽器分頁中開啟 Fortune Cookie Generator 頁面。
- 開啟類別選單並選擇 All,從完整的 36 行題庫中抽選;或縮小範圍至 Focus、Curiosity、Creativity 或 Everyday,從該類別的 9 行中抽選。
- 選擇 Generate message,向瀏覽器的 Web Crypto API 請求一個全新的安全 32 位元整數,透過拒絕採樣對應到題庫項目。
- 在結果面板中閱讀顯示的類別標籤與完整訊息;在此步驟之前不會存在任何訊息。
- 選擇 Copy message,將目前可見的一行複製到剪貼簿;或選擇 Reset 清除結果,並將類別重設回 All,恢復完整題庫。
切換類別會清除舊的結果,避免前一類別的一行留在新的標籤下。複製功能僅在使用者操作後才會使用 Clipboard API,並回報成功或手動複製的備援方案。若瀏覽器封鎖 Web Crypto API,結果面板會顯示明確的瀏覽器支援訊息,並清除任何先前的輸出。首次載入時不會有任何 Generate 動作;刻意維持首次閒置渲染,是為了避免水合差異,並防止在使用者操作前出現結果。
類別篩選與完整題庫的比較
類別篩選的決策比重低於選取方法,但它會改變抽選的題庫,因此仍值得比較。下表顯示每個題庫選擇實際包含的內容,以及適合的使用情境。
| 題庫選擇 | 題庫行數 | 主題領域 | 典型使用情境 |
|---|---|---|---|
| All | 36 | 橫跨全部四個類別的完整組合 | 想要最廣泛的變化,或尚未決定想要何種氛圍 |
| Focus | 9 | 小任務與明確的開始 | 尋找一個生產力提示或是一行開場 |
| Curiosity | 9 | 提問、不尋常的角度、玩味的聯想 | 想要一個寫作提示或一個值得咀嚼的想法 |
| Creativity | 9 | 草稿、限制、重組、未完成的想法 | 進行腦力激盪或重寫卡住的一段文字 |
| Everyday | 9 | 書頁、筆、散步、音樂、點心、新鮮空氣、瀏覽器分頁、椅子 | 需要一個輕鬆的暫停,或快速的團隊破冰 |
這種比較屬於質性而非量化,因為題庫大小是由產品定義的(每個類別 9 則訊息,共 36 則)。每一行的確切措辭屬於原創題庫的一部分,而非依每次請求計算而成,因此沒有任何工具能在按下 Generate 之前顯示「最佳」一行。所以正確的比較是「哪個題庫契合當下的情境」,而不是「哪個題庫能產生分數較高的文字」。
想要安靜展開一天工作的讀者,可以選擇 Focus 反覆抽取,直到該行對應到一項真正的任務。想要日誌提示的讀者,可以選擇 Curiosity,把該行當作一個用三句話回答的提問。重寫卡住段落的讀者,可以選擇 Creativity,把該行視為一項限制。主持站立會議的讀者,可以選擇 Everyday,把該行當作快速的破冰話題。題庫的選擇與選取方法無關:無論啟用哪個題庫,都會套用同一條拒絕採樣路徑。
這個產生器不做的事
比較做法也意味著要留意每種做法宣稱了什麼。本文介紹的瀏覽器工具刻意不提供任何預測、幸運號碼、健康、財務、感情、法律或醫療建議,也不對個人提問進行任何分析。「fortune」這個詞描述的是大家熟悉的餅乾格式,而非占卜結果。題庫是為產品原創撰寫的內容,並非抄襲自公開引文、俗諺或商業籤語資料庫,而安全措辭測試則用於驗證題庫中沒有夾帶受限的宣稱。
隱私也是比較的一環。所有狀態都保留在目前的瀏覽器分頁中。該工具不會將任何提示、類別選擇或結果送到任何伺服器,不會寫入 localStorage、sessionStorage、IndexedDB 或使用者帳號,且只有按下 Copy 時才會碰觸剪貼簿。需要離線、私密且可稽核做法的讀者,可以從瀏覽器開發者工具的網路面板驗證以上所有事項。
如果讀者真正想要的是具有明確證據與界限的占卜體驗,那麼 I Ching Reading、Tarot Card Reading 與 Rune Reading 等獨立工具佔據了該領域,並各自擁有其規則與限制,應該依據其自身條件來評估,而非與一個純粹趣味的文字挑選器逐行比較。
無論選擇哪一種做法,都值得在第一次點擊之前先做比較:原創與借用內容、有偏差與無偏差選取、預測性與純趣味、線上與離線。本文介紹的瀏覽器工具落在無偏差隨機選取這一側,搭配原創 36 行題庫與零建議輸出,這也是它適合用於寫作提示、團隊破冰或輕量新奇時刻,卻又不會讓人對真正的算命產品產生期待的原因。
想進一步了解,請參閱 如何比較生命靈數計算方法。