用 JSON 驯服 AI 生图:一次实验报告
一、起因:看到一篇有意思的文章
最近读到 fofr.ai 的 JSON 提示词教程,核心观点是:
用 JSON 结构化提示词,能让 AI 生图更精确、更可重复。
听起来很美好。但真的有用吗?
作为一个经常被 AI 生图气到抓狂的人,我决定实际测试一下。
二、实验设计
测试场景:
为一款日式 RPG 游戏生成主角立绘
-
需求:黑色长发祭司,神社背景,黄昏光线
-
风格:动漫水彩
-
用途:游戏角色设计
对比方法:
-
方法A:自然语言提示词(我平时的写法)
-
方法B:JSON 结构化提示词(按 fofr 的方法)
评估标准:
-
命中率(符合需求的图片占比)
-
耗时
-
可调整性(想改某个细节有多容易)
三、实验结果
方法A:自然语言(惨败)
我的提示词:
"A female shrine priest with long black hair, wearing traditional outfit, standing at a shrine during sunset"
结果:
-
生成数量:100 张
-
可用数量:5 张
-
命中率:5%
-
耗时:2 小时
实际生成效果(其中一张):

用自然语言生成的结果:虽然有些元素对了,但整体效果和预期有较大差距
失败原因:
-
前 10 张:头发是黑的,但不是短发就是双马尾
-
第 20 张:总算长发了,但场景跑到森林里了
-
第 35 张:神社有了,但主角变成金发
-
第 42 张:所有元素都对了,但光线是正午大太阳(不是我要的黄昏金光)
问题根源:
每个词都是模糊的。"长发"到底多长?"sunset"是什么时间、什么色温?AI 每次理解都不同,就像投骰子。
方法B:JSON 结构化(改善明显)
参考 fofr 的方法,我把需求拆解成 4 个字段:
{
"subject": "female shrine priest with long black hair, white miko outfit with red hakama, holding wooden staff",
"style": "anime watercolor",
"mood": "peaceful and sacred",
"lighting": "golden_hour side_light"
}
结果:
-
生成数量:10 张
-
可用数量:8 张
-
命中率:80%
-
耗时:15 分钟
实际生成效果(其中一张):

用 JSON 结构化提示词生成的结果:精确控制了光照、氛围、细节
对比一下:
左边(自然语言):光线、氛围、细节都不够精确
右边(JSON):每个参数都被锁定,结果更接近预期
改善原因:
-
golden_hour比 "sunset" 精确(日落前1小时,暖金色) -
side_light锁定了光线方向(不是顶光也不是背光) -
mood: "peaceful and sacred"影响了色调和细节密度
数据对比:
-
命中率提升:16 倍(5% → 80%)
-
时间效率提升:8 倍(120 分钟 → 15 分钟)
-
生成配额节省:90%
四、深入理解:为什么 JSON 有效?
问题的本质:自然语言太模糊了
你有没有想过,为什么你写得那么详细,AI 还是理解错?
因为每个形容词都是模糊的。
"日式 RPG 风格"——是《最终幻想》那种欧式奇幻混日式?还是《塞尔达传说》的卡通渲染?或者《女神异闻录》的都市暗黑风?1000 个人心里有 1000 种"日式 RPG"。
"长发"——及腰?披肩?还是到小腿的超长发?有刘海吗?直发还是卷发?扎起来还是散开?
"黄昏"——几点?夏天的黄昏还是冬天的?是橙红色的火烧云,还是淡紫色的暮光?
每一个形容词,都是一次投骰子。

左边是模糊的自然语言(混乱),右边是结构化的 JSON(有序)
一个更要命的误区:详细 ≠ 精确
很多人以为"写得够详细就能精确"。
错了。
这就像你去咖啡店点单,说:"给我来杯好喝的咖啡,不要太苦,也不要太淡,温度适中,最好有点奶味但别太腻。"
店员能做出你想要的吗?可能。但更可能的是——你喝到的和想象中差了十万八千里。
对比一下这个:"中杯美式,少冰,不加糖,额外加一份浓缩。"
哪个更能让你得到想要的结果?

