[P0][后端] 爆款视频v1.2 - Prompt模板系统(核心资产) #2040

Open
opened 2026-09-25 21:30:12 +08:00 by xiaoxia · 1 comment
Owner

父工单:#2038

概述

实现爆款视频v1.2的Prompt模板系统——这是本项目核心资产,直接决定出片质量。5套Prompt模板 + DB配置化 + seed脚本。

5套Prompt模板

所有Prompt输出严格JSON格式,每个模板带 example_output 示例,LLM调用时 response_format={"type":"json_object"}。

1. 图片多模态分析Prompt(VLM)

  • 输入:图片URL数组(1-9张)+ industry上下文
  • 模型:豆包VLM(ai_service.call_vision())
  • 输出(JSONB → image_analysis):
    {
      "products": [{"name":"","features":"","position":"main/secondary","image_index":0}],
      "colors": [{"hex":"","name":"","coverage":0.3}],
      "people": {"has_person":true,"count":1,"gender":"","age_range":"","pose":"","expression":""},
      "mood": "",
      "visible_text": [{"text":"","position":""}],
      "scene": "",
      "quality": {"resolution":"","lighting":"","composition":"","blur":false},
      "key_selling_points": [""]
    }
    

2. 【v1.2新增】用户文案意图解析Prompt(LLM)

  • 输入:user_copy_text(用户原始输入,可能是关键词/碎碎念/短句/不完整句子)+ image_analysis
  • 输出(JSONB → intent_result):
    {
      "intent_summary": "一句话概括用户想表达的核心意图(展示给用户确认)",
      "core_messages": [
        {"text":"核心信息点","must_keep":true,"confidence":0.95}
      ],
      "personal_brands": [
        {"text":"用户提到的具体事实(品牌名/价格/人名/地名/时间/产品名等)","category":"brand|price|person|place|time|product"}
      ],
      "emotion_tone": "",
      "missing_info": ["AI认为需要补充但缺失的信息点(用于后续文案生成时合理推断)"]
    }
    
  • 关键约束:
    • personal_brands 中的事实信息原样引用,不改字不改义
    • core_messages 中 must_keep=true 的点在user_primary模式下必须原封不动保留
    • intent_summary 用用户语言风格写,口语化,30字以内

3. 文案融合生成Prompt(LLM)

  • 输入:image_analysis + intent_result(可选,ai_full模式下为空)+ industry + target_customer + persona + viral_structure + marketing_purpose + duration

  • 输出(JSON):

    {
      "title": "",
      "hook": "开头3秒钩子(5-15字)",
      "body_points": [{"point":"","elaboration":"","image_index":0}],
      "cta": "行动号召",
      "script_segments": [{"text":"配音文案","duration_sec":5,"image_index":0}],
      "word_count": 0,
      "estimated_duration": 0
    }
    
  • 三档融合指令段(根据fusion_level注入不同system prompt片段):

    ai_full:

    你是资深短视频编导。用户只提供了产品图片,没有给出具体文案方向。请根据图片内容和营销参数,自由发挥创作完整的爆款短视频文案。充分挖掘产品卖点,使用爆款结构,抓人眼球。

    ai_polish(推荐):

    你是用户的文案助理。用户已经写了草稿/关键词/碎碎念,表达了他想讲的核心意思,但表达不完整、不够吸引人。你的任务是:以用户的意思为主,保留他想表达的所有核心信息点,在此基础上润色扩写、调整语序、增加衔接、优化表达,让文案更流畅更有吸引力。绝对不能改变用户想表达的核心意思,不能把用户的观点换成相反的,不能添加用户没提到的产品卖点。 用户提到的品牌名、价格、人名、具体事实必须原样保留。

    user_primary:

    你是文案润色助手。用户已经写好了明确的文案,这是他最终想表达的内容。你的任务是最小化修改:只做必要的错别字修正、标点调整、语句通顺度优化,以及添加必要的衔接词让口播更自然。用户的核心句子、关键表述、事实信息一律不改。如果用户文案本身已经很好,直接返回,不要为了改而改。personal_brands中的事实信息必须逐字保留。

