add robot_type

This commit is contained in:
朱潮 2025-10-23 16:31:37 +08:00
parent 2cba493328
commit 044a40175b
5 changed files with 55 additions and 48 deletions

View File

@ -430,7 +430,7 @@ async def chat_completions(request: ChatRequest, authorization: Optional[str] =
project_dir = ""
# 收集额外参数作为 generate_cfg
exclude_fields = {'messages', 'model', 'model_server', 'unique_id', 'language', 'tool_response', 'system_prompt', 'mcp_settings' ,'stream'}
exclude_fields = {'messages', 'model', 'model_server', 'unique_id', 'language', 'tool_response', 'system_prompt', 'mcp_settings' ,'stream', 'robot_type'}
generate_cfg = {k: v for k, v in request.model_dump().items() if k not in exclude_fields}
# 从全局管理器获取或创建助手实例配置读取逻辑已在agent_manager内部处理
@ -443,7 +443,8 @@ async def chat_completions(request: ChatRequest, authorization: Optional[str] =
generate_cfg=generate_cfg,
language=request.language,
system_prompt=request.system_prompt,
mcp_settings=request.mcp_settings
mcp_settings=request.mcp_settings,
robot_type=request.robot_type
)
# 构建包含项目信息的消息上下文
messages = []

View File

@ -194,4 +194,4 @@
**工具调用前声明**:每次调用工具之前,必须输出工具选择理由和预期结果
**工具调用后评估**:每次调用工具之后,必须输出结果分析和下一步规划
**语言要求**:所有用户交互和结果输出,必须使用[{language}]
{extra_prompt}

View File

@ -49,6 +49,7 @@ class ChatRequest(BaseModel):
tool_response: Optional[bool] = False
system_prompt: Optional[str] = None
mcp_settings: Optional[List[Dict]] = None
robot_type: Optional[str] = "AGENT"
class FileProcessRequest(BaseModel):

View File

@ -81,7 +81,8 @@ class FileLoadedAgentManager:
generate_cfg: Optional[Dict] = None,
language: Optional[str] = None,
system_prompt: Optional[str] = None,
mcp_settings: Optional[List[Dict]] = None) -> Assistant:
mcp_settings: Optional[List[Dict]] = None,
robot_type: Optional[str] = "AGENT") -> Assistant:
"""获取或创建文件预加载的助手实例
Args:
@ -94,6 +95,7 @@ class FileLoadedAgentManager:
language: 语言代码用于选择对应的系统提示词
system_prompt: 可选的系统提示词优先级高于项目配置
mcp_settings: 可选的MCP设置优先级高于项目配置
robot_type: 机器人类型取值 AGENT/CATALOG_AGENT
Returns:
Assistant: 配置好的助手实例
@ -101,7 +103,7 @@ class FileLoadedAgentManager:
import os
# 实现参数优先级逻辑:传入参数 > 项目配置 > 默认配置
final_system_prompt = load_system_prompt(project_dir, language, system_prompt)
final_system_prompt = load_system_prompt(project_dir, language, system_prompt, robot_type)
final_mcp_settings = load_mcp_settings(project_dir, mcp_settings)
cache_key = self._get_cache_key(unique_id)

View File

@ -7,59 +7,63 @@ import json
from typing import List, Dict, Optional
def load_system_prompt(project_dir: str, language: str = None, system_prompt: str=None) -> str:
def load_system_prompt(project_dir: str, language: str = None, system_prompt: str=None, robot_type: str = "AGENT") -> str:
if robot_type == "AGENT":
return system_prompt or ""
if robot_type == "CATALOG_AGENT":
"""
优先使用项目目录的system_prompt没有才使用默认的system_prompt_default.md
Args:
project_dir: 项目目录路径
language: 语言代码 'zh', 'en', 'jp' 此参数将被忽略
system_prompt: 可选的系统提示词优先级高于项目配置
robot_type: 机器人类型取值 AGENT/CATALOG_AGENT
"""
优先使用项目目录的system_prompt没有才使用默认的system_prompt_default.md
Args:
project_dir: 项目目录路径
language: 语言代码 'zh', 'en', 'jp' 此参数将被忽略
Returns:
str: 加载到的系统提示词内容如果都未找到则返回空字符串
"""
# 1. 优先读取项目目录中的system_prompt
if not system_prompt:
Returns:
str: 加载到的系统提示词内容如果都未找到则返回空字符串
"""
system_prompt_default = None
# 1. 优先读取项目目录中的system_prompt
system_prompt_file = os.path.join(project_dir, "system_prompt.md")
if os.path.exists(system_prompt_file):
try:
with open(system_prompt_file, 'r', encoding='utf-8') as f:
system_prompt = f.read()
system_prompt_default = f.read()
print(f"Using project-specific system prompt")
except Exception as e:
print(f"Failed to load project system prompt: {str(e)}")
system_prompt = None
# 2. 如果项目目录没有,使用默认提示词
if not system_prompt:
try:
default_prompt_file = os.path.join("prompt", "system_prompt_default.md")
with open(default_prompt_file, 'r', encoding='utf-8') as f:
system_prompt = f.read()
print(f"Using default system prompt from prompt folder")
except Exception as e:
print(f"Failed to load default system prompt: {str(e)}")
system_prompt = 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 = None
# 获取语言显示名称
language_display_map = {
'zh': '中文',
'en': 'English',
'ja': '日本語',
'jp': '日本語'
}
language_display = language_display_map.get(language, language if language else 'English')
return system_prompt.replace("{readme}", str(readme)).replace("{language}", language_display) or ""
# 2. 如果项目目录没有,使用默认提示词
if not system_prompt_default:
try:
default_prompt_file = os.path.join("prompt", "system_prompt_default.md")
with open(default_prompt_file, 'r', encoding='utf-8') as f:
system_prompt_default = f.read()
print(f"Using default system prompt from prompt folder")
except Exception as e:
print(f"Failed to load default system prompt: {str(e)}")
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()
# 获取语言显示名称
language_display_map = {
'zh': '中文',
'en': 'English',
'ja': '日本語',
'jp': '日本語'
}
language_display = language_display_map.get(language, language if language else 'English')
return system_prompt_default.replace("{readme}", str(readme)).replace("{language}", language_display).replace("{extra_prompt}", system_prompt or "") or ""
else:
return system_prompt or ""
def get_available_prompt_languages() -> list:
"""
@ -161,7 +165,6 @@ def load_mcp_settings(project_dir: str, mcp_settings: list=None) -> List[Dict]:
dataset_dir = os.path.join(project_dir, "dataset")
# 替换 MCP 配置中的 {dataset_dir} 占位符
mcp_settings = replace_mcp_placeholders(mcp_settings, dataset_dir)
print(mcp_settings)
return mcp_settings