""" 讨论结果数据模型 定义讨论结果的结构 """ from datetime import datetime from typing import Optional, Dict, Any, List from pydantic import Field from beanie import Document class DiscussionResult(Document): """ 讨论结果文档模型 存储讨论的最终结果 """ discussion_id: str = Field(..., description="讨论唯一标识") room_id: str = Field(..., description="聊天室ID") objective: str = Field(..., description="讨论目标") # 共识结果 consensus_reached: bool = Field(default=False, description="是否达成共识") confidence: float = Field(default=0.0, ge=0, le=1, description="共识置信度") # 结果摘要 summary: str = Field(default="", description="讨论结果摘要") action_items: List[str] = Field(default_factory=list, description="行动项列表") unresolved_issues: List[str] = Field(default_factory=list, description="未解决的问题") key_decisions: List[str] = Field(default_factory=list, description="关键决策") # 统计信息 total_rounds: int = Field(default=0, description="总轮数") total_messages: int = Field(default=0, description="总消息数") participating_agents: List[str] = Field(default_factory=list, description="参与的Agent列表") agent_contributions: Dict[str, int] = Field( default_factory=dict, description="各Agent发言次数统计" ) # 状态 status: str = Field(default="in_progress", description="状态: in_progress, completed, failed") end_reason: str = Field(default="", description="结束原因") # 时间戳 created_at: datetime = Field(default_factory=datetime.utcnow) updated_at: datetime = Field(default_factory=datetime.utcnow) completed_at: Optional[datetime] = Field(default=None, description="完成时间") class Settings: name = "discussions" indexes = [ [("room_id", 1)], [("created_at", -1)], ] def mark_completed( self, consensus_reached: bool, confidence: float, summary: str, action_items: List[str] = None, unresolved_issues: List[str] = None, end_reason: str = "consensus" ) -> None: """ 标记讨论为已完成 Args: consensus_reached: 是否达成共识 confidence: 置信度 summary: 结果摘要 action_items: 行动项 unresolved_issues: 未解决问题 end_reason: 结束原因 """ self.consensus_reached = consensus_reached self.confidence = confidence self.summary = summary self.action_items = action_items or [] self.unresolved_issues = unresolved_issues or [] self.status = "completed" self.end_reason = end_reason self.completed_at = datetime.utcnow() self.updated_at = datetime.utcnow() def update_stats( self, total_rounds: int, total_messages: int, agent_contributions: Dict[str, int] ) -> None: """ 更新统计信息 Args: total_rounds: 总轮数 total_messages: 总消息数 agent_contributions: Agent贡献统计 """ self.total_rounds = total_rounds self.total_messages = total_messages self.agent_contributions = agent_contributions self.participating_agents = list(agent_contributions.keys()) self.updated_at = datetime.utcnow() class Config: json_schema_extra = { "example": { "discussion_id": "disc-001", "room_id": "product-design-room", "objective": "设计用户登录系统", "consensus_reached": True, "confidence": 0.85, "summary": "团队一致同意采用OAuth2.0 + 手机验证码的混合认证方案...", "action_items": [ "设计OAuth2.0集成方案", "开发短信验证服务", "编写安全测试用例" ], "unresolved_issues": [ "第三方登录的优先级排序" ], "total_rounds": 15, "total_messages": 45, "status": "completed" } }