Midjourney出图好不好看,关键在提示词怎么写,写得好能事半功倍。这篇文章总结了一套实用的提示词写作方法,包括主体描述、风格关键词、参数设置、负面提示、权重控制等,配上大量案例和对比图,适合想提升AI出图质量的创作者和设计师参考,帮你轻松写出专业级Midjourney提示词,让出图质量和效率都上一个台阶。

岗位关联

需要学习Midjourney提示词,用AIGC工具提升社区内容运营效率。本篇涵盖文生图/文生视频/AI音乐/Prompt创意,帮助你掌握AI创意生产工具链。

目录
  1. 可视化演示
  2. 提示词写作的核心方法论
  3. 主体描述与风格关键词运用
  4. 参数设置与版本选择
  5. 负面提示与权重控制技巧
  6. 案例对比与专业级提示词实战
  7. AI 应用场景
  8. Python 演示
  9. 常见问答
  10. 常见误区
  11. 参考来源

可视化演示

展示提示词分层构建、参数效果对比与权重分配机制,交互调节参数值观察提示词变化。

本节配有交互动效(进入视口后自动加载,约 3KB)。

\u63d0\u793a\u8bcd\u5206\u5c42\u7ed3\u6784 \u4e3b\u4f53\u2192\u98ce\u683c\u2192\u53c2\u6570\u2192\u8d1f\u9762\u2192\u6743\u91cd \u4ece\u5b8f\u89c2\u5230\u5fae\u89c2\u9010\u5c42\u586b\u5145 Prompt = Sub + Style + Param \u5206\u5c42\u7ed3\u6784\u63d0\u5347\u51fa\u56fe\u8d28\u91cf

提示词写作的核心方法论

提示词(Prompt)是决定 Midjourney 出图质量的关键因素。与 Stable Diffusion 等开源模型不同,Midjourney 采用闭源模型并对自然语言有较强的理解能力,但这并不意味着随意输入文字就能得到理想结果。专业的提示词写作遵循结构化方法论,将提示词分为三个核心要素:主体描述、风格关键词和参数设置。

主体描述(Subject)是提示词的基础,定义画面的核心内容和构图方式。好的主体描述应该明确、具体,避免模糊的表述。例如「一只猫」过于宽泛,「一只橘色的虎斑猫坐在窗台上眺望城市夜景」则提供了明确的主体、姿态和场景信息,为模型提供了足够的生成线索。

风格关键词(Style Keywords)控制画面的艺术风格和视觉氛围。Midjourney 支持大量的风格描述词,包括艺术流派(impressionism, cyberpunk)、视觉风格(cinematic, ethereal)、艺术家名字(by Van Gogh, by Studio Ghibli)以及技术参数(8k, photorealistic)。风格关键词的选择需要与主体描述协调,过多或冲突的风格词会导致画面混乱。

参数设置(Parameters)是 Midjourney 独有的控制维度,通过 --ar、--v、--stylize 等参数精确控制输出尺寸、模型版本和风格化程度。参数以双横线开头,放在提示词末尾。写提示词就像给厨师写菜谱,主体是食材、风格是菜系、参数是火候,三者配合才能做出好菜。

主体描述与风格关键词运用

主体描述的核心原则是「从宏观到微观」。先定义画面的整体场景和主体,再逐步添加细节描述。例如描述一个城市街景时,先写「繁华的未来城市街道」,再补充「霓虹灯闪烁、飞行汽车穿梭、行人穿着科技感服饰」等细节。这种从粗到细的描述方式符合模型对图像生成的分层理解机制。

风格关键词的运用需要理解关键词之间的优先级关系。Midjourney 对提示词前部的关键词赋予更高的权重,因此最关键的风格描述应放在提示词开头附近。将最重要的风格词放在主体描述之后、其他修饰词之前,能确保核心风格被准确执行。当需要强调某个特定元素时,可以使用权重控制语法(双冒号::)来调整其在整体提示词中的影响比例。

参考艺术家名字是精准控制画面风格的有效技巧。输入「by [Artist Name]」可以让模型模仿特定艺术家的风格。例如「by Hayao Miyazaki」会产生吉卜力工作室风格的柔和色调和手绘质感,「by Greg Rutkowski」则产生史诗级奇幻画风。多个艺术家可以组合使用,如「by Van Gogh and Picasso」会产生混合风格,但组合过多艺术家可能导致风格冲突,建议不超过两个。

