v6.1.8: Improve Nishkapata yoga recall

This commit is contained in:
732642856
2026-06-08 10:57:42 +08:00
parent ae959f362b
commit 3b167e28c3
4 changed files with 137 additions and 146 deletions
+27
View File
@@ -1,5 +1,32 @@
# 印度占星 Skill 更新日志
## v6.1.82026-06-08)—— Nishkapata 友好星座条件恢复 + 主题化报告真实模块接线,Yoga F1 提升至 95.22%
> **目标**:继续冲击 Yoga FN 瓶颈,但坚持准确率优先,只接受来源语义明确且预验证不增加 FP 的规则优化。
### 关键改进
- `bvr_nishkapata_precise` 恢复 BVR-205 / PyJHora 描述中的“4宫行星处于友好星座”条件:第4宫若有行星处于友好/自/旺等强势星座,也可触发 Nishkapata Yoga。
- 预验证过的但未采纳方案:Kapata Yoga 的 4宫主受凶星相位方向候选会增加 FP 且无 FN 收益,因此保持原逻辑不变。
- 继续保留 Thrikaala / Dharidhra / Parannabhojana 的保守口径:这些规则牵涉特定 amsa、Navamsa/弱势定义或 PyJHora 口径,暂不为召回做宽泛放松。
- `scripts/orchestrator_bridge.py` 新增 `inject_full_reading_modules()`:直接消费 `full-reading.modules` 的真实结果,把 `yoga``varga_full``d9_navamsa_expanded``ashtakavarga``shadbala``special_lagnas``vivah_saham``dasa_convergence``transit_multi_reference` 等模块转换为 `ReportTechniqueResult`
- 主题化报告不再主要依赖 registry/MockDataFactory;在 full-reading JSON 输入下,婚姻/事业/财富/健康/灵性五大主题会获得真实证据与真实 Vimshottari 时间锚。
### 验证
```bash
python3 -m py_compile scripts/orchestrator_bridge.py scripts/report_orchestrator.py scripts/reading_orchestrator.py scripts/jyotish_engine.py
python3 scripts/validate_logic_v2.py
python3 scripts/jyotish_engine.py full-reading --year 1990 --month 6 --day 15 --hour 10 --minute 30 --lat 39.9 --lon 116.4 --tz 8
python3 scripts/orchestrator_bridge.py /tmp/jyotish_full_reading_for_theme.json
python3 scripts/run_quality_gate.py --skip-yoga-logic
```
- 60 张测试图,82 条可对比规则
- FP=36FN=63
- Precision=96.48%Recall=93.99%F1=95.22%
- 主题化桥接 smoke:生成5个主题报告;真实模块注入 evidence counts 为 marriage=9、career=12、wealth=9、health=12、spirituality=13;统一叙事生成成功。
- 质量门禁:compile/json/audit/BPHS/pytest 35 passed/golden case 全通过
---
## v6.1.72026-06-08)—— Yoga F1 首次突破 95% 与 full-reading D9/D60 注入
> **目标**:继续 Yoga 精度冲刺,同时把已在验证管线生效的 D9/D60 YogaContext 正式接入 `yoga` 子命令与 `full-reading` 主链路。
+10 -10
View File
@@ -1,6 +1,6 @@
---
name: jyotish-vedic-astrology
version: 6.1.7
version: 6.1.8
description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、PDF星盘、读取PDF、分析PDF星盘、现代解读、误判纠错、Varga分盘、综合分析、过境分析、合盘、婚姻匹配、年运盘、Prashna、Argala、Jaimini、Shadbala、Ashtakavarga、HTML报告、深度解盘。
---
@@ -10,19 +10,19 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力
> **严格路由**`references/strict-workflow-router.md`(⭐涉及事业/婚恋/财务/应期/技法验证时必须优先读取)
> **覆盖矩阵**`references/technique-capability-matrix.md`(⭐判断技法 covered/partial/missing 时必须参考)
> **机器注册表**`references/technique_registry.json` + `scripts/audit_capabilities.py`(⭐用于自动审计与CI门禁)
> **版本**v6.1.7 | **详细变更**`CHANGELOG.md`
> **版本**v6.1.8 | **详细变更**`CHANGELOG.md`
## Yoga 逻辑验证指标
| 指标 | v6.0.45(旧基线) | v6.1.7(当前) |
| 指标 | v6.0.45(旧基线) | v6.1.8(当前) |
|---|---:|---:|
| Precision | 83.26% | **96.46%** |
| Recall | 91.52% | **93.61%** |
| **F1 Score** | 87.19% | **95.02%** |
| Precision | 83.26% | **96.48%** |
| Recall | 91.52% | **93.99%** |
| **F1 Score** | 87.19% | **95.22%** |
| FP | 193 | **36** |
| FN | 89 | **67** |
| FN | 89 | **63** |
> v6.1.7 当前真实指标以 `references/validation_logic_report.json` 为准:60张测试图、82条可对比规则,FP=36、FN=67、F1=95.02%。关键提升来自 aspect 方向修正、D9/D60 上下文注入、Thrikaala Gnana 收紧、Dharidhra/Navamsa 方法恢复、五系统 Dasha Convergence 接入、full-reading YogaContext 桥接,以及 Sankha Yoga 共享宫主误报收紧。
> v6.1.8 当前真实指标以 `references/validation_logic_report.json` 为准:60张测试图、82条可对比规则,FP=36、FN=63、F1=95.22%。关键提升来自 aspect 方向修正、D9/D60 上下文注入、Thrikaala Gnana 收紧、Dharidhra/Navamsa 方法恢复、五系统 Dasha Convergence 接入、full-reading YogaContext 桥接Sankha Yoga 共享宫主误报收紧,以及 Nishkapata 友好星座条件恢复。主题化报告桥接层已可直接消费 `full-reading.modules` 真实结果,生成五大主题证据与叙事
---
@@ -313,9 +313,9 @@ $PYTHON $SCRIPT <子命令> [参数]
---
**版本**v6.1.7-yoga-f1-95-d9-d60-context
**版本**v6.1.8-yoga-f1-95-theme-real-modules
**创建日期**2026-04-20
**最后更新**2026-06-08v6.1.7 在 v6.1.6 五系统推运收敛基础上,把 D9/D60/Panchanga YogaContext 接入 `yoga` 子命令与 `full-reading` 主链路,并收紧 Sankha Yoga 第二分支;Yoga F1 首次达到 95.02%。Yoga 当前以 `references/validation_logic_report.json` 为准。)
**最后更新**2026-06-08v6.1.8 在 v6.1.7 D9/D60 YogaContext 基础上,恢复 Nishkapata Yoga 的 BVR-205 友好星座条件;Yoga F1 提升至 95.22%FP=36、FN=63。`orchestrator_bridge.py` 已可直接消费 `full-reading.modules` 真实结果生成婚姻/事业/财富/健康/灵性五大主题证据与叙事。Yoga 当前以 `references/validation_logic_report.json` 为准。)
---
+98 -134
View File
@@ -2,7 +2,7 @@
"summary": {
"charts_tested": 60,
"comparable_rules": 82,
"skill_total": 1018,
"skill_total": 1022,
"pyjhora_total": 1049,
"unmapped_pyjhora": 718,
"missing_mappings": {
@@ -98,34 +98,34 @@
"yuddhatpoorvadridhachitta_yoga"
]
},
"agreements": 982,
"agreements": 986,
"false_positives": 36,
"false_negatives": 67,
"precision": 0.9646,
"recall": 0.9361,
"f1": 0.9502
"false_negatives": 63,
"precision": 0.9648,
"recall": 0.9399,
"f1": 0.9522
},
"false_positives": [
{
"chart": "Albert Einstein",
"rule_id": "bvr_dharidhra_11_precise",
"rule_name": "Dharidhra Yoga"
},
{
"chart": "Albert Einstein",
"rule_id": "bvr_bhaga_chumbana_yoga",
"rule_name": "Bhaga Chumbana Yoga"
},
{
"chart": "Nikola Tesla",
"rule_id": "bvr_krisanga_yoga",
"rule_name": "Krisanga Yoga"
"chart": "Albert Einstein",
"rule_id": "bvr_dharidhra_11_precise",
"rule_name": "Dharidhra Yoga"
},
{
"chart": "Nikola Tesla",
"rule_id": "bvr_bhratruvriddhi_precise",
"rule_name": "Bhratruvriddhi Yoga"
},
{
"chart": "Nikola Tesla",
"rule_id": "bvr_krisanga_yoga",
"rule_name": "Krisanga Yoga"
},
{
"chart": "Charles Darwin",
"rule_id": "bvr_matru_sneha_yoga",
@@ -133,13 +133,13 @@
},
{
"chart": "Alexander Fleming",
"rule_id": "bvr_bhaga_chumbana_yoga",
"rule_name": "Bhaga Chumbana Yoga"
"rule_id": "bvr_yukthi_samanwithavagmi_yoga",
"rule_name": "Yukthi Samanwithavagmi Yoga"
},
{
"chart": "Alexander Fleming",
"rule_id": "bvr_yukthi_samanwithavagmi_yoga",
"rule_name": "Yukthi Samanwithavagmi Yoga"
"rule_id": "bvr_bhaga_chumbana_yoga",
"rule_name": "Bhaga Chumbana Yoga"
},
{
"chart": "Max Planck",
@@ -148,13 +148,13 @@
},
{
"chart": "Richard Feynman",
"rule_id": "bvr_nishkapata_precise",
"rule_name": "Nishkapata Yoga"
"rule_id": "bvr_018_ubhayachara_precise",
"rule_name": "Ubhayachara Yoga"
},
{
"chart": "Richard Feynman",
"rule_id": "bvr_018_ubhayachara_precise",
"rule_name": "Ubhayachara Yoga"
"rule_id": "bvr_nishkapata_precise",
"rule_name": "Nishkapata Yoga"
},
{
"chart": "Mahatma Gandhi",
@@ -211,26 +211,26 @@
"rule_id": "adhi_yoga",
"rule_name": "Adhi Yoga"
},
{
"chart": "MS Dhoni",
"rule_id": "bvr_karma_malika_precise",
"rule_name": "Karma Malika Yoga"
},
{
"chart": "MS Dhoni",
"rule_id": "bvr_mathibhramana_yoga",
"rule_name": "Mathibhramana Yoga"
},
{
"chart": "Lionel Messi",
"rule_id": "bvr_017_vosi_precise",
"rule_name": "Vosi Yoga"
"chart": "MS Dhoni",
"rule_id": "bvr_karma_malika_precise",
"rule_name": "Karma Malika Yoga"
},
{
"chart": "Lionel Messi",
"rule_id": "brahma_yoga",
"rule_name": "Brahma Yoga"
},
{
"chart": "Lionel Messi",
"rule_id": "bvr_017_vosi_precise",
"rule_name": "Vosi Yoga"
},
{
"chart": "Cristiano Ronaldo",
"rule_id": "bvr_dwadasa_sahodara_yoga",
@@ -246,15 +246,20 @@
"rule_id": "bvr_dharidhra_11_precise",
"rule_name": "Dharidhra Yoga"
},
{
"chart": "Amitabh Bachchan",
"rule_id": "bvr_bandhubhisthyaktha_precise",
"rule_name": "Bandhubhisthyaktha Yoga"
},
{
"chart": "Amitabh Bachchan",
"rule_id": "bvr_karma_malika_precise",
"rule_name": "Karma Malika Yoga"
},
{
"chart": "Amitabh Bachchan",
"rule_id": "bvr_bandhubhisthyaktha_precise",
"rule_name": "Bandhubhisthyaktha Yoga"
"chart": "Princess Diana",
"rule_id": "bvr_kaahala_yoga",
"rule_name": "Kaahala Yoga"
},
{
"chart": "Princess Diana",
@@ -266,11 +271,6 @@
"rule_id": "bvr_bandhu_pujya_yoga",
"rule_name": "Bandhu Pujya Yoga"
},
{
"chart": "Princess Diana",
"rule_id": "bvr_kaahala_yoga",
"rule_name": "Kaahala Yoga"
},
{
"chart": "J. Krishnamurti",
"rule_id": "bvr_dehasthoulya_yoga",
@@ -299,10 +299,10 @@
},
{
"chart": "Marie Curie",
"rule_id": "bvr_thrikaala_gnana_yoga",
"rule_name": "Thrikaala Gnana Yoga",
"rule_id": "parvata_yoga",
"rule_name": "Parvata Yoga",
"pyjhora_names": [
"thrikaala_gnana_yoga"
"parvata_yoga"
]
},
{
@@ -316,10 +316,10 @@
},
{
"chart": "Marie Curie",
"rule_id": "parvata_yoga",
"rule_name": "Parvata Yoga",
"rule_id": "bvr_thrikaala_gnana_yoga",
"rule_name": "Thrikaala Gnana Yoga",
"pyjhora_names": [
"parvata_yoga"
"thrikaala_gnana_yoga"
]
},
{
@@ -394,15 +394,6 @@
"nishkapata_yoga_206"
]
},
{
"chart": "Indira Gandhi",
"rule_id": "bvr_nishkapata_precise",
"rule_name": "Nishkapata Yoga",
"pyjhora_names": [
"nishkapata_yoga_205",
"nishkapata_yoga_206"
]
},
{
"chart": "Indira Gandhi",
"rule_id": "bvr_utthama_graha_yoga",
@@ -459,11 +450,10 @@
},
{
"chart": "Margaret Thatcher",
"rule_id": "bvr_nishkapata_precise",
"rule_name": "Nishkapata Yoga",
"rule_id": "bvr_matru_satrutwa_yoga",
"rule_name": "Matru Satrutwa Yoga",
"pyjhora_names": [
"nishkapata_yoga_205",
"nishkapata_yoga_206"
"matru_satrutwa_yoga"
]
},
{
@@ -481,11 +471,13 @@
]
},
{
"chart": "Margaret Thatcher",
"rule_id": "bvr_matru_satrutwa_yoga",
"rule_name": "Matru Satrutwa Yoga",
"chart": "Rabindranath Tagore",
"rule_id": "bvr_kapata_yoga",
"rule_name": "Kapata Yoga",
"pyjhora_names": [
"matru_satrutwa_yoga"
"kapata_yoga_202",
"kapata_yoga_203",
"kapata_yoga_204"
]
},
{
@@ -496,16 +488,6 @@
"brahma_yoga"
]
},
{
"chart": "Rabindranath Tagore",
"rule_id": "bvr_kapata_yoga",
"rule_name": "Kapata Yoga",
"pyjhora_names": [
"kapata_yoga_202",
"kapata_yoga_203",
"kapata_yoga_204"
]
},
{
"chart": "Ludwig van Beethoven",
"rule_id": "bvr_thrikaala_gnana_yoga",
@@ -514,25 +496,6 @@
"thrikaala_gnana_yoga"
]
},
{
"chart": "Wolfgang Mozart",
"rule_id": "bvr_kapata_yoga",
"rule_name": "Kapata Yoga",
"pyjhora_names": [
"kapata_yoga_202",
"kapata_yoga_203",
"kapata_yoga_204"
]
},
{
"chart": "Wolfgang Mozart",
"rule_id": "bvr_raja_bhanga_yoga",
"rule_name": "Raja Bhanga Yoga",
"pyjhora_names": [
"raja_bhanga_yoga_298",
"raja_bhanga_yoga_299"
]
},
{
"chart": "Wolfgang Mozart",
"rule_id": "bvr_pittharoga_yoga",
@@ -549,6 +512,25 @@
"theevrabuddhi_yoga"
]
},
{
"chart": "Wolfgang Mozart",
"rule_id": "bvr_raja_bhanga_yoga",
"rule_name": "Raja Bhanga Yoga",
"pyjhora_names": [
"raja_bhanga_yoga_298",
"raja_bhanga_yoga_299"
]
},
{
"chart": "Wolfgang Mozart",
"rule_id": "bvr_kapata_yoga",
"rule_name": "Kapata Yoga",
"pyjhora_names": [
"kapata_yoga_202",
"kapata_yoga_203",
"kapata_yoga_204"
]
},
{
"chart": "Pablo Picasso",
"rule_id": "bvr_raja_bhanga_yoga",
@@ -592,15 +574,6 @@
"bhratruvriddhi_yoga"
]
},
{
"chart": "Elon Musk",
"rule_id": "bvr_nishkapata_precise",
"rule_name": "Nishkapata Yoga",
"pyjhora_names": [
"nishkapata_yoga_205",
"nishkapata_yoga_206"
]
},
{
"chart": "Warren Buffett",
"rule_id": "bvr_utthama_graha_yoga",
@@ -629,20 +602,11 @@
},
{
"chart": "Azim Premji",
"rule_id": "bvr_nishkapata_precise",
"rule_name": "Nishkapata Yoga",
"rule_id": "bvr_bahu_puthra_precise",
"rule_name": "Bahu Puthra Yoga",
"pyjhora_names": [
"nishkapata_yoga_205",
"nishkapata_yoga_206"
]
},
{
"chart": "Azim Premji",
"rule_id": "bvr_ayatna_griha_prapta_yoga",
"rule_name": "Ayatna Griha Prapta Yoga",
"pyjhora_names": [
"ayatna_griha_prapta_yoga_189",
"ayatna_griha_prapta_yoga_190"
"bahu_puthra_yoga_220",
"bahu_puthra_yoga_221"
]
},
{
@@ -669,11 +633,11 @@
},
{
"chart": "Azim Premji",
"rule_id": "bvr_bahu_puthra_precise",
"rule_name": "Bahu Puthra Yoga",
"rule_id": "bvr_ayatna_griha_prapta_yoga",
"rule_name": "Ayatna Griha Prapta Yoga",
"pyjhora_names": [
"bahu_puthra_yoga_220",
"bahu_puthra_yoga_221"
"ayatna_griha_prapta_yoga_189",
"ayatna_griha_prapta_yoga_190"
]
},
{
@@ -684,6 +648,14 @@
"pushkala_yoga"
]
},
{
"chart": "Michael Jordan",
"rule_id": "bvr_bandhubhisthyaktha_precise",
"rule_name": "Bandhubhisthyaktha Yoga",
"pyjhora_names": [
"bandhubhisthyaktha_yoga"
]
},
{
"chart": "Michael Jordan",
"rule_id": "bvr_krisanga_yoga",
@@ -693,14 +665,6 @@
"krisanga_yoga_113"
]
},
{
"chart": "Michael Jordan",
"rule_id": "bvr_bandhubhisthyaktha_precise",
"rule_name": "Bandhubhisthyaktha Yoga",
"pyjhora_names": [
"bandhubhisthyaktha_yoga"
]
},
{
"chart": "Lionel Messi",
"rule_id": "bvr_matrunasa_precise",
@@ -710,6 +674,16 @@
"matrunasa_yoga_199"
]
},
{
"chart": "Lionel Messi",
"rule_id": "bvr_kapata_yoga",
"rule_name": "Kapata Yoga",
"pyjhora_names": [
"kapata_yoga_202",
"kapata_yoga_203",
"kapata_yoga_204"
]
},
{
"chart": "Lionel Messi",
"rule_id": "bvr_dharidhra_11_precise",
@@ -724,16 +698,6 @@
"dharidhra_yoga_152"
]
},
{
"chart": "Lionel Messi",
"rule_id": "bvr_kapata_yoga",
"rule_name": "Kapata Yoga",
"pyjhora_names": [
"kapata_yoga_202",
"kapata_yoga_203",
"kapata_yoga_204"
]
},
{
"chart": "Lionel Messi",
"rule_id": "bvr_matrudeerghayur_yoga",
+2 -2
View File
@@ -9296,7 +9296,7 @@
"category": "auspicious",
"logic": {
"type": "custom",
"expr": "\n# PyJHora/BVR 205-206 Nishkapata Yoga.\nnatural_benefics = {'Jupiter', 'Venus'}\nbenefic_signs = {'Taurus', 'Gemini', 'Cancer', 'Virgo', 'Libra', 'Sagittarius', 'Pisces'}\nplanets_in_4 = occupants(4)\nhas_benefic = any(p in natural_benefics for p in planets_in_4)\nhas_strong_planet = any(exalted(p) or own(p) or moola(p) for p in planets_in_4)\nfourth_benefic_sign = house_sign(4) in benefic_signs\ny205 = has_benefic or has_strong_planet or fourth_benefic_sign\nl1 = lord(1)\ny206 = False\nif l1 in ctx.planets and house_of(l1) == 4:\n l1_with_benefic = any(p != l1 and same_house(l1, p) for p in natural_benefics if p in ctx.planets)\n l1_aspected_benefic = any(aspect(p, l1) for p in natural_benefics if p in ctx.planets and p != l1)\n y206 = l1_with_benefic or l1_aspected_benefic\ny205 or y206 or vaiseshikamsa_score(lord(1)) >= 16\n",
"expr": "\n# PyJHora/BVR 205-206 Nishkapata Yoga.\nnatural_benefics = {'Jupiter', 'Venus'}\nbenefic_signs = {'Taurus', 'Gemini', 'Cancer', 'Virgo', 'Libra', 'Sagittarius', 'Pisces'}\nplanets_in_4 = occupants(4)\nhas_benefic = any(p in natural_benefics for p in planets_in_4)\nhas_strong_planet = any(exalted(p) or own(p) or moola(p) for p in planets_in_4)\n# BVR-205/PyJHora also treats a planet in a friendly sign in the 4th as qualifying.\nhas_friendly_planet = any(p in ctx.planets and p in planets_in_4 and house_strength(p) is not None and house_strength(p) >= 3 for p in planets_in_4)\nfourth_benefic_sign = house_sign(4) in benefic_signs\ny205 = has_benefic or has_strong_planet or has_friendly_planet or fourth_benefic_sign\nl1 = lord(1)\ny206 = False\nif l1 in ctx.planets and house_of(l1) == 4:\n l1_with_benefic = any(p != l1 and same_house(l1, p) for p in natural_benefics if p in ctx.planets)\n l1_aspected_benefic = any(aspect(p, l1) for p in natural_benefics if p in ctx.planets and p != l1)\n y206 = l1_with_benefic or l1_aspected_benefic\ny205 or y206 or vaiseshikamsa_score(lord(1)) >= 16\n",
"combo_template": "第4宫有天然吉星/强星/吉性星座,或上升主入4宫且受吉星影响"
},
"effects": [
@@ -9306,7 +9306,7 @@
],
"strength": "中",
"enabled": true,
"accuracy_note": "v6.1.3: added Vaiseshikamsa scoring for lagna lord"
"accuracy_note": "v6.1.8: BVR-205 restored friendly-sign planet in 4th check; keeps Vaiseshikamsa scoring for lagna lord"
},
{
"id": "bvr_bahu_puthra_precise",