suport dataset_ids

This commit is contained in:
朱潮 2025-10-30 21:50:43 +08:00
parent 29a3a17d28
commit 432fb214d4
3 changed files with 28 additions and 22 deletions

View File

@ -419,23 +419,25 @@ 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 (required list), required bot_id, system_prompt, mcp_settings, and files
request: ChatRequest containing messages, model, dataset_ids (optional list), required bot_id, system_prompt, mcp_settings, and files
authorization: Authorization header containing API key (Bearer <API_KEY>)
Returns:
Union[ChatResponse, StreamingResponse]: Chat completion response or stream
Notes:
- dataset_ids: 必需参数必须是项目ID列表单个项目也使用数组格式
- dataset_ids: 可选参数当提供时必须是项目ID列表单个项目也使用数组格式
- bot_id: 必需参数机器人ID用于创建项目目录
- 所有请求都会创建机器人项目目录projects/robot/{bot_id}/
- 只有当提供 dataset_ids 时才会创建机器人项目目录projects/robot/{bot_id}/
- 支持多知识库合并自动处理文件夹重名冲突
Required Parameters:
- dataset_ids: List[str] - 源知识库项目ID列表单个项目也使用数组格式
- bot_id: str - 目标机器人项目ID
Optional Parameters:
- dataset_ids: List[str] - 源知识库项目ID列表单个项目也使用数组格式
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"}
"""
@ -449,19 +451,19 @@ async def chat_completions(request: ChatRequest, authorization: Optional[str] =
else:
api_key = authorization
# 获取dataset_ids必需参数必须是数组
dataset_ids_list = request.dataset_ids
if not dataset_ids_list:
raise HTTPException(status_code=400, detail="dataset_ids is required and must be a non-empty list")
# 获取bot_id必需参数
bot_id = request.bot_id
if not bot_id:
raise HTTPException(status_code=400, detail="bot_id is required")
# 创建机器人目录并合并数据
from utils.multi_project_manager import create_robot_project
project_dir = create_robot_project(dataset_ids_list, bot_id)
# 获取dataset_ids可选参数当提供时必须是数组
dataset_ids_list = request.dataset_ids
project_dir = None
# 只有当提供了 dataset_ids 时才创建机器人目录并合并数据
if dataset_ids_list and len(dataset_ids_list) > 0:
from utils.multi_project_manager import create_robot_project
project_dir = create_robot_project(dataset_ids_list, bot_id)
# 收集额外参数作为 generate_cfg
exclude_fields = {'messages', 'model', 'model_server', 'dataset_ids', 'language', 'tool_response', 'system_prompt', 'mcp_settings' ,'stream', 'robot_type', 'bot_id'}

View File

@ -92,7 +92,7 @@ class FileLoadedAgentManager:
async def get_or_create_agent(self,
bot_id: str,
project_dir: str,
project_dir: Optional[str],
model_name: str = "qwen3-next",
api_key: Optional[str] = None,
model_server: Optional[str] = None,
@ -105,7 +105,7 @@ class FileLoadedAgentManager:
Args:
bot_id: 项目的唯一标识符
project_dir: 项目目录路径用于读取system_prompt.md和mcp_settings.json
project_dir: 项目目录路径用于读取system_prompt.md和mcp_settings.json可以为None
model_name: 模型名称
api_key: API 密钥
model_server: 模型服务器地址

View File

@ -25,7 +25,7 @@ def load_system_prompt(project_dir: str, language: str = None, system_prompt: st
优先使用项目目录的system_prompt_catalog_agent.md没有才使用默认的system_prompt_default.md
Args:
project_dir: 项目目录路径
project_dir: 项目目录路径可以为None
language: 语言代码 'zh', 'en', 'jp' 此参数将被忽略
system_prompt: 可选的系统提示词优先级高于项目配置
robot_type: 机器人类型取值 AGENT/CATALOG_AGENT
@ -45,11 +45,13 @@ def load_system_prompt(project_dir: str, language: str = None, system_prompt: st
system_prompt_default = None
readme = ""
readme_path = os.path.join(project_dir, "README.md")
if os.path.exists(readme_path):
with open(readme_path, "r", encoding="utf-8") as f:
readme = f.read().strip()
system_prompt_default = system_prompt_default.replace("{readme}", str(readme))
# 只有当 project_dir 不为 None 时才尝试读取 README.md
if project_dir is not None:
readme_path = os.path.join(project_dir, "README.md")
if os.path.exists(readme_path):
with open(readme_path, "r", encoding="utf-8") as f:
readme = f.read().strip()
system_prompt_default = system_prompt_default.replace("{readme}", str(readme))
return system_prompt_default.replace("{language}", language_display).replace("{extra_prompt}", system_prompt or "").replace('{bot_id}', bot_id) or ""
else:
@ -154,8 +156,10 @@ def load_mcp_settings(project_dir: str, mcp_settings: list=None, bot_id: str="",
merged_settings = [merged_settings] if merged_settings else []
# 计算 dataset_dir 用于替换 MCP 配置中的占位符
dataset_dir = os.path.join(project_dir, "dataset")
# 只有当 project_dir 不为 None 时才计算 dataset_dir
dataset_dir = os.path.join(project_dir, "dataset") if project_dir is not None else None
# 替换 MCP 配置中的 {dataset_dir} 占位符
merged_settings = replace_mcp_placeholders(merged_settings, dataset_dir, bot_id)
if dataset_dir is not None:
merged_settings = replace_mcp_placeholders(merged_settings, dataset_dir, bot_id)
return merged_settings