feat(prompts): 更新提示词管理系统以增强解说文案生成

在migration_adapter.py、base.py和template.py文件中集成新的提示词管理系统,优化提示词构建过程,提升解说文案生成的灵活性和兼容性。通过使用PromptManager和自定义模板渲染器,确保系统在处理新格式的JSON输出时保持向后兼容性,增强整体用户体验。
This commit is contained in:
linyq 2025-07-07 17:30:43 +08:00
parent dbbb06eda8
commit 9a2d9cae9b
3 changed files with 33 additions and 28 deletions

View File

@ -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,

View File

@ -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]:

View File

@ -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: