stock-ai-agent/backend/app/api/skills.py
2026-02-03 10:08:15 +08:00

100 lines
2.6 KiB
Python

"""
技能管理API路由
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from app.agent.skill_manager import skill_manager
from app.utils.logger import logger
router = APIRouter()
class ToggleRequest(BaseModel):
enabled: bool
@router.get("/")
async def list_skills():
"""
获取所有技能列表
Returns:
技能信息列表
"""
try:
skills_info = skill_manager.get_skills_info()
return skills_info # 直接返回数组
except Exception as e:
logger.error(f"获取技能列表失败: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.post("/{skill_name}/toggle")
async def toggle_skill(skill_name: str, request: ToggleRequest):
"""
切换技能状态
Args:
skill_name: 技能名称
request: 包含enabled字段的请求体
Returns:
操作结果
"""
try:
if request.enabled:
success = skill_manager.enable_skill(skill_name)
message = f"技能 {skill_name} 已启用"
else:
success = skill_manager.disable_skill(skill_name)
message = f"技能 {skill_name} 已禁用"
if not success:
raise HTTPException(status_code=404, detail="技能不存在")
return {"message": message, "success": True}
except Exception as e:
logger.error(f"切换技能失败: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.post("/{skill_name}/enable")
async def enable_skill(skill_name: str):
"""
启用技能
Args:
skill_name: 技能名称
Returns:
操作结果
"""
try:
success = skill_manager.enable_skill(skill_name)
if not success:
raise HTTPException(status_code=404, detail="技能不存在")
return {"message": f"技能 {skill_name} 已启用"}
except Exception as e:
logger.error(f"启用技能失败: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.post("/{skill_name}/disable")
async def disable_skill(skill_name: str):
"""
禁用技能
Args:
skill_name: 技能名称
Returns:
操作结果
"""
try:
success = skill_manager.disable_skill(skill_name)
if not success:
raise HTTPException(status_code=404, detail="技能不存在")
return {"message": f"技能 {skill_name} 已禁用"}
except Exception as e:
logger.error(f"禁用技能失败: {e}")
raise HTTPException(status_code=500, detail=str(e))