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的短剧解说功能,生成基于准确时间戳的高质量解说文案。