精确的指令 vs 模糊的描述
JSON 为什么有效?
这里是关键认知:
自然语言是给人用的,JSON 是给 AI 用的。
AI 模型的训练数据里,有海量的 JSON 格式内容——配置文件、API 响应、数据库记录、代码片段。它见过无数次 "lighting": "golden_hour" 精确对应什么视觉效果。
用 JSON 提示词,就像用 AI 的母语跟它说话。理解偏差直线下降。
而且,JSON 不是编程。它就是填表格。
你不需要会写代码,只需要知道该填什么。
五、核心发现:4个字段就够了
fofr 的文章提到很多字段,但实际测试下来,这4个最关键:

Subject、Style、Mood、Lighting 构成了控制画面的核心要素
1. Subject - 主体
画什么。可以简单("cat")或详细(嵌套结构控制发型、服装、姿势)
基础写法:
{
"subject": "female priest"
}
详细写法:
{
"subject": {
"character": "female priest",
"hair": "long black hair, straight, waist-length",
"clothing": "traditional white shrine maiden outfit with red hakama",
"accessories": "wooden staff with paper talismans",
"pose": "standing upright, staff in right hand"
}
}
常见结构:
-
人物:demographics(年龄、性别)、face、hair、body、pose、attire
-
动物:species、breed、age、pose
-
物体:type、material、condition、placement
-
场景:location、time、weather
2. Style - 风格
决定画面看起来像什么:
常用类型:
-
艺术风格:watercolor(水彩)、oil painting(油画)、anime(动漫)、pixel art(像素)
-
技术风格:photorealistic(照片级)、3D render(三维渲染)、sketch(素描)
-
时代风格:retro 80s、art nouveau、cyberpunk
混合写法:
{
"style": "anime watercolor with soft edges"
}
你可以组合多个风格词,但有两个避坑原则:
-
不要超过 3 个(太多会互相冲突)
-
确保它们不矛盾(比如"photorealistic anime"就很矛盾)
3. Mood - 氛围
画面的情绪和感觉。这个很容易被忽略,但影响巨大。
常用词:
-
peaceful(平和的)
-
energetic(有活力的)
-
mysterious(神秘的)
-
dramatic(戏剧化的)
-
melancholic(忧郁的)
-
nostalgic(怀旧的)
组合技巧:
2-3 个词就够了,多了反而乱。
{
"mood": "peaceful and nostalgic"
}
实际影响:
Mood 会直接影响:
-
色调(暖色 vs. 冷色)
-
光线柔和度
-
细节密度(戏剧化的画面通常细节更多)
-
对比度
4. Lighting - 光照
最重要的字段。
光照决定画面 80% 的氛围。同样场景,换个光照,完全是两张图。
时间光照:
-
dawn:黎明,冷调蓝紫色 -
golden_hour:黄金时刻(日出后 1 小时 / 日落前 1 小时),温暖金色 -
noon:正午,强烈顶光,高对比 -
dusk:黄昏,橙红色 -
night:夜晚,低光照 -
blue_hour:蓝调时刻(日落后 20 分钟),深蓝紫色
光源类型:
-
sunlight:自然阳光 -
neon:霓虹灯(赛博朋克必备) -
candlelight:烛光 -
moonlight:月光 -
studio_light:影棚灯光
方向:
-
front_light:正面光(平面感强) -
back_light:背光(轮廓光,戏剧感) -
side_light:侧光(立体感强) -
top_light:顶光(神秘感)
速查:
-
想要温暖感?→
golden_hour+front_light -
想要冷峻感?→
blue_hour+side_light -
想要戏剧感?→
dusk+back_light
六、实验:光照的威力
为了验证 lighting 的影响,我做了个对比实验:

