#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 八仙论道辩论协调器 Baxian Debate Coordinator """ import asyncio import logging from typing import List, Dict, Any, Optional from datetime import datetime from jixia_academy.core.memory_bank.interface import MemoryBankInterface from jixia_academy.agents.baxian.baxian_agent import BaxianAgent from jixia_academy.agents.host.debate_master import DebateMaster class BaxianCoordinator: """八仙论道辩论协调器""" def __init__(self, memory_bank: MemoryBankInterface): self.memory_bank = memory_bank self.agents: Dict[str, BaxianAgent] = {} self.debate_master = DebateMaster(memory_bank=memory_bank) self.initialized = False async def initialize(self): """初始化八仙辩论系统""" if self.initialized: return print("🎭 初始化八仙辩论协调器...") # 初始化八仙角色 baxian_roles = { "铁拐李": { "personality": "逆向思维专家", "expertise": ["批判性思维", "风险识别", "逆向投资"], "style": "直接犀利,善于质疑" }, "吕洞宾": { "personality": "理性分析者", "expertise": ["逻辑分析", "平衡观点", "理性决策"], "style": "温和深刻,逻辑清晰" }, "何仙姑": { "personality": "风险控制专家", "expertise": ["风险管理", "谨慎决策", "风险预警"], "style": "谨慎细致,注重安全" }, "张果老": { "personality": "历史智慧者", "expertise": ["历史规律", "长期视角", "经验总结"], "style": "沉稳博学,引经据典" }, "蓝采和": { "personality": "创新思维者", "expertise": ["创新视角", "非传统方法", "独特见解"], "style": "活泼新颖,创意无限" }, "汉钟离": { "personality": "平衡协调者", "expertise": ["综合观点", "和谐统一", "矛盾化解"], "style": "平和包容,寻求共识" }, "韩湘子": { "personality": "艺术感知者", "expertise": ["美学感知", "深层含义", "情感洞察"], "style": "优雅感性,触动人心" }, "曹国舅": { "personality": "实务执行者", "expertise": ["实际操作", "具体细节", "可行方案"], "style": "务实严谨,建设性强" } } # 创建八仙智能体 for name, config in baxian_roles.items(): self.agents[name] = BaxianAgent( name=name, personality=config["personality"], expertise=config["expertise"], style=config["style"], memory_bank=self.memory_bank ) await self.agents[name].initialize() await self.debate_master.initialize() self.initialized = True print("✅ 八仙辩论协调器初始化完成") async def close(self): """关闭资源""" for agent in self.agents.values(): await agent.close() await self.debate_master.close() self.initialized = False async def conduct_debate( self, topic: str, participants: List[str], rounds: int, debate_id: str ): """进行八仙论道辩论""" if not self.initialized: await self.initialize() # 验证参与者 valid_participants = [p for p in participants if p in self.agents] if len(valid_participants) < 2: raise ValueError("需要至少2位有效参与者") print(f"🎯 有效参与者: {', '.join(valid_participants)}") # 开始辩论 await self._start_debate(topic, valid_participants, debate_id) # 进行多轮辩论 for round_num in range(rounds): print(f"\n🔄 第 {round_num + 1} 轮辩论:") await self._conduct_round( topic=topic, participants=valid_participants, round_num=round_num + 1, debate_id=debate_id ) # 结束辩论 await self._end_debate(topic, valid_participants, debate_id) async def _start_debate( self, topic: str, participants: List[str], debate_id: str ): """开始辩论""" # 主持人开场白 opening = await self.debate_master.open_debate(topic, participants) print(f"\n📢 主持人开场: {opening}") # 记录开场白 await self.memory_bank.add_debate_message( debate_id=debate_id, speaker="主持人", message=opening, round_num=0 ) async def _conduct_round( self, topic: str, participants: List[str], round_num: int, debate_id: str ): """进行一轮辩论""" # 获取上一轮的历史 history = await self.memory_bank.get_debate_history(debate_id) # 每位仙人发言 for participant in participants: agent = self.agents[participant] # 生成观点 response = await agent.generate_viewpoint( topic=topic, history=history, round_num=round_num ) print(f"\n🗣️ {participant}: {response}") # 记录发言 await self.memory_bank.add_debate_message( debate_id=debate_id, speaker=participant, message=response, round_num=round_num ) # 短暂停顿 await asyncio.sleep(0.5) async def _end_debate( self, topic: str, participants: List[str], debate_id: str ): """结束辩论""" # 获取完整辩论历史 full_history = await self.memory_bank.get_debate_history(debate_id) # 生成总结 summary = await self.debate_master.summarize_debate(debate_id) # 主持人结束语 closing = await self.debate_master.close_debate(topic, participants, summary) print(f"\n📢 主持人总结: {closing}") # 记录总结 await self.memory_bank.add_debate_message( debate_id=debate_id, speaker="主持人", message=closing, round_num=-1 ) # 保存辩论结果 await self.memory_bank.save_debate_result( debate_id=debate_id, summary=summary, participants=participants ) async def test_baxian_coordinator(): """测试八仙协调器""" from jixia_academy.core.memory_bank.factory import get_memory_backend memory_bank = get_memory_backend() await memory_bank.initialize() coordinator = BaxianCoordinator(memory_bank=memory_bank) await coordinator.initialize() # 测试辩论 await coordinator.conduct_debate( topic="人工智能对投资的影响", participants=["铁拐李", "吕洞宾", "何仙姑"], rounds=2, debate_id="test_debate_001" ) await coordinator.close() await memory_bank.close() if __name__ == "__main__": asyncio.run(test_baxian_coordinator())