本文回答:ai写短剧剧本怎么做——输入 JSON 放哪些字段(人物状态、场戏清单、集末钩子),提示词怎么锁死输出格式,11 条能由程序判定的校验规则各查什么、怎么判,校验不通过怎么只回传规则号和位置做定点返修,以及写完一集怎么把状态增量回写成下一集的输入。
ai写短剧剧本,要让每集格式稳定、前后不打架,可以分三步做:先把人物当前状态、本集场戏清单和集末钩子写成一份输入 JSON;再在提示词里锁死输出格式(场头、【人物】行、动作行、对白行);写完用 11 条能由程序判定的规则查场头字段、称呼一致和单场篇幅,不合格的只把出错位置交回模型返修。程序查得了格式,查不了好不好看,人读那一遍省不掉。
结构化输入是把一集剧本的写作依据(谁在场、处于什么状态、分几场、每场推进什么、落在什么钩子上)写成固定字段的数据:模型照这些字段写,程序照同一组字段查。
ai短剧剧本怎么写?几种做法的输入和输出
| 做法 | 要喂进去什么 | 哪几步自己做 | 拿回来的是 |
|---|---|---|---|
| 对话大模型辅助 | 一段自然语言要求 + 手贴的前情 | 记前情、查格式、查连贯 | 一集正文,格式和称呼每次可能不同 |
| 结构化提示 + 程序校验(本文) | 输入 JSON + 输出格式约束 | 定场戏清单、维护 JSON、人读一遍 | 格式固定的正文 + 违规清单 |
| 画布 / 节点工作流 | 自己搭的节点链 | 搭流程、调节点 | 取决于搭出来的流程 |
| AI 视频产线 | 一句话想法或已有剧本 | 关键节点确认、审稿 | 分集剧本,可接着往设定图、成片走 |
输入 JSON 放哪些字段?人物状态、场戏清单、集末钩子
例子是虚构的都市悬疑短剧《夜班药房》:药师沈禾发现一张手写处方,签名的医生半年前已经去世。现在写第 3 集。
{
"episode": 3,
"previously": "沈禾发现处方签名医生已去世,拍了照",
"cast": [
{
"name": "沈禾", "state": "手写处方在她白大褂口袋里", "knows": ["签名医生已去世"], "aliases_in_dialogue": ["小沈"]},
{
"name": "顾屿", "state": "医药代表,不知道沈禾拍了照", "knows": [], "aliases_in_dialogue": ["顾经理"]},
{
"name": "何姐", "state": "药房店长", "knows": [], "aliases_in_dialogue": []}
],
"props": [{
"name": "手写处方", "aliases": ["那张纸", "单子"], "holder": "沈禾"}],
"threads": ["签名医生是怎么死的"],
"generic_roles_allowed": ["顾客"],
"scenes": [
{
"no": 1, "location": "药房", "int_ext": "内", "time": "夜", "cast": ["沈禾", "顾客"], "beat": "拿药间隙放大处方照片,对上医生的去世日期"},
{
"no": 2, "location": "药房", "int_ext": "内", "time": "夜", "cast": ["沈禾", "顾屿"], "beat": "顾屿来问处方,沈禾谎称已交给店长"},
{
"no": 3, "location": "药房仓库", "int_ext": "内", "time": "夜", "cast": ["沈禾", "何姐"], "beat": "何姐开口就要处方,沈禾说已经扔了"},
{
"no": 4, "location": "药房门口", "int_ext": "外", "time": "夜", "cast": ["沈禾"], "beat": "集末钩子", "allow_no_dialogue": true}
],
"ending_hook": "电动车座上压着一张新处方,签的是沈禾自己的名字",
"limits": {
"max_chars_per_scene": 125}
}
cast只放本集出场的人。红果短剧创作服务平台「短剧编剧第一课」里,骏乐影视负责人吴文尧以 80 集的主流短剧为例:「在角色总量上,建议核心人物3-5人,其余角色不超过20人」;实操上,一集的输入更该收窄。aliases_in_dialogue是别人嘴里的叫法,只许出现在台词里;说话人和动作主语一律用name。scenes由人定,模型只负责写成正文。max_chars_per_scene是本文的示例算法:梨花颜在中国作家网《微短剧剧本创作如何构思与落地》里写「微短剧则是1-2分钟,500字左右为一集」,本例 4 场,平均每场约 125 字;按自己的单集时长和场数调。
这份 JSON 每集都要更新。这一步也可以交给产线自动做,比如猫斯卡(AI 视频生产系统):档案秘书建故事档案,每批写完自动回填、续写前自动调取;它解决的是前后状态对不上,故事好不好、爽点够不够狠,仍要人判断。
ai短剧剧本提示词:怎么把输入和输出格式约束拼成一份模板?
{
{INPUT_JSON}} 处整段贴上面的 JSON:
你是竖屏短剧编剧。INPUT 是本集的全部依据,INPUT 以外的前情一律当作不存在。
【INPUT】
{
{INPUT_JSON}}
【写法】
1. 按 scenes 的顺序和数量写,不加场、不并场、不加回忆戏。
2. 每场只完成该场 beat;最后一场以 ending_hook 收尾。
3. 少写心理,多写行为;内心活动用动作和表情写出来,不写独白。
4. 能用对白交代的信息,不用画外音。
5. 说话人和 △ 动作行只用 cast[].name,道具只用 props[].name;别名只能出现在别人的台词里。
6. 不新增有名字的人物,路人只用 generic_roles_allowed 里的叫法。
7. 每场正文不超过 max_chars_per_scene 个字。
【输出格式】只输出剧本,不输出解释,不用 Markdown 符号:
第{episode}集 {集标题}
场{no}|{location} {int_ext} {time}
【人物】{本场出场人物,顿号分隔}
△ {动作}
{人物名}:{台词}
第 3、4 条取自同一系列编剧课:吴文尧强调「少写'心理',多写'行为'」;燕北工作室负责人燕北:「能通过对白表达的,绝不用画外音;能用表演呈现的内心活动,绝不用独白」。
短剧剧本格式怎么交给程序查?11 条校验规则
输出格式锁死以后,短剧剧本格式就能逐行解析:按场头行切成场,再逐场比对输入 JSON。「怎么判」一栏都能直接写成代码。
| 规则号 | 查什么 | 怎么判 | 回给模型的返修指令 |
|---|---|---|---|
| F01 | 集标题行 | 第一行匹配 ^第(\d+)集 \S+,数字等于 episode |
重写第一行 |
| F02 | 场头格式 | 以「场」开头的行匹配 ^场(\d+)|(\S+) ([内外]) ([日夜])$ |
按格式重写场头 |
| S01 | 场数 | 解析出的场数等于 scenes 长度 | 按 scenes 补场或删场 |
| S02 | 场头与清单一致 | 场号、地点、内外、日夜逐项等于 scenes[i] | 改回清单值 |
| S03 | 有【人物】行 | 场头下一行以「【人物】」开头 | 补【人物】行 |
| S04 | 出场人物一致 | 【人物】行按顿号拆开的集合等于 scenes[i].cast | 按清单改 |
| D01 | 有对白 | 至少一行「X:」对白,allow_no_dialogue 为 true 的场跳过 | 补对白 |
| N01 | 说话人合法 | 冒号前的名字属于 cast[].name 或 generic_roles_allowed | 换成正名,或删掉新增人物 |
| N02 | 动作行不用别名 | △ 行不含任何 aliases_in_dialogue、props[].aliases | 换成正名 |
| P01 | 无占位 | 不含「未完待续」「此处省略」「(略)」 | 把省略处写完 |
| L01 | 单场篇幅 | 除【人物】行外的字数不超过 max_chars_per_scene | 删到上限内,保留 beat 那句 |
N01 顺带拦住画外音:「沈禾(画外音):」冒号前的字符串不在名单里,直接不通过。
称呼卡这么死,是因为下游还要写视频提示词:据火山方舟《Doubao Seedance 2.0 系列提示词指南》,「对于已提前定义主体的场景,每次提到主体时,都应使用同一标签」,剧本里一人两种叫法,逐镜写提示词时就得返工。
校验不通过怎么返修?只回传规则号和位置
校验脚本把不通过项整理成返修单,连同初稿交回模型。第 3 集初稿跑出两条:
{
"fix_only": [
{
"rule": "N02", "scene": 2, "line": "△ 小沈把药袋推回柜台", "fix": "主语改成「沈禾」"},
{
"rule": "L01", "scene": 3, "fix": "删到上限内,保留何姐要处方、沈禾说已经扔了"}
],
"keep": "其余行一字不动,按原格式输出全集"
}
返修稿重跑全部 11 条:删字可能连带删掉【人物】行或对白。实操上建议给返修设轮数上限,到上限还不过就人工改;同一场反复卡在 S 类规则,多半是场戏清单本身排得不合理,该回头改输入。
规则全过以后,人读一遍查程序判不了的:吴文尧说短剧每分钟都要有「看点」——可以是情绪爆发、剧情反转,或关键信息推进,照这个找有没有平掉的段落;台词照燕北的建议大声读,「试着把一段台词砍掉三分之一,看看核心信息是否还在」;内容对照《微短剧发展管理办法》(国家广播电视总局令第16号)第二十五条不得载有的十一项内容过一遍。
ai短剧剧本怎么制作下一集?把本集结果回写进输入
第 4 集的输入在第 3 集定稿上做增量。提示词末尾加一句:「输出剧本后,另起一行输出 STATE_DELTA,只列本集结束时有变化的人物和道具,JSON 格式」。第 3 集对应的增量大致是:
{
"cast": [
{
"name": "沈禾", "state": "对顾屿说处方已交店长,对何姐说已经扔了;收到签着自己名字的新处方", "knows_add": ["何姐知道处方的事"]},
{
"name": "何姐", "state": "向沈禾要处方,没要到"}
],
"threads_add": ["谁冒签了沈禾的名字"]
}
增量也是模型写的,尤其 knows_add 容易多写,要对着定稿核过再并进主 JSON,换上第 4 集的场戏清单,就是下一轮输入。
常见问题
让模型直接输出 JSON 格式的剧本,不是更好校验吗?
能校验,但不建议当最终格式。实操上整集正文塞进 JSON 字符串,人读、人改都不方便。保留文本格式、靠固定行首(场、【人物】、△、名字加冒号)切分,程序和人都看得懂。
写到二十几集,输入 JSON 越来越长怎么办?
主 JSON 存全剧,喂给模型的只是本集切片:cast、props 只放本集用到的,已收掉的线移出 threads,previously 只留上一集结尾一句话。