Files
ZiPingEightChar/scripts/query_shensha.py
T
moxiaonian 618bf8dcab v3.4:童限小运、全量流年与节气边界提示;解释输出契约 v3.0 直答先行
排盘输出 schema 1.1→1.2:
- ## 流年 改为出生年至今+10 年全量,逐年标注所属区间(童限/某运/交运年)
- 新增 ## 小运(童限各虚岁干支,自时柱起、一位一岁、顺逆同大运)
- 生于交节前后 12 小时内出 ⚠️ 节气边界提示(月令敏感性)
- 神煞改由脚本按查法直接计算并列锚点;新增 scripts/query_shensha.py 查岁运神煞

规则库 380→541(16→20 文件,版本 3.4):
- 新增 89_旺衰扶抑 / 91_何知事类 / 92_调候 / 93_性情(滴天髓、穷通宝鉴参看层)
- 90_行运.md 新增 §10 童限(R-运-36~39,蒸馏《命理探源》《三命通会》小运诸法)
- R-运-33 改写为核对前置:intake 一问定场景,可核对走锚点、不可核对直推,输出只出现一次
- R-运-32 增前提挑战、直答收敛(一个主答案+置信度)、同机制证伪降权
- R-运-34 增救应回查(合绊解冲折减引动并回写排序);R-运-10 补「缓急非早晚」之辨
- 94 神煞扩展 19 条(三命通会书证);规则编号记录移调试层
- sources 按书归档五书全文;黄金集扩至 291 例(真诠 92 + 滴天髓 199)

SKILL.md 输出契约 v2.1→v3.0:
- 骨架改为 排盘口径→直答→现实对应→分析推理→存疑与边界→免责
- 说人话段改现实对应段(问题域优先);编号默认不进用户面输出
- Intake 增场景判定一问(命主本人/替人看/能否核对)

测试:新增 test_luck.py 9 项,全套 65 项通过
2026-10-08 13:07:23 +08:00

83 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""岁运神煞实时查询 —— 模型按需调用。
用法:
python query_shensha.py --gender 女 \
--pillars "丁亥 乙巳 庚子 辛巳" --target 丙午 [--label "2026 流年"]
输出(stdout):
- 以本命锚点(日干、年支、日支、月令、年柱纳音、阴阳男女)查得、目标干支所逢之神煞;
- 目标干支自身所属之日柱固定组(阴差阳错、十灵日、魁罡、十恶大败、天赦,供流日参看)。
查法口径与排盘输出 `## 神煞` 一致(chart/shensha.py,规则见 rules/94_神煞细节.md)。
退出码:0 成功;2 输入不可用;3 内部错误。
"""
import argparse
import sys
import traceback
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
def main() -> int:
ap = argparse.ArgumentParser(
prog="query_shensha.py",
description="查询某一干支(流年/流月/大运/流日)相对本命四柱所逢的神煞",
)
ap.add_argument("--gender", required=True, choices=["男", "女"], help="性别")
ap.add_argument("--pillars", required=True,
help='本命四柱干支,年月日时顺序,空格分隔,如 "丁亥 乙巳 庚子 辛巳"')
ap.add_argument("--target", required=True,
help="目标干支(流年/流月/大运/流日),如 丙午")
ap.add_argument("--label", default="", help='目标说明,如 "2026 流年",仅用于输出标题')
a = ap.parse_args()
try:
from chart.shensha import evaluate_target, GAN, ZHI
parts = a.pillars.split()
if len(parts) != 4 or any(len(p) != 2 or p[0] not in GAN or p[1] not in ZHI
for p in parts):
print("ERROR: --pillars 应为年月日时四组干支,如 \"丁亥 乙巳 庚子 辛巳\"。",
file=sys.stderr)
return 2
target = a.target.strip()
if len(target) != 2 or target[0] not in GAN or target[1] not in ZHI:
print("ERROR: --target 应为一组干支,如 丙午。", file=sys.stderr)
return 2
pillars = dict(zip(("year", "month", "day", "hour"), parts))
result = evaluate_target(pillars, a.gender, target)
title = f"# 神煞查询:{target}"
if a.label:
title += f"({a.label})"
title += f" 对 {' / '.join(parts)}({a.gender})"
print(title)
print()
print("## 本命锚点查得(岁运逢)")
print()
if result["anchored"]:
for star, note in result["anchored"]:
print(f"- {star}({note})")
else:
print("- (无)")
print()
print("## 目标干支自身所属")
print()
if result["own"]:
for star, note in result["own"]:
print(f"- {star}({note})")
else:
print("- (无)")
return 0
except Exception:
print("ERROR: 查询内部错误。", file=sys.stderr)
traceback.print_exc(file=sys.stderr)
return 3
if __name__ == "__main__":
raise SystemExit(main())