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