mirror of
https://github.com/linyqh/NarratoAI.git
synced 2026-08-01 10:55:54 +00:00
- 新增短剧解说全流程四类提示词模板:解说文案生成、片段规划、文案画面匹配、脚本修复 - 重构原有脚本生成提示词至v2.1,改为基于上游规划片段生成合规解说脚本 - 为LLM基础服务层新增流式文本生成接口,完善OpenAI兼容提供商的流式实现,支持流式回调与推理内容提取 - 重构OpenAI兼容文本提供商的生成逻辑,提取公共参数构建方法 - 新增多语言国际化文案,覆盖解说语言、短剧类型、原片占比等配置项与交互提示 - 新增多套单元测试,覆盖脚本校验、适配器流程、工具函数等模块 - 封装SubtitleAnalyzerAdapter,统一短剧解说脚本生成的整套业务接口 - 新增前端交互所需的解说文案审核相关提示文案
97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: UTF-8 -*-
|
||
|
||
"""
|
||
@Project: 短剧解说-脚本修复
|
||
@File : script_repair.py
|
||
@Description: 短剧解说脚本校验失败后的JSON修复提示词
|
||
"""
|
||
|
||
from ..base import ParameterizedPrompt, PromptMetadata, ModelType, OutputFormat
|
||
|
||
|
||
class ScriptRepairPrompt(ParameterizedPrompt):
|
||
"""短剧解说脚本修复提示词"""
|
||
|
||
def __init__(self):
|
||
metadata = PromptMetadata(
|
||
name="script_repair",
|
||
category="short_drama_narration",
|
||
version="v1.0",
|
||
description="根据确定性校验错误修复短剧解说脚本JSON,优先修正时间戳、视频来源和格式问题",
|
||
model_type=ModelType.TEXT,
|
||
output_format=OutputFormat.JSON,
|
||
tags=["短剧", "解说脚本", "JSON修复", "时间戳校验", "多视频"],
|
||
parameters=[
|
||
"drama_name",
|
||
"drama_genre",
|
||
"plot_analysis",
|
||
"subtitle_content",
|
||
"invalid_script",
|
||
"validation_errors",
|
||
"narration_language",
|
||
],
|
||
)
|
||
super().__init__(
|
||
metadata,
|
||
required_parameters=["drama_name", "subtitle_content", "invalid_script", "validation_errors"],
|
||
)
|
||
|
||
self._system_prompt = (
|
||
"你是一位短剧解说脚本JSON修复器。你只能根据校验错误修复JSON,"
|
||
"必须输出严格JSON,不能输出解释、Markdown或代码块。"
|
||
)
|
||
|
||
def get_template(self) -> str:
|
||
return """# 短剧解说脚本修复任务
|
||
|
||
## 修复目标
|
||
下面的短剧《${drama_name}》解说脚本未通过剪辑校验。请只根据校验错误和字幕内容修复它,输出一个完整可剪辑的 JSON。
|
||
|
||
## 剧情理解材料
|
||
<plot>
|
||
${plot_analysis}
|
||
</plot>
|
||
|
||
## 校验错误
|
||
<validation_errors>
|
||
${validation_errors}
|
||
</validation_errors>
|
||
|
||
## 当前无效脚本
|
||
<invalid_script>
|
||
${invalid_script}
|
||
</invalid_script>
|
||
|
||
## 可用字幕窗口
|
||
<subtitles>
|
||
${subtitle_content}
|
||
</subtitles>
|
||
|
||
## 解说台词目标语言
|
||
<narration_language>
|
||
${narration_language}
|
||
</narration_language>
|
||
|
||
## 用户选择的短剧类型
|
||
<drama_genre>
|
||
${drama_genre}
|
||
</drama_genre>
|
||
|
||
## 修复规则
|
||
1. 只输出 JSON,不要任何解释、标题、Markdown 或代码块。
|
||
2. 输出根对象必须是 {"items": [...]}。
|
||
3. 每个 item 必须包含 _id、video_id、video_name、timestamp、picture、narration、OST。
|
||
4. video_id、video_name 和 timestamp 必须来自对应字幕窗口;不得把不同视频的同名时间戳混用。
|
||
5. 同一 video_id 内片段不得交叉或重叠。
|
||
6. OST=1 的 narration 必须是“播放原片+序号”;OST=0 的 narration 必须使用 ${narration_language}。
|
||
7. 禁止连续 3 个或更多 OST=1;必须插入或改写 OST=0 解说片段承接剧情。
|
||
8. 跨 video_id 切换前后不能都是 OST=1;必须至少有一个 OST=0 片段解释场景和剧情为什么切换。
|
||
9. OST=0 narration 要补足因果承接,不要只概括当前画面。
|
||
10. 第一段必须是 OST=0 解说钩子,按“高能反转 + 情绪冲突 + 悬念钩子”写,不要直接播放原片。
|
||
11. OST=0 文案必须匹配画面时长,按“解说字数 / 5 = 所需视频秒数”估算;过密时要缩短文案、延长时间戳或拆成多个片段。
|
||
12. 不要自行改判短剧类型;如需改写 narration,必须按用户选择的 ${drama_genre} 保持表达重点。
|
||
13. 尽量保留原脚本中没有错误的片段;无法修复的片段可以删除,但剩余片段必须重新按 1 开始编号。
|
||
|
||
请输出修复后的完整 JSON。"""
|