# File: backend/app/services/assistant_service.py (新建) # Description: 管理助手数据的服务 (内存实现) from typing import Dict, List, Optional from app.models.pydantic_models import AssistantRead, AssistantCreate, AssistantUpdate import uuid # 使用字典作为内存数据库存储助手 # key: assistant_id (str), value: AssistantRead object assistants_db: Dict[str, AssistantRead] = {} # 添加默认助手 (确保 ID 与前端 Mock 一致) default_assistant = AssistantRead( id='asst-default', name='默认助手', description='通用聊天助手', avatar='🤖', system_prompt='你是一个乐于助人的 AI 助手。', model='gpt-3.5-turbo', temperature=0.7 ) assistants_db[default_assistant.id] = default_assistant class AssistantService: """助手数据的 CRUD 服务""" def get_assistants(self) -> List[AssistantRead]: """获取所有助手""" return list(assistants_db.values()) def get_assistant(self, assistant_id: str) -> Optional[AssistantRead]: """根据 ID 获取单个助手""" return assistants_db.get(assistant_id) def create_assistant(self, assistant_data: AssistantCreate) -> AssistantRead: """创建新助手""" new_id = f"asst-{uuid.uuid4()}" # 生成唯一 ID new_assistant = AssistantRead(id=new_id, **assistant_data.model_dump()) assistants_db[new_id] = new_assistant print(f"助手已创建: {new_id} - {new_assistant.name}") return new_assistant def update_assistant(self, assistant_id: str, assistant_data: AssistantUpdate) -> Optional[AssistantRead]: """更新现有助手""" existing_assistant = assistants_db.get(assistant_id) if not existing_assistant: return None # 使用 Pydantic 的 model_copy 和 update 来更新字段 update_data = assistant_data.model_dump(exclude_unset=True) # 只获取设置了值的字段 if update_data: updated_assistant = existing_assistant.model_copy(update=update_data) assistants_db[assistant_id] = updated_assistant print(f"助手已更新: {assistant_id}") return updated_assistant return existing_assistant # 如果没有更新任何字段,返回原始助手 def delete_assistant(self, assistant_id: str) -> bool: """删除助手""" if assistant_id in assistants_db: # 添加逻辑:不允许删除默认助手 if assistant_id == 'asst-default': print("尝试删除默认助手 - 操作被阻止") return False # 或者抛出特定异常 del assistants_db[assistant_id] print(f"助手已删除: {assistant_id}") # TODO: 在实际应用中,还需要删除关联的会话和消息 return True return False # 创建服务实例 assistant_service_instance = AssistantService()