同样的场景,不同的光照,完全不同的氛围
实验设计:
同一个角色(神社祭司),只改变 lighting 参数。
技术说明:
为了保证角色一致性,我用了 reference image 技术:
-
先生成1张基准图
-
用它作为参考生成其他3张变体
-
告诉 AI:"保持角色和构图,只改变光照"
(这是实际操作中的关键技巧,下文会详细说明)
结果:
1. Golden Hour + Side Light(温暖感)

"lighting": { "time": "golden_hour", "direction": "side_light" }
2. Blue Hour + Side Light(冷峻感)

"lighting": { "time": "blue_hour", "direction": "side_light" }
3. Dusk + Back Light(戏剧感)

"lighting": { "time": "dusk", "direction": "back_light" }
4. Noon + Top Light(强对比)

"lighting": { "time": "noon", "direction": "top_light" }
结论:
光照真的能主导画面 80% 的氛围。同样的角色和场景,只改一个参数,效果完全不同。
七、实战案例:三个不同场景
为了测试 JSON 的通用性,我又测试了另外两个完全不同的场景:
案例 1:游戏角色立绘
基础版(推荐新手):
{
"subject": "female shrine priest with long black hair, white miko outfit with red hakama, holding wooden staff",
"style": "anime watercolor",
"mood": "peaceful and sacred",
"lighting": "golden_hour side_light"
}
基础版已经够用。需要更精细控制时,再用嵌套结构的进阶版。
进阶版(需要更多控制时):
{
"subject": {
"character": "female shrine priest",
"hair": "long straight black hair, waist-length",
"clothing": "white shrine maiden outfit with red hakama pants",
"accessories": "wooden staff with paper talismans",
"pose": "standing confidently, staff in right hand"
},
"style": "anime with soft watercolor texture",
"mood": "peaceful and sacred",
"lighting": {
"time": "golden_hour",
"type": "sunlight",
"direction": "side_light",
"details": "warm golden light filtering through torii gate"
},
"background": {
"setting": "traditional Japanese shrine",
"elements": "red torii gate, stone lanterns, cherry blossom petals",
"depth": "shallow focus, background slightly blurred"
}
}
**效果:**你会得到一个光线温暖、氛围神圣、细节精确的神社祭司立绘。黄昏的金色光线从侧面照射,穿过鸟居,在人物身上形成柔和的阴影。背景微微虚化,突出主体。
对比自然语言版本:
"A female shrine priest with long black hair, wearing traditional outfit, standing at a shrine during sunset"
看出差别了吗?JSON 版本把"sunset"具体到了"golden_hour"(黄昏前 1 小时),把光线方向定为"side_light"(侧光),把氛围定为"peaceful and sacred"。每一个细节都被锁定。
案例 2:赛博朋克街景
{
"subject": {
"main": "rain-soaked cyberpunk street",
"elements": "neon signs, street vendors, hovering vehicles"
},
"style": "photorealistic with cinematic color grading",
"mood": "mysterious and energetic",
"lighting": {
"time": "night",
"type": "neon",
"colors": ["pink", "cyan", "purple"],
"details": "reflections on wet pavement, strong color contrast"
},
"composition": {
"angle": "low angle, looking up at buildings",
"rule": "leading lines from street converging to vanishing point"
},
"weather": "light rain, mist"
}
**效果:**你会得到一个《银翼杀手 2049》风格的街景——雨后的路面反射着霓虹灯光,粉色、青色、紫色的灯光形成强烈对比。低角度仰拍,街道延伸到远处的消失点,建筑高耸入云。薄雾和细雨增加了神秘感。

