用户需要 紫微斗数结构化命盘(十二宫、主星、四化、流年年龄列表等),或在此基础上 解盘、论命 时启用本技能。
pip install py-iztro 或依赖 pythonmonkey。zwds-cli/data/longitudes.json 或用户提供的 longitude。标准排盘:须使用本目录下的 zwds-cli(内置真太阳时、 time_index 映射及统一 JSON 输出,见下文 shell 契约)。
直接调用 iztro npm 库:仅当你要写 额外 Node 脚本(例如按官方文档试验 horoscope、流耀 API)时使用;见下文「iztro 官方文档与库用法」。跳过 CLI 时 不会 自动套用 zwds-cli 内的时辰与真太阳时规则,产盘可能与标准流程不一致。
安装 Node.js >= 18。
在仓库中进入:
openclaw-skill/zwds/zwds-cli
安装依赖:
npm ci
若失败可改用 npm install,并检查网络、registry、文件权限。
工作目录: openclaw-skill/zwds/zwds-cli
命令:
node src/index.js
标准输入:一段 JSON(可多行,解析前会 trim)。
标准输出:单行 JSON。先解析 success;为 true 时使用 data 解盘,为 false 时读取 error。
示例:
bash
cd openclaw-skill/zwds/zwds-cli
echo '{"birth_time":"2000-08-16T06:00:00","gender":"female","birth_place":"上海市"}' | node src/index.js
不要将排盘封装为平台未注册的「工具名」;统一用上述 终端 + stdin/stdout 方式(或平台等价的进程调用)。
完整说明、类型定义、运限与流耀细节见官方文档: iztro 快速开始(紫微研习社 / ziwei.pro)。以下摘录排盘最常用的调用面,便于在 Node 中与文档对照。
bash
npm install iztro
javascript
// CommonJS(与 zwds-cli 一致)
const { astro } = require("iztro");
// ES Module
// import { astro } from "iztro";
astro.bySolar#javascript
const astrolabe = astro.bySolar(solarDateStr, timeIndex, gender, fixLeap, language);
参数类型必填说明solarDateStrstring是阳历 YYYY-M-D(月日可不补零,如 2000-8-16)timeIndexnumber是时辰序号 0~12(早子 0 到晚子 12,含义以官方文档为准)genderstring是男 或 女``fixLeapboolean否默认 true;闰月前半月算上月、后半月算下月languagestring否默认 zh-CN;另有 zh-TW、 en-US、 ko-KR、 ja-JP 等
农历入口为 astro.byLunar(lunarDateStr, timeIndex, gender, isLeapMonth?, fixLeap?, language?),内部会换算阳历后再排盘(见 快速开始)。
返回值为 星盘对象:含 solarDate、 lunarDate、 chineseDate、 time、 palaces(十二宫数组,每宫含 majorStars / minorStars / adjectiveStars 等)。字段名为 camelCase; zwds-cli 对外 JSON 转为 snake_case,便于解盘阶段阅读。
astrolabe.horoscope#javascript
const h = astrolabe.horoscope("2023-8-28"); // 或 new Date()
// h.decadal / h.yearly / h.monthly / h.daily / h.hourly
// 各层含 palaceNames、mutagen、天干地支等(结构以官方文档为准)
第二参数可传 timeIndex;若 date 中带小时,可省略 timeIndex(见文档)。
大限/流年流耀一般在 horoscope() 返回结构里;单独按干支取流耀可用 star.getHoroscopeStar(见 快速开始 中「获取流耀」一节)。
javascript
const { star } = require("iztro");
// star.getHoroscopeStar(heavenlyStem, earthlyBranch, "decadal" | "yearly")
zwds-cli 的分工(重要)#方式何时用zwds-cli需要 统一排盘流程、或解盘所依据的 JSON 须带 birth_info.true_solar_time / meta 等本技能约定字段时。直接 astro.bySolar阅读官方示例、写独立小工具、或需要链式 API(如 astrolabe.star("紫微")...)时;若要与 zwds-cli 同一套时辰与真太阳时,应复用其 solarTime.js / timeIndex.js 或继续调用 CLI。
data(命盘 JSON)。不要在此阶段长篇解盘。data 与用户需求做分析;不要重新臆造宫位或星曜。解盘方法与约束见下一节。固定存档(可选):若同一命盘会多次解读,可将「入参 + CLI 完整输出」存为 fixtures/*.json(在 zwds-cli 下执行 npm run save-fixture,见 examples.md)。之后对话直接 @ 该文件即可,无需每次重跑排盘;读盘仍只使用其中的 data(及 meta 告警), _fixture 仅说明该盘对应的生辰与地点。
success === true 时响应里的 data。 meta 仅用于判断经度是否降级、是否缺出生地等, 不 参与星曜判断。major_stars / minor_stars / adjective_stars 的 name、 mutagen、 brightness 中找到; 禁止 凭记忆往盘里加星或改宫。data 里 没有 对应字段(例如未提供额外流月流日 API),应说明「当前 JSON 未包含该层运限」,不要编造。birth_info:确认阳历、农历四柱摘要、 time/ time_range、性别;若有 true_solar_time,解盘开头可一句说明「已按出生地经度做了简化真太阳时校正」。five_elements_class(五行局) 与 soul_palace / body_palace(命身):命宫主星见 soul_palace.soul,身宫地支见 body_palace;再在 palaces 里找到 name === "命宫" 的那一项,读取其 major_stars(可能多主星或空宫借星,以数组为准)。palaces 逐项查看 name、 heavenly_stem、 earthly_branch、三类星曜列表、长生十二神等字段。mutagen 非空值;无则该星在所列层级未标四化。decadal.range(起止虚岁)与干支;论「当前大限」时需用户告知年龄或年份,再在对应宫找到覆盖该年龄区间的 decadal。yearly(年龄列表: age = 目标阳历年 − 出生公历年,且在该年 ** Y-02-04(立春当日)锚点**下,本命该宫为 iztro 的流年命宫 horoscope('Y-2-4').yearly.index)。 禁止 用 yearly.palaceNames[i] 与本命 palaces[i] 下标对齐推断流年宫(二者顺序不一致)。当前 JSON 采用立春当日口径,不细分立春具体交接时刻。i,对宫为 (i+6)%12,财帛位 (i+4)%12,官禄位 (i+8)%12(本技能内三方四正取宫规则)。紫微斗数实务中常讲「同气为大」: 同一类意象的星曜若在本宫与三方四正(本宫 + 对宫 + 财帛位 + 官禄位,共四宫)内多处会齐,则该意象的能量被放大(常见表述为「一加一大于二」)。解盘时 先在分析过程中内化判断,仍须 逐颗能对应 JSON 的 name,不得凭空加星。
输出上不要求 每次读盘都单独开章节讲解「同气为大」理论; 当且仅当 某类星曜在四宫内确实会齐、叠加明显时,在 该宫本段总结、 Step 2 整盘定性 或 文末要点 里用短句自然点破即可,例如: 桃花旺、 财星旺 / 财机足、 贵人运厚、 煞气偏重、 空劫感重、 文书口舌偏重 等。不必反复贴标签;全盘若多宫同显,可在 Step 2 或文末 合并点一两句,避免十二宫各抄一遍。
本技能内常用「同气」分类(仅作归类标签,星名以 JSON 为准):
同气类别常见星曜(出现即用,未出现勿套用)桃花贪狼、廉贞、天姚、咸池、红鸾、天喜等(以盘中实际 name 为准)财星 / 禄气武曲、天府、太阴(财象时)、禄存;及带 mutagen 为禄之化禄星贵人 / 文星(吉星组)左辅、右弼、天魁、天钺、文昌、文曲煞星擎羊、陀罗、火星、铃星空劫地空、地劫刚克 / 变动七杀、破军(论宫主题时再与煞、空劫叠加看力度)
用法规则:
用户意图(示例)优先对照宫位( palaces[].name)性格、自我、人生基调命宫;可参身宫所在宫财运、收入、理财财帛;可参福德、田宅事业、学业、社会成就官禄;可参命宫、财帛感情、配偶夫妻;可参福德、迁移家庭、父母、长辈父母;可参田宅子女、生育、晚辈子女健康、体质疾厄人际、同事、下属仆役外出、搬迁、外部环境迁移精神状态、嗜好、福气福德不动产、家庭资产田宅兄弟、同辈兄弟
用户若明确指定宫位名称,以用户指定为准,但仍只在 data.palaces 中查找该 name 对应的项。
先简要列出 依据(宫位 + 星曜 + 四化原文),再作 推论;默认避免无依据的绝对化断语(不说死、不吓人)。读盘时按「同气为大」一节 内化判断;若同类星在四宫会齐、叠加明显, 在总结里自然写出(如桃花旺、财星旺、煞气偏重), 不必 先解释「什么叫同气为大」;仍须遵守该节禁止项。
推论用语要接地气:像跟熟人聊天那样说清楚「会怎样、为啥、咋办」,少用公文腔、套话、空洞词(如滥用「赋能」「闭环」「抓手」「需注重提升」等)。可用口语、短句、打比方,但 不得 因口语化而省略可核对的星曜依据,也 不得 用俏皮话掩盖说不清依据的结论。
若用户明确嫌「太官方」「不接地气」,解盘时 白话推论 占比应提高;「依据」段仍可偏简练,保持星曜名与亮度、四化与 JSON 一致。
若用户要求「详细解读」或未限制范围,默认给出 十二宫逐宫详解;每宫至少包含:
name、地支、是否身宫/来因宫);逐宫详解时,建议按 palaces 数组顺序输出(夫妻→兄弟→命宫...),并在每宫结尾用一句话收束「该宫重点」。
当用户要求「进一步细化」或明确提到「三方四正」时,逐宫解读必须升级为 三方四正联读:
(i+6)%12、财帛位 (i+4)%12、官禄位 (i+8)%12 的关键星曜与四化;三方四正联读时,禁止只给抽象结论;每条结论都应能回溯到本宫或三方四正宫位中的具体星曜字段。
若 meta.warnings 非空或 longitude_resolution.source === "default",应在解盘前或文末提醒:出生地经度可能为默认 120°, 时辰与真太阳时仅供参考。
流派差异(如晚子时换日、中州派安星)与本 CLI 默认(全书系、早子映射)不一致时,应主动说明「本盘按技能约定规则排定」,避免与用户从其他渠道看到的盘硬争对错。
当用户明确要求「按固定模板展示」「完整版」「像示例那样输出」时,按以下结构输出;除非用户要求缩略,否则不得跳步:
1.1 基础信息 表格:性别、出生日期、农历、生肖、五行局、命宫/身宫摘要、真太阳时(若无则写 null 或「未提供」)。1.2 命宫与身宫 表格:宫位、地支、主星、关键辅煞。1.3 生年四化 表格:禄/权/科/忌 + 对应星曜 + 所在宫位(仅列 JSON 中存在的 mutagen)。1.4 当前状态 表格:当前年龄、当前大限、大限命宫落点(按 decadal.range 反查)。palaces 顺序。本宫分析(约50%):主星/辅星/杂曜/四化与亮度。三方四正分析(约50%):对宫、财帛位、官禄位的关键星曜与四化。本宫总结:1~3 句白话结论;若该宫三方四正内某类同气明显, 在此总结中顺带点出(如桃花旺、魁钺厚、煞偏重), 不要 单独再设「同气为大」小标题。age = 目标年 − 出生年 查哪一宫 yearly 含该 age(与 CLI 的 ** Y-02-04(立春当日)锚点**一致);若 JSON 无更细层级,不得扩展编造流月/流日。birth_time 使用 ISO 字符串中的 字面 年月日时分参与时辰划分(不按时区把同一时刻换算成另一套钟表时间);请确保与用户约定好字符串写法与时区含义。birth_place 时:经度来自内置表或用户提供的 longitude;表外地名会退回东经 120° 并在 meta.warnings 中提示。更细的规则与字段说明见同目录 reference.md;示例见 examples.md。