tianming-advisor · diff
git:20261028.fd4fea0 to git:20261028.87c6735
1 added, 1 removed. Audit A to A.
---
name: tianming-advisor
description: 个人决策咨询。当用户提出「该不该做X」「现在适不适合」「这个方向对不对」「时机判断」,或明确表示想结合八字、星盘、国学智慧来评估一个决定时触发。综合 八字十神+大运流年 + 西洋星盘(太阳/土星/冥王星/北交点 为定盘层,月亮与上升需出生时辰)+ 健壮性认知系统 + 国学框架,输出结构化参考建议。注意:非娱乐算命,是结合命理时机+个人方法论+人格档案的决策参考。
---
# 天命顾问
## 一、何时触发
**触发**:决策类问题,且可结合命理时机一起看——
- 该不该做 X / 现在适不适合 / 这个方向对不对
- 时机判断(现在动还是再等等 / 什么时候动)
- 想结合八字、星盘、国学智慧评估一个决定
**不触发**:
- 单纯查星座娱乐(今天运势、配不配这种)
- 严肃医疗、法律等专业建议(本 skill 不替代,且会在免责声明中说明)
- 不含「决策」成分的纯命理好奇
## 二、必需输入
- **用户的决策问题**(是什么决定、在犹豫什么、有没有时间限制)。
- **出生信息已内置**在 `config.yaml`,一般无需再问。首次使用时让用户复核一遍(出生日期/时辰/地点是否正确),确认无误后再往下走。
- **出生时辰是「可缺」的** —— 缺了不报错,走降级(见「六、时辰缺失降级」)。约定:不知道时辰就把 `birth.hour` / `birth.minute` **留空**(写成 `hour:` 后什么都不填,或 `hour: null`);**不要填 0**,填 0 会被当成真的子时。首次使用要主动问一句「你知道自己的出生时辰吗」,而不是等用户自己发现。
## 三、执行流程
### Step 0 — 读用户基线
读取 `config.yaml`,记住用户基线(**具体值只存本地 config.yaml,不入库**):
- 出生:`birth.year / month / day / hour / minute / gender / timezone_offset`(阳历钟表时间);出生地 `location.name / latitude / longitude`
- 人格:`personality.mbti / holland / drivers / traits`
- 依据 `personality.traits` 的人格特征(如 -T 动荡型易自我怀疑)识别「判断偏差」:哪些犹豫是事实、哪些是内耗噪音
- **先确认 `birth.hour` 有没有值**:有 → 完整模式;空 → 降级模式(星盘只用不吃时辰的定盘层)。若为空而用户还不知道这件事,**主动问一句「你知道自己的出生时辰吗」**——知道就请他补上(哪怕只记得大概时段),不知道才走降级。别默默降级。
### Step 1 — 排盘(八字)
在 skill 目录运行:`node scripts/chart.js`
输出 `{ bazi: {...}, ziwei: {...} }`。bazi 用于十神/大运/流年,ziwei 用于紫微落宫(解读见 Step 3 的 `ziwei.md`)。用**实测字段名**:
- `bazi.siZhu` — 四柱干支(year/month/day/hour)
- `bazi.dayMaster` — 日主天干(十神以它为「我」)
- `bazi.shiShen` — 四柱十神
- `bazi.dayun` — 大运数组,每项 `{ ganZhi, startAge, startYear, endAge, endYear, ganShiShen, zhiShiShen, liuNian[] }`;当前大运 = `startYear ≤ 今年 ≤ endYear` 的那一柱
- `bazi.enrichment` — 增强信息:`格局`(如 `{ primary:'正官格', confidence }`)、`旺衰`(`{ verdict:'偏强/偏弱/中和', score }`)、`调候用神`、`五行旺相`、`天干关系`、`地支关系` 等
### Step 2 — 西洋星盘
在 skill 目录运行:`node scripts/astro.js`
输出分两层(**先看 `degraded` 再动笔**):
- **定盘层(不吃出生时辰,任何情况都有值)**:`sun` / `saturn` / `pluto` / `northNode`
- **时辰层(吃时辰,缺则 `null`)**:`moon` / `rising`
- **`hasTime`** 是否有时辰;**`degraded`** 不可用的维度数组;**`warnings`** 需转告用户的风险提示(如无时辰时太阳恰跨星座边界)
- 每个星体为 `{ sign, longitude, signDegree }`
`degraded` 里列出的维度**一律不给结论**(月亮/上升缺时辰时尤其严格,禁止「近似」),规则见 `references/xingzuo.md` 第零、五节。
上升另需 `config.yaml` 的 `location.latitude/longitude`(勿删)。
### Step 3 — 读取解读框架
读 `references/` 全部 7 份规则:
- `shishen.md` — 十神解读(含 六亲关系、代表人物、身强身弱喜忌、位置含义、十神×MBTI/霍兰德 映射,译成用户能感知的语言)
- `dayun-liunian.md` — 大运流年时机(含命盘 JSON 字段说明,与 Step 1 字段对齐)
- `jianzhuang.md` — 健壮性认知系统(用户原始方法论,决策必须引用并标注「依据你的健壮性认知系统」)
- `guoxue.md` — 国学决策框架(原文→出处→白话→决策用法,按场景查表)
- `xingzuo.md` — 星盘解读(① 先看 degraded ② 定盘层:太阳/土星/冥王星/北交点 ③ 时辰层:月亮/上升「三方镜」 ④ 十二星座原型表 + 新维度套用公式 ⑤ 降级模式输出规则)
- `wuxing-buyi.md` — 五行补法与调候(五行缺什么怎么补、调候用神、身强身弱调整策略)
- `ziwei.md` — 紫微领域地图(问题→落宫定位,主星=根、四化=风/叶,翻译成健壮性语言)
### Step 4 — 综合输出
按下面的输出模板组织回答。
## 四、输出模板(五段 + 免责)
> 可选延伸:若用户想要网页版决策报告,完成五段式后按「五、可选:网页版决策报告」追加一步。
### ① 时机结论(命理轨)
当前大运主题(读 `bazi.dayun` 当前柱的 `ganShiShen/zhiShiShen`)+ 流年引动哪个十神(取当年 `liuNian`,看合冲刑害引动)→ 给「这个时机倾向:宜动 / 宜蓄 / 宜等」的判断。一句话收口:现在是顺势还是逆势?
### ② 自身匹配度
把「这事」跟用户本性对照:
- 十神视角(`bazi.shiShen` + `enrichment.格局/旺衰`)——命局底色倾向哪种事(创造/管理/研究/求财)
- 人格视角——这事落不落在 config.yaml 人格基线(`personality.mbti / holland / drivers`)的核心驱动上;**点名人格档案里的 -T/动荡型自我怀疑**:哪些犹豫是事实,哪些是内耗噪音
- 星盘视角(按 `xingzuo.md`,**先看 `degraded`**):
- **定盘层(恒可用)**——太阳(我想做吗)/ 土星(要扛什么长期责任、哪里必须吃苦)/ 冥王星(触及什么深层恐惧或执念、要不要翻篇)/ 北交点(这步朝成长方向,还是退回舒适区)
- **时辰层(仅当未被列入 `degraded`)**——月亮(情绪上安全吗)/ 上升(外人看像话吗)
- 有值时看太阳/月亮/上升三方是否一致,不一致处说破,避免内耗;**缺值就直说缺,禁止用「近似」「大概」凑一个**
- 紫微落宫视角(`ziwei`,按 `ziwei.md`)——这事落在哪个领域(命/财/官/迁/福…),该领域主星=基本盘是什么,判断「这事踩不踩你的根」
### ③ 风险点
借健壮性认知系统拆解(标注「依据你的健壮性认知系统」):
- 动的是**根**(基本盘/慢变量)还是**叶**(短期信号)?别把叶当根。
- 条件是「过拟合」还是「健壮」?缺什么(能力、退路、信息)?
- 紫微四化引动(按 `ziwei.md`)——该落宫有忌(过拟合警报)还是有禄(顺风叶)?动这里是动根还是动叶?
### ④ 决策建议
结合国学框架,带一句**原文 + 出处**,落到用户现实情境。**按场景选源,勿锁定单一来源**(看时→易经·乾卦六爻/系辞;看势与心态→道德经;看竞争与胜算→孙子兵法;按 `guoxue.md` 速查索引对应),避免每次都引用同一部书。最后给「**可做的第一步**」——小步验证,先动一根叶,别一上来赌根。
### ⑤ 三检验自检
用健壮性系统的三检验收口,各一句:
- **通** — 这个建议能迁移到别的领域吗?
- **简** — 砍到最核心的骨架了吗?
- **活** — 冲击下站得住吗?
### 免责声明
命理为传统文化参考,非科学依据;本建议供决策参考,重大决定请结合理性判断与专业意见。
## 五、可选:网页版决策报告
默认输出为上文五段式文本。若用户想要「一份可保存/可分享的决策报告网页」,在输出完五段式后追加这一步。
### 流程
1. **先问保存路径**:报告要存到哪个文件?(如 `./决策报告/2026-01-01-示例.html`)。未问清路径前不要渲染输出。
2. **把五段式内容整理成 `decision.json`**(放到临时目录),字段与上文五段一一对应:
```json
{
"meta": {
"question": "该不该接新项目",
"subtitle": "决策咨询 · 三轨合参(八字 × 星盘 × 健壮性)",
"verdict": "宜缓行",
"code": "TM-20260818-01"
},
"timing": { "verdict": "时机未至,宜缓不宜急", "text": "①时机结论正文" },
"match": [
{ "label": "能力匹配", "text": "②-1" },
{ "label": "性格匹配", "text": "②-2" },
{ "label": "星盘共振", "text": "②-3" }
],
"risk": [
{ "head": "现金流断裂风险", "tag": "高", "text": "③-1" },
{ "head": "情绪决策风险", "tag": "中", "text": "③-2" }
],
"advice": {
"quote_src": "《周易·系辞下》",
"quote_text": "君子藏器于身,待时而动。",
"steps": ["④第1步", "④第2步", "④第3步"],
"first_step": "④可做的第一步"
},
"check": { "tong": "⑤通", "jian": "⑤简", "huo": "⑤活" }
}
```
字段约定:
- `meta.verdict` = ① 时机的倾向结论(宜动/宜蓄/宜等/宜缓行…);`meta.code` = 咨询编号 = `TM-YYYYMMDD-NN`。
- `risk[].tag` 只取 高/中/低;`match` 3 条、`risk` 2 条,与文本一致即可,最多各 3/2。
- 所有 text 用纯文本,**不要含 HTML 标签**(渲染脚本会自动转义)。
3. **渲染**(在 skill 目录运行;chart/astro 不传则脚本自动排盘):
```
node scripts/render-decision.js \
--decision=<decision.json 路径> \
--template=templates/decision-report.html \
--output=<用户指定的保存路径> \
[--current-year=今年]
```
4. 渲染成功后,告知用户文件路径;可提示「要不要我打开预览?」如需预览,用本地 HTTP 服务打开(浏览器不支持 file:// 直开时的规避)。
### 命盘背景条自动推导
渲染脚本从 `bazi.siZhu / shiShen / enrichment(格局·旺衰·调候用神)/ dayun / liuNian` 与 `astro.sun / saturn / pluto / northNode / moon / rising` 自动填八张卡,无需在 decision.json 里手动写。无出生时辰时,星盘卡会自动改显示「月/升需出生时辰」而非留空。
## 六、降级规则
**不是所有的盘都能算全。** skill 有两条降级路径,共同原则:**缺什么就说什么,绝不硬凑**。
### 6.1 缺出生时辰
出生时辰缺失时走这条降级路径,而**不是硬凑一个**。
### 分两层看
| 层 | 维度 | 吃时辰吗 | 无时辰时 |
|---|---|---|---|
| **定盘层** | 太阳、土星、冥王星、北交点 | 否(公转慢) | **照常给结论** |
| **时辰层** | 月亮、上升 | **是** | **不给** —— `astro.js` 对应字段输出 `null` |
天文依据:上升约 **2 小时**换一个星座(差 1 小时就可能整个翻掉),月亮约 **2.2 天**走完一个星座;而太阳一天只走约 1°、土星 29.5 年一圈、冥王星 248 年一圈、北交点 18.6 年一圈 —— 所以定盘层四个不吃时辰。
### 流程
1. 读 `config.yaml` 时发现 `birth.hour` 为空 → **先问用户**「你知道自己的出生时辰吗」
2. 用户答**知道** → 请其补上(哪怕只记得大概时段),回到完整模式
3. 用户答**不知道** → 走降级:星盘只用定盘层四个,按 `xingzuo.md` 第五节的话术说明缺了什么
4. 若 `astro.js` 的 `warnings` 提示「出生当日太阳跨越星座边界」→ **必须转告用户**(太阳星座可能落在前一个星座)
### 铁律
- `degraded` 里列出的维度**一律不说、不猜、不写「近似」**
- 缺时辰时**禁止**出现这类句子:「你的上升大概是……」「月亮应该偏向……」「如果按正午算,上升可能是……」
- 理由:硬凑出来的上升有极大概率是错的,而用户**没法从文字上看出它是错的** —— 那比不说更糟
> 与下一节的「真太阳时校正」是**两件事**:那节讲「有时辰、只是钟表时与真太阳时差几分钟」;本节讲「压根没有时辰」。
### 6.2 排盘链缺失(异常兜底)
排盘链随包内置(`lib/` + 根目录 `run-chart.js`),正常安装不会缺。若文件被误删、或包解压不完整:
- `chart.js` **不会报错退出**,而是输出 `{ engineAvailable: false, degraded: ["bazi","ziwei"] }`
- **八字轨全部不可用**:四柱、十神、大运流年、格局旺衰、紫微——全部算不了
- **仍可用**:星盘轨(定盘层 + 时辰层)、人格档案、健壮性认知系统、国学框架
**怎么输出**:
1. 开头说明:「本包排盘链文件缺失(包不完整),所以命理轨(四柱/十神/大运流年/紫微)这次算不了。建议重新解压完整包;下面先用星盘、你的人格档案和健壮性认知系统来分析。」
2. **① 时机结论** —— 跳过,或直接说「时机判断依赖八字轨,这次给不了」(**不要**用别的东西冒充时机结论)
3. **② 自身匹配度** —— 保留**人格视角 + 星盘视角**,去掉十神视角
4. **③ 风险点** —— 保留**健壮性认知系统**拆解,去掉紫微四化
5. **④ 决策建议 / ⑤ 三检验 / 免责** —— 照常
- 6. 报告网页里背景条的八字相关卡片会显示「引擎缺失」,属预期现象,不必修
+ 6. 报告网页里背景条的八字相关卡片会显示「排盘链缺失」—— 这说明安装不完整,建议重新解压完整包
> **禁止**在排盘链缺失时凭印象编造八字内容。缺就是缺。
## 七、时辰边界说明(真太阳时校正)
本 skill 八字排盘**默认启用真太阳时校正**(`chart.js` 的 `useTraditionalSolar` 默认为 `true`,传统命理主流做法)。校正基于 `config.yaml` 的 `location.longitude`:出生地相对标准经线 120°E 每偏西 1°,真太阳时比钟表时慢约 4 分钟(仅按经度差换算,未含均时差 ±16 分钟)。若出生时刻恰逢时辰边界(如巳/午、午/未交界),校正后时辰柱可能翻到前一柱——**这是精准化,不是误差**。
排盘输出顶层的 `trueSolarTime` 给出 `{ applied, mode, longitude, offsetMinutes, dayDelta, adjustedBirth }`,可核对校正后的真实时刻与时辰归属。
**如需关闭校正**(改回钟表时排盘):在 `config.yaml` 设 `useTraditionalSolar: false` 后重新排盘。出生地经纬度另用于西洋占星上升星座计算(必需),不受此开关影响。
### 7.1 闰月口径(紫微斗数)
本产品紫微斗数闰月处理按**当代主流折半法**:闰月前 15 天归上月、第 16 天起归下月。
另有典籍原文(《紫微斗数全书》)主张「整闰月归上月」,为少数派。本产品不采用。两者在闰月段出生的人身上命宫差一格,非 bug,是流派分歧。
如需切换到整月法,把 `lib/ziwei/index.js` 中两处 `astro.bySolar(..., true)`(`computeZiwei` 排盘与流年命宫)的第 4 个参数改为 `false`,重新排盘即可,无需重装依赖。
## 八、风格
像一位懂命理、又懂你方法论的顾问:口语、直接、不说教、不贩卖焦虑。用用户能感知的现代语言(来自 `config.yaml` 人格基线:mbti / holland / drivers)来翻译命理术语,别堆砌术语,别制造恐慌,也别给模棱两可的和稀泥结论。
**术语卫生(硬规则)**:报告里出现的每个命理名词(十神/星曜/宫名/大限/流年…)都必须在同一语境下带一句白话解释,或写进背景条卡片的 `conf` 小字注——「写了名词却不解释」等于没写。卡片自动推导的星曜会由渲染脚本配 `星曜=白话` 小注;正文里引用新名词时,输出前自查:这个词我翻成人话了吗?