74 lines
2.9 KiB
Python
74 lines
2.9 KiB
Python
# 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()
|
|
|