llms.txt 完整文档索引请参见 llms.txt
指南
指南
xiaohui
于收录

为什么 AI 做的第一版视觉总是丑的

你让 AI 做视觉,第一版总是丑的。问题不在提示词,也不在模型——AI 不知道「好」长什么样,也没有一个独立的裁判。dream-loop 用「先梦出目标图 + 独立批评者」的闭环补上了这一环。

正文

你给 AI 描述了一个黄昏下的奇幻小镇,让它在浏览器里搭出来。四十分钟后它交给你一个能跑的东西:地面是一整块平整的色块,光像是从塑料布上反射过来的,没有一片叶子在动。你说不清哪里不对,只是知道它不好看。

第一版丑在哪里

你在浏览器里跑着刚出来的东西。它不报错,帧率也够,鼠标拖拽能旋转视角,滚轮能拉近拉远。你盯着看了半分钟,说不清哪里不对。房子有墙有顶,角色有手有脚,所有零件都在,组合起来就是不像。你截图发给同事,同事说一句「挺酷的」,然后就没有然后了。

于是你开始提要求。地面太脏了,加一点反光。光太冷了,改暖。树太整齐,打散一点。AI 每一条都照着做了,每一版都比上一版好一点点,每一条改动单独看也都是对的。你改了八轮,八轮的总和没有把画面从玩具推到作品。

这种来回里有一个特征。你说的每一句话都是真的,它执行的每一个动作也都是对的,但你们没有共同的参照物。你脑子里有一张画面,它手里有一个中间产物,这两个东西从来没有被放在一起比较过。你们在交换关于目标的描述,而不是在比较目标本身。

你能感觉到它在做局部优化。把光调亮,把颜色调饱和,把材质换成看起来更复杂的那一种。这些动作都是安全的:它们不会让画面变坏,也很难让画面变好。你在屏幕另一边等一个质变的时刻,那个时刻一直没来。

一小时过去,你面前是两个选择。接受这个结果,告诉自己先这样吧;或者自己动手,把最重要的几个材质和光照重做一遍。多数人走前一条路。这跟能力无关,跟耐心有关,因为没有人愿意花一个下午教一个看不见画面的人怎么审美。

大家都以为是这三件事

关于这种失败,解释基本收敛到三条。提示词写得太粗,把「有氛围」这种词直接丢给 AI,它当然不知道你要什么。模型不够强,换成最新的旗舰模型就好了。参考图给得太少,应该甩十几张图过去让它对齐。

这三条都对,也都用得上。把提示词写成三百字的结构化描述,画面会好一点。换成最强的模型,画面会好一点。给三张参考图,画面会好一点。三个都做了,画面还是不到位。这不是说三招没用,是说它们加起来也解释不了那个缺口。

更麻烦的是,这三招的失败方式是同一个。它们都在往上下文里加信息,而不改变谁来下判断。你加得越多,AI 越接近你的语法,离你的眼睛还是那么远。

这三招还有一个共同的代价。它们都要求你先把自己的标准翻译成语言,而翻译恰恰是最贵的那一步。你说得清的地方,本来就不需要 AI 去猜;你说不清的地方,写多少字都还是说不清。

丑不是生成能力的问题

如果把这件事当成表达能力不足,你就永远在找更长的提示词、更好的模型、更准的参考图。这条路走到底,会撞上一个更难接受的结论:AI 不知道「好」长什么样。

它知道「黄昏」这个词对应什么样的颜色分布,知道「反光」之后像素该往哪个方向偏。它不知道一张图到什么程度算好。这不是知识问题,是判断问题。判断需要一个东西用来对照——一个好必须具体成「这一个」。

语言能描述的是类别,判断需要的却是程度。黄昏、暖色、湿润、开阔,这些都是类别。同一张图里,一个类别可以落在几百种不同的程度上,好看与难看的界线就藏在那几百种之间。你没办法用词把这条线画出来,你只能指着线所在的位置说一句:像这样。

人在做设计的时候,工作台上摆着两样东西。一样是参考图,一张自己截下来的、明确的「就是要这种感觉」。另一样是坐在旁边的人,他会指着屏幕说这里不对。两样东西都不是语言。第一样是可见的目标,第二样是外部判断。

一段描述做不到第一件事。自己一个人判断也做不到第二件事,不是因为你水平不够,是因为你兼任执行者和验收者,标准会漂。你做了三个小时,投入了三个小时,你会不自觉地开始为已经做出来的东西找理由。这是人的常态,不是谁的缺点。

