""" AI解读引擎 - 基于模板和规则的智能解读系统 AI Interpretation Engine - Template & Rule-based Intelligent Analysis 这是东玄紫微斗数的AI解读层,负责将四化分析转化为人性化的命理解读 """ from typing import Dict, List, Any, Optional from sihua_data import PALACE_ENGLISH class AIInterpreter: """AI命理解读器""" def __init__(self): """初始化AI解读器""" pass def interpret_full_chart( self, sihua_analysis: dict, chart_data: dict ) -> dict: """ 完整命盘AI解读 Args: sihua_analysis: 四化分析结果 chart_data: 原始命盘数据 Returns: dict: 完整的AI解读结果 """ year_sihua = sihua_analysis.get('year_sihua', {}) overall_judgment = sihua_analysis.get('overall_judgment', {}) # 1. 生成整体运势概述 life_overview = self._generate_life_overview(overall_judgment) # 2. 生成四化详细解读 sihua_details = self._generate_sihua_details(year_sihua) # 3. 生成宫位重点分析 palace_highlights = self._generate_palace_highlights(year_sihua) # 4. 生成人生建议 life_advice = self._generate_life_advice(year_sihua, overall_judgment) # 5. 生成优势与挑战 strengths_challenges = self._analyze_strengths_challenges(year_sihua) return { 'life_overview': life_overview, 'sihua_details': sihua_details, 'palace_highlights': palace_highlights, 'life_advice': life_advice, 'strengths_challenges': strengths_challenges, 'interpretation_quality': 'ai_enhanced_v1' } def _generate_life_overview(self, overall_judgment: dict) -> dict: """ 生成整体运势概述 Args: overall_judgment: 综合判断结果 Returns: dict: 运势概述 """ overall_quality = overall_judgment.get('overall_quality', 'fair') total_score = overall_judgment.get('total_score', 0) message = overall_judgment.get('message', '') # 根据总分给出运势等级 if total_score >= 30: fortune_level = '上上吉' emoji = '✨' summary = '您的命盘配置极佳,一生多得贵人相助,事业财运俱佳。' elif total_score >= 15: fortune_level = '上吉' emoji = '🌟' summary = '您的命盘配置良好,整体运势不错,把握机会可有所成就。' elif total_score >= 0: fortune_level = '中吉' emoji = '🌤️' summary = '您的命盘配置平稳,需要主动把握机会,谨慎行事可趋吉避凶。' elif total_score >= -15: fortune_level = '平' emoji = '⚠️' summary = '您的命盘有一些挑战,需要更加谨慎处理人生事务,化解不利因素。' else: fortune_level = '需化解' emoji = '🔔' summary = '您的命盘有较大挑战,建议多行善事、修身养性,化解不利因素。' return { 'fortune_level': fortune_level, 'emoji': emoji, 'total_score': total_score, 'summary': summary, 'message': message, 'quality_tag': overall_quality } def _generate_sihua_details(self, year_sihua: dict) -> List[dict]: """ 生成四化详细解读 Args: year_sihua: 年干四化分析 Returns: list: 四化详细解读列表 """ details = [] # 按照重要性排序:化禄 > 化忌 > 化权 > 化科 priority_order = ['化禄', '化忌', '化权', '化科'] for sihua_type in priority_order: if sihua_type in year_sihua: data = year_sihua[sihua_type] detail = { 'type': sihua_type, 'star': data.get('star'), 'palace': data.get('palace'), 'nature': data.get('nature'), 'impact_score': data.get('impact_score'), 'interpretation': data.get('interpretation'), 'advice': data.get('advice'), 'judgment': data.get('judgment'), 'importance': self._get_sihua_importance(sihua_type) } details.append(detail) return details def _get_sihua_importance(self, sihua_type: str) -> str: """获取四化的重要性标签""" importance_map = { '化禄': '重要', '化权': '较重要', '化科': '较重要', '化忌': '特别重要' } return importance_map.get(sihua_type, '一般') def _generate_palace_highlights(self, year_sihua: dict) -> List[dict]: """ 生成宫位重点分析 Args: year_sihua: 年干四化分析 Returns: list: 宫位重点列表 """ # 统计每个宫位的四化情况 palace_map = {} for sihua_type, data in year_sihua.items(): palace = data.get('palace') if palace not in palace_map: palace_map[palace] = { 'palace': palace, 'english_name': PALACE_ENGLISH.get(palace, palace), 'transformations': [], 'total_score': 0, 'highlight_level': 'normal' } palace_map[palace]['transformations'].append({ 'type': sihua_type, 'star': data.get('star'), 'score': data.get('impact_score', 0) }) palace_map[palace]['total_score'] += data.get('impact_score', 0) # 转换为列表并排序(按分数绝对值) highlights = list(palace_map.values()) highlights.sort(key=lambda x: abs(x['total_score']), reverse=True) # 标记重要程度 for i, highlight in enumerate(highlights): if i == 0: highlight['highlight_level'] = 'critical' elif i <= 2: highlight['highlight_level'] = 'important' else: highlight['highlight_level'] = 'normal' return highlights def _generate_life_advice( self, year_sihua: dict, overall_judgment: dict ) -> dict: """ 生成人生建议 Args: year_sihua: 年干四化分析 overall_judgment: 综合判断 Returns: dict: 人生建议 """ advice_items = [] # 1. 基于化禄的建议 if '化禄' in year_sihua: hualu_data = year_sihua['化禄'] palace = hualu_data.get('palace') advice_items.append({ 'category': '财运事业', 'priority': 'high', 'advice': f"重点发展{palace}相关的事务,这是您的财运和喜事来源。{hualu_data.get('advice', '')}" }) # 2. 基于化忌的建议 if '化忌' in year_sihua: huaji_data = year_sihua['化忌'] palace = huaji_data.get('palace') advice_items.append({ 'category': '风险规避', 'priority': 'high', 'advice': f"特别注意{palace}的事务,避免冲动决策。{huaji_data.get('advice', '')}" }) # 3. 基于化权的建议 if '化权' in year_sihua: huaquan_data = year_sihua['化权'] palace = huaquan_data.get('palace') advice_items.append({ 'category': '权力掌控', 'priority': 'medium', 'advice': f"在{palace}方面要主动掌握主动权,建立自己的影响力。{huaquan_data.get('advice', '')}" }) # 4. 基于化科的建议 if '化科' in year_sihua: huake_data = year_sihua['化科'] palace = huake_data.get('palace') advice_items.append({ 'category': '名誉提升', 'priority': 'medium', 'advice': f"注重{palace}的文化修养和名声积累,多结识贵人。{huake_data.get('advice', '')}" }) # 5. 整体建议 overall_advice = overall_judgment.get('recommendation', '') return { 'specific_advice': advice_items, 'overall_recommendation': overall_advice, 'action_priority': self._determine_action_priority(year_sihua) } def _determine_action_priority(self, year_sihua: dict) -> str: """确定行动优先级""" if '化忌' in year_sihua: huaji_palace = year_sihua['化忌'].get('palace') if huaji_palace in ['命宫', '财帛宫', '夫妻宫', '官禄宫']: return '首要任务:化解风险,谨慎行事' if '化禄' in year_sihua: return '首要任务:把握机会,积极进取' return '首要任务:稳健发展,平衡进退' def _analyze_strengths_challenges(self, year_sihua: dict) -> dict: """ 分析优势与挑战 Args: year_sihua: 年干四化分析 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_strength_description(sihua_type, palace), 'score': score } strengths.append(strength) elif sihua_type == '化忌': # 挑战 challenge = { 'type': sihua_type, 'palace': palace, 'star': star, 'description': self._get_challenge_description(palace), 'severity': self._get_challenge_severity(score), 'score': score } challenges.append(challenge) return { 'strengths': strengths, 'challenges': challenges, 'strength_count': len(strengths), 'challenge_count': len(challenges), 'balance_score': sum(s['score'] for s in strengths) + sum(c['score'] for c in challenges) } def _get_strength_description(self, sihua_type: str, palace: str) -> str: """获取优势描述""" descriptions = { '化禄': { '命宫': '一生有福气,容易得到贵人帮助,财运亨通', '财帛宫': '财运极佳,赚钱容易,财源广进', '官禄宫': '事业发展顺利,升职加薪机会多', '夫妻宫': '婚姻幸福,配偶条件好,感情甜蜜', 'default': f'{palace}运势旺盛,喜事多,发展顺利' }, '化权': { '命宫': '性格果断,有领导能力,能掌控局面', '官禄宫': '事业上能掌握实权,有管理能力', '财帛宫': '理财能力强,善于掌控财务', 'default': f'在{palace}方面有掌控力和影响力' }, '化科': { '命宫': '聪明有才华,学习能力强,考试运佳', '官禄宫': '事业上容易出名,有贵人扶持', '夫妻宫': '配偶有文化修养,婚姻受人尊敬', 'default': f'在{palace}方面有名声和文化优势' } } type_desc = descriptions.get(sihua_type, {}) return type_desc.get(palace, type_desc.get('default', f'{palace}发展良好')) def _get_challenge_description(self, palace: str) -> str: """获取挑战描述""" descriptions = { '命宫': '人生道路多波折,需要特别谨慎,修身养性', '财帛宫': '破财风险高,投资需谨慎,避免贪心', '夫妻宫': '婚姻感情易有波折,需要用心经营', '官禄宫': '事业发展受阻,工作易有变动,需踏实努力', '疾厄宫': '注意身体健康,预防疾病', 'default': f'{palace}可能会遇到一些阻碍和挑战' } return descriptions.get(palace, descriptions['default']) def _get_challenge_severity(self, score: int) -> str: """获取挑战严重程度""" if score <= -25: return '严重' elif score <= -15: return '中等' else: return '较轻' def generate_summary_text(self, interpretation: dict) -> str: """ 生成文字总结(用于显示) Args: interpretation: 完整解读结果 Returns: str: 文字总结 """ overview = interpretation.get('life_overview', {}) strengths_challenges = interpretation.get('strengths_challenges', {}) life_advice = interpretation.get('life_advice', {}) summary_parts = [] # 1. 整体运势 summary_parts.append(f"【整体运势】{overview.get('emoji', '')} {overview.get('fortune_level', '')}") summary_parts.append(overview.get('summary', '')) summary_parts.append("") # 2. 主要优势 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("") # 3. 主要挑战 challenges = strengths_challenges.get('challenges', []) if challenges: summary_parts.append("【需要注意】") for c in challenges: summary_parts.append(f"• {c['type']}: {c['description']}") summary_parts.append("") # 4. 核心建议 summary_parts.append("【核心建议】") summary_parts.append(life_advice.get('action_priority', '')) summary_parts.append(life_advice.get('overall_recommendation', '')) return "\n".join(summary_parts)