feat: AI聊天室多Agent协作讨论平台
- 实现Agent管理,支持AI辅助生成系统提示词 - 支持多个AI提供商(OpenRouter、智谱、MiniMax等) - 实现聊天室和讨论引擎 - WebSocket实时消息推送 - 前端使用React + Ant Design - 后端使用FastAPI + MongoDB Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
123
backend/models/agent_memory.py
Normal file
123
backend/models/agent_memory.py
Normal file
@@ -0,0 +1,123 @@
|
||||
"""
|
||||
Agent记忆数据模型
|
||||
定义Agent的记忆存储结构
|
||||
"""
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
from enum import Enum
|
||||
from pydantic import Field
|
||||
from beanie import Document
|
||||
|
||||
|
||||
class MemoryType(str, Enum):
|
||||
"""记忆类型枚举"""
|
||||
SHORT_TERM = "short_term" # 短期记忆(会话内)
|
||||
LONG_TERM = "long_term" # 长期记忆(跨会话)
|
||||
EPISODIC = "episodic" # 情景记忆(特定事件)
|
||||
SEMANTIC = "semantic" # 语义记忆(知识性)
|
||||
|
||||
|
||||
class AgentMemory(Document):
|
||||
"""
|
||||
Agent记忆文档模型
|
||||
存储Agent的记忆内容
|
||||
"""
|
||||
memory_id: str = Field(..., description="唯一标识")
|
||||
agent_id: str = Field(..., description="Agent ID")
|
||||
|
||||
# 记忆内容
|
||||
memory_type: str = Field(
|
||||
default=MemoryType.SHORT_TERM.value,
|
||||
description="记忆类型"
|
||||
)
|
||||
content: str = Field(..., description="记忆内容")
|
||||
summary: str = Field(default="", description="内容摘要")
|
||||
|
||||
# 向量嵌入(用于相似度检索)
|
||||
embedding: List[float] = Field(default_factory=list, description="向量嵌入")
|
||||
|
||||
# 元数据
|
||||
importance: float = Field(default=0.5, ge=0, le=1, description="重要性评分")
|
||||
access_count: int = Field(default=0, description="访问次数")
|
||||
|
||||
# 关联信息
|
||||
source_room_id: Optional[str] = Field(default=None, description="来源聊天室ID")
|
||||
source_discussion_id: Optional[str] = Field(default=None, description="来源讨论ID")
|
||||
related_agents: List[str] = Field(default_factory=list, description="相关Agent列表")
|
||||
tags: List[str] = Field(default_factory=list, description="标签")
|
||||
|
||||
# 时间戳
|
||||
created_at: datetime = Field(default_factory=datetime.utcnow)
|
||||
last_accessed: datetime = Field(default_factory=datetime.utcnow)
|
||||
expires_at: Optional[datetime] = Field(default=None, description="过期时间")
|
||||
|
||||
class Settings:
|
||||
name = "agent_memories"
|
||||
indexes = [
|
||||
[("agent_id", 1)],
|
||||
[("memory_type", 1)],
|
||||
[("importance", -1)],
|
||||
[("last_accessed", -1)],
|
||||
]
|
||||
|
||||
def access(self) -> None:
|
||||
"""
|
||||
记录访问,更新访问计数和时间
|
||||
"""
|
||||
self.access_count += 1
|
||||
self.last_accessed = datetime.utcnow()
|
||||
|
||||
def is_expired(self) -> bool:
|
||||
"""
|
||||
检查记忆是否已过期
|
||||
|
||||
Returns:
|
||||
是否过期
|
||||
"""
|
||||
if self.expires_at is None:
|
||||
return False
|
||||
return datetime.utcnow() > self.expires_at
|
||||
|
||||
def calculate_relevance_score(
|
||||
self,
|
||||
similarity: float,
|
||||
time_decay_factor: float = 0.1
|
||||
) -> float:
|
||||
"""
|
||||
计算综合相关性分数
|
||||
结合向量相似度、重要性和时间衰减
|
||||
|
||||
Args:
|
||||
similarity: 向量相似度 (0-1)
|
||||
time_decay_factor: 时间衰减因子
|
||||
|
||||
Returns:
|
||||
综合相关性分数
|
||||
"""
|
||||
# 计算时间衰减
|
||||
hours_since_access = (datetime.utcnow() - self.last_accessed).total_seconds() / 3600
|
||||
time_decay = 1.0 / (1.0 + time_decay_factor * hours_since_access)
|
||||
|
||||
# 综合评分
|
||||
score = (
|
||||
0.5 * similarity +
|
||||
0.3 * self.importance +
|
||||
0.2 * time_decay
|
||||
)
|
||||
|
||||
return min(1.0, max(0.0, score))
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"memory_id": "mem-001",
|
||||
"agent_id": "product-manager",
|
||||
"memory_type": "long_term",
|
||||
"content": "在登录系统设计讨论中,团队决定采用OAuth2.0方案",
|
||||
"summary": "登录系统采用OAuth2.0",
|
||||
"importance": 0.8,
|
||||
"access_count": 5,
|
||||
"source_room_id": "product-design-room",
|
||||
"tags": ["登录", "OAuth", "认证"]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user