☰
为什么bazi-skill排盘不会错:黄金用例回归测试与参考表一致性设计详解
2026/9/28 20:58:17 网站建设 项目流程

为什么bazi-skill排盘不会错:黄金用例回归测试与参考表一致性设计详解

【免费下载链接】bazi-skill四柱八字命理分析项目地址: https://gitcode.com/gh_mirrors/ba/bazi-skill

bazi-skill 是一个四柱八字排盘与命理分析工具,核心排盘脚本 pai_pan.py 仅用 Python 标准库实现。它能"排盘不会错",靠的不是运气,而是两件事:黄金用例回归测试(test_pai_pan.py)和参考表一致性设计(代码常量与 references/ 下的 Markdown 表共用同一张表)。本文面向新手,用通俗的方式讲清这套设计。

一、八字排盘到底容易在哪些地方出错?

八字排盘看似只是"查表",实则踩坑点极多。以下是最常见的 6 个翻车现场:

易错点正确规则常见错误
年柱分界以立春精确时刻为界误以为正月初一或 2 月 4 日零点换年
月柱分界以十二"节"(立春、惊蛰…)为界误用"中气"或节气近似日期
日柱日界23:00 起(夜子时)用次日日柱全天都用当日日柱
大运方向阳男阴女顺排,阴男阳女逆排男女方向记反
农历换算定气定朔、无中气之月为闰月查现成万年历、闰月标错
神煞查法年支/日支三合等固定口径各查各的、口径不一

bazi-skill 的处理思路是:每一条规则都配一个"锚点命例"——一个已知标准答案的具体出生日期,只要算出来和锚点一致,规则就没错。

二、黄金用例回归测试:一个"锚点命例"守住全局

回归测试的核心文件是 scripts/test_pai_pan.py。它不直接调用内部函数,而是像真实用户一样运行排盘脚本、解析标准输出的文本报告,再逐项断言,确保"用户看到什么,测试就验证什么"。

黄金命例:1990-05-15 午时男

全部测试围绕一个基准命例展开(见 test_golden_1990_wushi_male):

  • 输入:阳历 1990 年 5 月 15 日,午时,男
  • 标准答案:年柱庚午、月柱辛巳、日柱庚辰、时柱壬午,大运顺排
  • 神煞:应命中"天乙贵人、将星",而不应出现"驿马、桃花"(命局地支无申、无卯)

为什么连"不该出现的神煞"也要断言?——防止神煞计算从"漏报"悄悄变成"多报"。

边界用例清单

除黄金命例外,测试还覆盖了最容易翻车的 8 类边界场景:

测试用例守住什么规则
立春前出生:1990-02-03 10:00年柱必须是己巳,绝不能是庚午
夜子时 23:30日柱用次日辛巳,标记"夜子时"
早子时 00:30日柱仍是庚辰,标记"早子时"
阴年男:辛未年大运逆排
阳年女:庚午年大运逆排
时辰未知时柱输出"未知",年月日三柱完整
农历对照:四月廿一与阳历 1990-05-15 四柱完全一致
已故年份:2010 年流年列表到 2010 为止,不出现更晚年份

另有神煞专项测试(ShenshaTests):用"日干甲见丑→天乙贵人""日柱甲子→旬空戌亥"这类表驱动小用例,直接验证查表函数。

实际运行python3 scripts/test_pai_pan.py,11 个测试全部通过(Ran 11 tests ... OK),耗时约 3 秒,无需任何第三方依赖。

三、算法锚点注释:把"标准答案"写进代码文档

打开 scripts/pai_pan.py,文件开头就有一段"算法锚点(供 QA 对照)",把每条规则的正确答案钉死在代码里:

  1. 日柱:公历儒略日换算六十甲子,锚点1990-05-15 = 庚辰;
  2. 年柱:立春分界,锚点1990-02-03 10:00 必须是己巳,不是庚午;
  3. 月柱:十二节分界,锚点1990-05-15(立夏后、芒种前)= 辛巳月;
  4. 时柱:五鼠遁元,锚点庚日午时 = 壬午(对照 references/shichen-table.md);
  5. 大运:1990-05-15 男(阳年)必须顺排(对照 references/dayun-rules.md);
  6. 节气时刻:用太阳视黄经精算(立春=315°),明确禁止写死"立春大约 2 月 3-5 日";
  7. 神煞:与 references/shensha-table.md 同一张表。

这套做法的价值:任何人改代码后,只要跑一遍回归测试,锚点不一致会立刻失败。标准答案不需要背,测试替你记着。

四、参考表一致性设计:代码和文档"共用同一张表"

排盘工具最常见的"文档与结果对不上",源于文档一套表、代码另一套表。bazi-skill 的做法是:

  • 藏干表:代码里的地支藏干常量直接标注"与 references/wuxing-tables.md 同一张表"(CANGGAN);
  • 十神:推导规则与参考表中的十神推导规则(十神定义及生克关系)一致,以日干为基准;
  • 神煞:天乙、驿马、桃花等 20 余项查法常量(TIANYI 等)与 references/shensha-table.md 同口径,测试用例test_shensha_table_driven专门回归这一条(链接)。

这样文档就是代码的"人话版":用户拿排盘结果对照 references/wuxing-tables.md 里的十神、藏干表,一定能对上号。

同时,SKILL.md 明确规定:四柱、大运、流年、神煞一律以脚本输出为准,禁止口算或凭记忆中的万年历改盘——人机两侧用同一口径,从流程上杜绝"AI 自由发挥改盘"。

五、新手如何亲自验证一遍?

整个过程只需两行命令,本机有python3(3.6+)即可,无需 pip 安装任何东西:

# 1. 跑黄金用例回归测试,看到 OK 即说明排盘正确 python3 scripts/test_pai_pan.py # 2. 亲手排一个盘,对照测试结果 python3 scripts/pai_pan.py --solar 1990-05-15 --shichen 午 --sex 男

第二步输出的四柱应当是 庚午 / 辛巳 / 庚辰 / 壬午,大运方向为顺排,与回归测试的断言完全一致。

六、这套设计对普通用户意味着什么?

  • 边界不糊弄:立春前后、节气交界出生,脚本会给出警告并严格采用一套年柱/月柱,不会让你面对"两种可能";
  • 时柱不确定也有明确行为:只做六字分析,不瞎猜时柱(SKILL.md 边界情况表);
  • 结果可复查:任何一次排盘,你都能用 references/ 下的对照表(五行十神、时辰、大运、神煞)逐项核对;
  • 改错有护栏:未来若有人修改算法,11 个黄金用例就是护栏,回归不通过就不能发布。

一句话总结:bazi-skill 用"锚点命例 + 回归测试 + 代码文档同表"三层设计,把八字排盘里最容易出错的节气分界、子时日界、大运顺逆、神煞查法全部钉死在可验证的标准答案上——这就是它排盘不会错的原因。

命理分析仅供传统文化学习与娱乐参考,请理性看待。

【免费下载链接】bazi-skill四柱八字命理分析项目地址: https://gitcode.com/gh_mirrors/ba/bazi-skill

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询