4. 编导级分镜Prompt(LLM)

  • 输入:文案JSON + image_analysis + duration目标
  • 输出(JSONB → storyboard):
    {
      "clips": [{
        "image_index": 0,
        "transition": "fade|cut|zoom_in|slide_left|dissolve|wipe",
        "zoom": "in|out|null",
        "ken_burns": {"start":[0,0],"end":[100,100],"ease":"linear"},
        "duration_sec": 3,
        "voice_text": "对应配音文本",
        "subtitle_text": "字幕文本(可与voice_text一致或精简)",
        "bgm_note": "此片段BGM情绪标记"
      }]
    }
    
  • 约束:clips总duration≈目标duration±2秒;image_index必须在上传图片范围内;首图(marked as cover)必须出现在第一个clip。

5. 文案审核Prompt(LLM)

  • 输入:生成的文案JSON + fusion_level + intent_result(若有)
  • 6维度审核:
    1. 违规词(平台禁用词、敏感词)
    2. 夸大承诺("包治百病""100%有效""保证赚钱"等)
    3. 事实一致性(不编造价格/数据/认证/用户未提到的产品特性)
    4. 用户意图保留(ai_polish/user_primary模式下,core_messages must_keep=true的点是否都保留了)
    5. 结构完整性(hook/body/cta都有)
    6. 语气人设(是否符合选择的persona语气)
  • 输出:
    {
      "passed": true/false,
      "issues": [{"dimension":"","severity":"error|warning","description":"","location":"hook|body_points[0]|cta"}],
      "rewrite_suggestions": ["具体修改建议"]
    }
    
  • 不通过时自动重写1次(传入rewrite_suggestions),2次不通过返回前端让用户确认。

Prompt设计原则

  1. modular_cot思维链:人设/客户→卖点→结构→情绪→CTA,分步骤生成,不要一步到位
  2. global_constraints硬约束自动注入(每个文案生成Prompt都带):
    • 时间真实:不编造"2024年最新"等可能过时的表述
    • 不承诺效果:不写"保证""一定""100%"等
    • 不编造价格:除非用户明确给出
    • 不编造认证/奖项/销量数据
    • 符合广告法
  3. negative_prompt反套路化:避免"家人们谁懂啊""绝绝子""宝子们"等烂大街词,避免固定模板化开头
  4. 三档融合强度各有独立指令段,确保user_primary模式下用户原话核心表达不被AI改掉
  5. personal_brands事实信息原样引用,不改字不改义
  6. 每个Prompt末尾都加:"只输出JSON,不要输出任何解释、markdown标记、```json包裹。"

DB配置化

  • 新增表 viral_video_prompt_templates:id, name, prompt_type(image_analysis|intent_parsing|copy_fusion|storyboard|review), version, system_prompt(TEXT), user_prompt_template(TEXT), example_output(JSONB), is_active, created_at, updated_at
  • Alembic migration
  • 初始数据seed脚本 scripts/seed_viral_video_prompts.py,将5套Prompt模板写入DB
  • 运营后台可在不重启服务的情况下修改Prompt(热加载,可加简单缓存+版本号)
  • Orchestrator调用时从DB读取 is_active=true AND version=latest 的模板

文件位置

  • apps/worker/viral_video/prompts.py — Prompt模板默认值(作为fallback和seed数据源)
  • apps/worker/viral_video/prompt_loader.py — DB加载+缓存逻辑
  • scripts/seed_viral_video_prompts.py — seed脚本
  • apps/worker/viral_video/tests/test_prompts.py — Prompt单测(验证三档融合输出差异、JSON格式、约束遵守)

验收标准

  1. 5套Prompt在LLM调用中返回合法JSON(格式校验测试100%通过)
  2. 三档融合强度实测输出有明显差异:
    • ai_full:完全AI发挥,不出现用户没说的内容约束
    • ai_polish:保留用户核心意思,语言更流畅
    • user_primary:用户原句核心表达逐字保留,仅做最小化修改
  3. personal_brands事实信息在所有档位都原样保留
  4. 审核Prompt能正确识别违规词/夸大承诺/意图丢失
  5. DB配置化:运营后台修改Prompt后新任务生效(无需重启)
  6. seed脚本可重复执行(幂等)
  7. 负面词测试:生成文案不含"家人们谁懂啊"等禁用套路词
