#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 辩论主持人智能体 Debate Master Agent """ import asyncio import logging from typing import List, Dict, Any, Optional from datetime import datetime from jixia_academy.core.memory_bank.interface import MemoryBankInterface class DebateMaster: """辩论主持人""" def __init__(self, memory_bank: MemoryBankInterface): self.memory_bank = memory_bank self.initialized = False async def initialize(self): """初始化主持人""" if self.initialized: return print("🎭 初始化辩论主持人...") self.initialized = True async def close(self): """关闭资源""" self.initialized = False async def open_debate( self, topic: str, participants: List[str] ) -> str: """开场白""" # 根据话题和参与者生成开场白 opening_templates = [ f"各位仙友,今日我们齐聚稷下学宫,共商"{topic}"这一重要议题。", f"让我们以{', '.join(participants)}的智慧,共同探讨"{topic}"的深层含义。", f"今日辩论的主题是"{topic}",请各位仙人畅所欲言,各抒己见。" ] # 根据参与者数量选择不同的开场白 if len(participants) <= 3: opening = opening_templates[1] else: opening = opening_templates[2] return opening async def close_debate( self, topic: str, participants: List[str], summary: Dict[str, Any] ) -> str: """结束语""" # 生成总结性结束语 closing_parts = [] # 开场 closing_parts.append(f"今日关于"{topic}"的辩论到此结束。") # 参与者总结 if len(participants) > 1: closing_parts.append(f"感谢{', '.join(participants)}的精彩发言。") # 观点总结 consensus = summary.get("consensus", []) if consensus: closing_parts.append(f"我们达成了以下共识:{'; '.join(consensus)}") # 分歧总结 disagreements = summary.get("disagreements", []) if disagreements: closing_parts.append(f"存在的分歧包括:{'; '.join(disagreements)}") # 结束语 closing_parts.append("让我们带着今天的智慧,继续前行。") return " ".join(closing_parts) async def summarize_debate(self, debate_id: str) -> Dict[str, Any]: """总结辩论""" # 获取辩论历史 history = await self.memory_bank.get_debate_history(debate_id) # 分析辩论内容 analysis = await self._analyze_debate_content(history) # 生成总结 summary = { "total_messages": len(history), "participants": list(set([h.get("speaker", "") for h in history])), "consensus": analysis.get("consensus", []), "disagreements": analysis.get("disagreements", []), "key_points": analysis.get("key_points", []), "timestamp": datetime.now().isoformat() } return summary async def _analyze_debate_content( self, history: List[Dict[str, Any]] ) -> Dict[str, Any]: """分析辩论内容""" if not history: return { "consensus": [], "disagreements": [], "key_points": [] } # 提取所有消息内容 all_messages = [h.get("message", "") for h in history] content = " ".join(all_messages) # 简化版分析 key_words = ["风险", "机会", "收益", "损失", "策略", "建议"] key_points = [kw for kw in key_words if kw in content] # 基于内容长度和参与者数量估算共识 participants = list(set([h.get("speaker", "") for h in history])) consensus = [] disagreements = [] # 简化版共识识别 if "风险" in content and "机会" in content: consensus.append("同时关注风险和机会") if len(participants) > 2: consensus.append("多方参与讨论") # 简化版分歧识别 if "但是" in content or "然而" in content: disagreements.append("存在不同观点") return { "consensus": consensus, "disagreements": disagreements, "key_points": key_points } async def moderate_dispute( self, dispute: str, participants: List[str] ) -> str: """调解争议""" # 生成调解建议 moderation_templates = [ f"各位仙友,关于"{dispute}",让我们回归理性讨论。", f"我理解{', '.join(participants)}的不同观点,让我们寻找共同点。", f"争议"{dispute}"体现了问题的复杂性,我们需要更深入的分析。" ] # 根据争议类型选择调解方式 return moderation_templates[0] def get_info(self) -> Dict[str, Any]: """获取主持人信息""" return { "role": "辩论主持人", "responsibilities": [ "开场和结束辩论", "总结辩论观点", "调解争议", "维持辩论秩序" ], "initialized": self.initialized } async def test_debate_master(): """测试辩论主持人""" from jixia_academy.core.memory_bank.factory import get_memory_backend memory_bank = get_memory_backend() await memory_bank.initialize() master = DebateMaster(memory_bank=memory_bank) await master.initialize() # 测试开场白 opening = await master.open_debate( topic="人工智能对投资的影响", participants=["铁拐李", "吕洞宾", "何仙姑"] ) print(f"\n🎯 开场白: {opening}") # 测试结束语 closing = await master.close_debate( topic="人工智能对投资的影响", participants=["铁拐李", "吕洞宾", "何仙姑"], summary={ "consensus": ["关注技术风险", "寻找投资机会"], "disagreements": ["对发展速度的看法不同"] } ) print(f"\n🎯 结束语: {closing}") await master.close() await memory_bank.close() if __name__ == "__main__": asyncio.run(test_debate_master())