Install
openclaw skills install fortune-telling-bazi八字算命 skill — 支持多人八字存储+联合分析,首次询问生日,后续对话自动附带八字信息。说"停止算命"退出。
openclaw skills install fortune-telling-bazipython3 scripts/main.py statuspython3 scripts/main.py add <name> <年> <月> <日> <时> <性别>(分可省略)scripts/calc.py)→ 保存到 data/users.json → 显示摘要python3 scripts/main.py active <name> 激活is_active = true,此后每条回复注入八字摘要python3 scripts/main.py statuspython3 scripts/main.py active <name1,name2,...>is_active = true,注入对应八字摘要is_active = falsedata/
├── users.json # 所有用户的生日+八字(JSON格式)
└── active.json # 当前激活的用户列表
| 命令 | 功能 |
|---|---|
python3 scripts/main.py add <name> <year> <month> <day> <time> <gender> | 添加新用户(time格式:16 / 16:30 / 下午4 / 晚8) |
python3 scripts/main.py update <name> <year> <month> <day> <time> <gender> | 更新已有用户 |
python3 scripts/main.py list | 列出所有已保存用户 |
python3 scripts/main.py view [name] | 查看某人八字详情(默认当前激活) |
python3 scripts/main.py remove <name> | 删除某人八字 |
python3 scripts/main.py active [name1,name2,...] | 设置激活用户,多人用逗号分隔 |
python3 scripts/main.py status | 检查激活状态 |
python3 scripts/main.py joint [name1,name2] | 联合分析(默认当前激活用户) |
━━━ 八字信息 ━━━
姓名:{name} | {gender} | 农历{lunar_str}
八字:{year_ganzhi} {month_ganzhi} {day_ganzhi} {hour_ganzhi}
生肖:{shengxiao} | 日主:{me}({yinyang})
五行:{wuxing} | {mingge} | 旺衰:{wangshuai}
喜用:{xiyong}
神煞:{shensha}
大运:{current_dayun}({start_age}-{end_age}岁)
━━━ 八字信息 ━━━
━━━ 联合分析 ━━━
【{name1}】{gender} | {bazi_str} | {mingge}
【{name2}】{gender} | {bazi_str} | {mingge}
━━━ 合冲刑害 ━━━
年支关系:{analysis}
日支关系:{analysis}(夫妻/伴侣位)
月支关系:{analysis}
━━━ 五行契合 ━━━
{analysis}
━━━ 婚配分析 ━━━
{analysis}(仅两人时)
━━━ 八字信息 ━━━
| 关键词 | 动作 |
|---|---|
开始算命、算命、看看八字、我的八字 | 激活算命流程 |
停止算命、不算了、退出算命 | 退出算命模式 |
联合分析、合盘、双人八字 | 触发联合分析 |
添加八字、加个人、录入八字 | 添加新用户 |
查看用户、都有谁、八字体检 | 列出所有已保存用户 |
地支关系分析:
五行契合分析:
婚配分析(仅两人时):
八字计算:完全本地,不依赖任何远程API
依赖库:scripts/lunar_core.py 自包含单文件,提供本地农历换算和四柱计算。
lunar_core.py 调试经验(2026-04-26 已修复):
jd_greg() 反算公历年时曾少减 4800,导致 Solar.toYmd() 出现 67870114 这类错误年份;现已修正 JD → Gregorian 转换。_from_solar() 现在按月首 JD 反推真实农历年,避免 11/12 月重复数据和立春年混用;立春年柱判断放在 _compute() 中按 solar year 查询 LICHUN_JD/LICHUN_YMD。int(s.toYmd()) / int(LICHUN_YMD[year]),exact 年柱用含时分秒的 Julian Day 比较。农历计算:完全自包含的 lunar_core.py,基于 LY_DATA V6B 天文表,覆盖 1899-2060 年。
命格算法(已验证 12/12 测试全过):直接用 TEN_GOD[日干][月干] → 格局映射,一行代码:
def calc_mingge(day_stem, month_stem):
return TEN_GOD_TO_GE[TEN_GOD[day_stem][month_stem]]
喜用神算法:
calc.py TEN_GOD table bug(2026-04-26 已修复):
代码位置:所有 Python 文件统一放在 scripts/ 下,数据文件放在 data/ 下。
代码架构(6个文件):
scripts/
├── main.py # CLI 入口,命令路由,时间解析
├── calc.py # 八字计算核心(常量和计算逻辑)
├── report.py # 输出格式化(单人详情 / 联合分析)
├── store.py # 数据存储(users.json / active.json)
├── lunar_core.py # 自包含农历/八字底层换算
└── test_lunar_core.py # 单元测试(12 个固定样例 + 128 个随机日期)
测试命令:python3 -m unittest scripts/test_lunar_core.py
已实现功能:
python3 scripts/main.py joint 支持2-N人联合分析,默认用当前激活用户本 skill 的多人+联合分析架构可复用到其他领域:
users.json(key=alias)、active.json(当前激活列表)scripts/main.py(入口)+ scripts/calc.py(计算)+ scripts/report.py(展示)+ scripts/store.py(存储)+ scripts/lunar_core.py(农历换算)