diff --git a/routes/chat.py b/routes/chat.py index c00bce6..229fc52 100644 --- a/routes/chat.py +++ b/routes/chat.py @@ -938,10 +938,18 @@ async def chat_completions_v3(request: ChatRequestV3, authorization: Optional[st # 从数据库获取机器人配置 bot_config = await fetch_bot_config_from_db(bot_id, request.user_identifier) - # 允许前端通过请求体覆盖 model_id / dataset_ids(仅本次请求生效,不写库; + # 允许前端通过请求体覆盖 model_id / dataset_ids / skills(仅本次请求生效,不写库; # 用于只读配置的 bot,如 general-agent 静态 json 配置)。 if request.dataset_ids is not None: bot_config["dataset_ids"] = request.dataset_ids + if request.skills is not None: + # 合并去重:保留 bot 原有 skills,把前端传入的追加到末尾 + # (避免覆盖丢失 bot 默认的工具类 skill,例如 docx/pdf/baidu-search) + existing_skills = list(bot_config.get("skills", []) or []) + for skill in request.skills: + if skill not in existing_skills: + existing_skills.append(skill) + bot_config["skills"] = existing_skills # 构造类 v2 的请求格式 # 从数据库配置中提取参数 diff --git a/utils/api_models.py b/utils/api_models.py index b5bbb1a..70b88f6 100644 --- a/utils/api_models.py +++ b/utils/api_models.py @@ -89,6 +89,7 @@ class ChatRequestV3(BaseModel): 可选覆盖项(仅本次请求生效,不写库;用于只读配置的 bot,如 general-agent): - model_id: 模型 ID,覆盖数据库配置 - dataset_ids: 数据集 ID 列表,覆盖数据库配置 + - skills: 技能列表,覆盖数据库配置(例如前端选了知识库时注入 ragflow-loader) """ messages: List[Message] bot_id: str @@ -97,6 +98,7 @@ class ChatRequestV3(BaseModel): user_identifier: Optional[str] = None model_id: Optional[str] = None dataset_ids: Optional[List[str]] = None + skills: Optional[List[str]] = None class VisionMessage(BaseModel):