# market_fsm.py from typing import Dict, Any from mythology import MythologyEngine, DaoistMythologyEngine from cycle_models import CycleModel, TwelveStagesOfLifeCycleModel class MarketFSM: """ 一个简化的市场分析有限状态机 (FSM)。 本 FSM 演示了如何通过抽象基类来调用外部的“神话引擎”和“周期模型”, 从而实现了核心逻辑与具体实现(如道家神话、十二长生模型)的解耦。 """ def __init__(self, mythology_engine: MythologyEngine, cycle_model: CycleModel): """ FSM 在初始化时,注入所需引擎的抽象实例。 它不关心传入的是哪个具体的神话引擎或周期模型。 """ if not isinstance(mythology_engine, MythologyEngine): raise TypeError("mythology_engine must be a subclass of MythologyEngine") if not isinstance(cycle_model, CycleModel): raise TypeError("cycle_model must be a subclass of CycleModel") self.mythology_engine = mythology_engine self.cycle_model = cycle_model self.current_state = "Idle" self.context: Dict[str, Any] = {} print(f"--- FSM 已启动 ---") print(f"世界观: {self.mythology_engine.get_system_narrative()}") print(f"周期模型: {self.cycle_model.__class__.__name__}") print("-" * 50) def run_analysis(self, market_data: Dict[str, Any]): """ 执行一次完整的市场分析流程。 """ print(f"\n【状态: {self.current_state}】-> [开始分析] -> 【状态: Collecting】") self.current_state = "Collecting" self._collect_data(market_data) print(f"\n【状态: {self.current_state}】-> [分析周期] -> 【状态: CycleAnalysis】") self.current_state = "CycleAnalysis" self._analyze_cycle() print(f"\n【状态: {self.current_state}】-> [生成报告] -> 【状态: Reporting】") self.current_state = "Reporting" self._generate_report() print(f"\n【状态: {self.current_state}】-> [完成] -> 【状态: Idle】") self.current_state = "Idle" print("\n--- 分析流程结束 ---") def _collect_data(self, market_data: Dict[str, Any]): """ 模拟数据收集阶段。 """ actor = self.mythology_engine.get_actor_name('collector') metaphor = self.mythology_engine.get_process_metaphor('multi_agent_debate') print(f"执行者: [{actor}]") print(f"动作: [{metaphor}]") self.context['market_data'] = market_data print("数据收集完成。") def _analyze_cycle(self): """ 分析市场周期阶段。 """ current_stage = self.cycle_model.get_current_stage(self.context['market_data']) self.context['cycle_stage'] = current_stage print(f"周期模型分析完成,当前阶段为: 【{current_stage}】") def _generate_report(self): """ 生成最终报告。 """ actor = self.mythology_engine.get_actor_name('synthesizer') metaphor = self.mythology_engine.get_process_metaphor('final_decision') stage = self.context['cycle_stage'] characteristics = self.cycle_model.get_stage_characteristics(stage) print(f"执行者: [{actor}]") print(f"动作: [{metaphor}]") print("\n--- 最终分析报告 ---") print(f"市场周期阶段: {stage}") print(f"阶段特征: {characteristics.get('description', 'N/A')}") print(f"建议策略: {characteristics.get('strategy', 'N/A')}") print("--- 报告结束 ---") if __name__ == '__main__': # 1. 在系统启动时,选择并实例化具体的引擎和模型 daoist_mythology = DaoistMythologyEngine() twelve_stages_cycle = TwelveStagesOfLifeCycleModel() # 2. 将实例注入到 FSM 中 # FSM 只依赖于抽象,不关心具体实现 fsm = MarketFSM( mythology_engine=daoist_mythology, cycle_model=twelve_stages_cycle ) # 3. 运行 FSM # 模拟的市场数据 simulated_data = {"mock_score": 4} # 模拟处于“帝旺”阶段 fsm.run_analysis(simulated_data)