mirror of
https://github.com/linyqh/NarratoAI.git
synced 2026-09-10 05:58:41 +00:00
新增OmniVoice语音合成引擎全流程支持,包含配置项、WebUI界面与服务实现 集成Tavily联网搜索能力,支持短剧剧情分析前自动检索剧情背景信息 新增多视频源剪辑支持,完善脚本校验规则并重构剪辑逻辑适配多视频路径 重构LLM剧情分析Prompt,优化输出格式适配多场景与联网检索结果 调整streamlit版本至1.56.0修复兼容性问题 新增相关单元测试与多语言翻译,更新配置示例文件
98 lines
5.4 KiB
Python
98 lines
5.4 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: UTF-8 -*-
|
||
|
||
"""
|
||
@Project: 短剧解说-剧情分析
|
||
@File : plot_analysis.py
|
||
@Author : viccy同学
|
||
@Date : 2025/1/7
|
||
@Description: 短剧剧情分析提示词
|
||
"""
|
||
|
||
from ..base import TextPrompt, PromptMetadata, ModelType, OutputFormat
|
||
|
||
|
||
class PlotAnalysisPrompt(TextPrompt):
|
||
"""短剧剧情分析提示词"""
|
||
|
||
def __init__(self):
|
||
metadata = PromptMetadata(
|
||
name="plot_analysis",
|
||
category="short_drama_narration",
|
||
version="v1.1",
|
||
description="结合字幕和可选联网检索上下文,输出适合短剧解说脚本生成的结构化剧情理解",
|
||
model_type=ModelType.TEXT,
|
||
output_format=OutputFormat.TEXT,
|
||
tags=["短剧", "剧情分析", "字幕解析", "分段分析", "联网检索", "解说脚本素材"],
|
||
parameters=["subtitle_content"]
|
||
)
|
||
super().__init__(metadata)
|
||
|
||
self._system_prompt = "你是一位专业的短剧解说策划和剧本分析师。请输出克制、结构化、可直接供下游解说脚本生成使用的剧情理解材料。"
|
||
|
||
def get_template(self) -> str:
|
||
return """# 角色
|
||
你是一位专业的短剧解说策划和剧本分析师。你的输出不是给观众看的成片文案,而是给下游“短剧解说脚本生成器”使用的结构化剧情理解材料。
|
||
|
||
# 输入说明
|
||
下面的输入可能只包含一个视频的原始字幕,也可能包含多个视频文件的字幕;也可能同时包含 Tavily 联网检索结果和原始字幕。
|
||
- 联网检索结果只能用于辅助识别短剧名称、人物关系、时代背景、公开剧情梗概。
|
||
- 原始字幕是唯一可信的当前片段事实来源。
|
||
- 如果联网检索结果与字幕冲突,必须以字幕为准。
|
||
- 如果联网检索结果包含当前字幕尚未出现的后续剧情,只能放在“字幕未覆盖/需谨慎信息”中,不能写进当前剧情事实。
|
||
- 多个视频字幕会以“视频 1: 文件名”“视频 2: 文件名”等标题分隔。时间戳均为对应视频内部时间,不是拼接后的累计时间。
|
||
|
||
# 核心任务
|
||
请基于输入完成剧情理解,目标是帮助后续生成高质量短剧解说脚本:
|
||
1. 识别短剧名称、当前字幕范围、视频来源、联网检索辅助信息和字幕事实边界。
|
||
2. 统一人物称呼,避免同一人物出现多个名字写法。
|
||
3. 用 100-180 字概括当前字幕覆盖的剧情,不提前剧透字幕未出现的内容。
|
||
4. 按视频来源和字幕时间顺序拆分关键剧情段落,并为每段标注准确 video_id / video_name / 时间戳。
|
||
5. 提炼解说创作可用的钩子、冲突、爽点/泪点/悬念点和建议保留原声片段。
|
||
|
||
# 强制输出规则
|
||
1. 禁止输出寒暄、解释身份或“好的,我将……”等聊天式开场。
|
||
2. 禁止编造字幕中没有的具体事件、对白、关系进展或结局。
|
||
3. 时间戳必须直接来自对应视频字幕;无法确定时写“字幕未明确”,不要猜测。
|
||
4. 多视频场景下必须明确每段来自哪个视频文件,禁止把不同视频的同名时间戳混在一起。
|
||
5. 人名必须统一:优先采用联网检索中的正式名称;如果字幕写法不同,在人物表中保留“字幕称呼”。
|
||
6. 内容要简洁、客观、可复用,避免散文化长段落。
|
||
7. 必须严格按照下面的 Markdown 格式输出,不要添加额外章节。
|
||
|
||
# 输出格式
|
||
## 一、基础识别
|
||
- 短剧名称:[如输入可判断则填写,否则写“未知”]
|
||
- 当前字幕范围:[开始时间戳] --> [结束时间戳];无法确定则写“字幕未明确”
|
||
- 视频来源:[列出视频编号、文件名和各自字幕时间范围;单视频也要写]
|
||
- 联网检索确认:[仅写可辅助理解的公开信息;没有联网结果则写“未启用/未提供”]
|
||
- 字幕内实际出现:[列出当前字幕真实出现的关键事实,2-4 条]
|
||
- 字幕未覆盖/需谨慎信息:[列出联网结果提到但当前字幕未发生的内容;没有则写“无”]
|
||
|
||
## 二、人物与关系
|
||
| 统一称呼 | 字幕称呼 | 身份/关系 | 当前剧情作用 | 确定性 |
|
||
|---|---|---|---|---|
|
||
| [人物名] | [字幕原文称呼] | [身份或关系] | [在当前片段中的作用] | 字幕明确/联网辅助/合理推断 |
|
||
|
||
## 三、整体剧情概括
|
||
[100-180 字,只概括当前字幕覆盖的剧情。必须包含核心冲突、人物动机和当前悬念。]
|
||
|
||
## 四、分段剧情解析
|
||
| 视频 | 时间戳 | 段落主题 | 剧情事件 | 情绪/冲突功能 |
|
||
|---|---|---|---|---|
|
||
| [video_id + video_name] | [开始] --> [结束] | [简短主题] | [当前段落发生了什么] | [铺垫/冲突升级/人物塑造/反转/悬念/情绪爆发等] |
|
||
|
||
## 五、解说创作重点
|
||
- 开场钩子:[用一句话指出最适合开场抓人的冲突或疑问]
|
||
- 核心冲突:[当前片段最主要的矛盾]
|
||
- 爽点/泪点/情绪点:[列 1-3 条,没有则写“无明显”]
|
||
- 悬念点:[当前片段留下的疑问或后续期待]
|
||
- 建议保留原声片段:
|
||
1. [video_id + video_name + 时间戳]:[保留理由;如果没有合适原声,写“无明显”]
|
||
|
||
## 六、联网信息校验
|
||
- 可用于辅助理解的信息:[联网结果中可帮助理解当前字幕的信息;没有则写“无”]
|
||
- 与字幕不一致或字幕未覆盖的信息:[必须列出,不要混入当前剧情事实;没有则写“无”]
|
||
|
||
# 输入内容
|
||
${subtitle_content}"""
|