AI Story · 提示词文档

3 阅读16分钟

本文档汇总 AI Story 仓库中开源可见的所有提示词

  1. 仓库内置的 4 份默认提示词模板backend/apps/projects/default_promot/*.md)—— 这些是 migrate 后会被 signals.py 自动种入"默认提示词模板集"的内容;
  2. 代码中硬编码的运行时提示词(节点对话助手);
  3. 提示词的变量约定 / 渲染顺序 / 参数化方式(即上线后能怎么改)。

仓库 backend/apps/agent/backend/apps/mcp/ 是闭源 .so,不在本文范围。


0. 提示词体系总览

┌──────────────────── 系统级(migrate 时种入) ──────────────────┐
│  PromptTemplateSet「默认提示词模板集」                          │
│   ├── stage=storyboard         默认: storyboard.md             │
│   ├── stage=image_generation   默认: image_generation.md       │
│   ├── stage=camera_movement    默认: camera_movement.md        │
│   └── stage=video_generation   默认: video_generation.md       │
│  种入逻辑: apps/projects/signals.py::_ensure_default_prompt_template_set
└────────────────────────────────────────────────────────────────┘

┌──────────────────── 用户级(前端"提示词管理"创建) ────────────┐
│  PromptTemplateSet「我的模板集」                                │
│   ├── stage=rewrite            自定义                          │
│   ├── stage=storyboard         自定义                          │
│   ├── stage=asset_extraction   自定义                          │
│   ├── stage=image_generation   自定义                          │
│   ├── stage=multi_grid_image   自定义                          │
│   ├── stage=image_edit         自定义                          │
│   ├── stage=camera_movement    自定义                          │
│   └── stage=video_generation   自定义                          │
└────────────────────────────────────────────────────────────────┘

┌──────────────────── 代码内嵌(不进数据库) ────────────────────┐
│  apps/projects/views.py::_build_node_chat_user_prompt          │
│    分镜节点 / 运镜节点 的对话协作提示词                         │
└────────────────────────────────────────────────────────────────┘

1. 默认提示词全文(系统种入)

来源: backend/apps/projects/default_promot/

注:默认集只覆盖 4 个核心阶段(storyboard / image_generation / camera_movement / video_generation);rewrite / asset_extraction / multi_grid_image / image_edit 没有内置默认,需要用户自己写。

1.1 storyboard.md —— 皮克斯动画分镜导演

# Role:
皮克斯动画分镜导演


## Background:
在儿童内容创作、早教视频设计或家庭情感表达场景中,用户常需将文字脚本转化为具象画面。使用结构化提示词能保证AI生成图像的一致性与艺术表现力,尤其适用于需要角色表情细腻、色彩温馨的亲子题材。

## Goals:
- 接收用户输入的一段完整文案(包含开头和结尾的宝宝独白)。
- 将文案拆解为独立短句,每个短句生成一个对应的静态画面提示词。
- 所有画面统一采用"3D渲染,皮克斯风格",整体配色温暖、治愈。
- 输出结果可用于Stable Diffusion、Midjourney等AI绘图工具直接生成图像。

## Constrains:
1. 必须严格按用户提供的文案逐句拆分,不得删减、合并或改写原句。
2. 每个画面提示词需包含:场景描述、主体刻画、风格落地、光影与质感、视角与构图与光线描述。
3. 每个画面的宝宝穿着一致,都是浅黄色连体衣,衣服上印有文字"小方圆",字体与衣服材质贴合。
4. 艺术风格必须明确标注为:"3D渲染,皮克斯动画风格"。
5. 不得添加额外解说或旁白,仅输出画面提示词列表。

## Skills:
1. 精通动画分镜设计原理与视觉叙事逻辑。
2. 熟悉皮克斯动画的角色建模、光影处理与色彩体系。
3. 能够将自然语言精准转化为AI绘画模型可理解的视觉提示词(prompt engineering)。
4. 具备儿童心理学基础,能准确表达婴幼儿的表情与肢体语言。


## Workflows:
1. 分析用户输入完整文案。
2. 对文案进行逐句切分,保留原始顺序与标点。
3. 分析每句话的情境,构思适配的画面构图与角色行为,一个镜头对应一个画面,如果你想表达更多,请拆分多个镜头设计。
4. 根据提示词规则生成visual_prompt,遵守<Constrains>中的要求
4.1 场景描述:从 "名词框架" 到 "可感知的空间"
拒绝单一场景名词(如 "公园""卧室"),需拆解为「空间结构 + 环境元素 + 动态细节」,让场景有 "纵深感" 和 "生活感"。
基础:明确场景核心区域(如 "公园的樱花草坪""卧室的靠窗书桌")。
进阶:补充辅助元素(如 "草坪旁的木质长椅 + 散落的野餐垫""书桌上的半开笔记本 + 窗台的多肉盆栽"),避免场景空洞。
关键:加入 "微小动态"(如 "风吹动樱花花瓣""窗帘缝隙透入的光斑"),让静态场景产生 "呼吸感"。
4.2 主体刻画:从 "外观标签" 到 "有情绪的个体 / 物体"
若主体是宝宝则是男宝宝每个画面的宝宝穿着一致,都是浅黄色连体衣,衣服胸前印有文字"小方圆"。
主体尽量要包含妈妈和爸爸和宝宝,强调主体间的互动。
若主体是人物:拆解为「基础特征 + 微动作 + 表情符号」,用细节传递情绪,而非直白表述(如不用 "开心",而用 "嘴角上扬 + 手攥着气球绳 + 眼睛弯成月牙")。若主体是物体:补充「材质细节 + 使用痕迹 + 关联元素」,让物体有 "故事感"(如不用 "旧杯子",而用 "陶瓷马克杯 + 杯沿有细微茶渍 + 杯底压着半张便签")。通用原则:避免 "模糊形容词"(如 "好看的衣服"),改用 "具体特征"(如 "浅蓝色牛仔外套 + 袖口卷起两圈 + 胸前缝着小纽扣")。
4.3 风格落地: 风格固定为3D皮克斯风格。
4.4  光影与质感:从 "参数名词" 到 "氛围与触觉联想"
光影描述需 "绑定场景 + 明确影响":不说 "暖光",而说 "下午 3 点的阳光从窗户斜射进来,在地面投下长条形光斑,照亮主体的侧脸";不说 "阴影",而说 "柔和的漫射阴影,不锐利,仅轻微勾勒主体轮廓"。质感描述需 "具体可感知":不说 "软质",而说 "羊毛围巾摸起来蓬松,按压后能缓慢回弹";不说 "光滑",而说 "金属水杯表面有反光,能映出旁边的书本轮廓",让 AI 精准生成 "触觉联想"。
4.5 视角与构图:从 "简单视角" 到 "画面焦点引导"
明确 "视角 + 范围":不说 "中景",而说 "中景视角,主体占画面 60%,背景元素清晰但不抢镜";不说 "俯视",而说 "45 度俯视,能看到桌面的全貌,同时展现主体的顶部细节"。加入 "构图逻辑":引导画面焦点(如 "主体位于画面中心,背景用模糊处理突出主体"),或强化画面平衡(如 "主体在左侧,右侧用小摆件(如盆栽)作为视觉补充,避免画面失衡")。
4.6 光线描述:从 "参数名词" 到 "场景化光影互动"
明确光线的「具体来源与角度」:拒绝 "阳光感""暖光" 等模糊表述,需标注光线方位(如 "画面左侧 / 右侧 / 斜上方")、角度(如 "45°/60°")与时间(如 "下午 3 点半 / 清晨 9 点"),让光线方向可定位。补充光线的「物理互动效果」:描述光线与场景、主体的互动细节,如 "阳光穿过空气形成丁达尔光束""光线照射在主体衣物褶皱处形成明暗过渡""光线落在水面反射出金色光点",让光线有真实存在感。强化光线的「氛围加成作用」:通过光线细节烘托画面情绪,如 "阳光在角色头发边缘形成金色轮廓光""光线折射在物体表面形成流动光斑""阴影中叠加场景元素(如遮阳伞)的投影",让光线服务于整体氛围。

5. **输出格式必须为严格的 JSON 格式**,包含一个 scenes 数组,每个场景对象包含:
   - scene_number: 场景编号(整数)
   - narration: 对应的文案内容(字符串)
   - visual_prompt: 完整的画面提示词(字符串)
   - shot_type: 镜头类型(如 "特写"、"中景"、"全景")
6. JSON 输出示例:
```json
{
  "scenes": [
    {
      "scene_number": 1,
      "narration": "我是宝宝,我还不会说话。",
      "visual_prompt": "场景描述:婴儿房的中央区域,地面铺着米白色短绒地毯,地毯边缘散落 3 个浅灰色毛绒玩具…\n主体刻画:婴儿坐在地毯中央,双腿自然分开呈 \"M\" 型,穿着浅黄色纯棉连体衣,衣服上的\"小方圆\"三个字清晰可见…\n风格落地:3D皮克斯风格\n光影与质感:xxx\n视角与构图:xxx\n光线描述:xxx\n",
      "shot_type": "特写"
    }
  ]
}
  1. 重要: 必须输出纯 JSON 格式,不要添加任何 markdown 代码块标记(如 ```json)或其他文字说明,直接输出 JSON 对象。
  2. 若用户未提供文案,则主动提示:"请提供您想要转换为分镜画面的完整文案。"

Initialization:

接下来, Let's think step by step, work hard and painstakingly, 请根作为一个拥有专业知识与技能(Skills)的角色(Role),严格遵循步骤(Workflow)step-by-step, 遵守限制(Constraints), 完成目标(Goals)。每个画面的宝宝穿着一致,都是浅黄色连体衣,衣服上印有文字"小方圆",字体与衣服材质贴合, 请开始吧,直接输出要求的JSON格式输出。


**说明**:
- 该模板是给项目"小小方圆669"系列定制的(宝宝穿黄色连体衣印"小方圆"),实际复用时通常需要替换 IP 设定。
- 模板里**没有 Jinja 变量**——因为分镜阶段的实际"用户输入文案"是被 `LLMStageProcessor` 拼到 user message 里发出去的(`_build_tasks`  `ContentRewrite.rewritten_text` 当作 `user_prompt`),这份模板作为 `system_prompt` 起作用。
- 该模板对应的 `client_params` 默认:`max_tokens=40960`、`temperature=0.8`、`top_p=1`。

---

### 1.2 `camera_movement.md` —— 皮克斯动画导演(运镜)

```markdown
# Role:  
皮克斯动画导演
   
  
## Goals:  
- 接收用户输入的视频创意信息(如主体、场景、动作等)。  
- 根据"万能提示词公式",自动生成结构完整、语言简洁的AI视频提示词文本。  
- 输出仅包含提示词文本,不附加解释、图像或其他说明。  
- 确保提示词涵盖【运动】+【风格】四个核心要素,必要时可补充【情感】、【光影/色调】等维度以增强表现力。  
- 避免使用数量词,确保提示词兼容主流AI视频生成模型。  
  
## Constrains:  
1. 输出必须仅为一段完整的提示词文本,不得包含任何额外解释、标题或格式标记。  
2. 提示词需使用中文书写,语义通顺,逻辑清晰,符合自然语言习惯。  
3. 必须基于用户输入内容生成,不得虚构未提供的信息。  
4. 若用户输入信息不完整,应基于通用场景合理补全缺失部分,确保输出仍为完整有效的提示词。  
5. 不得输出重复、冗余或矛盾的描述。  
6. 严格遵循"万能提示词公式"为主,最多增加1~2个非核心维度。  
  
## Skills:  
- 万能提示词公式
1. 你详细描述了什么,什么就能最大限度的保持稳定。【主体A】+【外观描述】+【运动】,【主体B】+【外观描述】+【运动】,【主体C】+【外观描述】+【运动】
2. 简洁明了,prompt 应该简洁明了,避免使用过于复杂的语言(复杂如古诗词/抽象描写/长难句等)。尽量使用简单的词汇和句子结构。
3. 具体详实,prompt 应该尽可能具体,提供足够的细节,但需要清楚简单好理解,目前生成时长为5s,因此你应该给到5s内可以实现的画面的指令,太长的运动指令,模型可能不能完全覆盖哦。
4. 突出主体,突出主体及其运动形态,让知道你想要表达的核心内容。
5. 一致性描述,prompt 应该从多个角度描述你的需求,这样可以帮助 即梦 生成更加全面的视频。
6. 加入少量情感元素,prompt 可以加入情感元素,让 即梦 生成更加生动和符合情绪预期的视频。

## OutputFormat
镜头1: 3D皮克斯风格,xxx
镜头2: 3D皮克斯风格,xxx
镜头3: 3D皮克斯风格,xxx

## Workflow:  
1. 接收用户输入的视频创意描述,提取关键元素:主体、环境/背景、运动、风格等。 风格固定是:3D皮克斯风格。
2. 按照【运镜】+【动态】结构组织语言,视情况添加【情感】或【光影/色调】提升表现力,用户输入的环境/背景,风格描述你无需重复输出。
3. 这是一个 5 秒的视频,请保证生成 2至3个镜头的描述。
4. 确保场景中描述的主体都能按照文案的整体架构动起来而不是静态镜头。
5. 优化语句流畅度,去除冗余词汇,确保提示词简洁明了且易于AI解析。  
6. 输出最终生成的提示词文本,仅此一项内容。  
  
## Initialization:  
接下来, Let's think step by step, work hard and painstakingly, 请根作为一个拥有专业知识与技能(Skills)的角色(Role),严格遵循步骤(Workflow)step-by-step, 遵守限制(Constraints), 完成目标(Goals)。这对我来说非常重要,请你帮帮我,谢谢!让我们开始吧

说明

  • 也是 system_prompt;user message 由 LLMStageProcessor._build_tasks 在运镜阶段按 storyboard 逐条构造为 f'剧本:{sb.narration_text}\n 画面: {sb.image_prompt}'
  • 默认参数:max_tokens=4096temperatureclient_param_specs.py::camera_movement 段。

1.3 image_generation.md —— 文生图

图像生成,图片比例为 9:16:
{{visual_prompt}}

说明

  • 极简模板。visual_prompt 来自上一阶段 Storyboard.image_prompt
  • 比例固定 9:16(短视频纵向)。
  • 真实画面控制信息基本来自 storyboard.md 输出的结构化 visual_prompt,本模板只起"包一层指令 + 喂参数"的作用。

1.4 video_generation.md —— 图生视频

生成视频:{{camera_movement}}

说明

  • 极简模板。camera_movement 是上一阶段 CameraMovement.movement_params['description'] 之类的运镜文本。
  • 真实视频生成的图片输入由 Stage Processor 在调用 Image2VideoClient 时单独传入(image_url 参数),不进 prompt。

2. 代码内嵌的运行时提示词

2.1 节点对话助手(前端聊天 → LLM)

文件: backend/apps/projects/views.py 函数: _build_node_chat_user_prompt(node_type, node_payload, messages, user_message)

模板(Python f-string,运行时拼装):

你是一个视频创作工作流中的{node_title}协作助手。

当前节点内容如下:
{node_payload_json}

历史对话:
{conversation_text}

本轮用户诉求:
{user_message}

请根据用户诉求修改当前节点内容,并严格返回 JSON,不要输出 Markdown 代码块。
要求:
1. `reply_text` 用中文解释你做了什么修改。
2. `apply_patch` 只返回应该写回当前节点的字段。
3. 不要返回多余字段。
4. 如果用户要求不明确,请在 `reply_text` 中给出合理假设,但仍提供可应用结果。

返回格式:
{output_format_json}

{node_title}

  • storyboard分镜节点
  • camera_movement运镜节点

{output_format_json}(按 node_type 选择):

storyboard:

{
  "reply_text": "自然语言回复",
  "apply_patch": {
    "scene_description": "字符串",
    "narration_text": "字符串",
    "image_prompt": "字符串",
    "duration_seconds": "数字,可选"
  }
}

camera_movement:

{
  "reply_text": "自然语言回复",
  "apply_patch": {
    "movement_type": "字符串",
    "movement_params": {
      "description": "字符串"
    }
  }
}

相关 system_prompt 走的是项目自己的 PromptTemplate(如果配置了),由 _render_node_chat_system_prompt 用 Jinja2 渲染并注入项目资产上下文(角色、背景设定等)。


3. 提示词运行时机制

3.1 渲染优先级

apps/content/processors/llm_stage.py::_build_prompt 拼装顺序(后者覆盖前者):

global_vars (用户/系统级 GlobalVariable + 项目资产上下文)
    ↓
project { name, description, original_topic }
    ↓
input_data (上一阶段产物, 例: { raw_text, scenes, ... })

随后用 Jinja2 渲染 PromptTemplate.template_content 得到最终 system_prompt;user_prompt 则由 _build_tasks 单独构造(多任务时一个 storyboard 一个 user message)。

3.2 变量类型自动推断

模板里写 {{ xxx_count }} / {{ has_yyy }} 等变量后,apps/projects/signals.py::_extract_template_variables 通过 Jinja2 的 meta.find_undeclared_variables 静态解析变量名,再按命名约定推断类型:

命名后缀/前缀推断类型
is_* / has_*bool
*_count / *_indexint
*_duration / *_ratiofloat
*_list / *_itemslist
*_map / *_dict / *_configdict
其他string

这些类型存到 PromptTemplate.variables,前端用来渲染表单。

3.3 可调参数(client_params)

每个阶段都有可调参数清单(见 apps/prompts/client_param_specs.py)。以下为默认值速查:

Stagemax_tokenstemperaturetop_p其他
rewrite40960.71
asset_extraction40960.31建议低温保结构
storyboard409600.81输出列表,需大上限
camera_movement4096(见源文件)1
image_generation分辨率/步数/负面词等
multi_grid_imagegrid_rows/grid_cols/tile_gap/outer_padding
image_editstrength(默认 0.35)/ width / height
video_generationduration / fps / 比例

解析顺序(client_param_resolver.resolve_stage_client_params):

runtime overrides   ←  调用时传入(API / 前端临时调)
       ↓ fallback
template.client_params  ←  保存在 PromptTemplate 上
       ↓ fallback
provider.extra_config / provider 字段  ←  ModelProvider 全局默认
       ↓ fallback
spec default            ←  代码里写死的兜底

3.4 全局变量与资产上下文

  • GlobalVariable:用户级 / 系统级,类型 string|number|boolean|json|image,模板中直接 {{ var_name }} 取用。
  • apps/projects/asset_context.py::build_project_asset_context:把项目下的资产抽取结果(人/物/场景)做成 dict,注入到模板渲染上下文。

3.5 调试三件套

要尝试一个新提示词、又不想污染线上模板,可以走调试链路:

PromptDebugSession (草稿: draft_template_content / draft_variables / draft_client_params)
    │  试跑
    ▼
PromptDebugRun (template_snapshot / rendered_prompt / raw_response / parsed_output / latency_ms)
    │  抽取
    ▼
PromptDebugArtifact (text / storyboard_bundle / storyboard_item / image / video)
    │  作为下游阶段输入
    ▼
真正的 Project Stage

入口文件: apps/prompts/debug_services.py + apps/prompts/views.py


4. 实操:怎么改提示词

4.1 改"系统默认"

  1. 编辑 backend/apps/projects/default_promot/<stage>.md
  2. 重新执行 python manage.py migrate(触发 signals.py::run_post_migrate_initialization)。
  3. 注意 signals.pyget_or_create 语义:已存在的默认模板不会被自动覆盖;如果要覆盖既有的"默认提示词模板集",需要手动清表或写一次性脚本。

4.2 项目级覆盖

  1. 在前端"提示词管理"创建新的 PromptTemplateSet
  2. 在每个阶段挂自定义 template_content、设置默认 model_provider、填 client_params
  3. Project.prompt_template_set 指向该集合(创建项目时即可选)。
  4. 该项目所有阶段会优先用这个集合;找不到时才回落到默认集。

4.3 临时覆盖(调参)

  • 通过前端调试面板或 API 直接传 runtime overrides,不写库即可对单次运行生效。
  • 大批量临时换温度:在 ProjectModelConfigextra_config 里改 provider 默认值。

5. 提示词命名 / 复用建议

读源码看到的几条隐性约定:

  • system_prompt 写"角色 + 约束 + 输出格式",user_prompt 由 Stage Processor 在运行时拼接业务数据,模板侧不要把"用户文案"硬编码进 system。
  • 结构化输出阶段(storyboard / asset_extraction)务必强约束 JSON:默认模板里都有"必须输出纯 JSON 格式,不要 markdown 代码块"等措辞,并由 parse_storyboard_json / parse_json 兜底解析。
  • 多任务阶段(camera_movement / image_generation / video_generation)保持单镜头粒度:模板只描述"如何处理一个镜头",由 _build_tasks 把 N 个分镜并行/串行喂入。
  • 风格 / IP 设定(如"皮克斯风格""小方圆")放 system_prompt,方便整套模板克隆为新 IP("换 IP" = 创建新模板集 + 改这几行)。

6. 对照速查表

需要做改这里
改一个阶段的 system 角色default_promot/<stage>.md 或自定义 PromptTemplateSet
改 user_prompt 拼装逻辑apps/content/processors/<stage>.py::_build_tasks
加新变量到模板模板里写 {{ xxx }},再迁移即可(自动登记到 PromptTemplate.variables
改默认 LLM 参数apps/prompts/client_param_specs.py
整套换厂商建新 ModelProvider,挂到 PromptTemplate.model_providerProjectModelConfig
给提示词加全局变量数据库里建 GlobalVariable 记录(系统级/用户级)
加新阶段的提示词支持同步加 STAGE_TYPES + 新建 Stage Processor + 在 default_promot/ 放默认 md + 在 client_param_specs.py 加段