"""提示词配置 API — /api/prompts""" from fastapi import APIRouter, Request from pydantic import BaseModel from typing import Optional from app.services.prompt_config import ( get_all_configs, set_config, get_llm_params, DEFAULTS, TEMPLATE_KEY_MAP, ) router = APIRouter() class PromptUpdateRequest(BaseModel): """提示词更新请求""" system_prompt: Optional[str] = None template_simple: Optional[str] = None template_professional: Optional[str] = None template_compare: Optional[str] = None # LLM 参数 llm_thinking_enabled: Optional[str] = None # "true" / "false" llm_max_tokens: Optional[str] = None # 字符串,后端转 int llm_temperature: Optional[str] = None # 字符串,后端转 float llm_thinking_budget: Optional[str] = None # 字符串,后端转 int @router.get("/prompts") async def get_prompts(request: Request): """获取所有提示词配置(含默认值)""" trace_id = getattr(request.state, "trace_id", "") configs = get_all_configs() return { "code": 0, "message": "ok", "data": { "configs": configs, "defaults": DEFAULTS, "template_keys": list(TEMPLATE_KEY_MAP.keys()), "llm_params": get_llm_params(), }, "trace_id": trace_id, } @router.put("/prompts") async def update_prompts(req: PromptUpdateRequest, request: Request): """更新提示词配置(空字符串表示恢复默认)""" trace_id = getattr(request.state, "trace_id", "") updated = [] # 系统提示词 if req.system_prompt is not None: if set_config("system_prompt", req.system_prompt): updated.append("system_prompt") # 模板正文 for tpl_key in ["template_simple", "template_professional", "template_compare"]: val = getattr(req, tpl_key, None) if val is not None: if set_config(tpl_key, val): updated.append(tpl_key) # LLM 参数 for llm_key in ["llm_thinking_enabled", "llm_max_tokens", "llm_temperature", "llm_thinking_budget"]: val = getattr(req, llm_key, None) if val is not None: if set_config(llm_key, val): updated.append(llm_key) return { "code": 0, "message": "ok", "data": {"updated": updated}, "trace_id": trace_id, } @router.post("/prompts/reset") async def reset_prompts(request: Request): """重置所有提示词配置为默认值""" trace_id = getattr(request.state, "trace_id", "") for key in DEFAULTS.keys(): set_config(key, "") return { "code": 0, "message": "ok", "data": {"reset": list(DEFAULTS.keys())}, "trace_id": trace_id, }