父工单:#2038 ## 概述 实现爆款视频v1.2的Prompt模板系统——这是本项目**核心资产**,直接决定出片质量。5套Prompt模板 + DB配置化 + seed脚本。 ## 5套Prompt模板 所有Prompt输出**严格JSON格式**,每个模板带 `example_output` 示例,LLM调用时 `response_format={"type":"json_object"}`。 ### 1. 图片多模态分析Prompt(VLM) - **输入**:图片URL数组(1-9张)+ industry上下文 - **模型**:豆包VLM(`ai_service.call_vision()`) - **输出**(JSONB → `image_analysis`): ```json { "products": [{"name":"","features":"","position":"main/secondary","image_index":0}], "colors": [{"hex":"","name":"","coverage":0.3}], "people": {"has_person":true,"count":1,"gender":"","age_range":"","pose":"","expression":""}, "mood": "", "visible_text": [{"text":"","position":""}], "scene": "", "quality": {"resolution":"","lighting":"","composition":"","blur":false}, "key_selling_points": [""] } ``` ### 2. 【v1.2新增】用户文案意图解析Prompt(LLM) - **输入**:`user_copy_text`(用户原始输入,可能是关键词/碎碎念/短句/不完整句子)+ `image_analysis` - **输出**(JSONB → `intent_result`): ```json { "intent_summary": "一句话概括用户想表达的核心意图(展示给用户确认)", "core_messages": [ {"text":"核心信息点","must_keep":true,"confidence":0.95} ], "personal_brands": [ {"text":"用户提到的具体事实(品牌名/价格/人名/地名/时间/产品名等)","category":"brand|price|person|place|time|product"} ], "emotion_tone": "", "missing_info": ["AI认为需要补充但缺失的信息点(用于后续文案生成时合理推断)"] } ``` - **关键约束**: - `personal_brands` 中的事实信息**原样引用,不改字不改义** - `core_messages` 中 `must_keep=true` 的点在user_primary模式下必须原封不动保留 - `intent_summary` 用用户语言风格写,口语化,30字以内 ### 3. 文案融合生成Prompt(LLM) - **输入**:`image_analysis` + `intent_result`(可选,ai_full模式下为空)+ industry + target_customer + persona + viral_structure + marketing_purpose + duration - **输出**(JSON): ```json { "title": "", "hook": "开头3秒钩子(5-15字)", "body_points": [{"point":"","elaboration":"","image_index":0}], "cta": "行动号召", "script_segments": [{"text":"配音文案","duration_sec":5,"image_index":0}], "word_count": 0, "estimated_duration": 0 } ``` - **三档融合指令段**(根据fusion_level注入不同system prompt片段): **ai_full**: > 你是资深短视频编导。用户只提供了产品图片,没有给出具体文案方向。请根据图片内容和营销参数,自由发挥创作完整的爆款短视频文案。充分挖掘产品卖点,使用爆款结构,抓人眼球。 **ai_polish**(推荐): > 你是用户的文案助理。用户已经写了草稿/关键词/碎碎念,表达了他想讲的核心意思,但表达不完整、不够吸引人。你的任务是:以用户的意思为主,保留他想表达的所有核心信息点,在此基础上润色扩写、调整语序、增加衔接、优化表达,让文案更流畅更有吸引力。**绝对不能改变用户想表达的核心意思,不能把用户的观点换成相反的,不能添加用户没提到的产品卖点。** 用户提到的品牌名、价格、人名、具体事实必须原样保留。 **user_primary**: > 你是文案润色助手。用户已经写好了明确的文案,这是他最终想表达的内容。你的任务是**最小化修改**:只做必要的错别字修正、标点调整、语句通顺度优化,以及添加必要的衔接词让口播更自然。**用户的核心句子、关键表述、事实信息一律不改**。如果用户文案本身已经很好,直接返回,不要为了改而改。personal_brands中的事实信息必须逐字保留。 ### 4. 编导级分镜Prompt(LLM) - **输入**:文案JSON + image_analysis + duration目标 - **输出**(JSONB → `storyboard`): ```json { "clips": [{ "image_index": 0, "transition": "fade|cut|zoom_in|slide_left|dissolve|wipe", "zoom": "in|out|null", "ken_burns": {"start":[0,0],"end":[100,100],"ease":"linear"}, "duration_sec": 3, "voice_text": "对应配音文本", "subtitle_text": "字幕文本(可与voice_text一致或精简)", "bgm_note": "此片段BGM情绪标记" }] } ``` - **约束**:clips总duration≈目标duration±2秒;image_index必须在上传图片范围内;首图(marked as cover)必须出现在第一个clip。 ### 5. 文案审核Prompt(LLM) - **输入**:生成的文案JSON + fusion_level + intent_result(若有) - **6维度审核**: 1. 违规词(平台禁用词、敏感词) 2. 夸大承诺("包治百病""100%有效""保证赚钱"等) 3. 事实一致性(不编造价格/数据/认证/用户未提到的产品特性) 4. **用户意图保留**(ai_polish/user_primary模式下,core_messages must_keep=true的点是否都保留了) 5. 结构完整性(hook/body/cta都有) 6. 语气人设(是否符合选择的persona语气) - **输出**: ```json { "passed": true/false, "issues": [{"dimension":"","severity":"error|warning","description":"","location":"hook|body_points[0]|cta"}], "rewrite_suggestions": ["具体修改建议"] } ``` - 不通过时自动重写1次(传入rewrite_suggestions),2次不通过返回前端让用户确认。 ## Prompt设计原则 1. **modular_cot思维链**:人设/客户→卖点→结构→情绪→CTA,分步骤生成,不要一步到位 2. **global_constraints硬约束自动注入**(每个文案生成Prompt都带): - 时间真实:不编造"2024年最新"等可能过时的表述 - 不承诺效果:不写"保证""一定""100%"等 - 不编造价格:除非用户明确给出 - 不编造认证/奖项/销量数据 - 符合广告法 3. **negative_prompt反套路化**:避免"家人们谁懂啊""绝绝子""宝子们"等烂大街词,避免固定模板化开头 4. **三档融合强度各有独立指令段**,确保user_primary模式下用户原话核心表达不被AI改掉 5. **personal_brands事实信息原样引用**,不改字不改义 6. 每个Prompt末尾都加:"只输出JSON,不要输出任何解释、markdown标记、```json包裹。" ## DB配置化 - 新增表 `viral_video_prompt_templates`:id, name, prompt_type(image_analysis|intent_parsing|copy_fusion|storyboard|review), version, system_prompt(TEXT), user_prompt_template(TEXT), example_output(JSONB), is_active, created_at, updated_at - Alembic migration - 初始数据seed脚本 `scripts/seed_viral_video_prompts.py`,将5套Prompt模板写入DB - 运营后台可在不重启服务的情况下修改Prompt(热加载,可加简单缓存+版本号) - Orchestrator调用时从DB读取 `is_active=true AND version=latest` 的模板 ## 文件位置 - `apps/worker/viral_video/prompts.py` — Prompt模板默认值(作为fallback和seed数据源) - `apps/worker/viral_video/prompt_loader.py` — DB加载+缓存逻辑 - `scripts/seed_viral_video_prompts.py` — seed脚本 - `apps/worker/viral_video/tests/test_prompts.py` — Prompt单测(验证三档融合输出差异、JSON格式、约束遵守) ## 验收标准 1. 5套Prompt在LLM调用中返回合法JSON(格式校验测试100%通过) 2. 三档融合强度实测输出有明显差异: - ai_full:完全AI发挥,不出现用户没说的内容约束 - ai_polish:保留用户核心意思,语言更流畅 - user_primary:用户原句核心表达逐字保留,仅做最小化修改 3. personal_brands事实信息在所有档位都原样保留 4. 审核Prompt能正确识别违规词/夸大承诺/意图丢失 5. DB配置化:运营后台修改Prompt后新任务生效(无需重启) 6. seed脚本可重复执行(幂等) 7. 负面词测试:生成文案不含"家人们谁懂啊"等禁用套路词
xiaoxia added the backendP0feature labels 2026-09-25 21:30:12 +08:00
Author
Owner

