diff --git a/app/services/llm/migration_adapter.py b/app/services/llm/migration_adapter.py index a34d9b0..f988f9c 100644 --- a/app/services/llm/migration_adapter.py +++ b/app/services/llm/migration_adapter.py @@ -12,6 +12,8 @@ from loguru import logger from .unified_service import UnifiedLLMService from .exceptions import LLMServiceError +# 导入新的提示词管理系统 +from app.services.prompts import PromptManager # 确保提供商已注册 def _ensure_providers_registered(): @@ -267,20 +269,15 @@ class SubtitleAnalyzerAdapter: 生成结果字典 """ try: - # 构建提示词 - prompt = f""" -根据以下剧情分析,为短剧《{short_name}》生成引人入胜的解说文案: - -{plot_analysis} - -请生成JSON格式的解说文案,包含以下字段: -- narration_script: 解说文案内容 - -输出格式: -{{ - "narration_script": "解说文案内容" -}} -""" + # 使用新的提示词管理系统构建提示词 + prompt = PromptManager.get_prompt( + category="short_drama_narration", + name="script_generation", + parameters={ + "drama_name": short_name, + "plot_analysis": plot_analysis + } + ) # 使用统一服务生成文案 result = self._run_async_safely( @@ -295,6 +292,9 @@ class SubtitleAnalyzerAdapter: # 清理JSON输出 cleaned_result = self._clean_json_output(result) + # 新的提示词系统返回的是包含items数组的JSON格式 + # 为了保持向后兼容,我们需要直接返回这个JSON字符串 + # 调用方会期望这是一个包含items数组的JSON字符串 return { "status": "success", "narration_script": cleaned_result, diff --git a/app/services/prompts/base.py b/app/services/prompts/base.py index 8f65f60..d1ed1fe 100644 --- a/app/services/prompts/base.py +++ b/app/services/prompts/base.py @@ -112,21 +112,23 @@ class BasePrompt(ABC): def render(self, parameters: Dict[str, Any] = None) -> str: """渲染提示词""" parameters = parameters or {} - + # 验证参数 if self.metadata.parameters: self.validate_parameters(parameters) - - # 渲染模板 + + # 渲染模板 - 使用自定义的模板渲染器 template = self.get_template() try: - return template.format(**parameters) - except KeyError as e: + from .template import get_renderer + renderer = get_renderer() + return renderer.render(template, parameters) + except Exception as e: from .exceptions import TemplateRenderError raise TemplateRenderError( template_name=self.name, - error_message=f"模板参数错误: {str(e)}", - missing_params=[str(e)] + error_message=f"模板渲染错误: {str(e)}", + missing_params=[] ) def to_dict(self) -> Dict[str, Any]: diff --git a/app/services/prompts/template.py b/app/services/prompts/template.py index 8ce02f2..1445318 100644 --- a/app/services/prompts/template.py +++ b/app/services/prompts/template.py @@ -42,15 +42,18 @@ class TemplateRenderer: parameters = parameters or {} try: - # 使用Python内置的Template类进行基础渲染 - tmpl = Template(template) - - # 先进行基础参数替换 - rendered = tmpl.safe_substitute(**parameters) - + # 使用简单的字符串替换进行参数替换 + rendered = template + + for key, value in parameters.items(): + # 替换 ${key} 格式的参数 + rendered = rendered.replace(f"${{{key}}}", str(value)) + # 也替换 $key 格式的参数(为了兼容性) + rendered = rendered.replace(f"${key}", str(value)) + # 处理自定义过滤器 rendered = self._apply_filters(rendered, parameters) - + return rendered except Exception as e: