Quizzman Tarot Engine-採用 Fisher–Yates 與 CSPRNG 的 Rider–Waite 塔羅抽牌引擎

塔羅牌並不只是「隨機抽一張牌,再套用牌義」。

在數位環境中,更重要的是:

  • 洗牌是否真正均勻?
  • 隨機來源是否足夠安全?
  • 解讀是否能依照不同主題提供合適的分析?

Quizzman Tarot Engine 是 Quizzman Lab 的 Rider–Waite–Smith(RWS)塔羅引擎,將 78 張牌標準化後,利用 Fisher–Yates(費雪-耶茨洗牌演算法) 配合 CSPRNG(密碼學安全偽隨機數產生器) 進行洗牌,再支援正位(Upright)與逆位(Reversed)抽牌,最後透過 NLP(Natural Language Processing,自然語言處理) 依不同主題(感情、事業、財務、健康、心靈)產生完整解讀。

體驗:

>

https://lab.quizzman.com/tarot


Quizzman Tarot 是什麼?

Quizzman Tarot 主要由三個層次組成:

  1. Deck Data(牌組資料)

- 標準 Rider–Waite–Smith 78 張牌 - 包含 Major Arcana(大阿爾克那)與 Minor Arcana(小阿爾克那) - 每張牌附有關鍵字、元素、原型(Archetype,原型)、權重等資料

  1. Shuffle & Draw Engine(洗牌與抽牌引擎)

- 建立洗牌 Session(工作階段) - 支援一張牌或三張牌抽取 - 支援 Upright(正位)與 Reversed(逆位)

  1. Interpret Layer(解讀層)

- 依不同主題評分 - 分析牌與牌之間的關聯 - 產生完整文章式解讀,包括: - Overview(總覽) - Story(故事) - Analysis(分析) - Advice(建議) - Timeline(時間趨勢) - Yes / No(是/否)

不同於僅隨機抽牌再套用固定模板的網站,Quizzman 將 公平抽牌語意解讀 完全分離。


Rider–Waite–Smith 牌組

Quizzman 採用經典 Rider–Waite–Smith(1909)

其特色為:

  • 22 張 Major Arcana(大阿爾克那)

- 從 The Fool(愚者)到 The World(世界)

  • 56 張 Minor Arcana(小阿爾克那)

- Wands(權杖) - Cups(聖杯) - Swords(寶劍) - Pentacles(錢幣) - 每一花色包含 Ace–10 與 Court Cards(宮廷牌)

原始資料來自開源資料集,再加入:

  • 中文名稱
  • 主題解讀
  • probabilityWeight(機率權重)

最後編譯為 cards.json 供 API 使用。


抽牌演算法

Fisher–Yates(費雪-耶茨洗牌演算法)

Fisher–Yates 是目前公認可產生均勻排列(Uniform Permutation,均勻排列)的標準演算法。

流程如下:

  1. 建立 78 張牌。
  2. 從最後一張開始。
  3. [0,i] 範圍內隨機選取一個位置。
  4. 交換兩張牌。
  5. 完成整副牌洗牌。

之後即可抽取前 k 張牌。

每張牌再依設定機率決定:

  • Upright(正位)
  • Reversed(逆位)

預設逆位約 45%。

若亂數均勻,78!(78 階乘)種排列皆具有相同機率。


CSPRNG(密碼學安全偽隨機數產生器)

許多網站仍使用:

Math.random()

它只是一般用途 PRNG(Pseudo Random Number Generator,偽隨機數產生器),並非密碼學安全來源。

Quizzman Tarot:

正式環境

使用:

  • crypto.randomInt()
  • 系統 Entropy(熵)

作為 CSPRNG。

測試模式

若指定 Seed(種子):

SHA-256
↓

Mulberry32

即可得到可重現的結果,方便:

  • 測試
  • QA(品質保證)
  • Audit(稽核)

因此:

  • 正式抽牌不可預測
  • 測試抽牌可完全重現

