mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-10 18:02:51 +00:00
在多个文件中重构了解说文案生成的实现,新增对原始字幕内容的支持,以提供准确的时间戳信息。更新了相关参数和提示词模板,优化了生成逻辑,提升了内容的准确性和用户体验。同时,注释部分进行了清理,去除了调试信息的输出。
5.0 KiB
5.0 KiB
WebUI短剧解说功能Bug修复总结
问题描述
在运行WebUI的短剧解说功能时,出现以下错误:
2025-07-11 22:15:29 | ERROR | "./app/services/prompts/manager.py:59": get_prompt - 提示词渲染失败: short_drama_narration.script_generation - 模板渲染失败 'script_generation': 缺少必需参数 (缺少参数: subtitle_content)
根本原因
在之前的优化中,我们修改了 ScriptGenerationPrompt 类,添加了 subtitle_content 作为必需参数,但是在 app/services/llm/migration_adapter.py 中的 SubtitleAnalyzerAdapter.generate_narration_script 方法没有相应更新,导致调用提示词时缺少必需的参数。
修复内容
1. 修复 migration_adapter.py
文件: app/services/llm/migration_adapter.py
修改内容:
# 修改前
def generate_narration_script(self, short_name: str, plot_analysis: str, temperature: float = 0.7) -> Dict[str, Any]:
# 修改后
def generate_narration_script(self, short_name: str, plot_analysis: str, subtitle_content: str = "", temperature: float = 0.7) -> Dict[str, Any]:
参数传递修复:
# 修改前
prompt = PromptManager.get_prompt(
category="short_drama_narration",
name="script_generation",
parameters={
"drama_name": short_name,
"plot_analysis": plot_analysis
}
)
# 修改后
prompt = PromptManager.get_prompt(
category="short_drama_narration",
name="script_generation",
parameters={
"drama_name": short_name,
"plot_analysis": plot_analysis,
"subtitle_content": subtitle_content # 添加缺失的参数
}
)
2. 修复 WebUI 调用代码
文件: webui/tools/generate_short_summary.py
修改内容:
- 确保字幕内容在所有情况下都可用:
# 修改前:字幕内容只在新LLM服务架构中读取
try:
analyzer = SubtitleAnalyzerAdapter(...)
with open(subtitle_path, 'r', encoding='utf-8') as f:
subtitle_content = f.read()
analysis_result = analyzer.analyze_subtitle(subtitle_content)
except Exception as e:
# 回退时没有subtitle_content变量
# 修改后:无论使用哪种实现都先读取字幕内容
with open(subtitle_path, 'r', encoding='utf-8') as f:
subtitle_content = f.read()
try:
analyzer = SubtitleAnalyzerAdapter(...)
analysis_result = analyzer.analyze_subtitle(subtitle_content)
except Exception as e:
# 回退时subtitle_content变量仍然可用
- 修复新LLM服务架构的调用:
# 修改前
narration_result = analyzer.generate_narration_script(
short_name=video_theme,
plot_analysis=analysis_result["analysis"],
temperature=temperature
)
# 修改后
narration_result = analyzer.generate_narration_script(
short_name=video_theme,
plot_analysis=analysis_result["analysis"],
subtitle_content=subtitle_content, # 添加字幕内容参数
temperature=temperature
)
- 修复回退到旧实现的调用:
# 修改前
narration_result = generate_narration_script(
short_name=video_theme,
plot_analysis=analysis_result["analysis"],
api_key=text_api_key,
model=text_model,
base_url=text_base_url,
save_result=True,
temperature=temperature,
provider=text_provider
)
# 修改后
narration_result = generate_narration_script(
short_name=video_theme,
plot_analysis=analysis_result["analysis"],
subtitle_content=subtitle_content, # 添加字幕内容参数
api_key=text_api_key,
model=text_model,
base_url=text_base_url,
save_result=True,
temperature=temperature,
provider=text_provider
)
测试验证
创建并运行了测试脚本,验证了以下内容:
- ✅ 提示词参数化功能正常
- ✅ 所有必需参数都正确传递
- ✅ 方法签名包含所有必需参数
- ✅ 字幕内容正确嵌入到提示词中
修复效果
修复前:
- ❌ WebUI运行时出现"缺少必需参数"错误
- ❌ 无法生成解说脚本
- ❌ 用户体验中断
修复后:
- ✅ WebUI正常运行,无参数错误
- ✅ 解说脚本生成功能正常
- ✅ 原始字幕内容正确传递到提示词
- ✅ 生成的解说文案基于准确的时间戳信息
相关文件
app/services/llm/migration_adapter.py- 修复适配器方法签名和参数传递webui/tools/generate_short_summary.py- 修复WebUI调用代码app/services/prompts/short_drama_narration/script_generation.py- 提示词模板(之前已优化)
注意事项
- 向后兼容性: 修改保持了API的向后兼容性,
subtitle_content参数有默认值 - 错误处理: 确保在所有代码路径中都能获取到字幕内容
- 一致性: 新旧实现都使用相同的参数传递方式
总结
这次修复解决了WebUI中短剧解说功能的关键bug,确保了:
- 提示词系统的参数完整性
- WebUI功能的正常运行
- 用户体验的连续性
- 代码的健壮性和一致性
现在用户可以正常使用WebUI的短剧解说功能,生成基于准确时间戳的高质量解说文案。