用 JSON 精确控制霓虹灯颜色(pink/cyan/purple)、机位(low angle)、天气(light rain)
为什么有效?
-
lighting.colors直接指定了霓虹灯的颜色 -
composition.angle锁定了机位 -
weather增加了氛围细节
案例 3:产品渲染
{
"subject": {
"product": "wireless earbuds",
"material": "matte white plastic with metallic accents",
"placement": "floating on clean surface"
},
"style": "3D render, minimalist",
"mood": "clean and modern",
"lighting": {
"type": "studio_light",
"setup": "three-point lighting",
"details": "soft shadows, rim light on edges"
},
"background": {
"color": "gradient from light gray to white",
"texture": "smooth, no distractions"
},
"technical": {
"focus": "razor sharp",
"depth_of_field": "infinite"
}
}
**效果:**专业级产品渲染图,耳机悬浮在干净的背景上,三点布光创造柔和阴影,边缘有高光勾勒轮廓。背景是从浅灰到白色的渐变,完全不抢主体风头。

三点布光 + 无限景深 + 干净背景,专业级产品图一次生成
关键点:
-
lighting.setup: "three-point lighting"直接调用了摄影界的标准布光方案 -
technical.depth_of_field: "infinite"确保整个产品都清晰 -
background.texture: "smooth, no distractions"避免了背景杂乱
八、意外发现:一致性是个坑
实验中遇到的问题:
当我想生成"同一角色的多个版本"时,发现即使用完全相同的 JSON,AI 每次生成的角色都略有不同(长相、姿势、细节)。
这是 AI 的随机性。fofr 的文章里没有强调这一点。
保持角色一致性:进阶技巧
现实情况:
即使用完全相同的 JSON,AI 每次生成的角色细节都会略有不同。这是 AI 的随机性。
如果你需要"同一角色的多个版本"(比如不同光照、不同表情),有两个办法:
方法1:固定 seed(随机种子)
{
"subject": "cat",
"style": "watercolor",
"mood": "peaceful",
"seed": 12345 // 这个数字固定住
}
改变 mood 或 lighting,但 seed 保持不变,角色会相对一致。
支持情况:
-
Midjourney:用
--seed 12345 -
ComfyUI / Automatic1111:在界面设置 seed
-
DALL-E:不支持(无法固定 seed)
局限:
-
只能保证"相对一致",不是100%相同
-
改变参数太多时,seed 也会失效
方法2:使用参考图(最稳定) ⭐
这是我生成演示图用的方法:
步骤:
-
先生成1张满意的基准图
-
在工具中上传这张图作为参考(或用图片URL)
-
写 prompt:"保持参考图中的角色、姿势、构图,只改变 lighting 为 blue_hour"
支持情况:
-
Midjourney:用
图片URL + prompt -
DALL-E(ChatGPT):上传图片,说"保持这个角色,改变..."
-
ComfyUI:用 ControlNet 或 img2img 节点
效果:
-
这是最稳定的方法
-
角色外观、姿势高度一致
-
我演示的神社祭司和猫咪就是这样生成的
什么时候需要一致性?
不需要:
-
你只是想快速生成一张图
-
每次生成的差异无所谓
需要:
-
做角色设计(多个表情/姿势的同一角色)
-
做教程演示(展示参数对比)
-
做品牌素材(保持视觉统一)
新手建议:
先不用管一致性,专注于用 JSON 控制单张图的效果。等熟练了,再探索 seed 和参考图。
九、补充实验:Mood 氛围控制
用最简单的模板,我又做了个 Mood 参数的对比实验:
基准模板:
{
"subject": "cat",
"style": "watercolor",
"mood": "peaceful",
"lighting": "soft_morning_light"
}
只改变 mood 参数,看看差异:
Peaceful(平和)

Mysterious(神秘)

Dramatic(戏剧化)

