"""子智能体提示词构建。 所有 prompt 正文均从 prompts/sub_agent/ 下的文本文件加载,避免在代码中硬编码。 """ from __future__ import annotations import platform from datetime import datetime from pathlib import Path from typing import Optional try: from config import PROMPTS_DIR except ImportError: import sys project_root = Path(__file__).resolve().parents[2] if str(project_root) not in sys.path: sys.path.insert(0, str(project_root)) from config import PROMPTS_DIR _SUB_AGENT_PROMPTS_DIR = Path(PROMPTS_DIR) / "sub_agent" _TEMPLATE_CACHE: dict[str, str] = {} def _load_template(name: str) -> str: """从 prompts/sub_agent/.txt 加载模板,带缓存。""" cached = _TEMPLATE_CACHE.get(name) if cached is not None: return cached template_path = _SUB_AGENT_PROMPTS_DIR / f"{name}.txt" if not template_path.exists(): raise FileNotFoundError(f"子智能体 prompt 模板缺失: {template_path}") content = template_path.read_text(encoding="utf-8") _TEMPLATE_CACHE[name] = content return content def _format_template(name: str, **kwargs) -> str: """加载模板并用 str.format 填充占位符。""" template = _load_template(name) return template.format(**kwargs) def build_user_message( agent_id: int, summary: str, task: str, deliverables_path: str, timeout_seconds: int, ) -> str: """构建发送给子智能体的用户消息。""" return _format_template( "user_message", agent_id=agent_id, summary=summary, task=task, deliverables_path=deliverables_path, timeout_seconds=timeout_seconds, ) def build_system_prompt(workspace_path: str) -> str: """构建子智能体的系统提示。""" system_info = f"{platform.system()} {platform.release()}" current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") return _format_template( "system", workspace_path=workspace_path, system_info=system_info, current_time=current_time, )