Files
AIChatRoom/backend/models/discussion_result.py

127 lines
4.4 KiB
Python
Raw Normal View History

"""
讨论结果数据模型
定义讨论结果的结构
"""
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"
}
}