astrology-ziwei-api / methodology_loader.py
th
🎭 v4.0: 巴纳姆冷读 + 六亲分析 + 10步批命流程
1b83bb4
Raw History Blame Contribute Delete
18.3 kB
"""
知识库加载器 - Methodology Knowledge Loader
加载和解析批命方法论知识文件
Version: 1.0
Created: 2026-02-03
Author: Sisi & TH Studio
知识文件路径:
- 00-reading-methodology.md: 10步批命流程 + 36条核心口诀
- 00-palace-analysis.md: 150个宫位分析案例
- 00-timing-methodology.md: 43个时间预测技巧
- 00-six-relations.md: 86个六亲批断技巧
"""
from typing import Dict, List, Any, Optional
import re
import os
class MethodologyLoader:
"""
知识库加载器
从markdown文件加载批命方法论知识
"""
def __init__(self, knowledge_base_path: str = None):
"""
初始化知识库加载器
Args:
knowledge_base_path: 知识库根路径
"""
# 默认知识库路径(本地开发用)
self.knowledge_base_path = knowledge_base_path or "/Volumes/sparksverse/agent-knowledge/mingli-knowledge/eastern/ziwei"
# 知识文件映射
self.knowledge_files = {
'reading_methodology': 'interpretations/00-reading-methodology.md',
'palace_analysis': 'interpretations/00-palace-analysis.md',
'timing_methodology': 'timing/00-timing-methodology.md',
'six_relations': 'interpretations/00-six-relations.md'
}
# 缓存加载的知识
self._cache = {}
# 内置核心知识(作为备用,当文件不可用时)
self._init_builtin_knowledge()
def _init_builtin_knowledge(self):
"""初始化内置核心知识"""
# 10步批命流程
self.ten_steps = [
{
'step': 1,
'name': '确认盘面基础信息',
'key_points': [
'核对出生时辰准确性',
'确定命局数(水二木三金四土五火六)',
'标注命宫、身宫、四化位置'
]
},
{
'step': 2,
'name': '看总格成败',
'key_points': [
'观察命宫三方四正',
'观察四化星分布',
'识别吉格凶格'
]
},
{
'step': 3,
'name': '看身宫定后天发展',
'key_points': [
'身在财帛→私企或自己做老板',
'身在官禄→做官',
'身在迁移→外地发展',
'身在夫妻→后天被婚姻影响'
]
},
{
'step': 4,
'name': '批六亲关系',
'key_points': [
'父母宫+日月位置',
'兄弟宫+眉毛面相',
'夫妻宫+福德宫同参',
'子女宫+面相验证'
]
},
{
'step': 5,
'name': '看事业财运方向',
'key_points': [
'官禄宫最喜化权',
'财帛宫权禄相逢主老板命',
'迁移宫看外地发展'
]
},
{
'step': 6,
'name': '看疾厄宫',
'key_points': [
'结合中医经脉流注判断',
'化忌所在宫对应脏腑',
'杀星集中处对应疾病'
]
},
{
'step': 7,
'name': '批流年大运',
'key_points': [
'十年大运看三方四正',
'小流年只看本宫和对宫',
'未来十年无大运,大限在前十年'
]
},
{
'step': 8,
'name': '看婚姻成败时机',
'key_points': [
'红鸾天喜相会主婚姻',
'过忌成婚最好',
'天喜在不同宫位含义不同'
]
},
{
'step': 9,
'name': '看田宅宫',
'key_points': [
'祖产情况',
'置产吉凶',
'阳宅方位判断'
]
},
{
'step': 10,
'name': '福德宫判断',
'key_points': [
'主一辈子福禄财禄事业',
'女命最重要的宫',
'福德宫化忌主夫妻死别'
]
}
]
# 36条核心口诀
self.core_formulas = {
'geju': [ # 格局口诀
{'name': '紫府坐垣', 'meaning': '命宫在寅申,紫微天府入庙,位列三台,爵禄荣昌'},
{'name': '七杀朝斗', 'meaning': '命宫在寅申,七杀独坐入庙,威震边疆'},
{'name': '府相会命', 'meaning': '天府天相分别位于财帛事业宫,天生辅佐人才'},
{'name': '日月并明', 'meaning': '太阳旺辰+太阴旺戌,命宫在辰或戌,一世荣华'},
{'name': '明珠出海', 'meaning': '命宫在未,太阴亥宫入庙+太阳卯宫入庙,父母双全'},
{'name': '火贪相聚', 'meaning': '贪狼+火星/铃星同宫,武贵格,做武官'},
{'name': '禄马交驰', 'meaning': '禄存/化禄+天马同宫,辛苦赚大钱,巨富'},
{'name': '日照雷门', 'meaning': '命宫在卯,太阳入命庙,男命最吉'},
{'name': '月朗天门', 'meaning': '命宫在亥,太阴入命庙,女命最吉'},
{'name': '水澄桂萼', 'meaning': '子宫太阴入庙,清官,女人漂亮'}
],
'xiong': [ # 凶格口诀
{'name': '半空折翅', 'meaning': '命宫在巳或亥,廉贪落陷对冲或化忌冲命,三方四正无吉星,中年横夭'},
{'name': '日月反背', 'meaning': '白天月亮、夜间太阳均落陷,离乡发展,克父母'},
{'name': '羊陀夹杀', 'meaning': '擎羊陀罗在命宫两侧,犯小人,易被人影响'},
{'name': '吉处藏凶', 'meaning': '吉星丛中煞星落陷,必凶'},
{'name': '廉贞七杀', 'meaning': '落陷主半路埋尸'},
{'name': '廉贞破军', 'meaning': '落陷主水中做冢'},
{'name': '廉贞贪狼', 'meaning': '落陷主横夭(先天疾病或自杀)'}
],
'panduan': [ # 判断口诀
{'name': '命好不如限好', 'meaning': '十年大运为主,小流年为辅'},
{'name': '未来十年无大运', 'meaning': '化忌所在十年或对冲十年,大限在前十年'},
{'name': '目不见日月', 'meaning': '太阳太阴均落陷,主死'},
{'name': '杀星庙旺', 'meaning': '凶处藏吉'},
{'name': '杀星落陷', 'meaning': '在劫难逃'},
{'name': '过忌成婚最好', 'meaning': '化忌年份过后再婚吉'},
{'name': '官星进官禄宫最好', 'meaning': '财星进财帛宫最好'},
{'name': '遇险而止招凶', 'meaning': '遇险行险能脱险'},
{'name': '机月同梁', 'meaning': '定为吏也,公家单位工作'}
],
'mianxiang': [ # 面相口诀
{'name': '南人北相', 'meaning': '北人南相,非富即贵'},
{'name': '正面不见耳', 'meaning': '五官开阔,面阔厚重,贵相'},
{'name': '三庭均等', 'meaning': '上停中停下停相等,最佳'},
{'name': '眉毛至少高眼睛一寸', 'meaning': '主为官'},
{'name': '眉低山根低', 'meaning': '想不开'}
],
'yangzhai': [ # 阳宅口诀
{'name': '西北角是厨房', 'meaning': '死夫宅'},
{'name': '西南角是厨房', 'meaning': '死妻宅'},
{'name': '西北角是客厅', 'meaning': '夫妻生离'},
{'name': '厕所在房子正中', 'meaning': '心脏病、中风'},
{'name': '凶宅三字成灾', 'meaning': '少则3月3年,多则6年'}
]
}
# 六亲批断关键规则
self.six_relations_rules = {
'parents': {
'key_rule': '太阳代表父亲,太阴代表母亲',
'critical_patterns': [
{'pattern': '化忌在父母宫+日月反背', 'meaning': '父母不在身边或双亡'},
{'pattern': '太阳落陷+化忌', 'meaning': '父亲先逝'},
{'pattern': '太阴化忌', 'meaning': '母亲早逝或与母亲相克'},
{'pattern': '廉贞破军在父母宫', 'meaning': '父母离散'}
]
},
'siblings': {
'key_rule': '眉毛代表兄弟姐妹,左兄右姐',
'critical_patterns': [
{'pattern': '化忌入兄弟宫', 'meaning': '兄弟不和/夭折/合伙破财'},
{'pattern': '太阴落陷', 'meaning': '无兄弟或兄弟夭折'},
{'pattern': '断眉乱眉', 'meaning': '兄弟刑克'}
]
},
'spouse': {
'key_rule': '福德宫化忌→夫妻必死别(最重要!)',
'critical_patterns': [
{'pattern': '福德宫化忌+夫妻宫未见生离', 'meaning': '必定死别'},
{'pattern': '廉贞破军在福德或夫妻宫', 'meaning': '夫妻死别横祸'},
{'pattern': '西北厨房', 'meaning': '死先生(阳宅)'},
{'pattern': '西南厨房', 'meaning': '死妻子(阳宅)'}
]
},
'children': {
'key_rule': '阳星代表儿子,阴星代表女儿',
'critical_patterns': [
{'pattern': '化忌入子女宫', 'meaning': '没有儿子'},
{'pattern': '子女宫空宫+对面化忌', 'meaning': '无子'},
{'pattern': '日月反背+化忌', 'meaning': '没有儿子'}
]
}
}
# 时间预测核心规则
self.timing_rules = {
'daxun_rules': [
{'rule': '命好不如限好', 'meaning': '十年大运为主,小流年为辅'},
{'rule': '未来十年无大运,大限在前十年', 'meaning': '化忌所在或对冲的十年无大运'},
{'rule': '早年大限,父母可避', 'meaning': '13-22岁大运遇凶,父母照顾可化解'}
],
'liunian_rules': [
{'rule': '宫为当年值日发生之大事', 'meaning': '流年在哪宫,当年大事与该宫相关'},
{'rule': '流年只看本宫和对宫', 'meaning': '大运看三方四正,流年只看本宫+对宫'},
{'rule': '化忌对冲流年', 'meaning': '未来十年无大运,该年大凶'}
],
'death_limit_rules': [
{'rule': '杀星独守+无吉星', 'meaning': '十年大运杀星独守无吉星化解,代表死限'},
{'rule': '目不见日月', 'meaning': '太阳太阴均落陷,主死'},
{'rule': '大小二限逢疾厄', 'meaning': '十年大运和流年同在疾厄宫,主死'}
]
}
# 乙年规律(小鱼验证100%)
self.special_year_patterns = {
'乙年': {
'sihua': {'禄': '太阴', '权': '天机', '科': '天同', '忌': '巨门'},
'warning': '巨门化忌冲疾厄宫,健康波折、事业变动',
'pattern': '乙年巨门化忌→冲疾厄宫,空宫大运极凶,有星大运先苦后甜',
'verification': '小鱼1995/2005/2015/2025四次验证,准确率100%'
},
'壬年': {
'sihua': {'禄': '天梁', '权': '紫微', '科': '左辅', '忌': '武曲'},
'warning': '武曲化忌冲财帛/身宫,财运/生命危险',
'pattern': '壬年武曲化忌→冲身宫,空宫大运生命危险,有星大运有惊无险',
'verification': '小鱼2022年空宫大运新冠差点死,其他壬年无事'
}
}
def load_all_knowledge(self) -> Dict[str, Any]:
"""
加载所有知识文件
Returns:
dict: 完整的知识库
"""
knowledge = {
'ten_steps': self.ten_steps,
'core_formulas': self.core_formulas,
'six_relations_rules': self.six_relations_rules,
'timing_rules': self.timing_rules,
'special_year_patterns': self.special_year_patterns,
'loaded_from': 'builtin',
'total_rules': self._count_total_rules()
}
# 尝试从文件加载更多内容
for name, path in self.knowledge_files.items():
full_path = os.path.join(self.knowledge_base_path, path)
if os.path.exists(full_path):
try:
content = self._load_markdown_file(full_path)
if content:
knowledge[f'{name}_raw'] = content
knowledge['loaded_from'] = 'file'
except Exception as e:
print(f"Warning: Failed to load {path}: {e}")
return knowledge
def _load_markdown_file(self, file_path: str) -> Optional[str]:
"""加载markdown文件"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
return f.read()
except Exception:
return None
def _count_total_rules(self) -> Dict[str, int]:
"""统计总规则数"""
return {
'ten_steps': len(self.ten_steps),
'geju_formulas': len(self.core_formulas.get('geju', [])),
'xiong_formulas': len(self.core_formulas.get('xiong', [])),
'panduan_formulas': len(self.core_formulas.get('panduan', [])),
'mianxiang_formulas': len(self.core_formulas.get('mianxiang', [])),
'yangzhai_formulas': len(self.core_formulas.get('yangzhai', [])),
'six_relations_patterns': sum(
len(v.get('critical_patterns', []))
for v in self.six_relations_rules.values()
),
'timing_rules': sum(
len(v) for v in self.timing_rules.values()
),
'special_year_patterns': len(self.special_year_patterns)
}
def get_step_by_number(self, step_number: int) -> Optional[Dict]:
"""
获取指定步骤的批命流程
Args:
step_number: 步骤编号 (1-10)
Returns:
dict: 步骤详情
"""
for step in self.ten_steps:
if step['step'] == step_number:
return step
return None
def get_formulas_by_category(self, category: str) -> List[Dict]:
"""
获取指定分类的口诀
Args:
category: 分类名称 (geju/xiong/panduan/mianxiang/yangzhai)
Returns:
list: 口诀列表
"""
return self.core_formulas.get(category, [])
def get_six_relations_rules(self, relation_type: str) -> Optional[Dict]:
"""
获取六亲批断规则
Args:
relation_type: 六亲类型 (parents/siblings/spouse/children)
Returns:
dict: 规则详情
"""
return self.six_relations_rules.get(relation_type)
def get_special_year_pattern(self, tiangan: str) -> Optional[Dict]:
"""
获取特殊年份规律
Args:
tiangan: 天干 (甲/乙/丙/丁/戊/己/庚/辛/壬/癸)
Returns:
dict: 年份规律
"""
key = f'{tiangan}年'
return self.special_year_patterns.get(key)
def match_formula(self, pattern_description: str) -> List[Dict]:
"""
根据描述匹配口诀
Args:
pattern_description: 配置描述
Returns:
list: 匹配的口诀列表
"""
matches = []
description_lower = pattern_description.lower()
# 搜索所有口诀
for category, formulas in self.core_formulas.items():
for formula in formulas:
name = formula.get('name', '')
meaning = formula.get('meaning', '')
if name in pattern_description or any(
keyword in description_lower
for keyword in meaning.lower().split(',')
):
matches.append({
'category': category,
**formula
})
return matches
def get_death_limit_rules(self) -> List[Dict]:
"""获取死限判断规则"""
return self.timing_rules.get('death_limit_rules', [])
def get_marriage_timing_rules(self) -> List[Dict]:
"""获取婚姻时机判断规则"""
return [
{'rule': '红鸾天喜交会', 'meaning': '主婚姻'},
{'rule': '过忌成婚', 'meaning': '化忌年份过后再婚吉'},
{'rule': '天喜在命宫夫妻宫', 'meaning': '吉'},
{'rule': '天喜在福德宫', 'meaning': '主多婚'},
{'rule': '红鸾天喜在凶星宫相会', 'meaning': '婚姻不成'}
]
# 单例模式
_loader_instance = None
def get_methodology_loader() -> MethodologyLoader:
"""获取知识库加载器单例"""
global _loader_instance
if _loader_instance is None:
_loader_instance = MethodologyLoader()
return _loader_instance
# 导出
__all__ = ['MethodologyLoader', 'get_methodology_loader']