子平 · 玄元
辨伪
Auspice青鸾信

为什么 AI 算八字不准

Why AI BaZi Skills Get the Chart Wrong — the failure is in the arithmetic

多数 AI 命理工具,错在解读开始之前。排盘是有唯一正确答案的算术——它需要节气的精确时刻、经度与均时差校正、以及历史时区数据。让语言模型做这一步,它会给你一个「看起来像答案」的东西,而输出本身不会透露任何异常。

这与大多数人的直觉相反。排盘看着是简单机械的那一步,解读看着才难。 实际上解读没有标准答案,怎么说都显得合理;排盘只有一个正确输出,而它正是大多数实现出错的地方。 下面每一张盘都由本站排盘引擎在构建时实算得出——没有一个数字是手写进页面的。

一、年的边界是一个时刻,不是一天

上海,1990 年 2 月。下面几行之间只有钟点不同:

出生时刻年柱月柱日柱时柱
1990-02-03 23:00己巳丁丑己亥乙亥
1990-02-04 10:00己巳丁丑庚子辛巳
1990-02-04 12:00庚午戊寅庚子壬午
1990-02-04 14:00庚午戊寅庚子癸未
1990-02-05 01:00庚午戊寅辛丑戊子

看 2 月 4 日那三行。上午十点还是己巳 丁丑, 中午十二点变成庚午 戊寅——年柱与月柱在同一天的中午整根换掉。因为八字的年从立春交接,而立春是太阳黄经到达 315° 的那一刻,不是午夜,也不是春节。同一个公历日出生的两个人,一个饭前一个饭后,八个字里有四个不同。

那么,一个工具怎么知道 1990 年的立春是几点几分?只有两条路:内置一张逐年逐节气精确到分的表 (1900 至 2100 年 × 二十四节气,约四万八千个时刻),或者现场计算天文。 把节气日期写进 Markdown 知识库的 Skill,粒度只到「日」—— 这意味着交节当天出生的所有人,年柱要么全对要么全错,取决于模型蒙中的是哪一半。 这不是解读风格的差异,这是四分之一张盘直接算错。

二、墙上的钟不是太阳

同一个钟表读数、同一个官方时区,两座城市——1992 年 6 月 15 日 07:10 北京时间:

出生地经度真太阳时校正时柱
上海121.47°E+5 分钟甲辰
乌鲁木齐87.6°E-130 分钟壬寅

时柱不同——天干地支两个字全变。中国全境(东经 73° 至 135°,横跨约四个时区)统一用一个钟, 但八字用的是出生地的太阳。乌鲁木齐钟表上的 07:10,当地真太阳时刚过五点,太阳才刚出来: 那是寅时而不是辰时,差两个地支。算这一项需要出生地经度、当地当日实际施行的时区偏移、 以及均时差——地球轨道是椭圆、自转轴又倾斜,导致真太阳与平太阳每天相差正负十几分钟, 这是一个逐日求值的三角级数。让模型给这个值,它给的是看起来合理的数字而不是算出来的; 而经度差一度就是四分钟,在边界附近足以翻掉整根柱。完整算法见真太阳时一页。

三、那个从未存在过的小时

上海,1988 年 7 月 1 日,钟表上的 08:00。引擎给出的总校正是-58 分钟,拆开是三项:夏令时 -60、经度差 +6、均时差 -4。那个钟上的八点,实际是七点零二分,因为中国在 1986 至 1991 年实行过夏令时——这段历史现在几乎无人记得。 那六年出生的人如今三十多岁,正是会去算八字的年纪,而他们出生记录上写的是一个被拨快了一小时的钟。 一小时足以跨过整整一个时辰,在夜里的某些时刻还会连带换掉日柱。

换算日当天更麻烦:拨快钟那天,本地 02:00 直接跳到 03:00,那一小时在当地从未存在过。 写着 1988-04-17 02:30 的出生记录,对应不到任何真实时刻。本引擎起初就在这里栽过—— 早期实现用定点迭代反解 UTC 时刻,对不存在的输入本不收敛,却照样返回了结果, 导致 02:59 与 03:00 指向同一真实时刻却排出不同的时柱。现在这一条被测试钉死, 六个夏令时年份的缺口逐分钟验证。

这类错误从不报错。系统安安静静给你八个整齐的字,输出本身看不出任何异常。把这张盘交给任何一个像样的语言模型,它都会流畅地讲出这八个字对你人生的含义——而文字越好看,结果错得越彻底。

四、那为什么读起来还是很准

因为这个领域没有验证回路。你输入生日,得到一段话,觉得「有点像」。 这个「有点像」来自三处:巴纳姆效应——足够模糊的描述人人都能对号入座; 模型本身的语言能力——它就是被训练来生成让你觉得贴切的文本的; 以及你自己的配合——人会不自觉地为已经听到的判断寻找证据。 三者相加,足以让一个排盘完全错误的系统读起来「挺准」。

在别的领域,算错了会有反馈:构建失败、账目对不平、桥会塌。这里什么反馈都没有。用户不会知道,模型不会知道,工具作者也不会知道——除非有人去写测试。所以在这个领域,用户满意度不构成正确性的证据,两者可以长期彻底脱钩。

五、真正的问题是分工

把命理打包成 Skill 本身没有问题,出问题的是分工。排盘是纯计算: 给定时刻与地点,八个字唯一确定,没有任何解释余地——这种事该由代码做, 纯函数、有单元测试、每次结果一样。解读是语言,模型确实做得好。 错在把第一件事也交给了模型。模型在「查表」上的可靠性,和它在「写一段话」上的可靠性, 完全不是一个量级。

引擎决定说什么,模型决定怎么说。

本站的八个字、五行强弱、喜用神、大运流年,全部由 TypeScript 算出、有单元测试, 每一条口径与计分权重都公开在排盘约定页。 模型拿到的是一段事实,外加一条指令:只准引用给定的内容。 还有一个容易被忽略的好处——引擎一旦掌握事实,就也能掌握不确定性。 时辰未知时我们不挑默认值:可能性恰好十二种,那就十二盘全排、逐项取交集, 只有十二盘都成立的结论才会说出口,其余明确留白。说出来的空缺,好过悄悄填上的空缺。

六、三个可以自己验的问题

如果你正在用某个 AI 命理工具,下面三个问题不需要专业知识就能验:

  1. 生在交节当天——它知不知道那一年该节气的具体时刻
  2. 生在远离时区中央经线的地方——它做不做经度校正? 生于 1986 至 1991 年的中国——它扣不扣那一小时夏令时?
  3. 你不知道时辰——它是留白,还是悄悄给你安一个?

三个里有一个答不上来,那张盘就有相当概率是错的——而它读起来一样可信。 想做一次有意的验收,三个可复现的出生时间给出了正确引擎必须返回的结果,以及各种不完整实现分别会返回什么。

推导过程见八字怎么算, 校正算法见真太阳时。 本引擎采用的每一条口径都公开在排盘约定, 历次更正都记录在勘误页。 也可以直接免费排盘——不用注册,上面每一步都已算进去。