正位/逆位

洗牌完成後,每張牌再決定方向:

  • Upright(正位)
  • Reversed(逆位)

UI 會播放翻牌動畫,再將:

{
 id,
 orientation
}

送交 Interpret Engine。


系統架構

使用者
        │
        ▼
Quizzman Lab Gateway
        │
        ▼
Tarot Engine
        │
        ▼
PostgreSQL

Gateway 提供:

  • API Proxy(代理)
  • 身分驗證
  • Guest ID
  • Client Metadata(用戶端資訊)

Tarot Engine 負責:

  • 洗牌
  • 抽牌
  • NLP 解讀
  • 配額管理

PostgreSQL 儲存:

  • 抽牌紀錄
  • Guest Fingerprint(裝置指紋)

主要元件

| 元件 | 功能 | |------|------| | Frontend | 抽牌、翻牌動畫、顯示解讀 | | Gateway | API Proxy、身份資訊 | | Tarot Engine | 抽牌與 NLP 解讀 | | PostgreSQL | 儲存歷史紀錄 |


API

主要 API 包括:

  • POST /v1/deck/new

建立洗好的牌組

  • POST /v1/deck/:id/draw

抽牌

  • GET /v1/quota

查詢剩餘次數

  • POST /v1/interpret

根據牌組與主題產生解讀

Lab 使用:

/api/tool-module/tarot

作為 Gateway。


使用配額

為避免濫用:

訪客

  • 一生一次
  • 使用 Guest ID + Fingerprint(裝置指紋)

免費會員

  • 每日一次
  • 採 Asia/HoChiMinh 時區

Pro 以上

  • 每日三次以上
  • 依方案而定

每次成功解讀均會儲存:

  • 主題
  • 抽到的牌
  • Summary(摘要)
  • Browser(瀏覽器)
  • OS(作業系統)
  • Device(裝置)

UI 僅顯示剩餘次數,不公開電子郵件等資訊。


NLP 解讀

Interpret Engine 並非單純列出牌義。

流程包括:

  1. 載入每張牌的 Metadata(中繼資料)
  2. 依主題評分
  3. 分析牌與牌之間的組合或衝突
  4. 生成完整文章,包括:
  • Overview(總覽)
  • Story(故事)
  • Individual Analysis(逐張分析)
  • Advice(建議)
  • Timeline(時間趨勢)
  • Yes/No

目前支援:

  • 中文(繁體)
  • English
  • Tiếng Việt

在 Quizzman 生態中的角色

| 系統 | 關係 | |------|------| | Quizzman Lab | 提供 Tarot UI 與 API Gateway | | I-Ching Engine | 同屬占卜引擎,但採不同 RNG 與規則 | | Quizzman ID | 管理會員與配額 |


Quizzman Tarot 不是什麼?

它:

  • 不取代心理諮詢
  • 不取代法律或醫療建議
  • 不使用 LLM(大型語言模型)憑空生成牌義
  • 正式環境不使用 Math.random()
  • 不是實體塔羅牌商城

它是一套具有結構化流程的 Tarot Engine(塔羅引擎)


適用對象

適合:

  • 想體驗 Rider–Waite 線上抽牌的人
  • 學習塔羅者
  • 想了解正位/逆位差異的人
  • 對 Fisher–Yates 與 CSPRNG 有興趣的開發者
  • Quizzman Pro 使用者

結論

Quizzman Tarot Engine 建立於三大核心之上:

  • 標準化 Rider–Waite 78 張牌資料
  • Fisher–Yates(費雪-耶茨洗牌演算法)+ CSPRNG(密碼學安全偽隨機數產生器)
  • 依不同主題提供 NLP(自然語言處理)解讀

每一次抽牌都可透過配額管理與歷史紀錄保持一致且可追蹤,提供比一般隨機抽牌網站更透明、更完整的使用體驗。

立即體驗:

https://lab.quizzman.com/tarot