Spaces:
Running
Running
| # 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` | |
| **修改内容**: | |
| ```python | |
| # 修改前 | |
| 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]: | |
| ``` | |
| **参数传递修复**: | |
| ```python | |
| # 修改前 | |
| 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. **确保字幕内容在所有情况下都可用**: | |
| ```python | |
| # 修改前:字幕内容只在新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变量仍然可用 | |
| ``` | |
| 2. **修复新LLM服务架构的调用**: | |
| ```python | |
| # 修改前 | |
| 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 | |
| ) | |
| ``` | |
| 3. **修复回退到旧实现的调用**: | |
| ```python | |
| # 修改前 | |
| 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的短剧解说功能,生成基于准确时间戳的高质量解说文案。 | |