常见的风格关键词组合包括:电影感(cinematic, film grain, depth of field, volumetric lighting)、超现实(surreal, dreamlike, ethereal, otherworldly)、赛博朋克(cyberpunk, neon, futuristic, dystopian)、水彩(watercolor, soft colors, fluid, organic)。选择风格组合时应确保关键词之间的视觉方向一致,避免相互矛盾的描述导致模型生成困惑的图像。

参数设置与版本选择

Midjourney 的参数系统是区别于其他 AI 绘图工具的核心特性。最常用的参数包括 --ar(宽高比)、--v(模型版本)、--stylize(风格化程度)和 --chaos(变化度)。--ar 参数控制输出图像的宽高比,如 --ar 16:9 生成宽屏图像,--ar 9:16 生成竖屏图像,--ar 1:1 为默认正方形。宽高比的选择应匹配最终展示场景的需求。

--v 参数选择模型版本,目前主流版本为 v5 和 v6。v6 是最新版本,对自然语言理解更强,能更好地理解长句和复杂描述,适合写自然语言风格的提示词。v5 系列对短关键词的响应更直接,在精确控制特定风格时仍有优势。不同版本的提示词写法不完全一样,v6 更接近自然语言对话,而 v5 更依赖关键词堆叠。版本迭代会改变参数行为,需根据版本调整提示词写法。

--stylize(缩写 --s)参数控制风格化的程度,范围 0-1000,默认 100。较低的值(0-50)使图像更贴近提示词的字面描述,适合需要精确还原场景的用途;较高的值(500-1000)让模型发挥更多艺术创造力,产生更风格化的画面,但可能偏离原始描述。商业设计场景通常使用中等值(100-250),在精确控制和艺术性之间取得平衡。

--chaos 参数控制初始网格四张图的差异程度,范围 0-100,默认 0。值为 0 时四张图非常相似,值为 100 时四张图风格差异很大。在需要快速探索多种创意方向时可以使用较高的 chaos 值,在需要精细调整时使用较低的值。此外 --quality(缩写 --q)控制生成质量,--q 2 为最高质量但耗时更长,--q 0.5 为快速预览模式。

风格化程度与偏离度的关系
Ddeviation∝S1000×WartisticD_{deviation} \propto \frac{S}{1000} \times W_{artistic}
S 为 stylize 参数值,W_artistic 为模型的艺术创造权重。stylize 值越高,输出偏离提示词字面描述的程度越大。
宽高比与像素尺寸
Wpx=max⁡(Wbase,Hbase×r),r=arwarhW_{px} = \max(W_{base}, H_{base} \times r), \quad r = \frac{ar_w}{ar_h}
r 为宽高比(如 16:9 时 r=1.78),Midjourney 会根据宽高比调整输出像素尺寸同时保持总像素数大致恒定。

负面提示与权重控制技巧

负面提示(Negative Prompt)在 Midjourney 中通过 --no 参数实现,用于排除不想要的元素。例如 --no text, watermark 可以减少画面中文字和水印的出现。但负面提示词的处理能力有限,复杂场景仍需通过正面提示精确描述想要的结果来引导生成,不能完全依赖 --no 参数精确排除所有不想要的元素。

权重控制是 Midjourney 高级提示词技巧的核心。使用双冒号:: 语法可以为提示词的不同部分分配权重。例如 hot::2 dog 表示「hot」的权重是「dog」的两倍,生成的图像会更强调「热」的概念。权重控制就像调音台的推子,每个推子控制一种声音的音量大小,调出和谐的混音效果。通过调整各部分的权重比例,可以精确控制画面中不同元素的影响强度。

权重数值可以是正数也可以是负数。正权重增强该元素的呈现,负权重则抑制该元素。例如 nature::1 city::-0.5 表示增强自然元素、削弱城市元素。权重的绝对值越大,该方向的影响越强。需要注意的是,极端的权重值(如::10 或::-10)可能导致画面失真或产生不可预期的结果,建议在 -2 到 2 的范围内调整。

文本权重还可以通过括号和数值的组合来实现。例如 (colorful:1.5) 表示将「colorful」的权重提高 1.5 倍。这种写法在 v5 及更早版本中常用,v6 版本更推荐使用双冒号语法。多层嵌套权重也是可行的,如 ((detailed face):1.3):1.2,但过于复杂的嵌套可能导致模型理解困难,建议保持权重结构简洁,一般不超过两层嵌套。

双冒号权重分配
Wtotal=∑i=1nwi,pi=wiWtotalW_{total} = \sum_{i=1}^{n} w_i, \quad p_i = \frac{w_i}{W_{total}}
w_i 为第 i 段提示词的权重值,p_i 为该段在整体提示词中的影响比例。各段权重归一化后决定模型对每段的关注度。

案例对比与专业级提示词实战

