塔罗小程序 · 解读引擎增强:从程式化到丰富化
背景
塔罗占卜引擎的原版解读是纯模板拼接——每个位置类型只有一句固定模板,同一张牌在同一位置出来的文案几乎一模一样。用两三次就能摸出套路,新鲜感迅速消失。
本次改造的目标:在不引入 LLM 的前提下,把解读从"程式化"提升到"有变化、有深度",保持项目"纯前端、零成本、可离线"的核心定位不变。
改动概览
| 文件 | 变化 | 说明 |
|---|---|---|
interpret-engine.js |
334 → 692 行(+432) | 引擎核心,5 项增强 |
app.js |
250 → 267 行(+17) | 渲染 3 个新板块 |
style.css |
390 → 420 行(+30) | 散文段落 + 标签样式 |
cards-data.js |
不变 | 数据层不动 |
spreads-data.js |
不变 | 数据层不动 |
五项增强
1. 多模板轮换(降低重复感)
问题:原版每个位置类型(过去/现在/未来/挑战/建议等 10 种)只有一句固定模板。
做法:每个位置类型准备 4 种不同句式,用 card.id % 4 做确定性选择。
- 同一副牌每次解读文案一致(确定性,不是随机)
- 不同牌在同一位置会用到不同句式
- 句式结构有变化:主语前置、状语前置、倒装、设问等
效果:过去位现在有"回望…""…中埋下伏笔""之所以走到现在…""…坐落于…"四种开头,不再千篇一律。
2. 牌组合分析(新增板块 cardCombination)
问题:原版只逐张解读,完全忽略牌与牌之间的关系。
做法:
- 定义
COMBINATION_MEANINGS映射表,20 组大阿卡纳经典组合的专属含义(如"高塔+星星=崩塌之后紧接希望""战车+力量=刚柔并济""愚者+世界=终点即起点") - 遍历相邻两张牌,命中预定义组合直接输出;没命中按元素关系分析(同元素=协同、相克=张力、不同不克=互补)
- 首尾跨位分析(第一张与最后一张的呼应)
3. 叙事合成(新增板块 narrative)
问题:原版解读是逐张罗列,缺乏整体叙事感。
做法:把关键牌串成一段连贯的话(150-250 字),不是列表。
- 有时间线的牌阵(三张、五张、凯尔特等)走"过去→现在→未来"叙事线
- 没有时间线的牌阵(关系、决策等)走"现状→挑战→建议"逻辑线
- 用连接词(正因如此、然而、不过、与此同时)串成流畅段落
4. 主题/能量线检测(新增板块 themeAnalysis)
问题:原版只有基于逆位数量的笼统定调,缺乏整体性洞察。
做法:分析整副牌的主题倾向,输出 2-3 条洞察:
- 元素分布:统计火/水/风/土,识别主导元素和缺失元素
- 大小阿卡纳比例:判断"人生大事"还是"日常事务"
- 正逆位能量:判断整体能量走向
- 主题线:多张同花色聚拢成主题(多张权杖=行动主题,多张圣杯=情感主题)
5. 位置交叉引用(增强 cardInteraction)
问题:原版元素互动只看相邻牌同元素/相克,维度单一。
做法:在现有基础上增加:
- 相邻位置同元素=延续性,相克=转折点
- 过去位与未来位的牌是否形成呼应或对比
- 逆位集中区域分析(前半=起因有问题,后半=结果有风险)
渲染顺序
牌阵总览
→ 主题洞察(新)
→ 深度解析
├ 抽牌过程
├ 因果分析
├ 牌面组合(新)
├ 整体叙事(新,散文段落)
├ 问题与阻碍
└ 牌面互动(增强)
→ 神谕指引
→ 结语
验证结果
对全部 8 种牌阵运行测试,全部通过:
- ✅ 语法检查通过
- ✅ 所有新字段类型正确(
cardCombination数组、narrative字符串、themeAnalysis数组) - ✅ 叙事长度合理(三张 182 字、凯尔特 184 字、关系 175 字、决策 146 字)
- ✅ 多模板轮换生效(8 张不同牌在同一位置得到 8 种不同首句)
- ✅ 牌组合命中(愚者+魔术师等预定义组合被正确识别)
- ✅ 确定性验证(同一输入两次解读结果完全一致)
效果对比
以三张牌阵(愚者正位 / 高塔逆位 / 星星正位)为例:
改造前 — 逐张罗列,模板固定:
过去过去的影响与成因,因为愚者正位的影响(新开始、天真),所以形成了现在的起因。…
改造后 — 多了主题洞察、牌面组合、整体叙事:
- 主题洞察:牌面以风元素为主导,水、土缺位提示情感与务实欠缺;大阿卡纳 3/3 关乎人生大局;正位为主能量顺畅。
- 牌面组合:高塔与星星相邻——崩塌之后紧接希望;愚者与星星同属风元素,首尾形成对话。
- 整体叙事:回望过去,愚者正位带着天真无畏踏上旅程。正因如此,当下呈现高塔逆位,试图延缓必然的崩塌。然而未来并非定局——若顺此势延伸,星星正位所示的走向将大概率浮现。不过牌面只是能量的镜像,真正的走向仍取决于此刻如何选择。
设计原则(不变)
- 纯前端,无后端依赖,无 LLM/API 调用
- 因果句式风格("因为…所以…"),忠于牌面,不讨好
- 确定性:同一副牌每次解读结果一致
天花板与后续
本次改造把"3 次就腻"推迟到"二三十次才腻",但终究是模板拼接,玩多了仍会察觉规律。如果未来要彻底消除程式化感,需要引入 LLM 做动态解读(路线 B),届时可保留程序引擎做结构化骨架,把自然语言生成交给 LLM。
- 点赞
- 收藏
- 关注作者
评论(0)