导出,才是产品
多数 AI 演示工具交给你的是一张幻灯片的照片,然后管它叫演示稿。这篇文章讲我们两次重写 PowerPoint 导出学到的东西,以及为什么你最后拿走的那个文件,才是衡量一个工具唯一诚实的标准。

AI 工具生成完你的演示稿之后,大约第九十秒,你才会知道自己到底买到了什么。你打开导出的 文件,点一下标题想改个错字,接下来只有两种可能:要么光标落在两个字之间,要么整页被当作 一张图片整体选中。
如果是后者,你拿到的不是演示稿。你拿到的是一张截图,只不过后缀名写着演示稿。
在 AtomStorm Studio 里,这九十秒是我们投入工程时间最多的地方,比对接模型那部分还多。 这篇文章讲的就是为什么,以及当我们真把它当回事之后,看见了什么。
那条所有人都会走的捷径
把一页幻灯片做得好看,如今已经是这道题里容易的那一半。语言模型写内容,排版系统安排布局, 浏览器渲染出来——屏幕上那一版是真的不错:字体是讲究的,间距是讲究的,那些效果换成人手做 要二十分钟。
然后你点"导出 PowerPoint",捷径就出现了。渲染器手里已经有一张完美的幻灯片图像,而
PowerPoint 是收图片的。把这张图塞进 .pptx,一个下午就能做完。把这一页翻译成 PowerPoint
原生认识的形状、文本框、段落与排版规则,要几个月,而且几乎永远做不到"彻底做完"。
两条路在演示里分不出来,到了你手上完全是两回事:
| 位图导出 | 原生导出 | |
|---|---|---|
| 开发代价 | 一个下午 | 几个月,而且几乎停不下来 |
| 演示效果 | 完美 | 完美 |
| 点一下标题 | 整页作为一个对象被选中 | 光标落在两个字之间 |
| 在哪里坏掉 | 后面才发作,在别人手里,通常时间很紧 | 在那一个没有对应物的元素上 |
| 你能改什么 | 什么都改不了,除非重做这一页 | 改掉那个词,接着干活 |
所以很多工具交付的是那个下午的版本。它演示起来非常漂亮。每一个像素都完好地抵达了终点, 因为抵达终点的本来就只有像素。故障要到后面才发作——在别人手里,通常是在时间很紧的时候, 通常是开会前一晚。
第一版的时候,我们交付的也是那个下午的版本。这里说的不是别人的错误。
"可编辑"的真实代价
第二次重写,我们让管线从渲染完的文档直接生成 PowerPoint 原生对象:文本框里是真的段落和 真的文字块,形状有真的填充,图片按图片放、文字按文字留。位图从"方案"降级成了"兜底"。
下面这一段通常没人讲:这不是一个难题,而是一条又长又琐碎的尾巴,而这条尾巴就是工作本身。
字体不会跟着文件走
在我们机器上完美的稿子,到别人笔记本上就串版了,因为设计时用的 那款字并没装在那台机器上。PowerPoint 替换成一个相近的,替换字更宽,本来一行放得下的标题 变成两行,把下面的图挤了下去。解法是把字体嵌进文件里——听上去理所当然,直到你发现字体 授权、格式转换、以及 PowerPoint 与 Keynote 与 WPS 各自怎么读嵌入字体,是三个独立的坑。 三个我们都跳过了。现在导出器会把这份稿子真正用到的拉丁字体嵌进去,缺的那些在导出时按需 去取。
文字溢出的方式,你事先看不出来
就算字体对了,同一串字在浏览器里和在 PowerPoint 的 排版引擎里,量出来也会差一点。预览里宽松合适的标题,导出后可能宽了三个像素,而 三个像素足够让它折行。最后我们选择让 PowerPoint 做它本来就擅长的事:给文本框打上标记, 当文字将要溢出时,渲染端自动把字号收一点。让文档在它被打开的那台机器上自适应, 而不是去信任我们在别处量到的一个数。
有些东西是真的没有对应物
渐变网格、模糊、某个只存在于 CSS 而 PowerPoint 对象模型里 根本不存在的混合模式。到这里必须做决定,并且要诚实:要么把这一个元素栅格化、保住它周围 全部可编辑,要么放弃这个效果。唯独不能做的是——因为一个角落不好处理,就把整页栅格化。 那是捷径换了身衣服。
这些都不体面。但它们全部加起来,就是"一个能用的文件"和"一个只能看的文件"之间的差别。
我们保留了位图,并且会告诉你它什么时候被触发
这篇文章有另一个版本:我们宣布问题已经解决,"幻灯片的照片"再也不会出现。那个版本叫营销。
位图通路我们仍然保留着。它存在,是因为"每一种视觉效果都能表达成 PowerPoint 原生对象吗" 这个问题的诚实答案是"不能",而一个假装能的工具,会在你最在乎的那一页上悄悄搞砸。重写改变 的是它的身份:它从默认方案变成了一条被声明出来的兜底路径,并且我们让它可切换——有一个 开关能把整条管线切回旧的位图通路。它存在的意义是:万一原生导出器在某份要紧的稿子上出了大错, 恢复手段是改一个设置,而不是一张工单加一个搭进去的晚上。
这个倒置才是真正的设计决定。问题从来不是"这个工具有没有兜底"——每个工具都有。问题是 这条兜底路径是不是"方案换了个好听的名字",以及它触发的时候,你有没有被告知。
还有一条相关的纪律:确实需要栅格化某个元素时,我们尽量把影响半径限制在那个元素上。 一页里有一块装饰面板被压平、其余十四个对象都是活的,这一页你还能接着做;而因为那一块面板 就把整页压平,这一页你就失去了。这两种结局之间的差别,完全取决于导出器在放弃之前愿意多做 多少工作。
为什么我们认为这才是产品本身
人们很容易把导出当成最后一步,当成正事做完之后的管道活。我们认为恰好相反,理由和工程上的 自尊心无关。
一个交付不可编辑成品的 AI 工具,其实悄悄下了一个断言:它一次就全对了。每一个词、每一处 强调、每一个数字,全对——而这份文档马上要摆到那些"他们怎么看你很重要"的人面前。对任何 工具而言这个断言都不成立,包括我们的。模型很好,而且在变得更好,但它仍然不知道你们 CFO 讨厌"赋能"这个词,不知道 Q3 那个数字今天早上改了,也不知道客户那个旧 logo 是故意用的。
所以问题不是"你会不会需要改"。你一定会改。问题是你改的时候会发生什么。如果文件可编辑, 答案很平淡:改掉那个词,接着干活,工具替你省下了它本来就该省的两个小时。如果文件是一张图, 答案是你要么带着一处小错上场,要么手工重做这一页——而手工重做,正是你当初想避免的那件事。
一个无法被修正的工具,不是一个快的工具。它是一份很快的草稿,后面接着一段很慢的返工。
同一条规矩,换一个房间
我们还做另一个产品 Atlas,和演示稿毫无关系。它清理 macOS:缓存、日志、构建产物,一台在 干活的机器上堆出来的那些残渣。不同的问题,不同的用户,连技术语言都不同。
它遵守同一条规矩。动手之前,Atlas 会把它打算删的东西和理由摊开给你看;跑完之后,你可以 把它放回去。
这个对称不是我们设计出来的。是事后我们想向自己解释"为什么这两个产品总是做出同一类决定" 时,才注意到的。两者底下的那条规矩是:软件不该把你置于一个你出不来的位置。一次无法撤销 的清理,和一份无法编辑的演示稿,是同一种失败换了身衣服——工具动手了,工具很自信,而你 现在处在一个你没看全、也改不动的决定的下游。
自信是廉价的。可回退是昂贵的,而它才是那个值得花钱买的东西。
九十秒,验任何一个工具
如果你在评估某个生成文档的 AI 工具,你不需要读功能列表。生成一份,导出,然后:
- 点一下标题。 是出现文字光标,还是整页作为一个对象被选中?光这一条就能把大部分工具 分成两堆。
- 把一个词改成长得多的词。 版式撑得住,还是文字溢出框外、压到设计上?
- 换一台机器打开,最好是不属于你、也没装你那些字体的机器。它看起来还是你导出的样子吗?
- 找接缝。 如果大部分元素是活的、只有一个是图片,那是一个经过权衡的取舍,多半没问题; 如果整页就是一张图,这个工具给你做的是一张画。
四步,大约九十秒。它们告诉你的,比任何一张对比表都多——包括我们自己的那张。
比起让你相信上面这些话,我们更希望你拿这四步去验 AtomStorm Studio。导出是承诺被真正检验 的地方,也是这个工具唯一在你关掉页面之后还继续起作用的部分。
相关阅读
锁定,是有文件格式的
供应商锁定通常被当成定价问题或合同问题来谈。但它真正到来的方式,是一个你在别处打不开的文件。这是我们用在自己两个产品上的检验标准。
我们为什么做这些工具
一篇简短的开场——介绍 AtomStorm 工作室、我们今天在做的两款产品,以及贯穿它们的那条规矩。
默认可解释
Atlas 清理 Mac,只守一条规矩——每个动作运行之前都可解释,运行之后都可恢复。这篇文章讲的是,为什么这条规矩塑造了整个工具。