通过案例对比可以直观感受提示词优化的效果。初学者常见的提示词「beautiful landscape, nice colors, good quality」过于模糊,生成的图像缺乏明确方向。专业级提示词「sweeping mountain vista at golden hour, dramatic clouds casting long shadows, alpine lake reflecting snow-capped peaks, cinematic composition, shot on Hasselblad, 8k resolution --ar 16:9 --v 6 --stylize 200」提供了明确的主体、光影、构图和设备参数,生成结果的精确度和质量显著提升。

从初学者到专业级的提示词进阶路径分为三个阶段。初级阶段学习基本结构和参数语法,能写出包含主体和 3-5 个风格词的提示词。中级阶段掌握权重控制和负面提示,能通过双冒号和 --no 参数进行精细调整。高级阶段建立个人提示词库和模板系统,针对不同场景维护一套经过验证的提示词模板,实现高效批量出图。

商业设计场景的提示词模板通常包含品牌风格约束、构图规范和参数预设。例如电商产品图的模板:[product name] on clean white background, studio lighting, product photography, sharp focus, commercial quality --ar 1:1 --v 6 --stylize 50 --q 2。品牌视觉的模板:[brand concept], [brand color palette], modern minimalist design, consistent visual identity --ar 16:9 --v 6 --stylize 100。使用模板可以确保团队出图的风格一致性,同时通过替换变量快速适配不同需求。

实战中还需要掌握迭代优化的技巧。首次生成后,通过放大(Upscale)和变体(Variation)功能在已有结果基础上微调。选择最接近目标的图像,生成 V1-V4 变体进一步细化。每次迭代时微调提示词中的 1-2 个关键词或参数,观察变化方向,逐步逼近理想效果。这种增量优化策略比一次性追求完美提示词更高效,也更容易控制生成方向。

AI 应用场景

商业插画批量生成的提示词模板化

阶段:图像生成

解决的问题:商业插画创作中,设计师每次手写提示词导致出图质量不稳定,风格不一致,反复试错消耗大量时间。通过建立结构化提示词模板,将创作流程标准化。

具体案例:某广告公司设计师维护一套品牌级提示词模板库,包含产品广告、人物插画、场景渲染等 6 个模板。每次接到新需求时,只需替换模板中的主体描述和少量风格修饰词,5 分钟内完成提示词构建。模板化后出图成功率从 30% 提升到 75%,首次满意率大幅提高,客户交付周期从 3 天缩短到 1 天。

社交媒体内容运营的快速出图

阶段:图像生成

解决的问题:社交媒体运营需要每日产出大量配图,但设计师人力有限。通过 Midjourney 提示词技巧,运营人员可以自主生成高质量的配图,降低设计依赖。

具体案例:某生活方式类公众号运营人员掌握了 Midjourney 提示词写作技巧后,使用「minimalist lifestyle photography, soft natural light, warm tones, cozy atmosphere, instagram aesthetic --ar 1:1 --v 6 --stylize 150」等模板,每天产出 5-8 张高质量配图,不再需要设计师介入日常配图,月度内容配图效率提升 300%。

Python 演示

