Spaces:
Running
Running
File size: 54,175 Bytes
8bd8c90 1b83bb4 8bd8c90 1b83bb4 8bd8c90 1b83bb4 8bd8c90 1b83bb4 8bd8c90 b910fd3 8164c6a 50b4be3 8bd8c90 f96050c 1b83bb4 8bd8c90 1b83bb4 8bd8c90 169025e 50b4be3 f96050c 1b83bb4 3dbe71c f96050c 3dbe71c 8bd8c90 e6024b0 8bd8c90 3dbe71c 8bd8c90 b910fd3 169025e 8164c6a 169025e 8164c6a 169025e 8164c6a 6c79aca 50b4be3 6c79aca 50b4be3 6c79aca 50b4be3 8bd8c90 b910fd3 8bd8c90 b910fd3 8bd8c90 c4d5552 8bd8c90 169025e 8164c6a 169025e 9eb0f83 50b4be3 9eb0f83 50b4be3 8bd8c90 c4d5552 8bd8c90 b910fd3 169025e 50b4be3 c4d5552 8bd8c90 c4d5552 8bd8c90 e6024b0 8bd8c90 e6024b0 8bd8c90 e6024b0 8bd8c90 b910fd3 8bd8c90 b910fd3 8bd8c90 b910fd3 8bd8c90 b910fd3 8bd8c90 b910fd3 8bd8c90 b910fd3 8bd8c90 1b83bb4 ac139d2 1b83bb4 ac139d2 1b83bb4 ac139d2 1b83bb4 5126f24 1b83bb4 5126f24 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 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 | """
知识库增强型AI解读引擎 v4.0
Knowledge-Enhanced AI Interpretation Engine
基于今日建成的紫微斗数知识库(772KB,5大核心模块)
Powered by comprehensive Ziwei Doushu knowledge base (772KB, 5 core modules)
v4.0 新增功能:
- 巴纳姆冷读效果:温暖有共鸣的解读语言
- 六亲分析:父母/兄弟/夫妻/子女运批断
- 10步批命流程:标准化解读流程
- 福德宫核心秘诀:夫妻死别判断
知识库路径:
- 主星特性: /agent-knowledge/mingli-knowledge/eastern/ziwei/foundations/01-main-stars.md
- 十二宫位: /agent-knowledge/mingli-knowledge/eastern/ziwei/foundations/02-twelve-palaces.md
- 四化理论: /agent-knowledge/mingli-knowledge/eastern/ziwei/foundations/03-four-transformations.md
- 流年大运: /agent-knowledge/mingli-knowledge/eastern/ziwei/timing/01-annual-fortune.md
- 实战断诀: /agent-knowledge/mingli-knowledge/eastern/ziwei/interpretations/01-practical-divination.md
- 批命方法论: /agent-knowledge/mingli-knowledge/eastern/ziwei/interpretations/00-reading-methodology.md
- 六亲批断: /agent-knowledge/mingli-knowledge/eastern/ziwei/interpretations/00-six-relations.md
Created: 2025-12-12
Updated: 2026-02-03 (v4.0 巴纳姆+六亲+批命流程)
Author: Sisi 🦊 (紫微知识库管理员 + AI引擎架构师)
"""
from typing import Dict, List, Any, Optional
from sihua_data import PALACE_ENGLISH
from palace_strength import calculate_all_palaces_strength, calculate_palace_strength
from star_brightness_table import enhance_star_with_brightness, get_palace_brightness_summary
from san_fang_si_zheng_analyzer import analyze_san_fang_si_zheng, analyze_all_san_fang_si_zheng
from geju_matcher import GejuMatcher, MATCHER_VERSION
from star_combination_matcher import StarCombinationMatcher # v3.8: 星曜组合断语引擎
# v4.0 新增模块 - 使用延迟导入减少启动内存占用
# from barnum_cold_reader import BarnumColdReader, get_barnum_reader
# from methodology_loader import MethodologyLoader, get_methodology_loader
# from six_relations_interpreter import SixRelationsInterpreter, get_six_relations_interpreter
# from reading_methodology import ReadingMethodologyEngine, get_reading_engine
class KnowledgeEnhancedInterpreter:
"""知识库增强型AI解读器 - 基于772KB专业知识库 + v4.0巴纳姆效果"""
def __init__(self):
"""初始化增强型解读器"""
# v3.7: 初始化格局匹配器
self.geju_matcher = GejuMatcher()
# v3.8: 初始化星曜组合断语匹配器
self.star_combination_matcher = StarCombinationMatcher()
# v4.0 新增: 延迟初始化(减少启动内存占用)
self._barnum_reader = None
self._methodology_loader = None
self._six_relations_interpreter = None
self._reading_engine = None
# 初始化知识库数据(修复:调用被遗忘的初始化方法)
self.__init_v4_modules()
def __init_v4_modules(self):
"""v4.0: 初始化模块数据"""
# 十天干四化表(THE CORE!)- 从知识库提取
self.TIANGAN_SIHUA = {
'甲': {'禄': '廉贞', '权': '破军', '科': '武曲', '忌': '太阳'},
'乙': {'禄': '天机', '权': '天梁', '科': '紫微', '忌': '太阴'},
'丙': {'禄': '天同', '权': '天机', '科': '文昌', '忌': '廉贞'},
'丁': {'禄': '太阴', '权': '天同', '科': '天机', '忌': '巨门'},
'戊': {'禄': '贪狼', '权': '太阴', '科': '右弼', '忌': '天机'},
'己': {'禄': '武曲', '权': '贪狼', '科': '天梁', '忌': '文曲'},
'庚': {'禄': '太阳', '权': '武曲', '科': '天府', '忌': '天同'},
'辛': {'禄': '巨门', '权': '太阳', '科': '文曲', '忌': '文昌'},
'壬': {'禄': '天梁', '权': '紫微', '科': '左辅', '忌': '武曲'},
'癸': {'禄': '破军', '权': '巨门', '科': '太阴', '忌': '贪狼'}
}
# 主星基本特性(从01-main-stars.md提取)
self.MAIN_STAR_TRAITS = {
'紫微': {
'五行': '己阴土',
'化气': '尊贵',
'特质': '帝王星,领导力强,尊贵有气度',
'事业': '适合管理、政治、高层领导',
'性格': '自尊心强,喜欢掌权,有责任感'
},
'天机': {
'五行': '乙阴木',
'化气': '善',
'特质': '智慧星,机智聪明,善于策划',
'事业': '适合教育、咨询、策划、技术',
'性格': '心思细腻,反应快,喜欢思考'
},
'太阳': {
'五行': '丙阳火',
'化气': '贵',
'特质': '光明星,热情大方,爱面子',
'事业': '适合外交、公关、管理、服务业',
'性格': '热情开朗,重视名声,乐于助人'
},
'武曲': {
'五行': '辛阴金',
'化气': '财',
'特质': '财星,刚毅果断,理财能力强',
'事业': '适合金融、财务、工程、武职',
'性格': '务实稳重,意志坚定,重视物质'
},
'天同': {
'五行': '壬阳水',
'化气': '福',
'特质': '福星,温和慈善,享受生活',
'事业': '适合服务业、文艺、娱乐',
'性格': '随和乐观,不喜竞争,享受安逸'
},
'廉贞': {
'五行': '丁阴火',
'化气': '囚',
'特质': '次桃花星,灵活多变,善社交',
'事业': '适合公关、演艺、设计、外交',
'性格': '热情主动,交际广泛,感情丰富'
},
'天府': {
'五行': '戊阳土',
'化气': '令',
'特质': '财库星,保守稳健,善于积累',
'事业': '适合管理、财务、行政',
'性格': '谨慎务实,重视安全,善于守成'
},
'太阴': {
'五行': '癸阴水',
'化气': '富',
'特质': '财星,温柔细腻,重视内涵',
'事业': '适合教育、文化、艺术、服务',
'性格': '温和内敛,心思细密,重情重义'
},
'贪狼': {
'五行': '甲阳木',
'化气': '桃花',
'特质': '桃花星,多才多艺,欲望强烈',
'事业': '适合娱乐、销售、艺术、交际',
'性格': '积极进取,爱好广泛,社交能力强'
},
'巨门': {
'五行': '癸阴水',
'化气': '暗',
'特质': '是非星,口才好,易招口舌',
'事业': '适合法律、传媒、教师、咨询',
'性格': '善于表达,直言不讳,易得罪人'
},
'天相': {
'五行': '壬阳水',
'化气': '印',
'特质': '印星,忠诚可靠,协调能力强',
'事业': '适合行政、服务、辅助性工作',
'性格': '诚实守信,重视外表,善于调和'
},
'天梁': {
'五行': '戊阳土',
'化气': '荫',
'特质': '贵人星,清高正直,喜助人',
'事业': '适合医疗、慈善、教育、宗教',
'性格': '正直善良,喜欢助人,清高自持'
},
'七杀': {
'五行': '庚阳金',
'化气': '杀',
'特质': '将星,果断勇敢,独立性强',
'事业': '适合军警、竞争性行业、开创',
'性格': '刚毅果断,独来独往,不服输'
},
'破军': {
'五行': '癸阴水',
'化气': '耗',
'特质': '先锋星,开创变革,破旧立新,不畏艰难',
'事业': '适合军警、探险、改革、投机、开拓性行业',
'性格': '冲劲十足,不惧挑战,敢于推翻重来,喜新厌旧'
}
}
# 十二宫位核心意义(从02-twelve-palaces.md提取)
self.PALACE_MEANINGS = {
'命宫': {
'代表': '一生格局、性格特质、外在表现',
'三方四正': ['官禄宫', '财帛宫', '迁移宫'],
'重要性': '特别重要',
'判断要点': '命宫强弱决定一生成就高低'
},
'兄弟宫': {
'代表': '兄弟姐妹、同事关系、合伙运',
'三方四正': ['仆役宫', '疾厄宫', '田宅宫'],
'重要性': '较重要',
'判断要点': '看与兄弟朋友的缘分和帮助'
},
'夫妻宫': {
'代表': '配偶状况、婚姻关系、恋爱运',
'三方四正': ['福德宫', '官禄宫', '迁移宫'],
'重要性': '特别重要',
'判断要点': '配偶条件、婚姻幸福度'
},
'子女宫': {
'代表': '子女状况、生育能力、性生活',
'三方四正': ['田宅宫', '仆役宫', '疾厄宫'],
'重要性': '较重要',
'判断要点': '子女数量质量、性欲强弱'
},
'财帛宫': {
'代表': '财运状况、赚钱能力、理财观',
'三方四正': ['命宫', '福德宫', '官禄宫'],
'重要性': '特别重要',
'判断要点': '财运好坏、赚钱方式'
},
'疾厄宫': {
'代表': '身体健康、疾病倾向、体质',
'三方四正': ['兄弟宫', '田宅宫', '子女宫'],
'重要性': '重要',
'判断要点': '健康状况、易患疾病'
},
'迁移宫': {
'代表': '外出运、人际关系、社会评价',
'三方四正': ['命宫', '夫妻宫', '福德宫'],
'重要性': '特别重要',
'判断要点': '外出发展、社交能力、外部机遇'
},
'仆役宫': {
'代表': '朋友关系、下属状况、社交圈',
'三方四正': ['兄弟宫', '子女宫', '田宅宫'],
'重要性': '较重要',
'判断要点': '朋友质量、得到帮助'
},
'官禄宫': {
'代表': '事业成就、工作状况、社会地位',
'三方四正': ['命宫', '财帛宫', '夫妻宫'],
'重要性': '特别重要',
'判断要点': '事业发展、工作稳定性'
},
'田宅宫': {
'代表': '不动产、家庭环境、居住状况',
'三方四正': ['兄弟宫', '疾厄宫', '子女宫'],
'重要性': '重要',
'判断要点': '房产运、家庭和睦'
},
'福德宫': {
'代表': '精神享受、福气厚薄、兴趣爱好',
'三方四正': ['财帛宫', '夫妻宫', '迁移宫'],
'重要性': '特别重要',
'判断要点': '福气深浅、精神状态'
},
'父母宫': {
'代表': '父母状况、长辈关系、读书运',
'三方四正': ['官禄宫', '福德宫', '迁移宫'],
'重要性': '重要',
'判断要点': '父母缘分、学业成绩'
}
}
# 四化判断优先级(从03-four-transformations.md提取)
self.SIHUA_PRIORITY = {
'本命盘': 0.4, # 40% - 基础命格
'大限盘': 0.3, # 30% - 10年大势
'流年盘': 0.2, # 20% - 当年运势
'流月日': 0.1 # 10% - 短期波动
}
# v4.0: 延迟加载属性
@property
def barnum_reader(self):
"""延迟加载巴纳姆冷读引擎"""
if self._barnum_reader is None:
from barnum_cold_reader import get_barnum_reader
self._barnum_reader = get_barnum_reader()
return self._barnum_reader
@property
def methodology_loader(self):
"""延迟加载知识库加载器"""
if self._methodology_loader is None:
from methodology_loader import get_methodology_loader
self._methodology_loader = get_methodology_loader()
return self._methodology_loader
@property
def six_relations_interpreter(self):
"""延迟加载六亲解读器"""
if self._six_relations_interpreter is None:
from six_relations_interpreter import get_six_relations_interpreter
self._six_relations_interpreter = get_six_relations_interpreter()
return self._six_relations_interpreter
@property
def reading_engine(self):
"""延迟加载批命流程引擎"""
if self._reading_engine is None:
from reading_methodology import get_reading_engine
self._reading_engine = get_reading_engine()
return self._reading_engine
def interpret_full_chart_enhanced(
self,
sihua_analysis: dict,
chart_data: dict
) -> dict:
"""
增强版完整命盘解读 - 基于知识库
Args:
sihua_analysis: 四化分析结果
chart_data: 原始命盘数据
Returns:
dict: 增强版AI解读结果
"""
year_sihua = sihua_analysis.get('year_sihua', {})
overall_judgment = sihua_analysis.get('overall_judgment', {})
# 0. 提取宫位数据(用于后续分析)
palaces = chart_data.get('palaces', [])
# NEW: 计算所有宫位的强弱评分 (P0-2核心功能!)
palace_strength_analysis = calculate_all_palaces_strength(
palaces,
sihua_analysis
)
# NEW v3.6: 计算所有宫位的三方四正分析 (P1核心功能!)
san_fang_analysis = analyze_all_san_fang_si_zheng(
palaces,
sihua_analysis
)
# NEW v3.7: 格局识别(P1核心功能!)
# 获取出生年干(用于格局匹配)
birth_year_stem = (chart_data.get('year_stem')
or chart_data.get('chart', {}).get('year_heavenly_stem'))
# The Node adapter stores the clock in solar_date/birth_info, not a root hour field.
birth_time = (chart_data.get('birth_info', {}).get('time')
or chart_data.get('solar_date', '').split(' ')[-1])
try:
pattern_birth_hour = int(birth_time.split(':')[0]) if ':' in birth_time else None
if pattern_birth_hour is not None and not 0 <= pattern_birth_hour <= 23:
pattern_birth_hour = None
except (TypeError, ValueError):
pattern_birth_hour = None
# 匹配所有格局
matched_patterns = self.geju_matcher.match_all_patterns(
palaces,
birth_year_stem,
pattern_birth_hour
)
# 生成格局总结
pattern_summary = self.geju_matcher.get_pattern_summary(matched_patterns)
birth_hour = pattern_birth_hour
# NEW v3.8: 星曜组合断语匹配(P1完成!)
# v3.14.0升级:添加宏观格局分析(紫微孤君+日月反背+星系类型)
star_combination_result = self.star_combination_matcher.match_all_combinations(
palaces,
birth_hour # v3.14.0新增:传递出生时辰
)
# 1. 生成命盘核心特质(基于主星)
core_traits = self._analyze_core_traits(chart_data)
# 2. 生成宫位详细分析(融合知识库 + 宫位评分 + 三方四正)
palace_analysis = self._analyze_palaces_with_knowledge(
chart_data,
year_sihua,
palace_strength_analysis, # v3.5: 传入宫位评分
san_fang_analysis # v3.6: 传入三方四正分析
)
# 3. 生成四化深度解读(基于理论)
sihua_deep_analysis = self._analyze_sihua_with_theory(year_sihua)
# 4. 生成整体运势(知识库增强)
life_overview = self._generate_enhanced_life_overview(
overall_judgment,
core_traits
)
# 5. 生成实战建议(基于南北派断诀)
practical_advice = self._generate_practical_advice(
year_sihua,
chart_data,
core_traits
)
# 6. 生成优势与挑战(知识库版本)
strengths_challenges = self._analyze_strengths_challenges_enhanced(
year_sihua,
palace_analysis
)
# ========== v4.0 可选功能:巴纳姆增强 + 六亲分析 + 10步批命 ==========
# 使用静默失败模式,不影响核心功能
v4_features = {}
try:
# 延迟加载v4.0模块(减少启动内存占用)
if self._barnum_reader is None:
from barnum_cold_reader import get_barnum_reader
self._barnum_reader = get_barnum_reader()
if self._six_relations_interpreter is None:
from six_relations_interpreter import get_six_relations_interpreter
self._six_relations_interpreter = get_six_relations_interpreter()
if self._reading_engine is None:
from reading_methodology import get_reading_engine
self._reading_engine = get_reading_engine()
# 1. 六亲分析(基于86个批断技巧)
gender = chart_data.get('gender', '男')
six_relations_result = self._six_relations_interpreter.analyze_all_relations(
palaces,
sihua_analysis,
gender
)
v4_features['six_relations_analysis'] = six_relations_result
# 2. 10步批命流程(可选,较重)
# 用户可以通过API参数决定是否执行
if chart_data.get('enable_ten_step_reading', False):
ten_step_result = self._reading_engine.execute_ten_step_reading(chart_data)
v4_features['ten_step_reading'] = ten_step_result
# 3. 巴纳姆温暖描述(轻量级增强)
# 为palace_analysis添加巴纳姆增强版本
if hasattr(self, '_barnum_reader') and palace_analysis:
v4_features['barnum_enhanced_palaces'] = []
for palace in palace_analysis[:3]: # 仅增强前3个重要宫位(命宫/财帛/官禄)
palace_name = palace.get('palace_name', '')
interpretation = palace.get('interpretation', '')
if interpretation:
barnum_result = self._barnum_reader.apply_barnum_effect(
interpretation,
palace_name=palace_name
)
v4_features['barnum_enhanced_palaces'].append({
'palace_name': palace_name,
'original': interpretation,
'enhanced': barnum_result.get('enhanced', '')
})
except Exception as e:
# 静默失败,记录错误但不影响核心功能
v4_features['v4_error'] = f'v4.0 features partially failed: {str(e)}'
# ========== 返回结果(含v4.0可选功能) ==========
result = {
'core_traits': core_traits, # NEW: 命盘核心特质
'palace_analysis': palace_analysis, # NEW: 宫位详细分析(含强弱评分)
'palace_strength_summary': palace_strength_analysis['summary'], # NEW v3.5: 宫位强弱总结
'pattern_recognition': { # NEW v3.7: 格局识别 ⭐
'matcher_version': MATCHER_VERSION,
'calculation_mode': 'deterministic_rules',
'matched_patterns': matched_patterns, # 匹配到的所有格局
'pattern_summary': pattern_summary, # 格局总结
'pattern_count': len(matched_patterns), # 格局数量
'highest_score': pattern_summary.get('highest_score', 0), # 最高分格局
'overall_quality': pattern_summary.get('overall_quality', 'unknown') # 整体质量
},
'star_combinations': { # NEW v3.8: 星曜组合断语 ⭐⭐ | v3.14: 宏观格局分析 🌟
'matched_rules': star_combination_result['matched_rules'], # 匹配到的所有组合规则
'summary': star_combination_result['summary'], # 组合总结(含评分、分类统计)
'interpretations_by_category': star_combination_result['interpretations_by_category'], # 按分类整理的断语
'total_matched': star_combination_result['total_matched'], # 匹配数量
'total_rules_checked': star_combination_result['total_rules_checked'], # 检查的总规则数
'macro_patterns': star_combination_result.get('macro_patterns', {}) # v3.14.0新增:宏观格局分析
},
'sihua_deep_analysis': sihua_deep_analysis, # ENHANCED: 四化深度解读
'life_overview': life_overview, # ENHANCED: 整体运势
'practical_advice': practical_advice, # NEW: 实战建议
'strengths_challenges': strengths_challenges, # ENHANCED: 优势挑战
'interpretation_quality': 'knowledge_enhanced_v4.0_with_barnum_sixrelations', # 升级到v4.0
'knowledge_base_version': '2026-02-03', # 更新到v4.0发布日期
'knowledge_modules_used': [
'01-main-stars.md',
'02-twelve-palaces.md',
'03-four-transformations.md',
'01-practical-divination.md',
'star_brightness_table.py', # v3.5: 星曜庙旺陷表
'palace_strength.py', # v3.5: 宫位强弱评分系统
'san_fang_si_zheng_analyzer.py', # v3.6: 三方四正分析引擎
'geju_patterns.py', # v3.7: 格局规则库(15个经典格局)
'geju_matcher.py', # v3.7: 格局匹配引擎
'star_combination_rules.py', # v3.8: 星曜组合规则库(19条核心规则)
'star_combination_matcher.py', # v3.8: 星曜组合匹配引擎
# v4.0 新增模块
'barnum_cold_reader.py', # v4.0: 巴纳姆冷读引擎
'six_relations_interpreter.py', # v4.0: 六亲解读器(86个技巧)
'reading_methodology.py' # v4.0: 10步批命流程引擎
]
}
# 合并v4.0功能(如果存在)
if v4_features:
result['v4_features'] = v4_features
return result
def _analyze_core_traits(self, chart_data: dict) -> dict:
"""
分析命盘核心特质(基于主星知识库)
从 chart_data 中提取命宫主星,查 MAIN_STAR_TRAITS 字典生成分析
Returns:
dict: 核心特质分析
"""
# 从 palaces 中找到命宫
palaces = chart_data.get('palaces', [])
ming_palace_stars = []
ming_palace = None
for palace in palaces:
if palace.get('name') == '命宫':
ming_palace = palace
break
# 提取命宫主星名称
if ming_palace:
for star in ming_palace.get('major_stars', []):
star_name = star.get('name', '') if isinstance(star, dict) else star
if star_name:
ming_palace_stars.append(star_name)
# 从 MAIN_STAR_TRAITS 查询特质
personalities = []
careers = []
traits_detail = []
for star_name in ming_palace_stars:
star_traits = self.MAIN_STAR_TRAITS.get(star_name, {})
if star_traits:
personalities.append(star_traits.get('性格', ''))
careers.append(star_traits.get('事业', ''))
traits_detail.append({
'star': star_name,
'wuxing': star_traits.get('五行', ''),
'huaqi': star_traits.get('化气', ''),
'trait': star_traits.get('特质', ''),
'career': star_traits.get('事业', ''),
'personality': star_traits.get('性格', '')
})
# 组合输出
personality_summary = '、'.join(filter(None, personalities)) if personalities else '命宫无主星,性格受辅星和三方四正影响'
career_tendency = '、'.join(filter(None, careers)) if careers else '事业方向受三方四正主星影响'
# 判断格局等级
fortune_level = 'medium'
if len(ming_palace_stars) >= 2:
fortune_level = 'high' # 双星坐命格局较高
elif len(ming_palace_stars) == 0:
fortune_level = 'special' # 空宫需看三方四正借星
traits = {
'primary_stars': ming_palace_stars,
'personality_summary': personality_summary,
'career_tendency': career_tendency,
'fortune_level': fortune_level,
'traits_detail': traits_detail
}
return traits
def _analyze_palaces_with_knowledge(
self,
chart_data: dict,
year_sihua: dict,
palace_strength_analysis: dict = None,
san_fang_analysis: List[dict] = None
) -> List[dict]:
"""
融合知识库的宫位分析(含强弱评分 + 三方四正)
Args:
chart_data: 命盘数据
year_sihua: 年干四化
palace_strength_analysis: 宫位强弱评分结果(v3.5)
san_fang_analysis: 三方四正分析结果(v3.6 NEW!)
Returns:
list: 各宫位详细分析
"""
palace_analyses = []
palaces = chart_data.get('palaces', [])
# 创建宫位名称到强弱评分的映射
strength_map = {}
if palace_strength_analysis and 'palaces' in palace_strength_analysis:
for palace_strength in palace_strength_analysis['palaces']:
palace_name = palace_strength['name']
strength_map[palace_name] = palace_strength['strength']
# 创建宫位名称到三方四正分析的映射(v3.6 NEW!)
san_fang_map = {}
if san_fang_analysis:
for san_fang in san_fang_analysis:
palace_name = san_fang.get('palace', '')
san_fang_map[palace_name] = san_fang
for palace_name, palace_info in self.PALACE_MEANINGS.items():
# 从chart_data中找到对应的宫位数据
palace_data = next((p for p in palaces if p.get('name') == palace_name), None)
# 获取该宫位的强弱评分
strength_info = strength_map.get(palace_name, {})
# 获取该宫位的三方四正分析(v3.6 NEW!)
san_fang_info = san_fang_map.get(palace_name, {})
# 提取星曜信息
stars_list = []
if palace_data:
major_stars = palace_data.get('major_stars', [])
minor_stars = palace_data.get('minor_stars', [])
for star in major_stars:
star_name = star.get('name', '') if isinstance(star, dict) else star
stars_list.append(star_name)
# 提取四化信息
transformations = []
for sihua_type, data in year_sihua.items():
if data.get('palace') == palace_name:
transformations.append({
'type': sihua_type,
'star': data.get('star'),
'emoji': self._get_sihua_emoji(sihua_type)
})
# 判断整体质量(基于强弱评分)
overall_quality = '待评估'
if strength_info:
rank = strength_info.get('rank', 'C')
if rank in ['A+', 'A']:
overall_quality = '极佳'
elif rank in ['B+', 'B']:
overall_quality = '良好'
elif rank in ['C+', 'C']:
overall_quality = '一般'
else:
overall_quality = '需改善'
analysis = {
'palace': palace_name,
'english_name': PALACE_ENGLISH.get(palace_name, palace_name),
'represents': palace_info['代表'],
'importance': palace_info['重要性'],
'judgment_points': palace_info['判断要点'],
'san_fang_si_zheng': palace_info['三方四正'],
'stars': stars_list, # NEW: 实际星曜列表
'transformations': transformations, # NEW: 四化列表
'overall_quality': overall_quality, # NEW: 整体质量
'strength': strength_info, # v3.5: 宫位强弱评分详情
'san_fang_analysis': san_fang_info # v3.6 NEW: 三方四正详细分析
}
palace_analyses.append(analysis)
return palace_analyses
def _get_sihua_emoji(self, sihua_type: str) -> str:
"""获取四化emoji"""
emoji_map = {
'化禄': '💰',
'化权': '👑',
'化科': '📜',
'化忌': '⚠️'
}
return emoji_map.get(sihua_type, '')
def _analyze_sihua_with_theory(self, year_sihua: dict) -> dict:
"""
基于四化理论的深度分析
Returns:
dict: 四化深度分析
"""
analysis = {
'theory_basis': '十天干四化表(易经理论基础)',
'sihua_interactions': [], # 四化间的互动关系
'critical_transformations': [], # 关键四化
'suggestions': [] # 基于理论的建议
}
# 分析四化间的互动
if '化禄' in year_sihua and '化忌' in year_sihua:
hualu_palace = year_sihua['化禄'].get('palace')
huaji_palace = year_sihua['化忌'].get('palace')
analysis['sihua_interactions'].append({
'type': '禄忌对冲',
'description': f'化禄在{hualu_palace},化忌在{huaji_palace}',
'interpretation': '有得有失,需要平衡发展,把握机会同时规避风险'
})
return analysis
def _generate_enhanced_life_overview(
self,
overall_judgment: dict,
core_traits: dict
) -> dict:
"""
生成知识库增强的整体运势
Returns:
dict: 增强版运势概述
"""
total_score = overall_judgment.get('total_score', 0)
# 使用更温暖、专业的语言(符合思思的风格)
if total_score >= 30:
fortune_level = '上上吉'
emoji = '✨'
summary = '您的命盘格局优秀,一生多贵人相助,事业财运俱佳。建议把握机会,积极进取,可有大成就。'
tone = 'very_positive'
elif total_score >= 15:
fortune_level = '上吉'
emoji = '🌟'
summary = '您的命盘配置良好,整体运势不错。只要努力奋斗,把握时机,定能成就一番事业。'
tone = 'positive'
elif total_score >= 0:
fortune_level = '中吉'
emoji = '🌤️'
summary = '您的命盘平稳中带有机遇。需要主动把握机会,谨慎处理挑战,稳健发展可趋吉避凶。'
tone = 'balanced'
elif total_score >= -15:
fortune_level = '平'
emoji = '⚖️'
summary = '您的命盘有些挑战,但也有转机。建议修身养性,积极化解不利因素,保持乐观心态。'
tone = 'cautious'
else:
fortune_level = '需化解'
emoji = '🔔'
summary = '您的命盘存在一些挑战。建议多行善事,提升自身修养,化解不利因素。记住:命运掌握在自己手中。'
tone = 'supportive'
return {
'fortune_level': fortune_level,
'emoji': emoji,
'total_score': total_score,
'summary': summary,
'tone': tone,
'sisi_note': '💕 思思提示:紫微斗数仅供参考,积极行动比算命更重要!',
'knowledge_enhanced': True
}
def _generate_practical_advice(
self,
year_sihua: dict,
chart_data: dict,
core_traits: dict
) -> dict:
"""
生成基于南北派断诀的实战建议
Returns:
dict: 实战建议
"""
advice_items = []
# 基于四化生成具体建议
for sihua_type, data in year_sihua.items():
palace = data.get('palace')
star = data.get('star')
# TODO: 从01-practical-divination.md提取对应断语
# 目前先用模板
if sihua_type == '化禄':
advice_items.append({
'category': '财运机遇',
'priority': 'high',
'palace': palace,
'advice': f'{star}化禄在{palace},这是您的财运和喜事来源。建议重点发展{palace}相关事务。',
'action_items': [
f'积极把握{palace}方面的机会',
'主动出击,不要被动等待',
'这是您的优势领域,可以大胆尝试'
]
})
elif sihua_type == '化忌':
advice_items.append({
'category': '风险规避',
'priority': 'critical',
'palace': palace,
'advice': f'{star}化忌在{palace},需要特别注意该领域。建议谨慎处理,避免冲动。',
'action_items': [
f'谨慎处理{palace}相关事务',
'避免重大决策和投资',
'多听取他人建议,不要一意孤行'
]
})
return {
'specific_advice': advice_items,
'overall_strategy': '综合分析命盘优势和挑战,扬长避短,趋吉避凶',
'sisi_reminder': '记住:命运70%靠自己,30%靠天意。积极行动最重要!',
'knowledge_source': '基于南北派断诀(138页实战经验)'
}
def _analyze_strengths_challenges_enhanced(
self,
year_sihua: dict,
palace_analysis: List[dict]
) -> dict:
"""
知识库增强的优势挑战分析
Returns:
dict: 优势挑战详细分析
"""
strengths = []
challenges = []
# 基于四化分析优势和挑战
for sihua_type, data in year_sihua.items():
palace = data.get('palace')
star = data.get('star')
score = data.get('impact_score', 0)
if sihua_type in ['化禄', '化权', '化科']:
strength = {
'type': sihua_type,
'palace': palace,
'star': star,
'description': self._get_knowledge_based_strength(sihua_type, palace, star),
'score': score,
'action_suggestion': self._get_strength_action(sihua_type, palace)
}
strengths.append(strength)
elif sihua_type == '化忌':
challenge = {
'type': sihua_type,
'palace': palace,
'star': star,
'description': self._get_knowledge_based_challenge(palace, star),
'severity': self._get_challenge_severity_enhanced(score),
'score': score,
'solution': self._get_challenge_solution(palace)
}
challenges.append(challenge)
return {
'strengths': strengths,
'challenges': challenges,
'balance_analysis': {
'strength_count': len(strengths),
'challenge_count': len(challenges),
'overall_balance': self._calculate_balance_score(strengths, challenges),
'recommendation': self._get_balance_recommendation(strengths, challenges)
},
'knowledge_enhanced': True
}
def _get_knowledge_based_strength(self, sihua_type: str, palace: str, star: str) -> str:
"""基于知识库的优势描述"""
# 融合主星特性和宫位意义
star_trait = self.MAIN_STAR_TRAITS.get(star, {}).get('特质', '')
base_descriptions = {
'化禄': f'{star}{star_trait},在{palace}化禄,财运亨通,喜事连连',
'化权': f'{star}{star_trait},在{palace}化权,掌握主导权,能力突出',
'化科': f'{star}{star_trait},在{palace}化科,名声显扬,贵人相助'
}
return base_descriptions.get(sihua_type, f'{palace}运势良好')
def _get_knowledge_based_challenge(self, palace: str, star: str) -> str:
"""基于知识库的挑战描述"""
palace_meaning = self.PALACE_MEANINGS.get(palace, {}).get('代表', palace)
return f'{star}化忌在{palace}({palace_meaning}),需要特别注意该领域,谨慎处理可化解'
def _get_strength_action(self, sihua_type: str, palace: str) -> str:
"""获取优势的行动建议"""
actions = {
'化禄': f'积极把握{palace}方面的机会,这是您的财运来源',
'化权': f'在{palace}方面主动出击,建立自己的影响力',
'化科': f'注重{palace}的文化修养和名声积累,多结识贵人'
}
return actions.get(sihua_type, f'善用{palace}的优势')
def _get_challenge_solution(self, palace: str) -> str:
"""获取挑战的解决方案"""
solutions = {
'命宫': '修身养性,提升自我,化解人生挑战',
'财帛宫': '谨慎理财,避免贪心,稳健投资',
'夫妻宫': '用心经营感情,多沟通理解,避免冲动',
'官禄宫': '踏实工作,提升能力,避免盲目跳槽',
'疾厄宫': '注意健康,预防疾病,保持良好生活习惯'
}
return solutions.get(palace, f'谨慎处理{palace}事务,化险为夷')
def _get_challenge_severity_enhanced(self, score: int) -> dict:
"""增强版挑战严重度评估"""
if score <= -25:
return {'level': '严重', 'color': 'red', 'priority': 'urgent'}
elif score <= -15:
return {'level': '中等', 'color': 'orange', 'priority': 'important'}
else:
return {'level': '较轻', 'color': 'yellow', 'priority': 'normal'}
def _calculate_balance_score(self, strengths: List, challenges: List) -> int:
"""计算平衡分数"""
strength_total = sum(s['score'] for s in strengths)
challenge_total = sum(c['score'] for c in challenges)
return strength_total + challenge_total
def _get_balance_recommendation(self, strengths: List, challenges: List) -> str:
"""获取平衡建议"""
balance_score = self._calculate_balance_score(strengths, challenges)
if balance_score >= 20:
return '整体优势明显,积极进取可大有作为'
elif balance_score >= 0:
return '优势和挑战并存,需要扬长避短,稳健发展'
else:
return '挑战较大,需要谨慎应对,化解不利因素'
def generate_summary_text_enhanced(self, interpretation: dict) -> str:
"""
生成增强版文字总结
Args:
interpretation: 增强版解读结果
Returns:
str: 文字总结
"""
overview = interpretation.get('life_overview', {})
core_traits = interpretation.get('core_traits', {})
strengths_challenges = interpretation.get('strengths_challenges', {})
practical_advice = interpretation.get('practical_advice', {})
summary_parts = []
# 品牌标识
summary_parts.append("【天機玄鑑 · 紫微斗数AI解读】")
summary_parts.append(f"知识库版本: {interpretation.get('knowledge_base_version', '2025-12-12')}")
summary_parts.append("")
# 整体运势
summary_parts.append(f"【整体运势】{overview.get('emoji', '')} {overview.get('fortune_level', '')}")
summary_parts.append(overview.get('summary', ''))
summary_parts.append(overview.get('sisi_note', ''))
summary_parts.append("")
# 核心特质
# TODO: 待core_traits实现后添加
# 主要优势
strengths = strengths_challenges.get('strengths', [])
if strengths:
summary_parts.append("【您的优势】")
for s in strengths:
summary_parts.append(f"• {s['type']}: {s['description']}")
summary_parts.append(f" 建议: {s.get('action_suggestion', '')}")
summary_parts.append("")
# 主要挑战
challenges = strengths_challenges.get('challenges', [])
if challenges:
summary_parts.append("【需要注意】")
for c in challenges:
severity = c.get('severity', {})
level = severity.get('level', '待评估') if isinstance(severity, dict) else severity
summary_parts.append(f"• {c['type']}: {c['description']} (严重程度: {level})")
summary_parts.append(f" 化解: {c.get('solution', '')}")
summary_parts.append("")
# 实战建议
summary_parts.append("【核心建议】")
summary_parts.append(practical_advice.get('overall_strategy', ''))
summary_parts.append(practical_advice.get('sisi_reminder', ''))
summary_parts.append("")
# 平衡分析
balance = strengths_challenges.get('balance_analysis', {})
summary_parts.append(f"【综合评估】{balance.get('recommendation', '')}")
# 结尾
summary_parts.append("")
summary_parts.append("---")
summary_parts.append("🦊 Generated with knowledge & love by Sisi")
summary_parts.append("📚 基于772KB专业紫微斗数知识库")
summary_parts.append("⚠️ 仅供参考,积极行动比算命更重要")
return "\n".join(summary_parts)
# ============== v4.0 新增方法 ==============
def apply_barnum_effect(
self,
interpretation: Dict,
gender: str = '',
age_group: str = 'middle'
) -> Dict:
"""
v4.0: 应用巴纳姆效果,让解读更温暖有共鸣
Args:
interpretation: 原始解读结果
gender: 性别 (男/女)
age_group: 年龄段 (young/middle_young/middle/senior)
Returns:
dict: 巴纳姆效果增强后的解读
"""
enhanced = interpretation.copy()
# 1. 增强整体运势文本
if 'life_overview' in enhanced:
overview = enhanced['life_overview']
original_summary = overview.get('summary', '')
# 应用巴纳姆效果 (v4.1修复:参数签名应该是original_text, star_name, palace_name, tone)
barnum_enhanced = self.barnum_reader.apply_barnum_effect(
original_summary
)
overview['summary_barnum'] = barnum_enhanced.get('enhanced', original_summary)
overview['barnum_hooks'] = barnum_enhanced.get('hooks_used', [])
# 2. 增强优势描述
if 'strengths_challenges' in enhanced:
sc = enhanced['strengths_challenges']
for strength in sc.get('strengths', []):
original_desc = strength.get('description', '')
# 使用星曜的温暖描述
star = strength.get('star', '')
if star:
warm_desc = self.barnum_reader.get_star_warm_description(star)
if warm_desc:
strength['description_barnum'] = warm_desc
# 3. 增强挑战描述(使用敏感内容替换)
if 'strengths_challenges' in enhanced:
sc = enhanced['strengths_challenges']
for challenge in sc.get('challenges', []):
original_desc = challenge.get('description', '')
safe_desc = self.barnum_reader.replace_sensitive_content(original_desc)
challenge['description_safe'] = safe_desc
enhanced['barnum_enhanced'] = True
enhanced['barnum_version'] = '4.0'
return enhanced
def analyze_six_relations(
self,
chart_data: Dict,
sihua_analysis: Dict
) -> Dict:
"""
v4.0: 六亲关系分析
Args:
chart_data: 命盘数据
sihua_analysis: 四化分析结果
Returns:
dict: 六亲分析结果
"""
palaces = chart_data.get('palaces', [])
gender = chart_data.get('gender', '')
year_sihua = sihua_analysis.get('year_sihua', {})
# 转换宫位数据格式
palace_dict = {}
for palace in palaces:
palace_name = palace.get('name', '')
if palace_name:
palace_dict[palace_name] = palace
# 调用六亲解读器(修复:应该传入palaces list,不是palace_dict)
six_relations_result = self.six_relations_interpreter.analyze_all_relations(
palaces,
year_sihua,
gender
)
return {
'six_relations': six_relations_result,
'methodology': '六亲批断(86条技巧)',
'key_discovery': '福德宫化忌→夫妻必死别',
'version': '4.0'
}
def apply_reading_methodology(
self,
chart_data: Dict,
sihua_analysis: Dict
) -> Dict:
"""
v4.0: 应用10步批命流程
Args:
chart_data: 命盘数据
sihua_analysis: 四化分析结果
Returns:
dict: 10步批命结果
"""
# 准备数据
palaces = chart_data.get('palaces', [])
year_sihua = sihua_analysis.get('year_sihua', {})
# 转换宫位数据为字典格式
palace_dict = {}
for palace in palaces:
palace_name = palace.get('name', '')
if palace_name:
palace_dict[palace_name] = palace
# 准备chart_data格式供引擎使用
engine_chart_data = {
'palaces': palace_dict,
'ming_palace': palace_dict.get('命宫', {}),
'shen_palace': self._find_shen_palace(palaces),
'sihua': year_sihua,
'birth_info': chart_data.get('birth_info', {}),
'gender': chart_data.get('gender', ''),
'tiangan': chart_data.get('year_stem', ''),
'wuxing': chart_data.get('wuxing', ''),
'daxun': chart_data.get('daxun', [])
}
# 执行10步批命
reading_result = self.reading_engine.execute_ten_step_reading(engine_chart_data)
return {
'ten_step_reading': reading_result,
'methodology': '10步标准批命流程',
'formulas_applied': len(reading_result.get('formulas_matched', [])),
'version': '4.0'
}
def _find_shen_palace(self, palaces: List) -> Dict:
"""查找身宫"""
for palace in palaces:
if palace.get('is_shen_palace', False):
return palace
return {}
def _calculate_age_group(self, birth_year: int) -> str:
"""计算年龄段"""
if not birth_year:
return 'middle'
import datetime
current_year = datetime.datetime.now().year
age = current_year - birth_year
if age < 25:
return 'young'
elif age < 40:
return 'middle_young'
elif age < 55:
return 'middle'
else:
return 'senior'
def generate_summary_text_v4(self, interpretation: dict) -> str:
"""
v4.0: 生成温暖有共鸣的文字总结
Args:
interpretation: v4.0解读结果
Returns:
str: 巴纳姆效果增强的文字总结
"""
overview = interpretation.get('life_overview', {})
six_relations = interpretation.get('six_relations', {})
reading = interpretation.get('reading_methodology', {})
strengths_challenges = interpretation.get('strengths_challenges', {})
summary_parts = []
# 品牌标识(v4.0升级)
summary_parts.append("【天機玄鑑 · 紫微斗数AI解读 v4.0】")
summary_parts.append(f"知识库版本: {interpretation.get('knowledge_base_version', '2026-02-03')}")
summary_parts.append("✨ 巴纳姆温暖版 | 10步标准批命 | 六亲全分析")
summary_parts.append("")
# 整体运势(使用巴纳姆增强版)
summary_parts.append(f"【整体运势】{overview.get('emoji', '')} {overview.get('fortune_level', '')}")
barnum_summary = overview.get('summary_barnum', overview.get('summary', ''))
summary_parts.append(barnum_summary)
summary_parts.append("")
# 格局识别总结
ten_step = reading.get('ten_step_reading', {})
if ten_step:
summary_info = ten_step.get('summary', {})
if summary_info.get('overall_pattern'):
summary_parts.append("【命格总评】")
summary_parts.append(summary_info.get('overall_pattern', ''))
summary_parts.append("")
# 六亲分析摘要
six_rel = six_relations.get('six_relations', {})
if six_rel:
summary_parts.append("【六亲运势】")
# 父母运
parents = six_rel.get('parents', {})
if parents.get('summary'):
summary_parts.append(f"👨👩👧 父母: {parents.get('summary', '')}")
# 婚姻运(重点!)
spouse = six_rel.get('spouse', {})
if spouse.get('summary'):
summary_parts.append(f"💕 婚姻: {spouse.get('summary', '')}")
if spouse.get('critical_warning'):
warning = spouse.get('critical_warning', {})
safe_msg = self.barnum_reader.replace_sensitive_content(
warning.get('message', '')
)
summary_parts.append(f" ⚠️ 特别提醒: {safe_msg}")
# 子女运
children = six_rel.get('children', {})
if children.get('summary'):
summary_parts.append(f"👶 子女: {children.get('summary', '')}")
summary_parts.append("")
# 核心优势(巴纳姆增强)
strengths = strengths_challenges.get('strengths', [])
if strengths:
summary_parts.append("【您的核心优势】")
for s in strengths[:3]: # 只显示前3个
desc = s.get('description_barnum', s.get('description', ''))
summary_parts.append(f"✨ {s.get('type', '')}: {desc}")
summary_parts.append("")
# 需要关注(安全版描述)
challenges = strengths_challenges.get('challenges', [])
if challenges:
summary_parts.append("【需要关注】")
for c in challenges[:2]: # 只显示前2个
desc = c.get('description_safe', c.get('description', ''))
summary_parts.append(f"💡 {desc}")
if c.get('solution'):
summary_parts.append(f" 化解: {c.get('solution', '')}")
summary_parts.append("")
# 温暖的结语
summary_parts.append("【温馨寄语】")
summary_parts.append("您的命盘就像一幅独特的画卷,每一笔都有其意义。")
summary_parts.append("记住:了解自己是为了更好地成长,而非被命运所限。")
summary_parts.append("把握当下,积极行动,未来掌握在您自己手中。")
summary_parts.append("")
# 结尾
summary_parts.append("---")
summary_parts.append("🦊 Generated with knowledge & love by Sisi")
summary_parts.append("📚 基于772KB专业紫微斗数知识库 + 巴纳姆温暖效果")
summary_parts.append("💕 让命理不再冰冷,让解读充满共鸣")
summary_parts.append("⚠️ 仅供参考,您的人生由您做主")
return "\n".join(summary_parts)
|