Spaces:
Running
Running
File size: 5,148 Bytes
8587b71 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# 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的短剧解说功能,生成基于准确时间戳的高质量解说文案。
|