python123 行
import refrom dataclasses import dataclass, fieldfrom typing import Optional @dataclassclass MidjourneyParams:    """Midjourney 参数容器"""    ar: str = "1:1"    v: str = "6"    stylize: int = 100    chaos: int = 0    quality: float = 1.0    no: Optional[str] = None     def to_string(self):        parts = [f"--ar {self.ar}", f"--v {self.v}", f"--s {self.stylize}"]        if self.chaos > 0:            parts.append(f"--c {self.chaos}")        if self.quality != 1.0:            parts.append(f"--q {self.quality}")        if self.no:            parts.append(f"--no {self.no}")        return " ".join(parts)  @dataclassclass PromptSegment:    """提示词片段(支持权重)"""    text: str    weight: float = 1.0     def to_string(self):        if self.weight == 1.0:            return self.text        if self.weight == int(self.weight):            return f"{self.text}::{int(self.weight)}"        return f"{self.text}::{self.weight}"  class PromptBuilder:    """Midjourney 提示词构建器"""    def __init__(self):        self.subject = ""        self.style_segments: list[PromptSegment] = []        self.params = MidjourneyParams()     def set_subject(self, subject: str):        self.subject = subject        return self     def add_style(self, text: str, weight: float = 1.0):        self.style_segments.append(PromptSegment(text, weight))        return self     def set_params(self, **kwargs):        for key, val in kwargs.items():            setattr(self.params, key, val)        return self     def build(self):        parts = [self.subject]        for seg in self.style_segments:            parts.append(seg.to_string())        parts.append(self.params.to_string())        return ", ".join(            [p for p in parts[:1]] +            [s.to_string() if isinstance(s, PromptSegment) else s for s in self.style_segments]        ) + " " + self.params.to_string()  class PromptAnalyzer:    """提示词分析器:解析已有提示词"""    PARAM_PATTERN = re.compile(r"--(\w+)\s+(\S+)")     @staticmethod    def analyze(prompt: str):        params = {}        clean_prompt = prompt        for match in PromptAnalyzer.PARAM_PATTERN.finditer(prompt):            key, val = match.group(1), match.group(2)            params[key] = val            clean_prompt = clean_prompt.replace(match.group(0), "").strip()         segments = clean_prompt.split("::")        weighted = []        for seg in segments:            parts = seg.strip().rsplit(" ", 1)            if len(parts) == 2 and _is_number(parts[1]):                weighted.append((parts[0].strip(), float(parts[1])))            else:                weighted.append((seg.strip(), 1.0))        return {"params": params, "segments": weighted} def _is_number(s):    try:        float(s)        return True    except ValueError:        return False  # 构建示例提示词builder = PromptBuilder()builder.set_subject("a serene Japanese garden with cherry blossoms")builder.add_style("cinematic composition", 1.5)builder.add_style("soft morning light")builder.add_style("by Hayao Miyazaki", 0.8)builder.set_params(ar="16:9", v="6", stylize=200, no="text, watermark") prompt = builder.subject + ", "prompt += ", ".join(s.to_string() for s in builder.style_segments)prompt += " " + builder.params.to_string() print("Generated Prompt:")print(prompt)print() # 分析已有提示词existing = "hot::2 dog::1 cityscape --ar 16:9 --v 6 --s 150"analysis = PromptAnalyzer.analyze(existing)print("Analyzed Prompt:")print(f"  Segments: {analysis['segments']}")print(f"  Params: {analysis['params']}")
目的:用 Python 实现 Midjourney 提示词的构建与分析工具,包含参数管理器、权重片段、链式构建器和反向解析器,演示提示词的结构化构建和解析流程。
  1. class MidjourneyParams:定义 Midjourney 参数容器类,存储 ar(宽高比)、v(版本)、stylize(风格化)等参数。
  2. def to_string(self):将参数对象序列化为 Midjourney 命令行格式字符串,如 --ar 16:9 --v 6 --s 200。
  3. parts = [f"--ar {self.ar}", f"--v {self.v}", f"--s {self.stylize}"]构建基本参数字符串列表,ar、v、stylize 是最常用的三个参数。
  4. if self.no:负面提示词参数 --no 仅在有值时输出,避免生成空的 --no 参数。
  5. class PromptSegment:提示词片段类,每个片段包含文本和权重值,支持双冒号权重语法。
  6. def to_string(self):将片段序列化为字符串,权重为 1.0 时只输出文本,否则附加::weight。
  7. if self.weight == 1.0:权重为默认值 1.0 时不附加权重标记,保持提示词简洁。
  8. return f"{self.text}::{int(self.weight)}"整数权重时输出整数形式,如 hot::2,符合 Midjourney 权重语法。
  9. class PromptBuilder:提示词构建器类,采用链式调用模式组合主体描述、风格关键词和参数。
  10. def set_subject(self, subject: str):设置主体描述,这是提示词的核心部分,定义画面的主要内容。
  11. def add_style(self, text: str, weight: float = 1.0):添加风格关键词片段,可指定权重值控制该关键词在整体提示词中的影响比例。
  12. def set_params(self, **kwargs):批量设置参数,通过关键字参数灵活配置 ar、v、stylize 等参数。
  13. class PromptAnalyzer:提示词分析器类,用于反向解析已有提示词的结构和参数。
  14. PARAM_PATTERN = re.compile(r"--(\w+)\s+(\S+)")正则表达式模式,匹配 --param value 格式的 Midjourney 参数。
  15. @staticmethod使用静态方法装饰器,分析功能不依赖实例状态,可直接通过类名调用。
  16. def analyze(prompt: str):分析提示词方法,提取参数和带权重的片段,返回结构化解析结果。
  17. segments = clean_prompt.split("::")按双冒号分割提示词,分离出带权重的不同片段。
  18. if len(parts) == 2 and _is_number(parts[1]):检查分割后的最后部分是否为数字,以判断是否为权重值。
  19. weighted.append((parts[0].strip(), float(parts[1])))将带权重的片段记录为(文本,权重)元组,无权重的默认为 1.0。
  20. return {"params": params, "segments": weighted}返回包含解析出的参数字典和片段列表的结果对象。
  21. def _is_number(s):辅助函数,判断字符串是否可转换为浮点数,用于权重解析。
  22. builder.set_subject("a serene Japanese garden with cherry blossoms")设置主体描述为日本花园樱花场景,提供明确的画面核心内容。
  23. builder.add_style("cinematic composition", 1.5)添加电影构图风格并赋予 1.5 倍权重,增强构图效果在生成中的影响。
  24. builder.set_params(ar="16:9", v="6", stylize=200, no="text, watermark")设置宽屏比例、v6 版本、中高风格化度并排除文字水印。

