astrology-ziwei-api / ai_interpreter.py
th
feat: 添加四化飞星系统和AI智能解读 (Week 1完成)
c2c5a99
Raw History Blame Contribute Delete
14.9 kB
"""
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)