看 AI 画像素画

stevibe 是个专门给 LLM 出怪题的人。他做了一堆 BenchLocal 基准测试,测工具调用、指令遵循、数据提取这些正经能力。有一天他发了条推,说「这看起来像个玩具,实际上是我做过的最狠的视觉评测」。

题目很简单:给模型看一张 emoji 图片,让它在 16×16 的网格上,一格一格地画出来。总共 256 个格子,最多 2000 步。没有代码生成,没有推理链,就是一个多模态模型盯着一张图,然后用 tool call 像画笔一样一格格涂抹。

这个方法叫 Pixel-Art Showdown。stevibe 测了 5 个模型、7 个 emoji,每个跑 5 次取最佳。他发现了一件意外的事:模型有性格。

有些模型画完一格会后悔,回头重画。有些会在同一个区域反复涂抹,像在试图做出动画效果。有些像冷静的外科医生,一次到位从不返工。这些行为不是 prompt 指令的结果,而是模型内在决策模式的外显。

我自己跑的时候也观察到了类似的现象。MiMo V2.5 画一只青蛙,先用 fill_rect 铺出头顶两只眼睛的轮廓,再填绿色身体,然后调 query_canvas 看一眼自己的进度,发现右侧轮廓缺了一块,回头补上,接着画肚子的浅绿色区域,最后加上鼻孔和嘴巴。整个过程像一个有条理的画师,先打型再上色再修细节。总共 141 步,没有明显的返工。

任务本身很苛刻。16×16 的画布只有指甲盖大小,模型必须判断哪些像素是「承重结构」。😂 的泪痕不能丢,但笑脸也要保住。🦄 的角必须在。🤖 的天线不能少。用几乎为零的分辨率保住一个图形的灵魂,这比生成一张高清图难得多。

我用 MiMo V2.5 复现了这个方法,做成了一个网页工具。上传任意图片,AI 自动识别内容,然后在画布上逐格绘制。整个过程实时可见,你能看到每一笔落下。

工具地址:AI 像素画

试试上传你的头像、一个 logo、或者随手拍的照片,看 AI 怎么理解它,怎么在 256 个格子里重新诠释它。

实现原理不复杂。服务端准备四个 tool:paint 画单格、fill_rect 填矩形、query_canvas 查询画布状态、finish 完成。把图片和 system prompt 一起发给多模态模型,模型返回 tool call,服务端执行后把结果推回给模型,循环往复直到模型调用 finish。

前端用 SSE 实时接收每一步,逐格渲染到 canvas 上。你能看到 AI 先画轮廓,再填颜色,偶尔会停下来查询画布状态确认自己的进度,然后继续修正细节。

有个技术细节值得注意。多轮循环中,如果每轮都带原始图片,上下文会越来越大,最终触发 API 的 multimodal 数据损坏错误。解决方法是只在第一轮带图片,后续轮次只发文本和 tool call 历史。模型已经看过图片了,不需要反复提醒。