「AI 不懂审美」这种说法帮不上忙。给它几张图排序,它的判断离人没有那么远。它做不到的是把那个判断应用到自己刚做出来的东西上,因为那个东西是它做的,它已经在里面了。

把这个缺口说清楚之后,那三招的位置也就清楚了。提示词决定输入的质量,模型决定上限,参考图提供风格素材,它们都作用在生成这一侧。而让第一版从丑到不难看的那个跃迁,发生在判断侧。你在生成侧加多少东西,都补不上判断侧的空白。

所以缺的不是措辞。缺两样东西:一张看得见的目标,和一个和你不在同一套上下文里的批评者。

五个动作

dream-loop 是 2026 年 9 月 7 日建仓的一个 agent skill,作者是 @anshuc,仓库为 achimala/dream-loop,MIT 许可,JavaScript 写成。建仓不到一周,已经在 GitHub 上拿到 921 star 和 104 fork。它的自述只有一句:通过建立一个闭环,做出视觉效果出色的游戏、应用或场景。

这个闭环有五个动作:

  1. AI 用图像生成「做梦」,做出一张高质量的目标截图
  2. AI 带着这个目标去搭建
  3. 另一个独立的 AI 批评者把实时截图与目标对比,给出反馈
  4. AI 回到第 2 步循环,直到批评者满意
  5. 可选——回到第 1 步,基于当前状态梦出更好的目标

安装是一行命令:

npx skills add achimala/dream-loop

也可以把仓库 clone 到 agent 的 skills 目录,或者把链接直接丢给 agent,让它自己想办法装。前提是那个 agent 要有图像生成能力、要有视觉输入、最好还有子 agent。想要自定义 3D 建模就装 Blender,作者在说明里给了一条经验:优先用 Blender 的 MCP 或脚本接口,不要用 computer use,因为前者效果更好。

子 agent 是这套方法的技术前提。批评者得是另一个进程,有自己的上下文,拿到的是文件而不是一段对话的延续。作者把这个条件标成「可选但强烈建议」,这个措辞里的意思是:能做成独立进程就做成独立进程,做成同一个对话里的一个角色,效果会明显打折。

目标图为什么必须是一张图

第 1 步用的是图像生成,不是文字。这一步常被简化成「做个效果图」,其实它承担的是整件事里最难的一段:把只能被看见的东西,变成可以被比较的东西。

一张目标图还自带一个副作用。它是别人做的,所以对执行者来说它是一个外部事实,不是自己的意图。执行者和它之间没有辩护关系。当实时截图和它对不上时,问题不存在「我觉得还行」这个选项。

第 3 步是整套东西的支点

五步里,第 1 步和第 2 步都不新鲜。先做效果图再实现,是设计团队用了很多年的流程;用截图和参考图对齐,前端工程师也做了十几年。真正改变结果的是第 3 步,也是最少被用起来的一步。

一个和你不共用上下文的模型,看到的只有两张图:目标图,和当前实际渲染出来的截图。它的任务不是回答「你觉得怎么样」,是回答「和这张图比,差在哪里」。它给出的东西是具体的:这里的材质缺少反射,暗部被压死了,前景的层次不够,相机的俯角比目标高了八度。

这些意见能直接变成修改动作。这是关键,反馈必须可执行。一句「这个看起来还是有点假」不是反馈,它只会让执行者继续猜。

反馈的粒度也决定了循环能不能收敛。给一句「整体不够好」,执行者只能随机重做一遍;给出暗部被压死、相机俯角高了八度,它就知道该动哪里。批评者的价值有一半在这里——它必须把模糊的不满意,翻译成几个能动手的差项。

批评者不必比执行者强

第 3 步经常被误解成「找一个更强的模型来把关」。不是。批评者不需要比执行者强,它需要的只是站在外面。同一个能力水平的模型,只要上下文里没有它自己的推理过程,看到两张图时给出的判断就更接近真实。

这里有一个反直觉的地方。你会觉得水平低一点的评审看不出问题。实际发生的通常相反:批评比生成容易得多。指着一张图说这里的反光糊了,比亲手把这个反光做出来容易。执行者被卡住的地方,往往正是因为它要一边做,一边顾着「我为什么这么做」。

所以第 3 步的关键不是模型档位,是上下文卫生。批评者只应该拿到目标图和实时截图,最多加一句「和这张比,差在哪」。把项目历史、需求文档、执行者的解释一起给它,它会慢慢变回执行者自己。

同一个上下文里的自我评价不成立