常见问答

Midjourney 的提示词应该用自然语言还是关键词堆叠?
取决于使用的模型版本。v6 版本对自然语言理解更强,适合用完整的自然语言句子描述;v5 及更早版本对短关键词的响应更直接,关键词堆叠效果更好。但即使是 v6,关键的风格词和参数仍需明确列出。最佳实践是主体描述用自然语言,风格关键词用逗号分隔的短语。
--stylize 参数值越高越好吗?
不一定。--stylize 值越高,模型越发挥艺术创造力,画面更风格化但也可能偏离原始描述。需要精确还原场景时用低值(50-100),需要艺术创意时用高值(300-500)。商业设计场景通常用中等值(100-200),在精确和创意间平衡。极端高值(800+)可能导致画面失真。
双冒号 :: 权重和括号权重有什么区别?
双冒号 :: 是 Midjourney 原生的权重语法,将提示词分段并分配权重,如 hot::2 dog::1。括号权重如 (colorful:1.5) 是早期版本的语法,v6 更推荐使用双冒号。双冒号语法更清晰、更易于阅读和维护,且支持负权重来抑制元素。两种语法不建议混用。
如何选择 --ar 宽高比?
根据最终展示场景选择。社交媒体头图和产品图常用 1:1,横幅广告和风景图用 16:9,手机壁纸和海报用 9:16,打印用 A4 比例约 3:4。宽高比不仅影响尺寸还影响构图,模型会根据宽高比调整画面元素的排列方式。
提示词中英文哪种效果更好?
英文效果通常更好,因为 Midjourney 的训练数据以英文为主。中文提示词虽然 v6 也支持,但对风格关键词和参数的响应不如英文精确。建议主体描述可用中文(v6),但风格关键词和参数值使用英文以获得最佳效果。

常见误区

误区提示词越长越详细出图效果越好

正解提示词需要主体、风格、参数三要素配合,堆砌关键词反而会导致画面混乱、元素冲突。好的提示词应该在精炼和详细之间取得平衡,核心信息突出,辅助描述适度。通常 15-30 个词的提示词效果最佳,过长的提示词会让模型难以确定优先级。

为何常见:用户误以为更多关键词等同于更好效果,缺乏对模型注意力机制的理解。实际上模型对提示词有注意力衰减,过长的提示词后段内容权重极低。

误区不同 Midjourney 版本的提示词写法完全一样

正解版本迭代会改变参数行为和提示词解析方式。v6 对自然语言理解更强,v5 更依赖关键词堆叠。v6 中一些 v5 常用的语法(如括号权重)行为发生了变化,需要根据版本调整提示词写法。切换版本时应重新测试和优化已有提示词模板。

为何常见:用户忽视版本更新带来的提示词语法变化,将旧版本的模板直接用于新版本,导致效果不如预期。版本间的差异在细节参数上尤其明显。

误区负面提示词 --no 能精确排除所有不想要的元素

正解负面提示处理能力有限,--no 参数更多是起到降低概率的作用而非完全排除。复杂场景中,仅靠 --no 难以精确控制画面内容,仍需通过正面提示精确描述想要的结果来引导生成。--no 适合处理水印、文字等通用元素,不适合排除特定的复杂内容。

为何常见:用户高估 --no 参数的排除精度,将其类比为 Stable Diffusion 中的负面提示词功能。但 Midjourney 的 --no 机制不同,影响力更弱。

误区参考艺术家名字一定能完美复现其风格

正解Midjourney 对艺术家风格的模仿是近似的,受到训练数据覆盖度和版权限制的影响。某些艺术家的风格可能没有被充分学习,或者多个艺术家组合时产生冲突。参考艺术家名字是风格引导的手段之一,但不是保证,应结合其他风格关键词共同描述以达到更稳定的风格效果。

为何常见:用户对 AI 的风格模仿能力期望过高,忽视了模型训练数据的局限性。实际效果还受提示词中其他关键词和参数的影响。

参考来源