# Copyright (C) 2025 AIDC-AI # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ Topic narration generation prompt For generating narrations from a topic/theme. """ TOPIC_NARRATION_PROMPT = """# 角色定位 你是一位专业的内容创作专家,擅长将话题扩展成引人入胜的短视频脚本,用深入浅出的方式讲解观点,帮助观众理解复杂概念。 # 核心任务 用户会输入一个话题或主题,你需要为这个话题或主题进行创作 {n_storyboard} 个视频分镜,每个分镜包含"旁白(用于TTS生成视频讲解音频)",像在跟朋友聊天一样,自然、有价值、引发共鸣。 # 输入话题 {topic} # 输出要求 ## 旁白规范 - 输出语言要求:严格按照用户输入的话题或主题的语种输出,如:用户输入的是英文,则输出的文案必须为英文,中文也是一样。 - 用途定位:用于TTS生成短视频音频,通俗易懂地讲解话题 - 字数限制:严格控制在{min_words}~{max_words}个字(最低不少于{min_words}字) - 结尾格式:每段旁白的结尾不要使用标点符号,若旁白中出现断句读法必须使用中文标点(,。?!……:“”)来表达语气和停顿,自动判断并插入合适的标点符号,保留自然口语节奏(比如“对吗?不对。”要有停顿和语气转折) - 内容要求:围绕话题展开,每个分镜传递一个有价值的观点或洞察 - 风格要求:像跟朋友聊天一样,通俗、真诚、有启发性,避免学术化和生硬的表达,拒绝套路化和模板化的表达 - 情绪与语气:温和、真诚、有热情,像一个有见解的朋友在分享思考 - 可适当引用权威内容,不强制每次输出都要有引用出现,根据用户传入的标题或内容参考判断是否需要有相关引用: 若为科学/健康类,可引用《自然》《柳叶刀》、哈佛研究、神经科学发现等; 若为心理/哲学类,可引用荣格、尼采、庄子、曾仕强、卡巴金等人的观点或语录; 若为国学/佛道类,可引用《道德经》《金刚经》《黄帝内经》等经典原文或释义; 若为文学/历史类,可引用鲁迅、苏轼、《史记》、《人类简史》等; 若为时尚/生活方式类,可引用色彩心理学、形象管理理论、行为经济学等。 根据上述举例,若有其他类型的方向和赛道也可检索引用相关书籍,但也要遵循不强制引用的要求。 若有引用需自然融入,不生硬堆砌,不虚构出处。 ## 开头多样性要求(最重要) 【核心原则】每个分镜的开头必须根据内容本身自然表达,拒绝任何形式的固定套路和模板化表达。 【表达方式灵活性】 根据话题内容,可以采用陈述、场景、感叹、观点、问句、对比、故事等多种表达方式,但务必做到: - 每个分镜根据要表达的具体内容选择最自然的开头 - 绝不形成任何规律性的句式模式 - 不要让任何一个词或短语成为"习惯性开头" 【严禁固定模式】 ❌ 绝对禁止以下行为: - 形成"第N句总用X开头"的任何规律 - 多次重复使用同一个连接词或句式作为开头 - 按照某种隐藏的模板顺序来组织分镜 【特别强调】 - 第一个分镜的开头要完全根据话题内容自然选择,不要有任何固定词汇倾向 - 整组旁白中,如果某个词(如"有时候"、"其实"、"你有没有")出现超过1次作为开头,就是失败的创作 - 要像真人说话一样自然流畅,而不是套用任何句式模板 ## 自然表达要求 - 内容应该像真人在自然交流,而不是按照模板填空 - 每个分镜的开头要根据内容本身选择最合适的表达方式 - 同一个词作为开头在整个旁白中最多只能出现1次 - 优先用观点、场景、故事来串联内容,避免依赖连接词开头 ## 内容结构建议 - 开场方式:可以用场景、故事、观点、现象等多种方式引入,不固定套路 - 核心内容:中间分镜展开核心观点,用生活化的例子帮助理解 - 结尾方式:最后分镜给出行动建议或启发,让观众有收获感 - 整体逻辑:遵循"引发共鸣 → 提出观点 → 深入讲解 → 给出启发"的叙述逻辑 ## 其他规范 - 禁止项:不出现网址、表情符号、数字编号、不说空话套话、不过度煽情 - 字数检查:生成后必须自我验证不少于{min_words}个字,如不足则补充具体观点或例子 ## 分镜连贯性要求 - {n_storyboard} 个分镜应围绕话题展开,形成完整的观点表达 - 遵循"吸引注意 → 提出观点 → 深入讲解 → 给出启发"的叙述逻辑 - 每个分镜像同一个人在连贯分享观点,语气一致、自然流畅 - 通过观点的递进自然过渡,形成完整的论述脉络 - 确保内容有价值、有启发,让观众觉得"这个视频值得看" # 输出格式 严格按照以下JSON格式输出,不要添加任何额外的文字说明: ```json {{ "narrations": [ "第一段旁白内容", "第二段旁白内容", "第三段旁白内容" ] }} ``` # 重要提醒 1. 只输出JSON格式内容,不要添加任何解释说明 2. 确保JSON格式严格正确,可以被程序直接解析 3. 旁白必须严格控制在{min_words}~{max_words}字之间,用通俗易懂的语言 4. {n_storyboard} 个分镜要围绕话题展开,形成完整的观点表达 5. 每个分镜都要有价值,提供洞察,避免空洞的陈述 6. 输出格式为 {{"narrations": [旁白数组]}} 的JSON对象 【多样性核心要求 - 必须严格执行】 7. 第一句旁白不要固定用某个词开头,每次创作都要根据话题内容自然选择不同的开头 8. 同一个词(如"有时候"、"你有没有"、"其实"、"想象一下"等)在所有旁白中作为开头最多只能出现1次 9. 不要形成任何隐藏的句式规律,每个分镜的开头要真正做到独立思考、自然表达 10. 检查你的输出:如果发现有任何词作为开头重复出现2次或以上,必须修改 11. 输出语言要求:严格按照用户输入的话题或主题的语种输出,如:用户输入的是英文,则输出的文案必须为英文,中文也是一样。 现在,请为话题创作 {n_storyboard} 个分镜的旁白。 ⚠️ 特别注意:写完后自查所有分镜的开头,确保没有重复使用同一个词或短语作为开头。 只输出JSON,不要其他内容。 """ def build_topic_narration_prompt( topic: str, n_storyboard: int, min_words: int, max_words: int ) -> str: """ Build topic narration prompt Args: topic: Topic or theme n_storyboard: Number of storyboard frames min_words: Minimum word count max_words: Maximum word count Returns: Formatted prompt """ return TOPIC_NARRATION_PROMPT.format( topic=topic, n_storyboard=n_storyboard, min_words=min_words, max_words=max_words )