为什么不能把第 3 步交给同一个 agent 自己做。你在对话里加一句「检查一下你的成果」,它会给自己一个不错的分数,理由还很充分。我知道这里为什么这么处理,因为需求里说要有氛围;这里留白是因为要显得开阔。上下文里装满了它自己的推理过程,那等于给它递了一份自我辩护材料。

它评的不是结果,是意图。它记得自己想做的是什么,于是按那个意图打分。画面离意图有多远,它反而看不见,而那正是它自己本该负责的那部分。

评分标准也是它自己编的。一个没有外部锚点的评审,只能拿自己想象中的好当标尺,而这个标准会随着它对自己的作品越来越熟悉而下降。它还会把「通过」放得越来越松,因为它优化的是看起来完成了,不是完成了。

换一个上下文干净的模型,这三件事一起消失。它不知道这个项目经历过什么,不知道作者想做什么,看到的只有两张图。它没有立场可以维护。所以它会说实话,至少在好看不好看这件事上,它比原作者更接近一个陌生读者。

这件事有一个可以自己验证的版本。同一个模型,同一个产物,一次让它在完成任务的那段对话里自评,一次开一个干净的上下文只给它目标图和产物。后者的评分通常更低,措辞更具体,指出的问题也更能对应到画面上真实的差异。差别不在能力,在它还能不能看见自己的辩护。

目标图自己也要迭代

第 1 步里那张目标图不是需求文档。它不描述要有什么,它直接展示长什么样。这一步把说不出口的质量标准变成了一张可以逐项对比的图。提示词做不到这件事,因为「有氛围」这个词在语言里没有对应的像素分布,但在图里它就在那。

第 5 步是整份设计里最有意思的地方:目标是可变的。第一版搭出来之后,你对天花板的判断会变。原先那张目标图现在看来可能太保守,因为实现的过程本身暴露了一些你一开始不知道的可能性。这时候回到第 1 步,基于现状再梦一张更好的目标,重新走一遍循环。

人在做设计时也是这样,只是这个过程通常被藏在「灵感」这个词后面。你不会一开始就知道最终要什么,你是看到第三版的粗糙实现之后,才知道第四版该往哪走。dream-loop 把这件本来靠直觉完成的事,拆成了两个可以重复执行的步骤。

循环什么时候停

第 4 步的终止条件写的是「直到批评者满意」。这是一个软条件,意味着流程不会自己收敛到一个可以证明的最优解。它会停在一个外部观察者认为够了的位置。

这个设定比它看起来更合理。视觉这类任务没有正确解,只有够好和还不够。人做设计时的终止条件也是软的:评审说过了,就发出去。给这类任务硬编一个量化标准,通常只会得到一堆刷指标的产物。

按这个结构跑,你最需要克制的地方是不去打断循环。人在旁边看会手痒,看到第三轮觉得方向不对就下场改。你一改,批评者就失去了唯一的对比基准,循环退回到你提要求、它执行的老样子。要动手,也应该以修改目标图的方式动手,而不是直接改产物。

一次真实的运行

仓库里的示例提示词要求的是一段图形演示。等距视角相机,体素感但带真实着色的美术风格,反光的湿地面,角色放在一个有意思的场景里,奇幻设定,想到 Elden Ring、Diablo 那种感觉。跑在浏览器里的 Three.js,帧率超过 60。不下载素材,限时一小时。

操作是点击移动角色、相机懒跟随、拖拽旋转、滚轮缩放。暂时不做玩法。世界要有「活着」的感觉,有运动、有动画、有细微的环境行为。玩家周围看起来要开阔,但只允许在有限范围内移动。提示词的收尾两句是:不需要跟我确认美术风格,不用问问题,直接做。

那句「不用问问题」是整套方法能运转的前提。如果 agent 每隔十分钟回来问一次美术风格,它就把判断权交还给了你,那个被做进图里的目标立刻退化成一段对话。把确认环节删掉,目标图才能成为唯一的标准。

产出是一个叫 Vesper 的等距奇幻场景,带一个在线演示。提示词里那些词——有氛围、活着、开阔——恰好是最难用语言说清的部分。这套方法没有试图把话说清楚,它把这几件事交给了一张目标图和一个外部评审去处理。

跑出这个结果的模型是 Codex 里的 GPT-6 Astra。作者写得很实在:目前只在这个组合上测过,Claude Fable 5.1 这类强模型可能也行。他没有做兼容性宣称。

这句限制本身说明了问题。如果效果来自某一个模型的画图能力,作者会去强调那个模型。他写的是可能也行,说明他认为起作用的是这个闭环的结构,不是某一个具体的模型。

把 loop 抽出来

