Spaces:
Running
Running
Download methodology_loader.py from sisithefox/astrology-ziwei-api: direct link, hf CLI and curl.
- Browser
- Download file 18.3 kB
-
https://huggingface.co/spaces/sisithefox/astrology-ziwei-api/resolve/main/methodology_loader.py
- Command line
-
hf download hf://spaces/sisithefox/astrology-ziwei-api/methodology_loader.py
-
curl -L -o methodology_loader.py https://huggingface.co/spaces/sisithefox/astrology-ziwei-api/resolve/main/methodology_loader.py
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'] | |