Files
AIChatRoom/backend/models/discussion_result.py
Claude Code edbddf855d feat: AI聊天室多Agent协作讨论平台
- 实现Agent管理,支持AI辅助生成系统提示词
- 支持多个AI提供商(OpenRouter、智谱、MiniMax等)
- 实现聊天室和讨论引擎
- WebSocket实时消息推送
- 前端使用React + Ant Design
- 后端使用FastAPI + MongoDB

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 19:20:02 +08:00

127 lines
4.4 KiB
Python

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