Backup before system reinstall
This commit is contained in:
219
jixia_academy/agents/host/debate_master.py
Normal file
219
jixia_academy/agents/host/debate_master.py
Normal file
@@ -0,0 +1,219 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user