📌 v1.3升级补充(2026-09-26)

新增2套Prompt模板:

  1. VIDEO_STYLE_INTEGRATION_PROMPT(PRD 4.2.5节):将FFmpeg/OpenCV/librosa/VLM的结构化视频分析数据整合为style_guide JSON,输入shot_boundaries+camera_movements_raw+bpm_result+vlm_keyframes_desc+style_strength,输出完整style_guide(含style_name/avg_shot_duration/shot_count/camera_movements/transitions/color_palette/color_tone/color_filter/composition/lighting/pace/bpm/visual_keywords/ken_burns_direction_hint)
  2. STYLE_CONSTRAINT_MODULE_PROMPT(PRD ⑦.8节):分镜生成时拼入的风格约束模块,三档:
    • light:参考一下就行,灵活调整
    • medium:按风格拍,shots±2、运镜方向/滤镜/转场遵循
    • strict:1:1复刻运镜,shot_count/duration/ken_burns/transition严格匹配

文案生成Prompt拼装公式增加[🆕v1.3 镜头风格约束]模块(位置在[用户文案意图融合]之后)。

输出格式(4.5节)shots[]每项增加:

  • video_filter字段(none/warm_vintage/cool_fresh/high_contrast/soft_pastel/dramatic_cinematic)
  • ken_burns字段(zoom_in_slow/zoom_out_slow/pan_left_slow/pan_right_slow/zoom_in_medium/diagonal_push/static)
  • style_consistency顶层对象(has_style_reference/style_strength/style_name)

