提示工程实战拆解:结构化Prompt控制ChatGPT与Midjourney

发布时间:2026/10/6 18:06:55
提示工程实战拆解:结构化Prompt控制ChatGPT与Midjourney
简介《点燃你的创造力掌握AI艺术与ChatGPT的提示工程》是一份由Frank Zanish撰写的英文原版PDF指南围绕AI艺术创作与ChatGPT对话式提示工程展开适合零基础入门者与希望进阶的专业人士。全书从提示工程基础讲起逐步拆解提示的构成、主题提示与修饰符的作用、负提示和零提示、ReAct提示等核心概念并针对Midjourney、Leonardo等主流AI绘画工具详细讲解如何设计艺术提示、进行迭代式细化以及如何利用语言与意象的力量提升生成效果。内容还包含多个示例AI艺术和工具使用技巧能帮助读者将提示工程方法直接用于实际创作。整个资源仅包含一个PDF文件资源包大小约2.31MB方便下载后直接阅读目前已有68人学习/浏览。全书架构由浅入深示例丰富既适合系统自学也适合作为日常创作时的案头参考。1. 提示工程不是写作文先拆结构再谈创意大家好我是做 AI 工具落地与内容工作流的一线工程师。这两年经手最多的项目就是提示工程Prompt Engineering——不管是接 ChatGPT 做对话应用还是帮内容团队用 Midjourney 批量出 AI 艺术物料最终效果的上限不在模型参数而在那几十行提示的结构里。这本《AI艺术与ChatGPT提示工程指南》值得拆的地方在于它没有把提示当成“灵感玄学”而是提供了一套能从结构上解释输出差异的方法——把提示拆成主体Subject、修饰符Modifier、固化剂Solidifier、负提示和变体提示再分别落到 ChatGPT 的对话式提示与 Midjourney 的视觉提示中。适合正在从“抄别人 prompt”转向“自己设计 prompt”的人。2. 主体、修饰符与固化剂把一句提示拆成可控结构2.1 主体先行先定“画面里有什么”再想“怎么写”书里的提示工程基础部分第一个反复强调的概念是 Subject也就是提示的核心对象。“一只狐狸”“未来城市的市政厅”“给新产品的推广文案”这些是主体。主体决定模型输出的方向修饰符和固化剂都是围绕主体展开的。这里有一个书里讲得非常实在的观点定义主体时要考虑受众怎么理解这个主体而不是只考虑你想怎么描述它。同一个主体“fox”在不同受众眼里可能是“野生动物摄影里的赤狐”“插画里的卡通狐狸”“品牌图标里的抽象狐狸”。如果你在提示里只写了“a fox”模型会按它训练数据里的统计概率来猜你得到什么风格全看运气。所以实际操作上我一般会把主体写成一个“名词 最小限定”的组合基础主体a fox 限定主体a red fox sitting on a snowy log“sitting on a snowy log”已经是修饰符的一部分但它限定的是主体的状态而不是风格。这个区分很重要。书里的意思是主体负责“是什么”修饰符负责“长什么样”固化剂负责“像谁的标准”。把这个顺序固定下来提示才不是一盘散沙。2.2 修饰符与固化剂控制“风格域”而不是“堆形容词”修饰符Modifier是给提示注入方向感的词——光照、材质、时间、视角、情绪。书里给的例子是把“global warming”改成“causes and solutions for global warming”加了修饰之后模型输出就从泛泛而谈变成有结构的内容。视觉生成里的修饰符更明显cinematic lighting、photorealistic、golden hour、octane render这些词直接决定美学走向。需要注意的是修饰符不是越多越好。在视觉模型里提示的前半部分权重通常比后半部分高堆太多形容词会导致后面的描述失去控制力。我复现书里思路时常用的约束是修饰符不超过 4 类光照、材质、构图、氛围每类一个词。固化剂Solidifier是这本书里比较有特点的概念指那些把提示“钉在某种标准”上的词。比如写“minimalist icon style, white background”就是在告诉模型别自由发挥贴着一个精确的视觉标准来。它跟修饰符的区别在于修饰符扩展想象空间固化剂收敛生成范围。一放一收效果才稳。2.3 负提示与零提示模型要什么也要知道不要什么负提示Negative Prompt的作用是告诉模型哪些内容不要出现。在 Midjourney 里对应 --no 参数在 Stable Diffusion 工作流里是独立的一个提示框。一个常见误用是只写负提示、不加强正面描述错误示范a castle --no fog, trees, water 改进写法a stone castle on a bare rock hill, clear sky --no fog, trees, water原因很直接你如果不给模型一个明确的“替代物”单纯排除某些元素它会在排除后随机填充结果反而不可控。书里强调的是“负提示负责边界主体提示负责内容”两者配合而不是互相替代。零提示Zero Prompting则是反过来不给示例、不做引导直接测试模型在默认状态下的输出能力用来判断当前任务到底是“没描述清楚”还是“模型本来就不擅长”。2.4 变体提示同一主体五个方向的推演变体提示Variation Prompt是书里比较实用的章节。做法是固定一个主体表达式然后系统性地更换一个维度生成多个变体。比如主体固定为“a teapot”依次换材质porcelain / glass / brass、换场景kitchen / museum / forest、换灯光soft window light / neon light。这样生成的结果不是东一榔头西一棒而是能横向对比的系列图。这种做法的价值在于它把“找灵感”变成“扫参数”。你在跑变体之前先列好要变的维度跑完之后一眼就能看出哪个维度对结果影响最大。书里没有给固定的变体数量但按我的习惯每个维度至少出 4 张对比图否则分不清是提示词的变化还是模型随机性在起作用。2.5 结构化引导模板从一句话到一张可用提示卡把前面几个概念合起来我复现时最常用的模板是五段式[主体名词状态] [修饰符光照/材质/构图] [固化剂风格标准] [边界负提示] [输出参数画幅/版本]实例a red fox sitting on a snowy log, golden hour light, soft fur texture, photorealistic wildlife photography --ar 16:9 --v 6 --no cartoon, lowres这段提示里主体在第一句修饰符跟在其后photorealistic wildlife photography 是固化剂--no 是边界--ar 和 --v 是输出参数。书里提到的负提示、变体提示、迭代细化本质都是对这个结构做局部调整而不是每次都从头写一句新咒语。3. ReAct 提示与 ChatGPT 对话设计让模型先想后答3.1 ReAct 为什么有效把思考过程拉出黑匣子ReActReasoning Acting是书里单列的一章。核心思路是引导模型先输出推理链再给出结论而不是直接生成最终答案。这样做有两个现实收益一是模型在生成推理过程时会把问题拆解得更细减少直接出答案时的错误率二是推理链可以帮你定位是提示里哪句话把模型带偏的相当于给模型装了一个“过程日志”。在 ChatGPT 的对话里落地 ReAct不需要任何 API 改造只需要在系统提示里约定输出结构请按以下步骤回答我的问题 第一步用自己的话复述你理解的任务。 第二步列出需要确认的信息哪些已知哪些需要推断。 第三步逐步推导给出中间结论。 第四步基于以上分析给出最终结论并注明该结论成立的条件。 如果你在第二步发现信息不足直接说明缺少什么不要猜测。注意最后这句“如果信息不足直接说明缺少什么不要猜测”。这是我在复现书里思路时加的原书强调 ReAct 的推理要建立在事实基础上而 ChatGPT 在信息缺失时往往会顺着上下文补一个合理猜测这恰恰是幻觉的来源。四步结构不是死的第二步在实际使用中经常被合并进第三步但对新任务来说结构完整比速度快更重要。3.2 对话式提示角色、任务、约束三段式书里的对话式提示工程章节核心是把多轮对话当做一个持续的任务上下文来管理而不是每轮都让模型猜。我在实际项目里最常用的结构是“角色 任务 约束”三段式你是资深内容策略师。任务把下面的产品卖点改写成适合小红书正文的推荐文案。 约束保留原卖点信息不允许编造数据每段不超过三行结尾放两个话题标签。 产品卖点balabala这样写的好处是角色决定了模型的语体任务决定了输出目标约束画出了不能越过的边界。书里讲到的语言与意象的力量说的就是这三部分里用词的颗粒度。角色写得越具体模型调用到的行业语料越准确“专业的内容策略师”和“一个懂营销的人”输出完全不同。这里要留意的边界是角色设定不要跟任务约束打架。比如你一边说“你是资深法务”一边又说“要语言轻松活泼”模型会在两个指令之间摇摆最后输出既不专业也不轻松。提示词工程做到后期大部分问题不是缺词而是角色、任务、约束三者之间的自洽。3.3 多轮对话中的上下文管理每轮都要有一个“锚”ChatGPT 的对话是带记忆的但这个记忆是有衰减的。书里在对话式提示这一章里的建议是让用户或者是上游脚本在每轮关键回复前重述一次任务目标。我一般会在长任务中每三轮做一次“目标重述”第 4 轮开始时 回到最初任务我们要把上述三个卖点整理成 7 条小红书文案。 目前已经完成了 3 条风格偏活泼用户反馈太长。 接下来请把剩余 4 条控制在 80 字以内保留活泼语气。这样做的原因在于模型在长对话里会逐渐被最近的几轮内容牵引如果不定期把“锚”拉回来最终输出往往偏离最初的约束。书里没有给具体的轮数建议但按我拆过的场景3 到 5 轮重述一次是一个比较稳的节奏。如果你在开发中间层这段逻辑可以直接写进会话状态的系统提示里每轮动态拼接。3.4 ReAct 什么时候不值得用成本与收益的边界ReAct 并不是所有场景都该用。简单任务——比如“翻译这句话”“给这个词造句”——强制走四步推理链路会让答案变长、变慢偶尔还会在推理里引入原本不会犯的错误。这是书里虽然没有明说、但按工程逻辑必然存在的一个边界。我给过自己的选择标准需要事实核查、需要拆解多条件的问题走 ReAct一句话能回答完的问题直接短答。判断标准其实很简单你把这个任务丢给一个实习生如果他需要做两步以上的核对才能回答就值得走 ReAct如果他张嘴就能答那就别给模型加戏。成本最低的验证方式是先走一轮 ReAct 看推理链里有没有新增的、任务里没有的信息如果有说明模板自身干扰了输出。4. Midjourney 提示设计从“审美描述”到“可复现参数”4.1 文本提示与视觉提示的差异修饰符的名词化前面几章讲的方法论在 ChatGPT 里通用但到了 Midjourney 这类视觉生成工具有一个很关键的转变修饰符的句法不一样了。在文本模型里“世界正在变暖”这种自然语言描述可以直接推动分析方向在 Midjourney 里模型读的是一组视觉概念的组合很多抽象形容词——比如“好看”“氛围感”——如果没有对应的视觉锚点就等于噪音。书里在“为 Midjourney 和其他工具设计提示”这一章中的做法是把修饰符转成可被视觉化的名词或名词短语。比如你想要的“氛围感”落到提示里应该是具体的光线和天气词氛围感模糊beautiful, atmosphere, feeling 氛围感可执行misty morning, soft golden light, light fog, overcast sky这个转换是我在拆这本书时最有收获的一点。Midjourney 的模型对具体视觉词汇的学习比对抽象形容词更充分所以你给它“cinematic lighting”它知道怎么做给它“vibe”它只能随机发挥。书里第 8 章专门讲语言和意象的力量本质上就是在说视觉提示里的每个词都应该能对应到画面里的一个具体要素。4.2 一个从粗糙到可复现的 Midjourney 提示我用书里的迭代式细化章节的方法跑一个具体案例给你看。初始提示很简单a castle in a forest这个提示能出图但结果不可复现城堡的年代、森林的季节、光线方向全是随机的。按迭代细化的思路每一步只固化一个变量第 1 次迭代a medieval stone castle in a forest 第 2 次迭代a medieval stone castle covered with moss in a pine forest 第 3 次迭代a medieval stone castle covered with moss in a pine forest, foggy morning, soft light 第 4 次迭代a medieval stone castle covered with moss in a pine forest, foggy morning, soft light, cinematic wide shot --ar 16:9 第 5 次迭代a medieval stone castle covered with moss in a pine forest, foggy morning, soft light, cinematic wide shot --ar 16:9 --no modern buildings, people每一次迭代新增一个变量前一步的结果稳定住了再动下一步。等到第 5 步这个提示基本可以复现固定主体、固定氛围、固定画幅、排除了常见干扰项。书里关于迭代式提示细化的章节把这套做法叫做“每次变更一个维度而不是整体重写”。这也是后面第 5 章避坑指南的根源逻辑——先有可回溯的版本才有资格谈调优。4.3 常用的 Midjourney 参数对照视觉提示的输出参数是巡航的重头。书里没有列参数表但在实际使用中下面这几组是最常用的参数取值范围作用我的建议--ar1:1 / 16:9 / 4:5 / 2:3画幅比例发布到哪个渠道先定哪个比例--v5 / 6 / 7模型版本不同版本对风格词的响应差异很大--stylize0–1000艺术化程度数值高风格强但可能偏离主体--chaos0–100结果多样性需要横向出方案时拉到 50 以上--no概念列表排除元素配合正提示使用不要单独依赖一个容易踩坑的地方是 --stylize 和 --chaos 的区别--stylize 控制的是模型对提示的想象加工程度--chaos 控制的是同一批结果之间的差异度。两者作用维度不同具体在项目里出正图时把 stylize 调低更容易保持提示里指定的主体特征需要出提案图时才调高 chaos。4.4 Leonardo 与多工具提示迁移书里有一章专门讲 Leonardo 应用。它跟 Midjourney 的最大差异在于负提示框是露在外面的而不像 Midjourney 用 --no 附加在尾部。另外 Leonardo 支持在生成时做局部重绘Image Guidance这相当于把迭代细化从“改文字”升级成了“改图局部的文字指引”。但从提示工程的角度看两者的结构是完全一致的主体 修饰符 固化剂 负提示。所以书里在工具章节反复强调的其实是同一件事——把方法论掌握住换工具只是换参数语法。我做跨工具迁移时有个习惯先把同一个提示分别跑一轮看两个工具对风格词理解的差异再决定哪些修饰符需要重写。结论往往是 Midjourney 对摄影类词汇敏感Leonardo 对插画和概念设计类词汇响应更好同样的“fine art illustration”在两个工具里出来的完全是两种风格。5. 避坑指南迭代细化时最容易翻车的五个细节5.1 修饰符堆叠导致主体漂移现象提示里加了十来个形容词出来的结果里主体不见了变成一个混合风格的奇怪物体。原因视觉模型对提示各部分的注意力权重不同修饰符比例过高时主体被稀释。Midjourney 的提示里词的排列顺序也影响权重分配越靠前的词越被优先响应你把它埋在形容词堆里的主体模型可能根本没注意到。解决把主体表达式放在提示最前面修饰符控制在 3 到 5 个名词短语必要时用 --no 把容易抢戏的元素排除。一个验证主体是否“站得住”的办法是把所有修饰符去掉只留主体跑一轮——如果这轮输出的基础结构和你最终想要的相差很远说明主体本身定义得就有问题先回头修主体而不是继续加修饰词。5.2 --no 的参数不等于精确排除现象写了 --no dog, cat, bird结果画面角落还是出现了一只动物轮廓。原因Midjourney 对 --no 的实现是“降低这些概念的权重”而不是命令式的硬排除。你在负提示里列得越多模型越容易在这些概念的边缘试探出某个形态反而比不写负提示时更显眼。解决把负提示里的概念换成正提示的另一个明确体。比如不想出现现代建筑正提示里写“ancient ruins with worn stone texture”比单独 --no modern buildings 有效不想出现人物就把场景约束成“empty street, closed shop fronts, no pedestrians”让“空”本身成为画面描述的一部分。负提示负责兜住边界正面描述负责把画面填满。5.3 ReAct 模板在简单任务上反而降质现象加了四步推理的提示后问答变慢偶尔在简单翻译里多出一段没用的分析。原因模型在生成推理过程时也会创造文本简单任务不需要推理链时这些生成内容反而变成噪音。有一次我让模型翻译一句产品标语它先分析了目标受众又拆解了语法结构最后给了一句毫无节奏感的直译。解决按任务复杂度选择模板。事实核查、多条件决策用 ReAct翻译、改写、短问答直接简洁作答。我现在的做法是准备两套系统提示简单任务用“直接回答不超过 N 字”复杂任务才切换到四步推理链让调用方按任务类型二选一。5.4 同一提示跨工具结果不可控现象在 Midjourney 里精调好的提示词复制到另一个图像工具里完全变样甚至直接崩溃。原因不同模型训练数据分布不一样同一个词在不同工具里的视觉语义不相同。比如“vaporwave”在 Midjourney 里会出紫色调霓虹质感在别的模型里可能只是普通的黄昏色调因为两个模型学到的视觉概念关联完全不同。解决跨工具时重新微调提示词而不是直接照搬。先跑几张标准色卡测试工具对风格词的理解比如同一主体分别测“photorealistic”“illustration”“3D render”三种固化剂看看输出差异是否符合预期。尤其要注意带有品牌名、软件名的词——Midjourney 对“octane render”这类词很敏感但换一个工具可能就是无效词。5.5 迭代提示时只加不减现象提示越长改动一个词之后整张图风格完全改变找不到稳定的配置点。原因多个变量同时变化时无法定位是哪一个词影响了哪部分画面。你连续改了五次每次加两个词最后效果不对根本不知道是哪一步引入的。这种“只加不减”的迭代方式还会让提示逐渐失去主体控制力因为后面的修饰词也在分配注意力。解决每次只修改一个变量并记录结果保留前一个版本可回溯跑通后再回头删掉冗余修饰词缩成最短有效提示。我给自己定的规则是加了一个词就必须看一次完整出图结果连续两次改动都没改善预期就回退到上一个版本重来而不是继续往上叠。提示这一条也是第 6 章为什么要做提示版本追踪的直接原因——迭代本身不是问题盲目的无记录迭代才是。6. 把迭代固化进习惯一个 prompt 版本追踪脚本6.1 为什么手动记录比记忆可靠上面第五个坑说的是“只加不减”背后的问题是很少有人记录每一次改动。做提示比写代码更依赖实验记录因为代码有编译错误可以提示提示词没有——它永远给你一张图、一段文本然后等你主观判断好坏。主观判断靠记忆不可靠尤其当你一天要跑几十个版本的时候。我自己的解决方案是把这个过程落成一个简单的追踪脚本每次实验前填一行跑完把结果和下一次动作填回去。# prompt_log.py —— 每次调提示前复制一行跑完补充 actual 和 next_action versions [ { v: 1, prompt: a red fox on a snowy log, change: 基线版本, expected: 写实狐狸雪地木头, actual: 狐狸太小背景很乱, next_action: 主体放大背景由 forest 改为 plain snow ground, }, { v: 2, prompt: a red fox sitting on a snowy log, plain snow background, change: 背景简化, expected: 背景干净狐狸主体突出, actual: 背景干净了但狐狸偏右侧, next_action: 加 composition 约束centered, }, ]这个脚本的逻辑说明每一行代表一次实验v 是版本号change 描述这次改了什么expected 是你改之前对结果的预期actual 是真实结果next_action 是下一次要变的变量。注意 next_action 只能写一个变量这样才能保证可追踪性。把它对应到 Midjourney 就是一次出图网格对应到 ChatGPT 就是一次完整问答的预设上下文。实际操作里我通常一次开四张图的网格只改一个变量然后把四张图里最接近预期的那一张截图放到记录里。这个流程一开始会觉得麻烦但跑过十几组主题之后你会发现那些花了最多时间调试的提示往往就是没做记录靠感觉加词的那几个。记录不是给你事后看的是给你下次改词时做决策用的。6.2 从记录里反推稳定提示值记录攒多之后可以做一件很有用的事反推。如果你在调试插画图标风格时发现每次加入 minimal icon style 都稳定得到背景干净的结果那这就是这个模型下的一个可靠锚点词可以直接固化到模板里。如果你发现某个风格词前三轮有效、第四轮开始失效那不是词的问题是模型随机性和参数比如 --chaos在起作用需要调整的是出图参数而不是提示词。反推出来的词是你自己在这个工具、这个版本下验证过的最小可用提示比任何博客里抄来的 prompt 都可靠。这也是这本书第 6 章“迭代式提示细化”最值得落地的地方——它本身没有给出现成答案给的是一个“每次只动一个变量”的实验纪律而我把它变成了一个脚本。这个习惯我在拆完这本书之后一直留着。每次改提示之前强制自己先写一行 v1跑完再补 actual 和 next_action允许自己顺手试错但不允许不记录。时间长了你会发现真正省时间的不是记住了几十条技巧而是手头有一份自己跑出来的、能回溯能对比的改动链。希望这份思路对你也有用。本文还有配套的精品资源点击获取