结论:
主体相同,风格相同,只改 mood,氛围完全不同。这就是 JSON 的魅力。
十、进阶字段:80% 的情况不需要
基础 4 字段(subject / style / mood / lighting)能解决 80% 的场景。但如果你想更精确控制,还有这些:
构图相关:
-
composition_rule: "rule of thirds"(三分法)、"golden ratio"(黄金比例) -
camera_angle: "bird's eye view"(鸟瞰)、"worm's eye view"(虫视) -
focal_length: "24mm wide angle"(广角)、"85mm portrait"(人像镜头)
细节控制:
-
color_palette: ["#FF6B6B", "#4ECDC4", "#FFE66D"](直接用十六进制色值) -
weather: "fog", "snow", "storm" -
season: "autumn", "spring"
技术参数:
-
aspect_ratio: "16:9", "1:1", "9:16" -
detail_level: "high detail", "minimalist" -
texture: "rough", "glossy", "matte"
元数据:
-
negative_prompt: 列出你不想要的元素 -
seed: 固定随机种子,重现相同结果
什么时候用?
只有在基础 4 字段无法满足需求时再加。贪多嚼不烂。
十一、实战建议
新手起步
-
从4个基础字段开始(subject / style / mood / lighting)
-
用简单版本,不要一上来就嵌套复杂结构
-
先不用管"一致性",专注于单张图的效果
-
多生成,对比参数变化带来的效果差异
进阶控制
-
需要更多细节时,才用嵌套结构
-
需要角色一致时,用 seed 或 reference image
-
根据需求逐步加字段(composition / weather / background)
-
不要贪多,基础4个解决80%的场景
工具选择
工具:
-
Midjourney:最成熟,支持 JSON
-
DALL-E 3:GPT-4 集成
-
Flux:开源,免费
模板库:
-
常用字段速查表(可自行整理)
社区:
-
Discord: Midjourney 官方服务器
-
Reddit: r/StableDiffusion
十二、常见问题排查
Q1:我复制了 JSON,工具说"格式错误"
-
检查 JSON 格式:括号配对、引号成对、逗号位置
-
用在线工具验证:JSONLint
-
有些工具不直接支持 JSON,需要转成自然语言(让 ChatGPT 帮你转)
Q2:生成的图完全不对,跟我想要的差很远
-
先简化:只用4个基础字段,去掉所有嵌套
-
检查字段值是否准确(比如
golden_hour拼写正确吗?) -
换个工具试试(Midjourney / DALL-E / Flux 理解能力不同)
Q3:我想要的元素总是不出现
-
把最重要的元素放在 subject 最前面
-
用 negative_prompt 排除干扰:
"negative_prompt": ["forest", "short hair"] -
生成多张,挑选最接近的
Q4:风格/氛围跟预期不一样
-
把 style 改得更具体:"anime" → "Studio Ghibli anime style"
-
组合多个 mood:
"peaceful and nostalgic" -
参考别人的 prompt,看他们怎么描述
Q5:每次生成的角色都不一样,怎么办?
-
这是正常的,AI 有随机性
-
如需一致性,看上面的"保持角色一致性"章节
-
用 seed 或 reference image
Q6:哪些工具真正支持 JSON?
-
原生支持:Midjourney(直接粘贴)、Claude(理解结构)
-
间接支持:DALL-E(需转成自然语言,但理解结构化描述)
-
需要插件:ComfyUI / Automatic1111(需自定义节点)
还是不行?
-
把你的 JSON 和生成结果发到社区求助
-
Reddit r/StableDiffusion 和 Midjourney Discord 都很活跃
十三、结论
JSON 提示词真的有用吗?
✅ 有用。 我的测试数据:命中率从 5% 提升到 80%,时间节省 8 倍。
但没有想象中那么简单:
-
一致性需要额外技巧(seed / reference image)
-
不同工具支持程度不同
-
需要实践找到适合自己的写法
-
80%命中率取决于具体场景和需求
核心价值不是"一定成功",而是:
-
可重复性:同样的 JSON,结果相对一致
-
可调整性:想改某个细节?直接改对应字段,不用重新描述整个场景
-
可理解性:看别人的 JSON,能快速理解每个参数的作用
给新手的建议:
-
从最简单的4字段模板开始
-
别被复杂嵌套吓到,基础版够用
-
多实验,对比参数变化
-
遇到问题去社区求助
5 分钟上手,效果天差地别。试试看,把你的结果发在评论区。