把这个闭环从 3D 视觉里抽出来,剩下三个零件:可见的目标,独立的评审,循环迭代。

适用条件很清晰:质量标准存在,但很难用语言描述。只要满足这一条,这套东西就能搬过去。

UI 还原度是一个典型场景。设计稿就是目标图,实现出来的页面就是实时截图,独立的评审对比两边的间距、字号、圆角、颜色的细微差别。这个动作人在做,但做得很累,很容易在第二十个页面上开始放水。交给一个每页都会重新看的批评者,标准不会衰减。

动画手感是更难的场景,因为「手感」这个词几乎是反语言的。但你可以把目标具象成一段录屏,让批评者对比两条曲线的节奏和缓动。文案调性也是这样,给一段范文,让一个不知道你写作意图的人读你的稿子,问他哪里不像。

三个零件的顺序不能颠倒。先有目标,再有评审。没有目标图的评审会退化成主观争吵;有目标图却没有独立评审,就是你一直在做的那件事。

这些例子之外还有一条更松的判据。只要你能说出一句「这里不对,但我讲不清哪里不对」,它就是一个可以做目标图、可以找一个外部评审的任务。

什么时候不该用它

这套东西不是万能的。有些任务的质量标准可以被语言穷举,就不需要目标图。一段代码能不能通过单元测试,一个接口的返回格式对不对,这些用断言就够,用不上一个看图的批评者。

还有一些任务迭代代价太高。改一版要重建三个小时,或者一改就不可回退,多轮对比的成本会超过它带来的收益。这套结构最划算的地方,是那种做一版十分钟、跑起来就能看的工作。

更普遍的坏习惯

比视觉更普遍的一个问题出现在 agent 工作流里。很多流程在收尾那一步写的是「让 agent 自己检查一下」,然后把这个自评分当成验收结果。

那个分数基本没有信息量,原因前面已经说完了。模型知道自己的意图,会按意图评分;它的上下文里装着它自己的推理链,那是一份现成的辩护材料;它没有外部锚点,标准是自己定的;它还会随着轮次推进把通过放得越来越松。

模型在这里没有撒谎。它汇报的是自己意图的状态,不是产物的状态。这两件事在它的上下文里是同一件事,所以它给出的分数会稳定地偏高,高得不多不少,刚好够让你以为再改一轮就能过。

这也是为什么很多工具里的「已完成」天然不可靠。你看到的大多数完成标记都是执行者自己盖的章,中间没有一个环节来自外部。流程里看起来有验收,实际上验收和执行是同一次思考里的两个相邻动作。

把评分者换成一个上下文干净、只拿到目标物和产物的模型,成本几乎不变。输出质量的变化幅度,通常比换一个更强的模型要大。这句话听上去有点绝对,但你可以自己跑一次对照:同一个产物,一次让原 agent 自评,一次开一个空上下文只给两张图。两次的评分和措辞会完全不同。

这也解释了一个常见的现象。团队花很多时间换模型、调系统提示词、加工具,效果提升有限。真正缺的那一环,是一个愿意说「这里不对」的外部判断者,它还必须是看不见执行者努力过程的。

这个结构还有一个附带的好处。批评者每轮留下的是几条具体差项,多轮累积下来,这些差项本身就是你那个说不出口的标准的一份文字记录。那份记录你自己未必写得出来。

这背后有一个更基础的位移。生成的成本在快速下降,判断的成本几乎没有动。你可以在一分钟里拿到十个版本,但你只有一双眼睛,一双眼睛一天只能认真看几十个版本。把判断也分出去,成了唯一能跟上生成速度的办法,前提是分出去的那一份判断得是独立的。

同一个结构也能用在你自己的可见度上。品牌在 AI 搜索里被怎么描述,是一个你无法自评的问题,你搜自己,看到的永远是你以为的样子。策思路 C456(c456.com)做的是这一类诊断与方案,让中小品牌被 AI 找到:先拿到 AI 实际生成的答案作为对照,再用外部标准判断差在哪里,而不是靠自己去猜。

从今天起改一个动作

下一次你让 AI 做那种跑得起来但不好看的东西,不要再往上加两百字的形容词。先让它用图像生成做一张目标图,然后把实时截图和目标图一起交给一个干净的上下文,让它说差在哪里,让执行者照着改。重复这个动作,直到那个不认识你的模型点头。第三轮或第四轮你就能看出区别,不是因为 AI 变强了,是因为它终于有了一个可以对照的东西,和一个不允许它自说自话的人。

来源

本文由「策思路 C456」(c456.com)团队撰稿。

复制成功后将正文粘贴到公众号后台即可发布