文案审核Prompt(4.4)增加第5审核维度"风格一致性"(5条校验规则,详见PRD)。
Prompt模板viral_video_prompt_templates表需增加prompt_type=video_style_integration和prompt_type=style_constraint_module两条记录。

## 📌 v1.3升级补充(2026-09-26) 新增2套Prompt模板: 1. VIDEO_STYLE_INTEGRATION_PROMPT(PRD 4.2.5节):将FFmpeg/OpenCV/librosa/VLM的结构化视频分析数据整合为style_guide JSON,输入shot_boundaries+camera_movements_raw+bpm_result+vlm_keyframes_desc+style_strength,输出完整style_guide(含style_name/avg_shot_duration/shot_count/camera_movements/transitions/color_palette/color_tone/color_filter/composition/lighting/pace/bpm/visual_keywords/ken_burns_direction_hint) 2. STYLE_CONSTRAINT_MODULE_PROMPT(PRD ⑦.8节):分镜生成时拼入的风格约束模块,三档: - light:参考一下就行,灵活调整 - medium:按风格拍,shots±2、运镜方向/滤镜/转场遵循 - strict:1:1复刻运镜,shot_count/duration/ken_burns/transition严格匹配 文案生成Prompt拼装公式增加[🆕v1.3 镜头风格约束]模块(位置在[用户文案意图融合]之后)。 输出格式(4.5节)shots[]每项增加: - video_filter字段(none/warm_vintage/cool_fresh/high_contrast/soft_pastel/dramatic_cinematic) - ken_burns字段(zoom_in_slow/zoom_out_slow/pan_left_slow/pan_right_slow/zoom_in_medium/diagonal_push/static) - style_consistency顶层对象(has_style_reference/style_strength/style_name) 文案审核Prompt(4.4)增加第5审核维度"风格一致性"(5条校验规则,详见PRD)。 Prompt模板viral_video_prompt_templates表需增加prompt_type=video_style_integration和prompt_type=style_constraint_module两条记录。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#2040