NarratoAI/docs/webui_bug_fix_summary.md
linyq e3a5e34c78 feat(subtitle_analysis): 更新解说文案生成逻辑,增强字幕内容支持
在多个文件中重构了解说文案生成的实现,新增对原始字幕内容的支持,以提供准确的时间戳信息。更新了相关参数和提示词模板,优化了生成逻辑,提升了内容的准确性和用户体验。同时,注释部分进行了清理,去除了调试信息的输出。
2025-07-11 23:25:44 +08:00

5.0 KiB
Raw Permalink Blame History

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

修改内容:

  1. 确保字幕内容在所有情况下都可用:
# 修改前字幕内容只在新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变量仍然可用
  1. 修复新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
)
  1. 修复回退到旧实现的调用:
# 修改前
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
)

测试验证

创建并运行了测试脚本,验证了以下内容:

  1. 提示词参数化功能正常
  2. 所有必需参数都正确传递
  3. 方法签名包含所有必需参数
  4. 字幕内容正确嵌入到提示词中

修复效果

修复前:

  • WebUI运行时出现"缺少必需参数"错误
  • 无法生成解说脚本
  • 用户体验中断

修复后:

  • WebUI正常运行无参数错误
  • 解说脚本生成功能正常
  • 原始字幕内容正确传递到提示词
  • 生成的解说文案基于准确的时间戳信息

相关文件

  • app/services/llm/migration_adapter.py - 修复适配器方法签名和参数传递
  • webui/tools/generate_short_summary.py - 修复WebUI调用代码
  • app/services/prompts/short_drama_narration/script_generation.py - 提示词模板(之前已优化)

注意事项

  1. 向后兼容性: 修改保持了API的向后兼容性subtitle_content 参数有默认值
  2. 错误处理: 确保在所有代码路径中都能获取到字幕内容
  3. 一致性: 新旧实现都使用相同的参数传递方式

总结

这次修复解决了WebUI中短剧解说功能的关键bug确保了

  • 提示词系统的参数完整性
  • WebUI功能的正常运行
  • 用户体验的连续性
  • 代码的健壮性和一致性

现在用户可以正常使用WebUI的短剧解说功能生成基于准确时间戳的高质量解说文案。