diff --git a/SKILL.md b/SKILL.md index 5deff3d7..2f45e3eb 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,6 +1,6 @@ --- name: jyotish-vedic-astrology -version: 3.7.0 +version: 3.7.1 description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。覆盖行星配置、Yoga格局、Nakshatra解读、宫位分析、现代生活场景映射、现代措辞解读、案例对比分析、自动出生时间矫正、常见误判纠错、Dasha+Transit推运、精确预测、PDF星盘读取、Swiss Ephemeris计算引擎、星盘计算、分盘计算、名人案例查询、Shadbala六重力量、Ashtakavarga八分法(BPHS完整表SAV=337)、Hermes记忆系统、事件预测、R1-R10数学验证(含R2b BAV列→SAV列校验)、P1-P12行星审计(含P3仓库耦合+P8年龄状态+冲突仲裁3条规则)、验前事、MD→HTML报告生成(羊皮纸主题)、BPHS十六分盘精确计算(D2-D60)、度数精确相位系统(Drishti)、Jaimini完整系统(Chara Karaka 7/8+Chara Dasha+Karakamsha)、高级Nakshatra分析(Tara Bala+Sub-Lord KP系统)、Argala门闩系统(Virodha反干预)、Tajika年运盘(Muntha+YearLord+Mudda Dasha+Tri-Pataka三旗)、合盘分析(Ashta Koota 36分制+Mangal Dosha+Papasamya+Dasha兼容性)。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、吠陀占星、印占、PDF星盘、读取PDF、分析PDF星盘、矫正出生时间、出生时间验证、生时矫正、现代解读、现代措辞、误判纠错、错题本、Varga分盘、全球占星师方法论、三合盘、综合分析、过境分析、Double Transit、Sade Sati、合盘、婚姻匹配、关系分析、Koota、Mangal Dosha、年运盘、Varshaphala、太阳返照、Tajika、星宿速查、综合解盘工作流、应期预测、推运应期、事件时机、什么时候结婚、什么时候升职、什么时候发财、Argala、门闩、行星干预、Dasa收敛、Yogini大运、Chara Dasha、AI解盘、算星盘、排盘、计算星盘、查名人、Shadbala、六重力量、Ashtakavarga、八分法、行星力量、记忆系统、事件预测、验证、校验、审计、验前事、R1-R10、P1-P12、仓库耦合、冲突仲裁、报告生成、HTML报告、精确相位、Drishti、Jaimini、Chara Karaka、Atmakaraka、Darakaraka、Karakamsha、Tara Bala、Sub-Lord、KP系统、Navamsa、D9、D60、Shashtyamsa、十六分盘、门闩分析、Muntha、年主星、三旗系统、合盘评分、Nadi Koota、Gana、Yoni、Papasamya、Dasha兼容。 --- @@ -8,18 +8,27 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力 ## ⚠️ 核心定位 -**PDF输入 → 严谨解盘 → 精确推运应期输出** +**三种输入 → 严谨解盘 → 精确推运应期输出** -本Skill是一个**解读引擎**,不负责排盘计算。使命是:根据用户提供的PDF星盘数据,进行准确、严谨的星盘解读和推运应期预测。 +本Skill支持三种输入方式,AI自动识别并路由: -**强制工作流**(→ 完整规范见 `references/ai-reading-workflow-prompt.md`): -1. 阶段一:PDF/图片输入 → 提取数据 + Quality Gate(→ `references/pdf-chart-reading-guide.md`) -2. 阶段二:用户意图识别 → 路由到目标宫位(→ `references/promise-assessment-templates.md`) -3. 阶段三:静态分析10步(宫位→承诺→Yoga→**Argala**→逆行→NK→Shadbala→AV→Ketu→分盘) -4. 阶段四:动态推运7步(Dasha→**Dasa Convergence轻量三系统**→Transit→Double Transit→Jaimini→KP→Varshaphala) -5. 阶段五:应期输出(五层验证法→精确时间窗口,→ `assets/timing-prediction-template.md`) -6. 阶段六:补救措施(可选) -7. 阶段七:现代措辞包装 +### 三条入口路径(自动判断,无需用户触发) + +| 路径 | 用户输入 | AI行为 | +|------|---------|--------| +| **路径A:精准出生信息** | 出生日期+时间+地点 | 直接调用 `full-reading` 引擎全链路计算(13模块一键出) | +| **路径B:PDF/文字星盘** | 上传PDF星盘 或 详细的文字星盘描述 | 提取文档中的星象数据(落宫、度数、Dasha等),直接基于文档数据推算 | +| **路径C:时间不明确** | "不知道几点出生" / "大概下午" | 启动互动式出生时间矫正(外表体质→事件验证→D9/D10校正)→ 确认后走路径A | + +**强制工作流**(→ 完整规范见 `references/ai-reading-workflow-prompt.md` v3.0): +1. **阶段零**:入口路由(路径A/B/C自动判断) +2. **阶段一**(仅路径B):PDF/图片输入 → 提取数据 + Quality Gate(→ `references/pdf-chart-reading-guide.md`) +3. **阶段二**:用户意图识别 → 路由到目标宫位(无明确意图→综合解盘Level 2) +4. **阶段三**:静态分析10步(宫位→承诺→Yoga→Argala→逆行→NK→Shadbala→AV→Ketu→分盘) +5. **阶段四**:动态推运7步(Dasha→Dasa Convergence轻量三系统→Transit→Double Transit→Jaimini→KP→Varshaphala) +6. **阶段五**:应期输出(五层验证法→精确时间窗口) +7. **阶段六**:补救措施(可选) +8. **阶段七**:现代措辞包装 --- @@ -193,7 +202,7 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力 ### 13. 计算引擎集成(Swiss Ephemeris + 数据库)⭐ v3.4.0 -**统一引擎入口**:`scripts/jyotish_engine.py` v3.7.0(基于 Swiss Ephemeris 天文计算库) +**统一引擎入口**:`scripts/jyotish_engine.py` v3.7.1(基于 Swiss Ephemeris 天文计算库) **调用方式**:AI 通过 `execute_command` 调用以下子命令(所有输出为 JSON): @@ -204,10 +213,11 @@ SCRIPT=~/.workbuddy/skills/jyotish-vedic-astrology/scripts/jyotish_engine.py $PYTHON $SCRIPT <子命令> [参数] ``` -**13大子命令** → **21大子命令**(v3.7 升级): +**13大子命令** → **22大子命令**(v3.7.1 升级): | 子命令 | 功能 | 典型用法 | |--------|------|----------| +| **`full-reading`** | **⭐ v3.7.1 全自动综合解盘(一条命令串起13个模块)** | `full-reading --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | | `chart` | 完整星盘计算(含Ayanamsa修正)+ `--validate` 附加R1-R10验证 | `chart --validate --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | | `dasha` | Vimshottari大运时间线+小运展开 | `dasha --moon-lon 326.5 --birthdate REDACTED_DATE --today 2026-04-24` | | `yoga` | Yoga格局识别(5种Yoga) | `yoga --ascendant Leo --planets 'Sun:Aries:9,Moon:Aquarius:7,...'` | @@ -216,32 +226,46 @@ $PYTHON $SCRIPT <子命令> [参数] | `celebrity` | 名人案例查询(SQLite + 15,807条CSV) | `celebrity --name Einstein` | | `db-stats` | 验证数据库统计(15,840条+10种技法) | `db-stats` | | `transit` | 行星过境查询(2026-2028) | `transit --year 2026 --month 7` | -| `shadbala` | ⭐ 六重力量计算(Sthana/Dig/Kala/Chesta/Naisargika/Drik Bala) | `shadbala --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | -| `ashtakavarga` | ⭐ 八分法计算(BPHS完整8×8矩阵,SAV=337) | `ashtakavarga --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | -| `memory` | ⭐ Hermes记忆系统(store/search/context/stats) | `memory --action store --content "..." --tags "chart" --importance 8` | -| `validate` | ⭐ R1-R10数学验证(SAV/BAV/延伸角/Rahu-Ketu/逆行/Dasha/完整性/度数/宫位) | `validate --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | -| `audit` | ⭐ P1-P12行星审计管线(Identity/Health/Resource/SAV/Dignity/Shadbala/Aspects/Nakshatra/Yogas) | `audit --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | -| `varga-full` | ⭐ v3.7 BPHS十六分盘精确计算(D2-D60全部16分盘,精确度数输出) | `varga-full --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --divisions D9,D60` | -| `aspects` | ⭐ v3.7 度数精确相位系统(tight/moderate/loose + 入相位/出相位) | `aspects --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | -| `jaimini` | ⭐ v3.7 Jaimini完整系统(Chara Karaka 7/8 + Chara Dasha + Karakamsha) | `jaimini --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --mode all` | -| `nakshatra-adv` | ⭐ v3.7 高级Nakshatra(Tara Bala + Sub-Lord KP + 兼容性) | `nakshatra-adv --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --mode all` | -| `argala` | ⭐ v3.7 Argala门闩系统(主/副Argala + Virodha反干预 + 净评分) | `argala --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | -| `tajika` | ⭐ v3.7 Tajika年运盘(Muntha + YearLord + Mudda Dasha + Tri-Pataka) | `tajika --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --age 33` | -| `synastry` | ⭐ v3.7 合盘分析(Ashta Koota 36分 + Mangal Dosha + Papasamya) | `synastry --moon1 310.89 --moon2 45.5 --mars1 90.43 --mars2 120.3` | +| `shadbala` | 六重力量计算(Sthana/Dig/Kala/Chesta/Naisargika/Drik Bala) | `shadbala --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | +| `ashtakavarga` | 八分法计算(BPHS完整8×8矩阵,SAV=337) | `ashtakavarga --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | +| `memory` | Hermes记忆系统(store/search/context/stats) | `memory --action store --content "..." --tags "chart" --importance 8` | +| `validate` | R1-R10数学验证(SAV/BAV/延伸角/Rahu-Ketu/逆行/Dasha/完整性/度数/宫位) | `validate --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | +| `audit` | P1-P12行星审计管线(Identity/Health/Resource/SAV/Dignity/Shadbala/Aspects/Nakshatra/Yogas) | `audit --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | +| `varga-full` | v3.7 BPHS十六分盘精确计算(D2-D60全部16分盘,精确度数输出) | `varga-full --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --divisions D9,D60` | +| `aspects` | v3.7 度数精确相位系统(tight/moderate/loose + 入相位/出相位) | `aspects --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | +| `jaimini` | v3.7 Jaimini完整系统(Chara Karaka 7/8 + Chara Dasha + Karakamsha) | `jaimini --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --mode all` | +| `nakshatra-adv` | v3.7 高级Nakshatra(Tara Bala + Sub-Lord KP + 兼容性) | `nakshatra-adv --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --mode all` | +| `argala` | v3.7 Argala门闩系统(主/副Argala + Virodha反干预 + 净评分) | `argala --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8` | +| `tajika` | v3.7 Tajika年运盘(Muntha + YearLord + Mudda Dasha + Tri-Pataka) | `tajika --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --age 33` | +| `synastry` | v3.7 合盘分析(Ashta Koota 36分 + Mangal Dosha + Papasamya) | `synastry --moon1 310.89 --moon2 45.5 --mars1 90.43 --mars2 120.3` | +| `report` | MD→HTML报告生成(羊皮纸主题) | `report ./report_folder --name 一楠 --lagna Leo` | **外部数据源**(引擎自动读取): - 验证数据库:`~/WorkBuddy/Claw/vedic_astrology_validation.db`(15,840条案例,10种技法准确率) - 名人CSV:`~/WorkBuddy/Claw/vedastro_data/PersonList-15k.csv`(15,807条AA级数据) - 过境配置:`~/WorkBuddy/Claw/月运过境配置-2026-2028.json`(36个月行星位置) -**典型工作流**(v3.7 升级): -1. 用户给出生信息 → `chart` 计算星盘 → 获取行星位置、宫位、Nakshatra -2. 从 chart 结果取月亮经度 → `dasha` 计算当前大运 -3. 从 chart 结果取行星配置 → `yoga` 识别格局 -4. `shadbala` 计算六重力量 → 量化行星强度排名 ⭐ v3.4 -5. `ashtakavarga` 计算八分法 → SAV评分+宫位吉凶 ⭐ v3.4 -6. `varga-full --divisions D9,D60` 计算精确分盘(含度数+尊严) ⭐ v3.7 -7. `aspects` 计算精确相位(度数级Drishti) ⭐ v3.7 +**典型工作流**(v3.7.1 升级): + +### 🟢 路径A:精准出生信息(推荐,一条命令搞定) +```bash +# 一键全链路计算(13模块自动串行) +$PYTHON $SCRIPT full-reading --year YYYY --month MM --day DD --hour HH --minute MM --lat XX.XX --lon XX.XX --tz X +# 输出:chart + dasha + yoga + varga_full + aspects + jaimini + nakshatra_adv + argala + tajika + shadbala + ashtakavarga + validation + audit +# 完成后直接进入阶段二(意图识别) +``` + +### 📄 路径B:PDF/文字星盘(用文档数据直接推算) +1. 提取PDF/文字中的所有星象数据(行星落宫、度数、Dasha、Shadbala等) +2. 数据完整性门 → Pass/Limited/Fail +3. 如有出生时间+地点,额外调用 `full-reading` 补充计算v3.7新增模块 +4. 进入阶段二(意图识别) + +### 🔧 路径C:时间不明确(互动式矫正) +1. 收集外表体质+生活事件(3-5轮互动) +2. 多候选时间对比验证(Dasha吻合率+Transit吻合率) +3. D9/D10精确校正 +4. 矫正完成后走路径A 8. `jaimini --mode all` 计算Chara Karaka + Dasha + Karakamsha ⭐ v3.7 9. `nakshatra-adv --mode all` 计算Tara Bala + Sub-Lord ⭐ v3.7 10. `argala` 计算门闩干预分析 ⭐ v3.7 @@ -524,6 +548,6 @@ $PYTHON $SCRIPT <子命令> [参数] --- -**版本**:3.7.0 +**版本**:3.7.1 **创建日期**:2026-04-20 -**最后更新**:2026-04-25(v3.7.0 新增7大计算模块:BPHS十六分盘精确计算+度数精确相位+Jaimini完整系统+高级Nakshatra分析+Argala门闩+Tajika年运盘+合盘分析,引擎子命令14→21) +**最后更新**:2026-04-25(v3.7.1 新增 full-reading 全自动综合解盘子命令 + 三条入口路径路由 + 工作流v3.0;v3.7.0 新增7大计算模块:BPHS十六分盘精确计算+度数精确相位+Jaimini完整系统+高级Nakshatra分析+Argala门闩+Tajika年运盘+合盘分析,引擎子命令21→22) diff --git a/references/ai-reading-workflow-prompt.md b/references/ai-reading-workflow-prompt.md index 43402851..0a7713f0 100644 --- a/references/ai-reading-workflow-prompt.md +++ b/references/ai-reading-workflow-prompt.md @@ -1,9 +1,10 @@ # AI解盘工作流Prompt工程(AI Reading Workflow) -> **适用场景**:AI收到PDF星盘后,如何一步步执行完整的解盘+推运分析 -> **版本**:v1.0.0 | **创建日期**:2026-04-24 +> **适用场景**:AI收到出生信息、PDF星盘或文字星盘后,如何一步步执行完整的解盘+推运分析 +> **版本**:v3.0.0 | **更新日期**:2026-04-25 > **优先级**:⭐⭐⭐⭐⭐(AI解盘质量的决定性文件) -> **定位**:本文件是AI在收到PDF后的**执行引擎**,将Skill中所有参考资料串联成可执行的工作流 +> **定位**:本文件是AI解盘的**执行引擎**,将Skill中所有参考资料串联成可执行的工作流 +> **v3.0重大变更**:三条入口路径明确分流,引擎全自动计算无需用户逐模块触发 --- @@ -13,31 +14,120 @@ 2. **不猜测**:数据缺失时标注"缺失",不编造数据 3. **不锚定**:先输出星盘推导,再等用户反馈,不先知道用户生活再"找依据" 4. **必标注**:每个结论标注来源系统、置信度、精度边界 +5. **全自动优先**:引擎有能力自动完成的计算,绝不要求用户手动触发 +6. **尊重用户数据**:用户提供的PDF/文字星盘数据即为事实来源,优先使用而非重新计算 --- -## 阶段一:PDF数据提取(→ `pdf-chart-reading-guide.md`) +## 🔴 阶段零:入口路由(三条路径) -### 1.1 执行指令 - -收到PDF/图片后,AI必须: +### 用户消息到达后,AI立即判断走哪条路径: ``` -1. 识别PDF来源软件(JH / Parashara's Light / 其他) -2. 按内容类型逐页提取(不依赖页码顺序) -3. 填充完整JSON Schema(见pdf-chart-reading-guide.md 第三节) -4. 执行数据完整性门(Quality Gate,见第四节) -5. 执行交叉校验(见第五节) -6. 输出提取报告(见第六节) +用户消息到达 + │ + ├─→ 【路径A】用户提供了精准出生信息(日期+时间+地点) + │ → 直接调用 full-reading 引擎全链路计算 + │ → 跳到阶段二 + │ + ├─→ 【路径B】用户提供了PDF/图片星盘 或 丰富的文字星盘描述 + │ → 提取文档中的所有星象数据(落宫、度数、Dasha等) + │ → 直接基于提取的数据进行推算分析 + │ → 跳到阶段二 + │ + └─→ 【路径C】用户出生时间不明确 或 仅知道大概时间 + → 启动互动式出生时间矫正 + → 矫正完成后走路径A ``` -### 1.2 输出模板(阶段一必输出) +--- + +### 路径A:精准出生信息 → full-reading 全自动计算 + +**触发条件**:用户提供了明确的出生日期+时间+地点(三者齐全) + +**示例输入**: +- "REDACTED_YEAR年4月17日 14:45 REDACTED_PLACE" +- "我出生于 1990-08-15 早上6:30 北京" +- "April 17, REDACTED_YEAR, 2:45 PM, REDACTED_PLACE, China (36.6N, 114.5E)" + +**执行指令**(一条命令搞定所有计算): + +```bash +python3 scripts/jyotish_engine.py full-reading \ + --year YYYY --month MM --day DD --hour HH --minute MM \ + --lat XX.XX --lon XX.XX --tz X +``` + +**此命令自动执行13个计算步骤**: +1. chart — 核心星盘(上升、行星位置、宫位) +2. dasha — Vimshottari大运时间线 +3. yoga — Yoga格局识别 +4. varga_full — BPHS十六分盘(D2-D60) +5. aspects — 度数精确相位系统 +6. jaimini — Chara Karaka + Chara Dasha + Karakamsha +7. nakshatra_adv — Tara Bala + Sub-Lord +8. argala — Argala门闩系统 +9. tajika — Tajika年运盘 +10. shadbala — 六重力量 +11. ashtakavarga — 八分法 +12. validation — R1-R10数学验证 +13. audit — P1-P12行星审计 + +**输出结构**: +- `chart`:完整星盘数据 +- `modules`:12个模块各自的结果 +- `summary`:计算耗时、模块数、错误数 +- `errors`/`warnings`:异常信息 + +**数据质量门**: + +| 字段 | 检查项 | 判定 | +|------|--------|------| +| `summary.errors` | 是否为空 | 空则继续,非空需评估 | +| `summary.modules_computed` | 是否≥10 | ≥10正常,<10说明多模块失败 | +| `chart.ascendant` | 是否有上升星座 | 无则计算失败,需排查 | + +**完成后**:直接跳到阶段二(意图识别) + +--- + +### 路径B:PDF/文字星盘 → 数据提取 + 直接推算 + +**触发条件**:用户上传了PDF星盘、截图,或提供了详细的文字星盘描述 + +**示例输入**: +- 上传11页JhoroWatch PDF +- 上传Parashara's Light截图 +- 文字描述:"我的上升是狮子座,太阳在白羊座9宫,月亮在水瓶座7宫..." + +**⚠️ 核心原则:用文档的数据,不重新排盘** + +用户提供的PDF/文字星盘中的数据就是**事实来源**。AI不需要从出生时间重新计算星盘,而是直接使用文档中已有的: +- 行星落宫落座 +- Dasha时间线 +- Shadbala分数 +- Ashtakavarga点数 +- Yoga列表 +- 分盘数据 + +**执行步骤**: + +``` +1. 识别来源(JH / Parashara's Light / 其他软件) +2. 逐页/逐段提取所有星象数据 +3. 填充标准JSON Schema(见下方模板) +4. 执行数据完整性门(Quality Gate) +5. 如有出生时间+地点,额外调用 full-reading 补充计算 +6. 输出提取报告 +``` + +**数据提取模板**: ```markdown -## 📋 PDF数据提取报告 +## 📋 星盘数据提取报告 -**来源**:[JH / PL / 其他] | **页数**:[N]页 -**完整度**:[XX%] | **分析级别**:[Level 1/2/3] +**来源**:[JH / PL / 文字描述] | **完整度**:[XX%] ### 基本信息 - 出生:[YYYY-MM-DD HH:MM] [地点] [性别] @@ -74,14 +164,9 @@ ### Yoga清单 - [Yoga1]:[行星]在[X宫] -- [Yoga2]:... - -### 数据完整性 -- ✅ P0全部齐全(N/11)或 ❌ 缺失:[列出] -- ⚠️ P1缺失:[列出] ``` -### 1.3 质量门判定规则 +**数据完整性门**: | 完整度 | 判定 | 允许的分析 | |--------|------|-----------| @@ -89,7 +174,113 @@ | 70-89%(P0大部分) | ⚠️ Limited | Level 2,标注限制 | | <70%(P0缺关键项) | ❌ Fail | Level 1快速概览,要求用户补全 | -**如果Quality Gate未通过**:停止在阶段一,告知用户缺失哪些数据、为什么影响分析。 +**补充计算**(条件触发): + +如果PDF中包含了出生日期+时间+地点信息,AI **应当额外调用** `full-reading` 来补充PDF中可能缺失的计算(如精确相位、Argala、Tajika等v3.7新增模块),将引擎计算结果与PDF提取数据合并,以引擎结果为补充、PDF数据为基准。 + +**完成后**:直接跳到阶段二(意图识别) + +--- + +### 路径C:时间不明确 → 互动式出生时间矫正 + +**触发条件**: +- 用户说"不知道出生时间" / "大概下午吧" / "不清楚几点" +- 用户只知道日期不知道时间 +- 用户提供的出生证明时间与实际有出入 + +**⚠️ 核心理念:不猜时间,通过互动逐步锁定** + +AI不应该凭空假设一个时间,而应该通过结构化互动帮助用户锁定精确时间。 + +**矫正流程**(→ `birth-time-rectification-advanced.md`): + +#### C1. 初始信息收集(第一轮互动) + +**AI必须收集的基础信息**(只问一轮,最多5个问题): + +``` +"为了帮你精准确定出生时间,我需要了解一些信息: + +1. 你目前知道的出生时间范围是什么?(比如'下午2点到5点'、'上午'、'完全不知道') +2. 出生地点是哪里?(城市即可) +3. 你的体型偏瘦/中等/偏壮?脸型偏圆/长/方? +4. 容易出现健康问题的部位是?(比如经常头痛/肠胃不好/腰痛等) +5. 有没有明显的胎记或疤痕?在身体什么位置?" +``` + +#### C2. 外表体质初筛(AI自动分析) + +根据用户回答,确定上升星座范围: +- 体型+脸型+健康倾向 → 缩小到2-3个候选上升星座 +- 胎记/疤痕位置 → 进一步缩小范围 +- 参照 `birth-time-rectification-advanced.md` 中的外表体质对应表 + +#### C3. 生活事件验证(第二轮互动) + +**AI请求用户提供人生重要事件**: + +``` +"初步判断你的上升可能在[星座A]或[星座B]。 +为了进一步确认,请告诉我你人生中的一些重要转折事件, +大概5-10个就行,包括大概的时间和事件类型。比如: +- 搬家、转学、毕业 +- 工作/事业的重要变化 +- 开始或结束一段感情 +- 亲人离世或重病 +- 获奖或重大成就 +- 生病或手术" +``` + +**AI对每个事件做Dasha+Transit验证**: +- 用候选时间分别排盘 +- 检查事件时间点的Dasha周期是否激活相关宫位 +- 检查Transit是否支持该事件 +- 计算每个候选时间的吻合率 + +#### C4. D9/D10精确校正(第三轮互动,可选) + +如果需要更精确(精确到±5分钟以内): + +``` +"时间范围已经缩小到[XX:XX-XX:XX]。 +为了进一步精确,请告诉我: +1. 你的感情模式是怎样的?(主动/被动、深刻/轻松、重视精神连接/重视现实基础) +2. 你的工作风格是怎样的?(管理型/创意型/研究型/服务型)" +``` + +- 感情模式 → 判定D9上升 → 缩小时间 +- 工作风格 → 判定D10上升 → 缩小时间 + +#### C5. 矫正结果输出 + +```markdown +## 🔧 出生时间矫正报告 + +### 信息收集 +- 已知时间范围:[描述] +- 外表体质:[描述] +- 事件验证:[N]个事件 + +### 矫正过程 +- 上升候选:[星座A] / [星座B] → 判定:[星座X] +- Dasha吻合率:[XX%] +- Transit吻合率:[XX%] +- D9上升判定:[星座](基于感情特质) +- D10上升判定:[星座](基于事业特质) + +### 矫正结果 +- **矫正后出生时间**:[HH:MM] +- **置信度**:[高/中/低]([XX%]事件吻合) +- **精度范围**:±[X]分钟 + +### ⚠️ 声明 +出生时间矫正是基于事件反向推导的概率性方法。 +矫正后的时间不能100%保证精确,但基于[X]个事件的验证, +吻合率达到[XX%],可作为有效参考。 +``` + +**矫正完成后**:使用矫正后的时间走路径A,调用 `full-reading` 全链路计算。 --- @@ -107,17 +298,19 @@ | 教育/学业 | 4宫+9宫 | — | §6 | | 出国/迁移 | 9宫+12宫 | — | §7 | | 灵性/修行 | 9宫+12宫 | — | §8 | +| 合盘/关系匹配 | 7宫 | `synastry` + `relationship-astrology-guide.md` | §1 | | 综合解盘(全盘) | 全部 | `comprehensive-reading-workflow.md` | 全部 | **(承诺模板→ `promise-assessment-templates.md`)** ### 2.2 用户未明确意图时的默认流程 -如果用户只上传了PDF没有说具体问什么: +如果用户没有说具体问什么(比如只给了出生信息或上传了PDF): 1. 执行**综合解盘工作流Level 2**(`comprehensive-reading-workflow.md`) 2. 先输出10宫位快速扫描 3. 识别最强和最弱的领域 4. 重点展开当前Dasha激活的领域 +5. 主动提示用户可以深入询问任何领域 --- @@ -140,7 +333,7 @@ Step 3.3 Yoga格局识别 → references/yoga-strength-scoring-system.md Step 3.4 Argala检查(目标宫的2/4/5/8/11宫) - → references/argala-complete-guide.md ⭐ 新增 + → references/argala-complete-guide.md → 输出:目标宫是否被"开门"或"锁门" Step 3.5 逆行/燃烧/行星战争检查 @@ -223,7 +416,7 @@ Step 4.1 Dasha激活评估 → 当前Maha/Antar/Pratyantar与目标领域的关系 Step 4.2 Dasa Convergence(轻量三系统法) - → references/dasa-convergence-methodology.md §七 ⭐ 升级 + → references/dasa-convergence-methodology.md §七 → Vimsottari + Yogini + Chara 三系统交叉验证 → 输出:Convergence等级(Level 0-3) @@ -389,19 +582,22 @@ Step 4.7 Varshaphala年运盘确认(如需要) ## 快速参考:完整工作流一页纸 ``` -收到PDF +用户消息到达 │ - ├─→ 阶段一:数据提取(pdf-chart-reading-guide.md) - │ └─→ Quality Gate → Pass/Limited/Fail + ├─ 路径判断 + │ ├─→ 【路径A】精准出生信息 → full-reading 全自动计算 + │ ├─→ 【路径B】PDF/文字星盘 → 提取数据 + 直接推算 + │ └─→ 【路径C】时间不明确 → 互动矫正 → 走路径A │ ├─→ 阶段二:意图路由 │ └─→ 用户问什么 → 目标宫位 → 对应承诺模板 + │ (无明确意图 → 综合解盘Level 2) │ ├─→ 阶段三:静态分析(10步) │ ├─→ 宫位-行星基础 - │ ├─→ 承诺评估(promise-assessment-templates.md) + │ ├─→ 承诺评估 │ ├─→ Yoga识别 - │ ├─→ Argala检查(argala-complete-guide.md)⭐ + │ ├─→ Argala检查 │ ├─→ 逆行/燃烧/战争 │ ├─→ Nakshatra深度 │ ├─→ Shadbala @@ -411,7 +607,7 @@ Step 4.7 Varshaphala年运盘确认(如需要) │ ├─→ 阶段四:动态推运(7步) │ ├─→ Dasha激活 - │ ├─→ Dasa Convergence轻量三系统法 ⭐ + │ ├─→ Dasa Convergence三系统法 │ ├─→ Transit四参考点 │ ├─→ Double Transit │ ├─→ Jaimini确认 @@ -420,16 +616,14 @@ Step 4.7 Varshaphala年运盘确认(如需要) │ ├─→ 阶段五:应期输出 │ └─→ 严格遵循prediction-output-protocol.md - │ 禁用措辞 + 强制标注 + 精度声明 │ ├─→ 阶段六:补救措施(可选) │ └─→ 阶段七:现代措辞包装 - └─→ modern-language-guide.md + misconceptions check ``` --- -**版本**:1.0.0 -**创建日期**:2026-04-24 -**配套文件**:`pdf-chart-reading-guide.md`(数据提取)、`timing-prediction-template.md`(应期模板)、`prediction-output-protocol.md`(输出规范)、`comprehensive-reading-workflow.md`(综合流程)、`promise-assessment-templates.md`(承诺模板)、`argala-complete-guide.md`(Argala检查)、`dasa-convergence-methodology.md`(Dasa Convergence) \ No newline at end of file +**版本**:3.0.0 +**更新日期**:2026-04-25 +**配套文件**:`pdf-chart-reading-guide.md`(PDF提取)、`birth-time-rectification-advanced.md`(出生时间矫正)、`timing-prediction-template.md`(应期模板)、`prediction-output-protocol.md`(输出规范)、`comprehensive-reading-workflow.md`(综合流程)、`promise-assessment-templates.md`(承诺模板)、`argala-complete-guide.md`(Argala检查)、`dasa-convergence-methodology.md`(Dasa Convergence) diff --git a/scripts/jyotish_engine.py b/scripts/jyotish_engine.py index 2d979003..04349d43 100644 --- a/scripts/jyotish_engine.py +++ b/scripts/jyotish_engine.py @@ -17,6 +17,7 @@ argala Argala门闩系统(v3.7新增) tajika Tajika/Varshaphala年运盘(v3.7新增) synastry 合盘分析(Ashta Koota 36分制+Mangal Dosha)(v3.7新增) + full-reading 全自动综合解盘(出生信息→全链路计算→完整报告)(v3.7.1新增) celebrity 名人案例查询(15,807条数据+SQLite验证库) db-stats 验证数据库统计 transit 行星过境查询 @@ -1259,6 +1260,216 @@ def cmd_synastry(args): return calc_synastry(p1, p2) +# ============================================================================ +# 22. 全自动综合解盘 full-reading(v3.7.1新增) +# ============================================================================ +def cmd_full_reading(args): + """ + 用户只需提供出生信息,引擎自动串起全链路分析: + chart → dasha → yoga → varga-full → aspects → jaimini → nakshatra-adv + → argala → tajika → shadbala → ashtakavarga → validate → audit + → 综合报告输出 + """ + import time + t0 = time.time() + + report = { + 'version': '3.7.1-full-reading', + 'birth_info': { + 'date': f"{args.year}-{args.month:02d}-{args.day:02d}", + 'time': f"{args.hour:02d}:{args.minute:02d}", + 'lat': args.lat, 'lon': args.lon, + 'tz': f"UTC{'+' if args.tz >= 0 else ''}{args.tz}", + }, + 'modules': {}, + 'errors': [], + 'warnings': [], + } + + # ── Step 1: 核心星盘 ── + chart, asc_idx, jd, ayanamsa = compute_chart_data( + args.year, args.month, args.day, args.hour, args.minute, + args.lat, args.lon, args.tz) + if chart is None: + return {"error": "swisseph未安装,无法计算星盘"} + + report['chart'] = chart + planets = chart.get('planets', {}) + asc_deg = chart.get('ascendant', {}).get('degree', 0) + asc_sign = chart.get('ascendant', {}).get('sign', 'Unknown') + planet_lons = {pn: pd['degree'] for pn, pd in planets.items() if isinstance(pd, dict) and 'degree' in pd} + planet_sign_indices = {} + for pn, pd in planets.items(): + if isinstance(pd, dict) and 'sign' in pd: + planet_sign_indices[pn] = SIGNS.index(pd['sign']) if pd['sign'] in SIGNS else 0 + + # ── Step 2: Vimshottari Dasha ── + try: + moon_data = planets.get('Moon', {}) + moon_lon = moon_data.get('degree', 0) + nak_idx = int(moon_lon / (360 / 27)) % 27 + nak_name = NAKSHATRA_LIST[nak_idx][0] + nak_lord = NAKSHATRA_LIST[nak_idx][1] + pada = int((moon_lon % (360/27)) / (360/108)) + 1 + + birthdate = f"{args.year}-{args.month:02d}-{args.day:02d}" + today_str = datetime.now().strftime('%Y-%m-%d') + dasha_result = cmd_dasha(type('Args', (), { + 'nakshatra': nak_name, 'pada': pada, + 'moon_lon': moon_lon, 'birthdate': birthdate, 'today': today_str + })()) + report['modules']['dasha'] = dasha_result + except Exception as e: + report['errors'].append(f"dasha: {e}") + + # ── Step 3: Yoga格局 ── + try: + yoga_planets = {} + for pn, pd in planets.items(): + if isinstance(pd, dict) and 'sign' in pd and 'house' in pd: + yoga_planets[pn] = {'sign': pd['sign'], 'house': pd['house']} + yoga_result = cmd_yoga(type('Args', (), { + 'ascendant': asc_sign, + 'planets': ','.join([f"{k}:{v['sign']}:{v['house']}" for k, v in yoga_planets.items()]) + })()) + report['modules']['yoga'] = yoga_result + except Exception as e: + report['errors'].append(f"yoga: {e}") + + # ── Step 4: BPHS十六分盘 ── + try: + sys.path.insert(0, SCRIPT_DIR) + from varga import calc_all_vargas + varga_result = calc_all_vargas(planet_lons, asc_deg, None) # None = 全部分盘 + report['modules']['varga_full'] = varga_result + except Exception as e: + report['errors'].append(f"varga-full: {e}") + + # ── Step 5: 精确相位 ── + try: + from aspects import calc_all_aspects + aspects_result = calc_all_aspects(planet_lons, asc_deg) + report['modules']['aspects'] = aspects_result + except Exception as e: + report['errors'].append(f"aspects: {e}") + + # ── Step 6: Jaimini系统 ── + try: + from jaimini import calc_chara_karaka_7, calc_chara_karaka_8, calc_chara_dasha, calc_karakamsha + from varga import calc_varga + + jaimini_result = {} + jaimini_result['chara_karaka_7'] = calc_chara_karaka_7(planet_lons) + jaimini_result['chara_karaka_8'] = calc_chara_karaka_8(planet_lons) + jaimini_result['chara_dasha'] = calc_chara_dasha(asc_idx, planet_lons, args.year, args.month) + + # Karakamsha + ck7 = jaimini_result['chara_karaka_7'] + dk_name = ck7.get('DK', {}).get('planet', 'Moon') + dk_lon = planet_lons.get(dk_name, 0) + dk_d9 = calc_varga(dk_lon, 9) + jaimini_result['karakamsha'] = calc_karakamsha( + dk_d9.get('sign', 'Aries'), dk_d9.get('degree_in_sign', 0)) + report['modules']['jaimini'] = jaimini_result + except Exception as e: + report['errors'].append(f"jaimini: {e}") + + # ── Step 7: 高级Nakshatra ── + try: + from nakshatra_advanced import find_nakshatra, calc_all_tara_balas, calc_sub_lord + + nak_result = {'planets': {}} + for pn, lon in planet_lons.items(): + nak_result['planets'][pn] = find_nakshatra(lon) + moon_nak_idx = int(planet_lons.get('Moon', 0) / (360/27)) % 27 + nak_result['tara_bala'] = calc_all_tara_balas(moon_nak_idx, planet_lons) + nak_result['sub_lords'] = {pn: calc_sub_lord(lon) for pn, lon in planet_lons.items()} + report['modules']['nakshatra_advanced'] = nak_result + except Exception as e: + report['errors'].append(f"nakshatra-adv: {e}") + + # ── Step 8: Argala门闩 ── + try: + from argala import calc_argala + report['modules']['argala'] = calc_argala(planet_sign_indices, asc_idx) + except Exception as e: + report['errors'].append(f"argala: {e}") + + # ── Step 9: Tajika年运盘(需要年龄) ── + age = args.age + if age is None: + # 自动计算年龄 + try: + birth_date = datetime(args.year, args.month, args.day) + age = (datetime.now() - birth_date).days // 365 + report['warnings'].append(f"未提供年龄,自动计算为 {age} 岁") + except: + age = None + + if age is not None: + try: + from tajika import calc_muntha, calc_year_lord, calc_mudda_dasha, calc_tri_pataka + asc_si = int(asc_deg / 30) % 12 + tajika_result = {} + tajika_result['muntha'] = calc_muntha(asc_si, age) + yl = calc_year_lord(asc_si, age) + tajika_result['year_lord'] = yl + varsha_lord = yl.get('year_lord', 'Jupiter') + tajika_result['mudda_dasha'] = calc_mudda_dasha(asc_si, varsha_lord, args.month) + muntha_si = (asc_si + age) % 12 + tajika_result['tri_pataka'] = calc_tri_pataka(planet_lons, varsha_lord, muntha_si) + report['modules']['tajika'] = tajika_result + except Exception as e: + report['errors'].append(f"tajika: {e}") + + # ── Step 10: Shadbala六重力量 ── + try: + from shadbala import calc_shadbala + birth_hour = args.hour + args.minute / 60.0 + sun_lon = planet_lons.get('Sun', 0) + moon_lon = planet_lons.get('Moon', 0) + report['modules']['shadbala'] = calc_shadbala(planets, asc_sign, birth_hour, sun_lon, moon_lon) + except Exception as e: + report['errors'].append(f"shadbala: {e}") + + # ── Step 11: Ashtakavarga八分法 ── + asht_data = None + try: + from ashtakavarga import calc_ashtakavarga + asht_data = calc_ashtakavarga(planets, asc_idx) + report['modules']['ashtakavarga'] = asht_data + except Exception as e: + report['errors'].append(f"ashtakavarga: {e}") + + # ── Step 12: R1-R10数学验证 ── + try: + from validate import validate_chart + report['modules']['validation'] = validate_chart(chart, asht_data) + except Exception as e: + report['errors'].append(f"validate: {e}") + + # ── Step 13: P1-P12行星审计 ── + try: + audit_result = cmd_audit(args) + report['modules']['audit'] = audit_result + except Exception as e: + report['errors'].append(f"audit: {e}") + + # ── 汇总 ── + elapsed = round(time.time() - t0, 2) + module_count = len(report['modules']) + error_count = len(report['errors']) + report['summary'] = { + 'elapsed_seconds': elapsed, + 'modules_computed': module_count, + 'errors': error_count, + 'status': 'complete' if error_count == 0 else f'{error_count} errors', + 'next_step': 'AI可直接基于此数据执行阶段二(意图路由)→阶段三(静态分析)→阶段四(动态推运)→阶段五(应期输出)', + } + + return report + + # ============================================================================ # CLI入口 # ============================================================================ @@ -1388,6 +1599,11 @@ def main(): p.add_argument('--gender1', default='M', help='Person1性别') p.add_argument('--gender2', default='F', help='Person2性别') + # 22. full-reading (v3.7.1新增) + p = sub.add_parser('full-reading', help='全自动综合解盘(出生信息→全链路→完整报告)') + _add_chart_args(p) + p.add_argument('--age', type=int, default=None, help='当前年龄(不提供则自动计算)') + args = parser.parse_args() if not args.command: parser.print_help(); sys.exit(1) @@ -1398,7 +1614,7 @@ def main(): 'validate': cmd_validate, 'audit': cmd_audit, 'report': cmd_report, 'varga-full': cmd_varga_full, 'aspects': cmd_aspects, 'jaimini': cmd_jaimini, 'nakshatra-adv': cmd_nakshatra_adv, 'argala': cmd_argala, 'tajika': cmd_tajika, - 'synastry': cmd_synastry} + 'synastry': cmd_synastry, 'full-reading': cmd_full_reading} result = cmds[args.command](args) output_json(result)