mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-16 15:12:57 +00:00
feat(prompts): 更新提示词管理系统以增强解说文案生成
在migration_adapter.py、base.py和template.py文件中集成新的提示词管理系统,优化提示词构建过程,提升解说文案生成的灵活性和兼容性。通过使用PromptManager和自定义模板渲染器,确保系统在处理新格式的JSON输出时保持向后兼容性,增强整体用户体验。
This commit is contained in:
parent
eadaf1be6e
commit
e76031832c
@ -12,6 +12,8 @@ from loguru import logger
|
|||||||
|
|
||||||
from .unified_service import UnifiedLLMService
|
from .unified_service import UnifiedLLMService
|
||||||
from .exceptions import LLMServiceError
|
from .exceptions import LLMServiceError
|
||||||
|
# 导入新的提示词管理系统
|
||||||
|
from app.services.prompts import PromptManager
|
||||||
|
|
||||||
# 确保提供商已注册
|
# 确保提供商已注册
|
||||||
def _ensure_providers_registered():
|
def _ensure_providers_registered():
|
||||||
@ -267,20 +269,15 @@ class SubtitleAnalyzerAdapter:
|
|||||||
生成结果字典
|
生成结果字典
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# 构建提示词
|
# 使用新的提示词管理系统构建提示词
|
||||||
prompt = f"""
|
prompt = PromptManager.get_prompt(
|
||||||
根据以下剧情分析,为短剧《{short_name}》生成引人入胜的解说文案:
|
category="short_drama_narration",
|
||||||
|
name="script_generation",
|
||||||
{plot_analysis}
|
parameters={
|
||||||
|
"drama_name": short_name,
|
||||||
请生成JSON格式的解说文案,包含以下字段:
|
"plot_analysis": plot_analysis
|
||||||
- narration_script: 解说文案内容
|
}
|
||||||
|
)
|
||||||
输出格式:
|
|
||||||
{{
|
|
||||||
"narration_script": "解说文案内容"
|
|
||||||
}}
|
|
||||||
"""
|
|
||||||
|
|
||||||
# 使用统一服务生成文案
|
# 使用统一服务生成文案
|
||||||
result = self._run_async_safely(
|
result = self._run_async_safely(
|
||||||
@ -295,6 +292,9 @@ class SubtitleAnalyzerAdapter:
|
|||||||
# 清理JSON输出
|
# 清理JSON输出
|
||||||
cleaned_result = self._clean_json_output(result)
|
cleaned_result = self._clean_json_output(result)
|
||||||
|
|
||||||
|
# 新的提示词系统返回的是包含items数组的JSON格式
|
||||||
|
# 为了保持向后兼容,我们需要直接返回这个JSON字符串
|
||||||
|
# 调用方会期望这是一个包含items数组的JSON字符串
|
||||||
return {
|
return {
|
||||||
"status": "success",
|
"status": "success",
|
||||||
"narration_script": cleaned_result,
|
"narration_script": cleaned_result,
|
||||||
|
|||||||
@ -112,21 +112,23 @@ class BasePrompt(ABC):
|
|||||||
def render(self, parameters: Dict[str, Any] = None) -> str:
|
def render(self, parameters: Dict[str, Any] = None) -> str:
|
||||||
"""渲染提示词"""
|
"""渲染提示词"""
|
||||||
parameters = parameters or {}
|
parameters = parameters or {}
|
||||||
|
|
||||||
# 验证参数
|
# 验证参数
|
||||||
if self.metadata.parameters:
|
if self.metadata.parameters:
|
||||||
self.validate_parameters(parameters)
|
self.validate_parameters(parameters)
|
||||||
|
|
||||||
# 渲染模板
|
# 渲染模板 - 使用自定义的模板渲染器
|
||||||
template = self.get_template()
|
template = self.get_template()
|
||||||
try:
|
try:
|
||||||
return template.format(**parameters)
|
from .template import get_renderer
|
||||||
except KeyError as e:
|
renderer = get_renderer()
|
||||||
|
return renderer.render(template, parameters)
|
||||||
|
except Exception as e:
|
||||||
from .exceptions import TemplateRenderError
|
from .exceptions import TemplateRenderError
|
||||||
raise TemplateRenderError(
|
raise TemplateRenderError(
|
||||||
template_name=self.name,
|
template_name=self.name,
|
||||||
error_message=f"模板参数错误: {str(e)}",
|
error_message=f"模板渲染错误: {str(e)}",
|
||||||
missing_params=[str(e)]
|
missing_params=[]
|
||||||
)
|
)
|
||||||
|
|
||||||
def to_dict(self) -> Dict[str, Any]:
|
def to_dict(self) -> Dict[str, Any]:
|
||||||
|
|||||||
@ -42,15 +42,18 @@ class TemplateRenderer:
|
|||||||
parameters = parameters or {}
|
parameters = parameters or {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 使用Python内置的Template类进行基础渲染
|
# 使用简单的字符串替换进行参数替换
|
||||||
tmpl = Template(template)
|
rendered = template
|
||||||
|
|
||||||
# 先进行基础参数替换
|
for key, value in parameters.items():
|
||||||
rendered = tmpl.safe_substitute(**parameters)
|
# 替换 ${key} 格式的参数
|
||||||
|
rendered = rendered.replace(f"${{{key}}}", str(value))
|
||||||
|
# 也替换 $key 格式的参数(为了兼容性)
|
||||||
|
rendered = rendered.replace(f"${key}", str(value))
|
||||||
|
|
||||||
# 处理自定义过滤器
|
# 处理自定义过滤器
|
||||||
rendered = self._apply_filters(rendered, parameters)
|
rendered = self._apply_filters(rendered, parameters)
|
||||||
|
|
||||||
return rendered
|
return rendered
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user