资讯动态

从随机抽卡到可复现:AI艺术与ChatGPT提示工程实战

发布时间:2026/10/25 16:55:33 来源:尧图企业网站定制
简介《AI艺术与ChatGPT提示工程指南》围绕提示工程与AI艺术创作展开面向对ChatGPT对话式提示和Midjourney等绘图工具感兴趣的初学者及进阶读者帮助其从零理解提示的构成与设计逻辑。全书从提示工程基础讲起依次讨论负提示与零提示、ReAct提示、Midjourney等工具的AI艺术提示设计、迭代式提示细化以及语言与意象在提示中的作用并附Leonardo应用案例与示例提示兼顾方法框架与实操参考。资源包为1个PDF文件约2.31MB体积轻便便于在电脑或移动端随时查阅。目前已有69人学习适合希望系统梳理提示工程知识、提升AI艺术出图与对话质量的读者按章节研读和查阅。1. 同一句提示跑十次出十个结果问题多半不在模型有人把「赛博朋克城市超好看」丢进 Midjourney十次出十张风格不一的图于是判断模型不稳定。拆开看这句提示里主体只有一个模糊名词没有风格锚点、没有镜头语言、没有负向约束模型每次都在合法解空间里随机采样。这份《AI艺术与ChatGPT提示工程指南》讲的就是把「碰运气」变成可重复流程提示工程的三层骨架、零提示与负提示的边界、ReAct 任务链、Midjourney 与 Leonardo 的出图参数以及 ChatGPT 多轮对话里的迭代式细化。适合已经能用工具出图、但结果不可控的人也适合要把提示交给团队复用的从业者。下面按「骨架—任务链—出图参数—排查—验收」的顺序拆。2. 提示的三层骨架主体、修饰符、固化剂怎么分工原书第一章把提示拆成几个可命名的部件主体subject、修饰符modifier、固化剂solidifier再加上变体提示和负提示。这个拆法看着朴素落地时非常管用因为它把「写一句好提示」变成了「填几个槽位」。我一般会先把一句自然语言提示按这三层切开再决定哪一层需要动、哪一层必须锁死。切开之后你会发现大部分翻车都发生在修饰符互相打架而不是主体写错。2.1 主体提示把「想要什么」压缩成一个可检索的名词短语主体是提示里承担核心语义的那部分可以是人、地点、物体也可以是一个动作场景。原书强调定义主体时要同时想清楚两件事你要达到什么目标以及看结果的人会怎么理解它。这两句话翻译成操作就是主体必须能被模型映射到训练数据里存在的视觉或语义概念不能是一个只有你自己懂的抽象词。我习惯用一个「三问压缩法」处理主体。第一问这个东西的最小可识别名词是什么第二问它处于什么状态或环境第三问哪些限定词是必须保留、删掉就变味的。比如「一个很酷的机器人」经过三问会变成「a rusted industrial robot with exposed hydraulic joints, standing in a flooded factory」主体从形容词堆砌变成了可渲染的实体加环境。# subject_slots.py # 主体拆成三个槽位避免把状态和环境混进名词里 SUBJECT { entity: a rusted industrial robot, # 最小可识别名词 state: exposed hydraulic joints, one arm missing, # 状态限定 context: standing in a flooded factory, # 环境限定 } def build_subject(slots): # 用逗号连接顺序固定为实体→状态→环境 return , .join(v for v in slots.values() if v) print(build_subject(SUBJECT)) # 输出a rusted industrial robot, exposed hydraulic joints, one arm missing, standing in a flooded factory这段代码的价值不在拼字符串而在强制你把「实体」和「状态」分开。实体槽位负责让模型认出画什么状态槽位负责控制差异环境槽位负责构图背景。参数上entity尽量控制在 5 个词以内超过之后模型对前置词的注意力会被稀释state一次只写一到两个特征写三个以上容易出现肢体错乱context决定画面纵深室内场景建议带上材质或光源线索。主体写完之后要做一次「可检索性检查」把主体短语单独丢进搜索引擎或图库如果能搜到大量同类图说明模型大概率认识如果搜出来全是无关内容说明这个词是你自造的需要换成更通用的说法。这个动作花不了一分钟但能省掉后面反复抽卡的时间。2.2 修饰符提示用形容词和限定词收窄输出空间修饰符是加在主体上的额外词或短语作用是提供上下文、清晰度和特异性。原书举的例子很典型把「全球变暖」改成「全球变暖的原因和解决方案」输出就从泛泛而谈变成了两面分析。修饰符的本质是给模型一个更窄的采样区间而不是给它更多形容词。落到 AI 艺术出图上我通常把修饰符分成四个槽位风格、媒介材质、光照色彩、镜头构图。每个槽位只放一个主取值最多加一个补充取值。四个槽位全填满提示长度大约在 25 到 40 个词之间这个区间对 Midjourney 和 Leonardo 都比较友好。槽位作用示例取值常见错误风格定整体调性cinematic concept art、editorial illustration同时写三种风格互相稀释媒介材质定表面质感oil on canvas、35mm film scan、brushed aluminum和风格槽位语义重复光照色彩定氛围cold dawn light、warm 2700K lamp light光源方向前后矛盾镜头构图定视角与景别wide shot、macro、low angle与主体尺度冲突比如微距拍建筑修饰符最容易翻车的地方是「堆」。有人觉得多写几个风格词总有一个能命中实际结果是模型把几种风格平均成一个四不像。我的血泪经验是风格槽位只留一个主词想试第二种风格就另开一条变体提示不要在同一个提示里做风格融合。真要融合也要写成「A 为主B 只影响材质」这种带主次的表述。# modifier_slots.py # 四个修饰符槽位每个槽位一个主值加一个可选补充值 MODIFIERS { style: [cinematic concept art, muted color palette], medium: [35mm film scan, visible grain], light: [cold dawn light, volumetric fog], camera: [wide shot, shallow depth of field], } def flatten_modifiers(mods): # 按槽位顺序展开保证每次拼装语序一致 result [] for slot in (style, medium, light, camera): result.extend(mods.get(slot, [])) return , .join(result) print(flatten_modifiers(MODIFIERS))flatten_modifiers里把槽位顺序写死是为了让提示可复现。Midjourney 和多数文生图工具对前置词更敏感风格放在最前面、镜头放在最后出来的画面稳定性明显好于随机顺序。参数上每个槽位列表长度建议不超过 2总修饰符数量控制在 8 个以内超过 10 个之后新增的词基本是在互相抢权重画质不会提升构图反而更容易散。2.3 固化剂与变体让输出稳定在可复用模板上固化剂是原书里容易被忽略的一节它指的是提示末尾那组用来「锚住」质量的词比如 high detail、consistent composition、neutral color grading。这些词单独看很虚但它们在提示结构里承担的是收尾和稳定作用相当于给模型的输出画一条底线。我一般把固化剂控制在 3 到 5 个词放在提示最后不参与风格竞争。变体提示则是在主体和固化剂不变的前提下只替换一个修饰符槽位。这样每次只动一个变量你才能判断到底是哪个词导致了画面变化。很多人做迭代式细化时一次改三四个词最后出图变好了也不知道是谁的功劳变差了也找不到原因这就是典型的黑匣子式调参。# 提示模板库的目录结构按主体分目录按版本存文件 prompts/ ├── lighthouse/ │ ├── v01_subject.txt # 只写主体 │ ├── v02_modifiers.txt # 加修饰符 │ ├── v03_solidifier.txt # 加固化剂 │ └── runs.csv # 每次跑图的参数与人工评分 └── robot_factory/ ├── v01_subject.txt └── runs.csv目录结构看着简单但它解决的是「提示写完就丢」的问题。每个主体一个目录版本号递增runs.csv记录种子、参数和评分。下次要复现某张图直接按版本号找文件不用翻聊天记录。参数命名上v01到v03对应骨架搭建的三个阶段后面做变体就从v03a、v03b分支不要覆盖原文件。固化剂还有一个用法是跨工具迁移。Midjourney 和 Leonardo 的语法不同但「高质量、构图完整、色彩克制」这组语义是通用的。我会把这组词单独存一个solidifier.txt换工具时只改参数和负向词固化剂直接复用。这样同一套审美底线能在不同工具之间保持一致不至于换个平台就完全变味。3. 从零提示到 ReAct把单轮指令升级成任务链零提示、负提示、ReAct 是原书里跨度最大的三节分别对应「不给例子」「给反向约束」「给多步推理结构」。这三样不是越高级越好而是各有适用边界。用错场景的代价很直接零提示处理格式任务会得到一堆自由发挥负提示堆太多会挤占正向语义ReAct 用在单步问答上纯属浪费 token。3.1 零提示的适用边界与触发条件零提示就是不给示例、不给拆解直接把任务丢给模型。它适合三类场景开放式头脑风暴、通用文案改写、格式要求宽松的问答。比如「给这个产品写五条卖点」零提示往往比给一堆示例更自然因为示例会限制模型的表达多样性。但零提示有两个明确的失效边界。第一是格式严格的任务比如要求输出固定字段的 JSON、固定列数的表格零提示下模型会自由增减字段。第二是专业术语密集的任务模型不知道你所在团队的缩写含义零提示会按大众语料去猜。这两个边界不需要复杂方案加一条格式约束或一个字段说明就能解决。# zero_prompt_guard.py # 零提示加一条最小格式约束避免输出自由发挥 PROMPT 任务为这款便携投影仪写三条卖点。 约束 1. 每条不超过 20 个字。 2. 必须包含一个具体参数没有参数就写“参数待补”。 3. 只输出三条不要解释。 print(PROMPT)这段模板的关键在第三条「只输出三条不要解释」。零提示翻车最多的情况不是内容差而是模型附赠一段「希望以上对你有帮助」。加一句硬约束输出立刻干净。参数上约束条数控制在 3 条以内超过之后模型会开始丢约束每条约束只写一个要求不要把「不超过 20 字且包含参数且语气活泼」塞进同一条。零提示还有一个隐性成本结果不可回归。同一句提示今天跑和下周跑输出可能完全不同。所以我在需要复现的任务里不用纯零提示至少加一条固化约束或一个输出模板。这个习惯是从一次对客演示翻车之后养成的当时现场重跑同一句提示输出风格完全变了场面很尴尬。3.2 负提示写「不要什么」比写「要什么」更难负提示在两个场景里最有用文生图里排除不想要的元素对话模型里排除不想要的表达方式。Midjourney 用--no参数接负向词Stable Diffusion 系工具用单独的 Negative Prompt 输入框Leonardo 也是分栏填写。语法不同但逻辑一样负向词是在采样时降低对应概念的权重不是硬性禁止。负向词我一般分四类管理每类只留最必要的两三个。文字水印类text、watermark、signature几乎每次都要带解剖错误类extra fingers、deformed hands在人像和手部特写时带风格污染类oversaturated、cluttered background在需要干净画面时带构图干扰类cropped head、out of frame在全身构图时带。负向类别典型词适用场景不建议文字水印text、watermark、logo所有出图任务一次写十几个同义词解剖错误extra fingers、deformed hands人像、手部特写全身远景也堆手部词风格污染oversaturated、noisy background需要干净背景与正向风格词冲突构图干扰cropped、out of frame全身、建筑全景微距场景使用负提示最常见的误用是「越多越安全」。Midjourney 的--no后面跟的词同样占用解析预算堆二十个负向词正向提示的权重会被明显稀释画面变得保守、灰、没有重点。我的做法是负向词总数不超过 6 个而且每次只加当前批次真正出问题的词不加「预防性」的词。注意负提示不是所有工具都等效。Midjourney 的--no对具体物体有效对抽象风格词效果有限Stable Diffusion 的 Negative Prompt 权重更强写多了容易把画面压死。换工具时负向词要重新测不能直接照搬。3.3 ReAct 提示的四段式结构与一个可抄的模板ReAct 的核心是「推理 行动」交替模型先写一段思考说明下一步为什么这么做再选择一个动作去执行拿到观察结果后继续下一轮。它适合需要多步检索、多工具调用、或者需要展示中间过程的任务比如资料汇总、故障排查、多条件筛选。单步问答用 ReAct 只会让输出变长不会变准。我把 ReAct 提示固定成四段角色与目标、可用动作清单、思考-行动-观察循环规则、终止条件。四段缺一不可缺动作清单模型会自己编工具缺终止条件模型会无限循环缺循环规则模型会一次性把答案写完、不走中间步骤。# react_prompt.py REACT_TEMPLATE 你是一个{role}。 目标{goal} 可用动作每次只能选一个 {actions} 执行规则 1. 每轮先输出“思考”说明下一步理由不超过两句话。 2. 再输出“动作”加动作名和参数。 3. 收到“观察”后进入下一轮最多{n}轮。 4. 信息足够时输出“结论”并停止不要再调用动作。 终止条件{stop_condition} prompt REACT_TEMPLATE.format( role设备故障排查助手, goal根据现象定位故障模块给出可执行的检查顺序, actions\n.join([ - check_power检查供电与指示灯状态, - read_log读取最近 50 条错误日志, - test_module对指定模块做单点测试, ]), n6, stop_condition定位到具体模块或连续两轮观察无新增信息, ) print(prompt)这个模板里actions用列表展开而不是写成一整段是为了让模型把每个动作当成独立可选对象减少「自己发明工具」的概率。n6是轮数上限实测超过 6 轮之后模型容易开始重复已执行的动作stop_condition必须写成可判断的条件不能写「找到答案为止」这种模糊表述。ReAct 最容易踩的坑是把「思考」写成长篇解释。规则里限定「不超过两句话」很关键思考一长模型会把本该放在动作里的信息提前说完后面就不执行动作了。另一个坑是动作参数没定义清楚比如test_module不说测哪个模块模型会传一个不存在的参数名。动作清单里每个动作后面跟一句参数说明能省掉大半解析错误。4. Midjourney 与 LeonardoAI 艺术提示的参数化写法AI 艺术提示和对话提示最大的区别是它不只靠词还靠参数。同一句描述画幅、风格化强度、随机度、种子不同出来的图差一个量级。原书用 Midjourney 和 Leonardo 两个工具做示例这两个工具的提示结构刚好代表两种流派Midjourney 是「一行流 尾缀参数」Leonardo 是「分栏表单 独立负向框」。把两种结构都摸一遍换到别的工具也能快速映射。4.1 Midjourney 提示的语序与权重槽位Midjourney 的提示是一行文本参数用--接在末尾。语序上越靠前的词权重越高所以主体必须放在最前面风格、光照、镜头依次往后参数永远放最后。很多人把--ar 16:9写在开头结果参数被当成普通文本解析画幅根本没生效。# mj_builder.py def mj_prompt(subject, scene, style, light, params): # 语序固定主体 → 场景 → 风格 → 光照 → 参数 body , .join([subject, scene, style, light]) return f{body} {params} prompt mj_prompt( subjecta lone astronaut, scenestanding in a flooded library, floating books, styleanalog film photography, muted teal palette, lightsoft window light from the left, params--ar 3:2 --stylize 250 --chaos 10 --no text, watermark --seed 8842, ) print(prompt)参数说明直接决定复现能力。--ar 3:2定画幅横向场景别用竖幅--stylize 250是风格化强度数值越高画面越「好看」但越偏离提示做概念图我一般放在 100 到 300 之间--chaos 10控制多样性做变体探索时调到 20 到 40做定稿复现时压到 0 到 10--no后面跟负向词--seed是复现的关键同一个种子加同一句提示输出才基本可控。--seed这个参数值得单独说。它不是「锁定画面」而是锁定噪声起点提示改了一个词画面还是会变。所以复现实验的正确做法是种子固定、提示固定、参数固定一次只改一个变量。我见过有人改了提示又换种子然后说「这个方法不稳定」其实是两个变量同时在动。4.2 Leonardo 的提示面板与风格参考Leonardo 的结构更像表单Prompt 和 Negative Prompt 分栏下面还有模型、引导强度、步数、种子、参考图强度。它的好处是负向词和正向词互不干扰坏处是参数之间会互相影响调一个要回头看另一个。参数作用常用区间调高后的表现Guidance Scale提示贴合度7 到 12更贴提示但画面僵硬Steps采样步数20 到 40细节增加边际收益递减Seed噪声起点任意整数用于复现不改变语义Image Guidance参考图影响0.3 到 0.7更接近参考图原创性下降Guidance Scale 是最容易调过头的参数。低于 7 画面自由发挥高于 15 会出现色彩断层和构图僵化。我一般从 9 开始试画面不够贴提示就加到 11画面太死板就降到 8。Steps 超过 40 之后提升非常有限除非做印刷级大图否则没必要拉到 60 以上。Leonardo 的 Negative Prompt 框比 Midjourney 的--no更「重」同样数量的负向词在 Leonardo 里对画面的压制更明显。所以从 Midjourney 迁移过来时负向词数量要减半先留文字水印和构图干扰两类跑一批看效果再决定加不加。4.3 语言与意象把抽象词换成可渲染的视觉名词原书有一节专讲提示里的语言和意象核心观点很直接模型不认识「高级感」只认识能对应到像素的模式。你写「未来感」模型只能猜你写「brushed aluminum panels with embedded LED strips」模型就有东西可画。这个替换动作是 AI 艺术提示里性价比最高的一步。抽象表达可渲染替换替换理由未来感brushed aluminum, embedded LED strips, matte black casing材质和光源可直接生成温馨warm 2700K lamp light, linen texture, soft shadows色温和材质有明确指向高级low saturation, large negative space, single light source用构图和色彩描述替代评价自然overcast daylight, moss-covered stone, shallow stream环境元素具体可辨动感motion blur on limbs, low angle, diagonal composition用摄影语言表达速度替换的时候注意一点不要把所有抽象词一次换完。一次换一个槽位跑三到五张确认这个替换确实带来了你想要的变化再换下一个。一次全换画面变好看了你也不知道是哪个词起的作用下次想复用都找不到依据。还有一个常被忽略的细节是语言本身。同一句提示用英文写和用中文写在 Midjourney 上的效果通常不一样因为它的训练语料里英文描述占比更高。非英文母语者写英文提示时容易堆形容词反而丢掉了具体的名词。我的做法是先用中文把画面拆成「物体、材质、光源、视角」四列再逐列翻译成英文名词短语最后按语序拼起来。这个流程比直接憋一句英文长句稳定得多。5. 迭代式细化的排查清单五类翻车与对应改法迭代式细化不是「多跑几次」而是每轮只改一个变量、记录结果、判断改动是否有效。原书把这一步放在中后段是有道理的前面骨架没搭好迭代就是在垃圾堆里挑垃圾。下面五类问题是我在实际出图和对话任务里遇到频率最高的每条按「现象—原因—解决」拆开写方便直接对照排查。5.1 现象同一提示每次出图差异大没法选原因通常有三个种子没固定、--chaos或随机度参数偏高、提示本身太短导致模型自由补全。先看参数再看提示长度。Midjourney 里没写--seed就是每次随机Leonardo 里种子留空同理。提示少于 15 个词时模型的可发挥空间太大画面主体都可能漂移。解决顺序是先固定种子跑三次确认差异是否收敛如果还漂把--chaos降到 10 以下最后检查提示给主体补一个状态限定和一个环境限定。三步走完还漂说明提示里有互相冲突的修饰符回到第 2 章做槽位拆分。5.2 现象负提示写了但画面里还是有文字和水印原因分工具看。Midjourney 的--no text对大面积文字有效对小字水印效果有限负向词如果和正向词语义重叠会被正向权重压过去还有一种情况是负向词写在了参数区之外被当成普通描述解析了。解决办法是先确认语法位置--no必须在所有参数区里、提示正文之后然后把负向词精简到最必要的三个去掉同义词堆叠最后提高正向提示里「干净背景」类固化剂的权重用正向描述挤压文字出现的空间。纯靠负向词堵不如正向词引导。5.3 现象出图糊、构图散、主体不突出原因多半是修饰符冲突或镜头槽位缺失。风格写两个、光照写三个方向、镜头又写广角又写微距模型只能取平均结果就是什么都有一点、什么都不突出。另一个常见原因是主体槽位里塞了太多状态模型分不清哪个是重点。解决方法是做减法风格只留一个光照只留一个主光源镜头只留一个景别。主体状态从三个减到一个跑一批看主体是否立住再逐个加回。构图散的时候优先补wide shot或medium shot这类景别词比加「high quality」有用得多。5.4 现象ChatGPT 多轮对话后越聊越跑偏原因是上下文累积把早期约束冲淡了。对话到第五六轮模型对第一条消息里的格式要求、语气要求已经不再敏感开始按最近几轮的内容自由发挥。另一种情况是你自己在后续消息里引入了新约束和早期约束矛盾模型选了新的那个。解决办法有两个每三到五轮做一次约束复述把核心要求用一两句话重贴一遍或者开新会话把已确认的结论压缩成一段摘要带过去。我一般用后者因为长会话里的无效信息太多摘要反而更干净。摘要里只保留任务目标、已确认结论、未解决问题三项其他全丢。5.5 现象提示从 Midjourney 迁到 Leonardo 就失效原因是两个工具的语法和权重逻辑不同。Midjourney 的参数是尾缀Leonardo 是表单分栏Midjourney 的--no权重偏弱Leonardo 的负向框权重偏强同一组修饰符在两个工具里的解析顺序也不一样。解决办法是维护两层提示中性层写主体、修饰符、固化剂不带任何工具语法适配层按工具加参数和负向词。迁移时只改适配层中性层不动。这样一套审美描述可以在多个工具之间复用换平台只需要重测参数区间不用重写整句提示。6. 对话式提示工程与验收把提示当资产管起来ChatGPT 这类对话模型的提示工程和文生图最大的区别是它有「记忆」——多轮对话里前面说过的约束会持续影响后面。这既是优势也是负担。优势是你可以逐步补充细节不用一次写完整负担是约束会漂移聊到后面模型已经不记得第一条要求了。原书把对话式提示单独成章讲的其实就是怎么在多轮里保持约束不丢。我的做法是把每轮对话当成一次小版本发布。开始前先写一段「任务卡」包含目标、输出格式、禁止事项三行每轮结束后检查输出是否还符合任务卡偏离了就贴回任务卡重述不偏离就继续。任务卡本身也会迭代但每次改动都记版本号。# prompt_regression.py # 每次调整提示后跑一遍回归记录版本、参数、评分和问题 import csv, datetime def log_run(version, prompt, params, score, note): with open(prompt_runs.csv, a, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([ datetime.date.today(), version, prompt, params, score, note ]) # 示例v03 加了一条“只输出三条”的约束人工评分 4备注发现新问题 log_run( versionv03, prompt为便携投影仪写三条卖点每条不超过20字, paramstemperature0.7, max_tokens200, score4, note第三条偏长下版把字数约束提前, )这个脚本不复杂价值在score和note两列。评分用 1 到 5 分5 分是可直接交付3 分是能看但要改1 分是跑偏。备注只写具体问题不写「感觉不太好」这种没法行动的话。跑上二十条之后你回看 CSV 就能发现哪类改动真正提升了分数哪类改动只是心理安慰。版本管理上我遵循一条规则提示改动必须能回答「改哪个槽位、预期改善什么、怎么判断有效」。答不上来就不改。这条规则是从一次连续改七版、结果越改越差的经历里总结出来的当时没有记录最后连最初那版长什么样都找不回来了只能从头重写。验收环节我一般看三个指标格式合规率、人工评分均值、复现一致性。格式合规率是输出符合任务卡的比例低于 90% 就回去加约束人工评分均值低于 3.5 就回到骨架层检查主体和修饰符复现一致性是同提示同参数跑三次的差异度差异大就检查种子和随机参数。三个指标都过线这版提示才进模板库。从那以后我每次改提示都强制走一遍「任务卡—单变量改动—CSV 记录—三项验收」哪怕只改一个词也记一笔。这套流程看着笨但它让我不用靠记忆去复原三个月前那张图是怎么出来的。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