mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-11 10:32:49 +00:00
feat(prompts): 更新提示词管理系统以增强解说文案生成
在migration_adapter.py、base.py和template.py文件中集成新的提示词管理系统,优化提示词构建过程,提升解说文案生成的灵活性和兼容性。通过使用PromptManager和自定义模板渲染器,确保系统在处理新格式的JSON输出时保持向后兼容性,增强整体用户体验。
This commit is contained in:
parent
dbbb06eda8
commit
9a2d9cae9b
@ -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,
|
||||
|
||||
@ -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]:
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user