Spaces:
Running
Running
File size: 18,264 Bytes
1b83bb4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 | """
知识库加载器 - 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']
|