From 41c6e010d18f116ab5db61e37bd7056dc1c0a943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Sun, 9 Nov 2025 13:08:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9robot=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi_app.py | 34 ++++++++++++++++++++++------------ utils/api_models.py | 2 +- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/fastapi_app.py b/fastapi_app.py index 22fa0f2..1b0b820 100644 --- a/fastapi_app.py +++ b/fastapi_app.py @@ -709,7 +709,7 @@ async def chat_completions(request: ChatRequest, authorization: Optional[str] = Chat completions API similar to OpenAI, supports both streaming and non-streaming Args: - request: ChatRequest containing messages, model, dataset_ids (optional list), required bot_id, system_prompt, mcp_settings, and files + request: ChatRequest containing messages, model, optional dataset_ids list, required bot_id, system_prompt, mcp_settings, and files authorization: Authorization header containing API key (Bearer ) Returns: @@ -717,19 +717,24 @@ async def chat_completions(request: ChatRequest, authorization: Optional[str] = Notes: - dataset_ids: 可选参数,当提供时必须是项目ID列表(单个项目也使用数组格式) - - bot_id: 必需参数,机器人ID,用于创建项目目录 - - 只有当提供 dataset_ids 时才会创建机器人项目目录:projects/robot/{bot_id}/ + - bot_id: 必需参数,机器人ID + - 只有当 robot_type == "catalog_agent" 且 dataset_ids 为非空数组时才会创建机器人项目目录:projects/robot/{bot_id}/ + - robot_type 为其他值(包括默认的 "agent")时不创建任何目录 + - dataset_ids 为空数组 []、None 或未提供时不创建任何目录 - 支持多知识库合并,自动处理文件夹重名冲突 Required Parameters: - - bot_id: str - 目标机器人项目ID + - bot_id: str - 目标机器人ID + - messages: List[Message] - 对话消息列表 Optional Parameters: - dataset_ids: List[str] - 源知识库项目ID列表(单个项目也使用数组格式) + - robot_type: str - 机器人类型,默认为 "agent" Example: - {"bot_id": "my-bot-001"} - {"dataset_ids": ["project-123"], "bot_id": "my-bot-001"} - {"dataset_ids": ["project-123", "project-456"], "bot_id": "my-bot-002"} + {"bot_id": "my-bot-001", "messages": [{"role": "user", "content": "Hello"}]} + {"dataset_ids": ["project-123"], "bot_id": "my-bot-001", "messages": [{"role": "user", "content": "Hello"}]} + {"dataset_ids": ["project-123", "project-456"], "bot_id": "my-bot-002", "messages": [{"role": "user", "content": "Hello"}]} + {"dataset_ids": ["project-123"], "bot_id": "my-catalog-bot", "robot_type": "catalog_agent", "messages": [{"role": "user", "content": "Hello"}]} """ try: # v1接口:从Authorization header中提取API key作为模型API密钥 @@ -740,8 +745,8 @@ async def chat_completions(request: ChatRequest, authorization: Optional[str] = if not bot_id: raise HTTPException(status_code=400, detail="bot_id is required") - # 创建项目目录(如果有dataset_ids) - project_dir = create_project_directory(request.dataset_ids, bot_id) + # 创建项目目录(如果有dataset_ids且不是agent类型) + project_dir = create_project_directory(request.dataset_ids, bot_id, request.robot_type) # 收集额外参数作为 generate_cfg exclude_fields = {'messages', 'model', 'model_server', 'dataset_ids', 'language', 'tool_response', 'system_prompt', 'mcp_settings' ,'stream', 'robot_type', 'bot_id'} @@ -923,9 +928,10 @@ async def create_agent_and_generate_response( raise HTTPException(status_code=500, detail="No response from agent") -def create_project_directory(dataset_ids: List[str], bot_id: str) -> Optional[str]: +def create_project_directory(dataset_ids: Optional[List[str]], bot_id: str, robot_type: str = "agent") -> Optional[str]: """创建项目目录的公共逻辑""" - if not dataset_ids: + # 只有当 robot_type == "catalog_agent" 且 dataset_ids 不为空时才创建目录 + if robot_type != "catalog_agent" or not dataset_ids or len(dataset_ids) == 0: return None try: @@ -1014,7 +1020,11 @@ async def chat_completions_v2(request: ChatRequestV2, authorization: Optional[st api_key = bot_config.get("api_key") # 创建项目目录(从后端配置获取dataset_ids) - project_dir = create_project_directory(bot_config.get("dataset_ids", []), bot_id) + project_dir = create_project_directory( + bot_config.get("dataset_ids", []), + bot_id, + bot_config.get("robot_type", "agent") + ) # 处理消息 messages = process_messages(request.messages, request.language) diff --git a/utils/api_models.py b/utils/api_models.py index fe2afa8..884db39 100644 --- a/utils/api_models.py +++ b/utils/api_models.py @@ -43,7 +43,7 @@ class ChatRequest(BaseModel): messages: List[Message] model: str = "qwen3-next" model_server: str = "" - dataset_ids: List[str] + dataset_ids: Optional[List[str]] = None bot_id: str stream: Optional[bool] = False language: Optional[str] = "ja"