
字节笔记本
2026年10月7日 · 约 7 分钟读完
一句“没有任何样式”,AI 返工了两轮
一次页面复刻任务里,最值得复盘的不是任何一行代码,而是一句五个字的反馈。背景很简单:手里只有一张落地页截图,页面是一个地震预警 App 的官网,没有源码也没有素材,要求用 HTML 复刻,拿不到的图用占位符顶上。AI 很快交出了第一版:语义化结构、Tailwind 样式、页面底部一段填充统计数据的脚本,八成可用。
然后用户在浏览器里打开,发现样式全没了,回了五个字:"没有任何样式"。两轮对话之后,页面的样式仍然是零,而那五个字到底是现象还是指令,从头到尾没有被说清。本文复盘这场典型的沟通空转:歧义是怎么产生的,澄清为什么没起作用,现象背后的技术真相是什么,以及怎样让同样的歧义在未来变得便宜。
一、现场:五个字的两种读法
先把两种读法摆出来。
读作现象,这句话的意思是:"上一版页面打开后样式丢了,帮我查原因。"它指向一次诊断,期望的产物是原因分析和修复。
读作指令,这句话的意思是:"下一版请去掉所有样式。"它指向一次改造,期望的产物是一份纯结构 HTML。
两种读法在字面上都完全通顺,句子本身不提供任何裁决信息。AI 选择了指令读法,规规矩矩地输出了一份删光 CSS 和 JavaScript 的纯结构版。问题是,最初交付的第一版里本来就有这样一份结构——样式只是它的一层增量。于是这一轮"返工"什么也没推进:用户以为报告了故障,AI 以为接到了需求。
AI 偏向指令读法并非偶然。对话历史里,用户消息绝大多数是任务,语言模型的先验天然把新输入往"要我做什么"的方向归。汉语又常省略主语,"(它)没有任何样式"和"(请做得)没有任何样式"共享同一串字,裁决权就这样留给了概率,而概率站在指令一边。

二、澄清为什么也没起作用
用户很快察觉了误会,补了一句:"我是指上一条没有任何样式。"这句澄清把现象说清了——确实是上一版渲染有问题。但值得细看的是 AI 的回应:道完歉,它重新输出了一份"不包含任何 CSS 样式或 JavaScript"的页面,和上一轮的产物几乎一样。
也就是说,澄清之后故障依然没有被处理。原因在于,澄清句只回答了"现象是什么",仍然没有回答"接下来做什么"。对一方来说,"指出现象"隐含的期望动作是排查修复;对另一方来说,收到的信息只是对上一版的一个描述性判断,而它的默认动作是"再交付一次",不是"开始诊断"。现象不会自动触发排查——这是与 AI 协作时最容易低估的一环:它高度顺从,不质疑读法,也几乎不主动追问,收到什么就朝字面最常见的解释闷头执行。
这里要注意,这次事故和"反馈太模糊"还不是一回事。常见的建议是反馈要具体,但"没有任何样式"并不缺具体性——它精确描述了一种可见状态。它缺的是类型标记:这是一个待修的故障,还是一个想要的改动?具体解决的是"说得够不够细",消歧解决的是"这句话是哪类言语行为"。两者正交,后者更容易被忽略。
修正的方法很朴素:反馈带上主语、场景和期望动作。是现象就说"浏览器里打开第一版,所有 Tailwind 样式都没生效,帮我排查原因";是指令就说"下一版去掉全部样式,只要结构,作为后续开发的骨架"。一句话里,现象、范围、动作三选其一明确给出,歧义空间就消失了。
换个人来听这五个字,多半会反问一句:"你是想让我修好样式,还是本来就想要无样式的版本?"这声反问正是 AI 默认不提供的。与其指望某次对话里它恰好追问了,不如默认它不会问,把类型和动作自己写进第一句。
三、现象是真的:样式确实全丢了
这场空转里被耽误的故障本身,倒是值得交代清楚。第一版的样式走的是 Tailwind 的 Play CDN:head 里一行 script 引入,全部工具类开箱即用。它不是一份静态 CSS 文件,而是一段运行时脚本,在浏览器里现场扫描所有 class、即时生成样式。class 都好好写在源码里,所以 HTML 本身看不出任何异常——一旦这段脚本因为网络不可达、超时、内容安全策略拦截或加载顺序问题没有执行,整页样式瞬间归零,退化成浏览器默认排版,而源码里找不到任何可疑之处。这类"整页归零"的失效模式是运行时方案特有的:一个请求失败,赔上整页观感。
结论也因此清晰:Play CDN 只适合本地原型,官方文档同样不建议生产使用;要交付,就用构建工具在编译期生成静态 CSS,让样式不依赖任何运行时条件。真遇到"整页裸奔",定位也不难:开发者工具的 Network 面板看样式脚本是不是请求失败,Console 看有没有策略拦截的报错,一眼就能把"样式丢了"和"样式根本没生成"分开。
还有一层容易被略过的前提:现象本身也需要验证。反馈"没有任何样式"之前,先确认不是浏览器缓存了旧版、不是打开了错误的文件。拿去报告的现象越可靠,歧义的两种读法里错误的那种就越容易被排除。顺带一提,直到那轮对话结束,样式丢失的原因都没有被排查——大家都在处理误读,没人处理故障。
四、让歧义变得便宜
这场事故真正的止损机制,其实是任务的交付方式。复刻这类工作天然适合小步切分:结构、占位、样式、数据,各自成版,每一步都可独立验证。第一版恰好只是"结构加一层可剥离的样式",所以误读的代价被限制在一轮对话里;如果交付的是一个上千行、样式与结构纠缠的完整实现,同样的五个字引发的推倒重来,代价会大得多。
小步交付还有一个次级收益:版本小,描述就短。给一版几十行的纯结构页面写反馈,很难超过一句;给一个庞然大物写反馈,则处处是歧义的容身之所。沟通质量和交付粒度,本质上是同一件事。
落到实处可以给每一步配一个验收问题:结构版问"内容层级和区块划分对不对",占位版问"版式在真实尺寸素材替换后稳不稳",样式版问"脱离运行时依赖后观感是否一致",数据版问"换掉静态默认值后页面动不动"。每轮对话只裁决一个问题,误读即便发生,也只污染一个答案。

收尾
回看整个过程:AI 把结构写得又快又对,把一版版页面交付得毫无怨言,但它在"这句话是现象还是指令"面前不做任何裁决,在"该排查还是该再交付一次"之间选了成本最低的字面动作。结构生成已近乎免费之后,瓶颈确实转移到了表达这一侧:分清自己每句话的言语行为类型,把期望动作写进反馈,用小版本限制误读的爆炸半径。AI 能替你写页面,替不了你把一句话说成只有一种读法。



