{"slug":"quizzman-tarot-engine","title":"Quizzman Tarot Engine – Gieo Bài Rider–Waite Bằng Fisher–Yates & CSPRNG","summary":"Quizzman Tarot Engine gieo bài Rider–Waite–Smith bằng Fisher–Yates và CSPRNG, kèm luận giải NLP theo lĩnh vực trên Quizzman Lab.","excerpt":"Quizzman Tarot Engine gieo bài Rider–Waite–Smith bằng Fisher–Yates và CSPRNG, kèm luận giải NLP theo lĩnh vực trên Quizzman Lab.","markdown":"# Quizzman Tarot Engine – Gieo Bài Rider–Waite Bằng Fisher–Yates & CSPRNG\nTarot không chỉ là “rút bài ngẫu nhiên rồi đọc nghĩa”. Khi đưa lên môi trường số, câu hỏi then chốt là: **hoán vị có đều không**, **nguồn ngẫu nhiên có đoán được không**, và **luận giải có gắn ngữ cảnh lĩnh vực không**.\n**Quizzman Tarot Engine** là lớp gieo bài Rider–Waite–Smith (RWS) của Quizzman Lab: chuẩn hoá 78 lá, xáo bằng **Fisher–Yates** với **CSPRNG**, rút xuôi/đảo, rồi soạn luận giải NLP theo domain (tình yêu, sự nghiệp, tài chính, sức khỏe, tinh thần) bằng tiếng Việt, English hoặc 繁中.\nTrải nghiệm: [https://lab.quizzman.com/tarot](https://lab.quizzman.com/tarot)\n## Quizzman Tarot Là Gì?\nQuizzman Tarot gồm ba lớp:\n**Deck data** — 78 lá RWS (Major + Minor) dưới dạng JSON chuẩn hoá, kèm enrichment từ khóa, nguyên tố, archetype và trọng số xác suất.\n**Shuffle & Draw Engine** — tạo session bộ bài đã xáo, rút 1 hoặc 3 lá với orientation upright/reversed.\n**Interpret layer** — chấm điểm theo domain, kết hợp lá, và sinh bài luận giải dạng article (overview, story, analysis, advice, timeline, yes/no).\nKhác với trang “bói bài” chỉ random rồi ghép câu mẫu thô, engine tách rõ **ngẫu nhiên công bằng** và **luận giải có cấu trúc**.\n## Bộ Bài Rider–Waite–Smith\nEngine dùng truyền thống **Rider–Waite–Smith (1909)**: cả Ẩn chính và Ẩn phụ đều có minh họa cảnh — dễ luận giải hơn bộ Marseille kiểu pip.\n**22 Major Arcana** — hành trình The Fool → The World\n**56 Minor Arcana** — Wands, Cups, Swords, Pentacles × Ace–10 + Court\nDữ liệu gốc tham chiếu dataset mã nguồn mở; Quizzman bổ sung lớp enrichment (tên Việt, domain interpretation, probabilityWeight) rồi build thành `cards.json` phục vụ API.\n## Thuật Toán Gieo: Fisher–Yates + CSPRNG\n### Fisher–Yates (Knuth shuffle)\nĐây là thuật toán chuẩn để tạo **hoán vị đều** của N phần tử trong O(N):\nBắt đầu với bộ 78 lá (ID 0…77).\nVới `i` từ 77 xuống 1, chọn `j` nguyên đều trong khoảng `[0, i]`.\nĐổi chỗ `deck[i]` và `deck[j]`.\nRút `k` lá đầu của bộ đã xáo; mỗi lá có thể **reversed** theo xác suất cấu hình (Lab mặc định khoảng 45%).\nKhi RNG đều, mỗi thứ tự bài có xác suất bằng nhau — không thiên lệch vị trí “lá đẹp” về cuối bộ.\n### CSPRNG thay cho Math.random()\nNhiều công cụ web dùng `Math.random()`. Đó là PRNG thường: đủ cho UI, nhưng **không** phải nguồn mật mã; nếu lộ trạng thái có thể dự đoán dãy tiếp theo.\nQuizzman Tarot mặc định:\n**Không seed** → `crypto.randomInt` / entropy hệ thống (CSPRNG) cho phiên sản xuất.\n**Có seed** → hash SHA-256 + Mulberry32 để **tái lập** kết quả khi kiểm thử hoặc audit.\nNhờ đó, phiên thật khó đoán; phiên test vẫn lặp lại được khi cần.\n### Orientation xuôi / đảo\nSau khi có thứ tự lá, engine gán orientation:\n`upright` — nghĩa xuôi theo keywords/domain\n`reversed` — đảo nghĩa / reversalEffects, ảnh hưởng scorer\nUI Lab lật bài animation rồi gửi `{ id, orientation }` sang interpret.\n## Kiến Trúc Triển Khai\n```\nNgười dùng (lab.quizzman.com/tarot)\n│\n▼\nQuizzman Lab gateway (:14000)\n• SSO tùy chọn (Quizzman ID)\n• Forward X-User-* / X-Guest-ID + IP/UA\n│\n▼\ntarot-engine (:14003)\n• Cards repository\n• Shuffle / draw session\n• Interpret NLP\n• Quota + ghi lịch sử\n│\n▼\nPostgreSQL qm_tarot\n• tarot_readings\n• tarot_guests (fingerprint thiết bị)\n```\n### Thành phần chính\n| Thành phần | Vai trò |\n|------------|---------|\n| Frontend Lab | QMF shell, chọn lĩnh vực, flip card, hiện luận giải |\n| Gateway | Proxy `/api/tool-module/tarot`, gắn identity & client meta |\n| tarot-engine | REST API deck + interpret + quota |\n| PostgreSQL `qm_tarot` | Lịch sử trải bài và guest fingerprint |\n### API tiêu biểu\n`POST /v1/deck/new` — tạo bộ đã xáo (`seed` tùy chọn)\n`POST /v1/deck/:id/draw` — rút `count` lá\n`GET /v1/quota` — số lượt còn lại\n`POST /v1/interpret` — luận giải theo `domain` + `lang` + `cards`\nQua Lab: tiền tố `/api/tool-module/tarot`.\n## Quota & Lịch Sử\nĐể chống crawl/bot và giữ trải nghiệm công bằng:\n**Khách:** 1 lần (lifetime) — `guestId` lưu trên trình duyệt + fingerprint IP/UA phía server\n**User free:** 1 lần / ngày (múi giờ Asia/Ho_Chi_Minh)\n**Pro trở lên:** từ 3 lần / ngày trở lên theo tier\nMỗi lần interpret thành công được ghi vào `tarot_readings` (domain, lá, summary, UA, browser/OS/device…)\nUI chỉ hiện **số lượt còn** và nút nâng cấp — không phô email.\n## Luận Giải NLP Theo Domain\nInterpret không dừng ở “liệt kê keyword”. Engine:\nResolve metadata từng lá theo orientation\nScore theo `probabilityWeight` và domain\nGhép combination / conflict\nSinh narrative: overview, story & journey, phân tích từng lá, lời khuyên, timeline, yes/no\nNgôn ngữ luận giải: **vi** · **en** · **zht** (phồn thể).\n## Vị Trí Trong Hệ Sinh Thái Quizzman\n| Sản phẩm | Quan hệ |\n|----------|---------|\n| [Quizzman Lab](https://wiki.quizzman.com/wiki/quizzman-lab) | Host UI `/tarot` và gateway API |\n| [I-Ching Engine](https://wiki.quizzman.com/wiki/quizzman-i-ching-engine) | Họ “gieo” deterministic / có kiểm soát RNG khác truyền thống |\n| Quizzman ID / Payments | SSO tier Pro+ mở thêm lượt |\n## Quizzman Tarot Không Phải Là Gì?\nKhông thay thế tư vấn tâm lý hoặc quyết định pháp lý / y tế\nKhông phải LLM “bịa” nghĩa lá không nguồn\nKhông dùng `Math.random()` cho phiên gieo sản xuất\nKhông phải marketplace bán bộ bài vật lý\nĐây là **engine gieo + luận giải có cấu trúc** trên Lab.\n## Đối Tượng\nNgười muốn gieo RWS online với quy trình rõ ràng\nNgười học Tarot cần thấy xuôi/đảo và domain\nLập trình viên / R&D quan tâm Fisher–Yates + CSPRNG trên bộ 78 lá\nUser Quizzman Pro cần nhiều lượt hơn mỗi ngày\n## Kết Luận\n**Quizzman Tarot Engine** đưa Tarot Rider–Waite lên hạ tầng Lab với ba trụ cột: **dữ liệu 78 lá chuẩn hoá**, **xáo Fisher–Yates + CSPRNG**, và **luận giải NLP theo lĩnh vực**. Mỗi lần gieo có thể kiểm soát quota và lưu lịch sử — minh bạch hơn các trang random thuần túy.\nBắt đầu tại [https://lab.quizzman.com/tarot](https://lab.quizzman.com/tarot).","html":"<h1>Quizzman Tarot Engine – Gieo Bài Rider–Waite Bằng Fisher–Yates &amp; CSPRNG</h1><p>Tarot không chỉ là “rút bài ngẫu nhiên rồi đọc nghĩa”. Khi đưa lên môi trường số, câu hỏi then chốt là: <strong>hoán vị có đều không</strong>, <strong>nguồn ngẫu nhiên có đoán được không</strong>, và <strong>luận giải có gắn ngữ cảnh lĩnh vực không</strong>.</p><p><strong>Quizzman Tarot Engine</strong> là lớp gieo bài Rider–Waite–Smith (RWS) của Quizzman Lab: chuẩn hoá 78 lá, xáo bằng <strong>Fisher–Yates</strong> với <strong>CSPRNG</strong>, rút xuôi/đảo, rồi soạn luận giải NLP theo domain (tình yêu, sự nghiệp, tài chính, sức khỏe, tinh thần) bằng tiếng Việt, English hoặc 繁中.</p><blockquote>Trải nghiệm: <a href=\"https://lab.quizzman.com/tarot\" target=\"_blank\" rel=\"noopener\">https://lab.quizzman.com/tarot</a></blockquote><h2>Quizzman Tarot Là Gì?</h2><p>Quizzman Tarot gồm ba lớp:</p><ol><li><strong>Deck data</strong> — 78 lá RWS (Major + Minor) dưới dạng JSON chuẩn hoá, kèm enrichment từ khóa, nguyên tố, archetype và trọng số xác suất.</li><li><strong>Shuffle &amp; Draw Engine</strong> — tạo session bộ bài đã xáo, rút 1 hoặc 3 lá với orientation upright/reversed.</li><li><strong>Interpret layer</strong> — chấm điểm theo domain, kết hợp lá, và sinh bài luận giải dạng article (overview, story, analysis, advice, timeline, yes/no).</li></ol><p>Khác với trang “bói bài” chỉ random rồi ghép câu mẫu thô, engine tách rõ <strong>ngẫu nhiên công bằng</strong> và <strong>luận giải có cấu trúc</strong>.</p><h2>Bộ Bài Rider–Waite–Smith</h2><p>Engine dùng truyền thống <strong>Rider–Waite–Smith (1909)</strong>: cả Ẩn chính và Ẩn phụ đều có minh họa cảnh — dễ luận giải hơn bộ Marseille kiểu pip.</p><ul><li><strong>22 Major Arcana</strong> — hành trình The Fool → The World</li><li><strong>56 Minor Arcana</strong> — Wands, Cups, Swords, Pentacles × Ace–10 + Court</li></ul><p>Dữ liệu gốc tham chiếu dataset mã nguồn mở; Quizzman bổ sung lớp enrichment (tên Việt, domain interpretation, probabilityWeight) rồi build thành <code>cards.json</code> phục vụ API.</p><h2>Thuật Toán Gieo: Fisher–Yates + CSPRNG</h2><h3>Fisher–Yates (Knuth shuffle)</h3><p>Đây là thuật toán chuẩn để tạo <strong>hoán vị đều</strong> của N phần tử trong O(N):</p><ol><li>Bắt đầu với bộ 78 lá (ID 0…77).</li><li>Với <code>i</code> từ 77 xuống 1, chọn <code>j</code> nguyên đều trong khoảng <code>[0, i]</code>.</li><li>Đổi chỗ <code>deck[i]</code> và <code>deck[j]</code>.</li><li>Rút <code>k</code> lá đầu của bộ đã xáo; mỗi lá có thể <strong>reversed</strong> theo xác suất cấu hình (Lab mặc định khoảng 45%).</li></ol><p>Khi RNG đều, mỗi thứ tự bài có xác suất bằng nhau — không thiên lệch vị trí “lá đẹp” về cuối bộ.</p><h3>CSPRNG thay cho Math.random()</h3><p>Nhiều công cụ web dùng <code>Math.random()</code>. Đó là PRNG thường: đủ cho UI, nhưng <strong>không</strong> phải nguồn mật mã; nếu lộ trạng thái có thể dự đoán dãy tiếp theo.</p><p>Quizzman Tarot mặc định:</p><ul><li><strong>Không seed</strong> → <code>crypto.randomInt</code> / entropy hệ thống (CSPRNG) cho phiên sản xuất.</li><li><strong>Có seed</strong> → hash SHA-256 + Mulberry32 để <strong>tái lập</strong> kết quả khi kiểm thử hoặc audit.</li></ul><p>Nhờ đó, phiên thật khó đoán; phiên test vẫn lặp lại được khi cần.</p><h3>Orientation xuôi / đảo</h3><p>Sau khi có thứ tự lá, engine gán orientation:</p><ul><li><code>upright</code> — nghĩa xuôi theo keywords/domain</li><li><code>reversed</code> — đảo nghĩa / reversalEffects, ảnh hưởng scorer</li></ul><p>UI Lab lật bài animation rồi gửi <code>{ id, orientation }</code> sang interpret.</p><h2>Kiến Trúc Triển Khai</h2><p><code>`</code></p><p>Người dùng (lab.quizzman.com/tarot)</p><p>        │</p><p>        ▼</p><p>Quizzman Lab gateway (:14000)</p><p>  • SSO tùy chọn (Quizzman ID)</p><p>  • Forward X-User-* / X-Guest-ID + IP/UA</p><p>        │</p><p>        ▼</p><p>tarot-engine (:14003)</p><p>  • Cards repository</p><p>  • Shuffle / draw session</p><p>  • Interpret NLP</p><p>  • Quota + ghi lịch sử</p><p>        │</p><p>        ▼</p><p>PostgreSQL qm_tarot</p><p>  • tarot_readings</p><p>  • tarot_guests (fingerprint thiết bị)</p><p><code>`</code></p><h3>Thành phần chính</h3><p>| Thành phần | Vai trò |</p><p>|------------|---------|</p><p>| Frontend Lab | QMF shell, chọn lĩnh vực, flip card, hiện luận giải |</p><p>| Gateway | Proxy <code>/api/tool-module/tarot</code>, gắn identity &amp; client meta |</p><p>| tarot-engine | REST API deck + interpret + quota |</p><p>| PostgreSQL <code>qm_tarot</code> | Lịch sử trải bài và guest fingerprint |</p><h3>API tiêu biểu</h3><ul><li><code>POST /v1/deck/new</code> — tạo bộ đã xáo (<code>seed</code> tùy chọn)</li><li><code>POST /v1/deck/:id/draw</code> — rút <code>count</code> lá</li><li><code>GET /v1/quota</code> — số lượt còn lại</li><li><code>POST /v1/interpret</code> — luận giải theo <code>domain</code> + <code>lang</code> + <code>cards</code></li></ul><p>Qua Lab: tiền tố <code>/api/tool-module/tarot</code>.</p><h2>Quota &amp; Lịch Sử</h2><p>Để chống crawl/bot và giữ trải nghiệm công bằng:</p><ul><li><strong>Khách:</strong> 1 lần (lifetime) — <code>guestId</code> lưu trên trình duyệt + fingerprint IP/UA phía server</li><li><strong>User free:</strong> 1 lần / ngày (múi giờ Asia/Ho_Chi_Minh)</li><li><strong>Pro trở lên:</strong> từ 3 lần / ngày trở lên theo tier</li><li>Mỗi lần interpret thành công được ghi vào <code>tarot_readings</code> (domain, lá, summary, UA, browser/OS/device…)</li></ul><p>UI chỉ hiện <strong>số lượt còn</strong> và nút nâng cấp — không phô email.</p><h2>Luận Giải NLP Theo Domain</h2><p>Interpret không dừng ở “liệt kê keyword”. Engine:</p><ol><li>Resolve metadata từng lá theo orientation</li><li>Score theo <code>probabilityWeight</code> và domain</li><li>Ghép combination / conflict</li><li>Sinh narrative: overview, story &amp; journey, phân tích từng lá, lời khuyên, timeline, yes/no</li></ol><p>Ngôn ngữ luận giải: <strong>vi</strong> · <strong>en</strong> · <strong>zht</strong> (phồn thể).</p><h2>Vị Trí Trong Hệ Sinh Thái Quizzman</h2><p>| Sản phẩm | Quan hệ |</p><p>|----------|---------|</p><p>| <a href=\"https://wiki.quizzman.com/wiki/quizzman-lab\" target=\"_blank\" rel=\"noopener\">Quizzman Lab</a> | Host UI <code>/tarot</code> và gateway API |</p><p>| <a href=\"https://wiki.quizzman.com/wiki/quizzman-i-ching-engine\" target=\"_blank\" rel=\"noopener\">I-Ching Engine</a> | Họ “gieo” deterministic / có kiểm soát RNG khác truyền thống |</p><p>| Quizzman ID / Payments | SSO tier Pro+ mở thêm lượt |</p><h2>Quizzman Tarot Không Phải Là Gì?</h2><ul><li>Không thay thế tư vấn tâm lý hoặc quyết định pháp lý / y tế</li><li>Không phải LLM “bịa” nghĩa lá không nguồn</li><li>Không dùng <code>Math.random()</code> cho phiên gieo sản xuất</li><li>Không phải marketplace bán bộ bài vật lý</li></ul><p>Đây là <strong>engine gieo + luận giải có cấu trúc</strong> trên Lab.</p><h2>Đối Tượng</h2><ul><li>Người muốn gieo RWS online với quy trình rõ ràng</li><li>Người học Tarot cần thấy xuôi/đảo và domain</li><li>Lập trình viên / R&amp;D quan tâm Fisher–Yates + CSPRNG trên bộ 78 lá</li><li>User Quizzman Pro cần nhiều lượt hơn mỗi ngày</li><h2>Kết Luận</h2></ul><p><strong>Quizzman Tarot Engine</strong> đưa Tarot Rider–Waite lên hạ tầng Lab với ba trụ cột: <strong>dữ liệu 78 lá chuẩn hoá</strong>, <strong>xáo Fisher–Yates + CSPRNG</strong>, và <strong>luận giải NLP theo lĩnh vực</strong>. Mỗi lần gieo có thể kiểm soát quota và lưu lịch sử — minh bạch hơn các trang random thuần túy.</p><p>Bắt đầu tại <a href=\"https://lab.quizzman.com/tarot\" target=\"_blank\" rel=\"noopener\">https://lab.quizzman.com/tarot</a>.</p>","tags":["Chiêm tinh","Công nghệ","Quizzman Lab","Tarot","Về Quizzman"],"author":"System","publishedAt":"2026-07-27T14:29:44.735Z","updatedAt":"2026-07-31T08:19:33.579Z","published_at":"2026-07-27T14:29:44.735Z","updated_at":"2026-07-31T08:19:33.579Z","view_count":37,"canonical":"https://wiki.quizzman.com/wiki/quizzman-tarot-engine","url":"https://wiki.quizzman.com/wiki/quizzman-tarot-engine","markdownUrl":"https://wiki.quizzman.com/api/articles/quizzman-tarot-engine.md","apiUrl":"https://wiki.quizzman.com/api/articles/quizzman-tarot-engine"}