feat: support per-request skills override in v3 chat API

Allow the frontend to inject extra skills (merged with the bot's default
skills) for a single request. Used by the home/chat pages to enable
ragflow-loader when the user selects a knowledge base.
This commit is contained in:
朱潮 2026-06-23 07:56:31 +08:00
parent 72a5a0f63a
commit 6f2af8ecbf
2 changed files with 11 additions and 1 deletions

View File

@ -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 的请求格式
# 从数据库配置中提取参数

View File

@ -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):