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