mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-11 18:42:49 +00:00
在多个文件中重构了解说文案生成的实现,新增对原始字幕内容的支持,以提供准确的时间戳信息。更新了相关参数和提示词模板,优化了生成逻辑,提升了内容的准确性和用户体验。同时,注释部分进行了清理,去除了调试信息的输出。
171 lines
5.0 KiB
Markdown
171 lines
5.0 KiB
Markdown
# 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的短剧解说功能,生成基于准确时间戳的高质量解说文案。
|