FoldingAgent:人看一遍就会的折纸,AI 为什么总是折错?
机器要「学会」一段折纸视频,究竟缺什么?
黑色背景板上躺着一只折到一半的瓢虫,纸面压出几道清晰的折痕,一只手捏着纸边,光线均匀地打在纸上。人看这一眼,不光认出它是瓢虫,连下一步该折哪只角、往哪个方向折都在脑子里自动补好了,这是看了无数折纸视频后形成的本能。FoldingAgent 要回答的正是这个问题的机器版本:如何把一段人折纸的教学视频,变成机器可以一步步照着执行的可执行步骤。换句话说,把"这段视频演示了什么折法"翻译成机器可以一步步照着执行的步骤序列,而不是一个"它大概折了个啥"的结论。这份工作由魏茨曼科学研究所与 MIT 的 Moriya、Raab、Vinker、Dekel 四位作者完成,已被 SIGGRAPH Asia 2026 接收。

图注:PurelandFold 数据集中 ladybug 序列第 6 步的真实关键帧照片:黑色背景板上的半成品折纸,纸面已有多道可见折痕,前景有手捏住纸边。这是 ground-truth 真实拍摄,不是模型输出。PurelandFold
而机器和人看到的东西,完全不是一回事。让最先进的视觉-语言模型来看同一张照片,它会卡在一个基本问题上:这张纸现在有几层叠在一起?哪一层面朝上?哪条折痕是后折的?看一眼画面,这些信息根本不在像素里。人"看会"折纸,靠的是生活经验里的直觉,把缺失的中间信息自动补上;机器没有这种直觉,一切都要显式地表示出来。连"谁压着谁"都看不见,层叠就成了绕不开的第一道坎。
第二道坎,是现成的表示接不住"步骤"。折纸社区早就把一张纸折完后的样子规范成折痕图,一张标好每条折线是山折还是谷折的平面图。让模型直接预测折痕图不行吗?问题在于,折痕图记录的是"折完了应该长什么样",它是结果,不是过程,回答不了"先折哪条线、后翻哪一面"。存储上同理,FOLD 文件格式能把顶点、边、面、层叠关系写成结构数据,却同样承载不了"步骤"这层语义。FOLD
把鸿沟两侧摆在一起看更清楚:
| 演示视频帧 | 折痕图 | |
|---|---|---|
| 形态 | 非结构化的视觉像素 | 结构化的参数数据 |
| 能回答 | 纸此刻长什么样 | 纸折完后的静态布局 |
| 答不了 | 几何状态、动作顺序 | 任何一步是怎么折出来的 |
一边是像素,一边是静态布局,中间缺的正是"步骤"这两个字。
往前看,更早的工作连"步骤"的影子都没有。2025 年 Kato 等人的方法只能从一张"折前/折后"图像对里猜出一条直线折痕,作者自己就把任务限定在不含展开、旋转、翻面的单次直线上。Kato 2025 连单步都如此勉强,帧与帧之间的动作与状态衔接自然更没人碰过。
三条理由合起来,答案就清楚了:机器要"学会"一段折纸视频,缺的不是更强的看图能力,而是把不可见的层叠状态显式地表示出来、用可执行的动作把步骤串起来。所以问题不再是"该输出哪种折痕图",而是"该恢复的到底是什么"。FoldingAgent 的答案是:一段折叠流程,由每帧纸的完整几何状态和帧与帧之间的动作共同组成。这个问题在 agent 范式兴起的当下格外值得追问,接下来就看 FoldingAgent 怎么定义这套表示,才能让机器一步步推出来。
只看两帧,怎么知道纸背后叠了几层?
任务的输入是人工从视频里抽出的关键帧序列 I_1 到 I_K,也就是手与纸发生关键交互的那些静止画面。输出是两样东西:每个关键帧对应的几何状态 S_1 到 S_K,以及帧与帧之间的动作 a_2 到 a_K,每个动作把前一状态变成后一状态。这里说的"程序"就是这一串动作,不是编程语言意义上的程序。
动作从哪来?论文把动作空间收敛到 Pureland 折纸的五个原语,每个原语把上一状态变成下一状态。add_vertex(e,p) 在边的 p 处开一个折点。fold(e,d) 沿边折一下,由 d 决定折成山折还是谷折。山折让纸面像山脊一样凸起,谷折则凹成山谷,折纸里所有的形体都从这两种折法组合出来。unfold(e) 把上一次折叠展开,只留下平折痕。rotate(θ) 把整张纸在平面内旋转。flip(α) 把纸翻个面。五个原语可以组合,在一条不经过任何顶点的折痕上折叠,就是先 add_vertex 再 fold。Pureland 是折纸的一个子集,每次折叠都沿一条直线,不允许曲线折和撕裂,但允许展开、旋转、翻面。这个名字来自折纸历史,指只用直线山折谷折就能完成的折纸流派。FoldingAgent
选择 Pureland 不是偷懒,是让一切可计算。在 Pureland 里,任何一个中间状态都是若干多边形面片平铺在同一个平面上的 flat-folded 布局,表示和仿真都可行,更复杂的折纸做不到这一点。也因此,每一步都能被一个确定性仿真器精确重放,重放出来的状态长什么样没有任何歧义。这个性质是后面一切验证与回溯能成立的地基。

图注:五原语的几何效果。从平面方纸 S_1 出发,依次施加 add_vertex、fold、unfold、rotate、flip 得到 S_2、S_3 等状态。黄色面表示背面朝上,实线是激活折痕,虚线是展开后留下的平折痕。FoldingAgent
每个状态 S=(V,F,E,O,L) 由五部分组成。V 是顶点,F 是面片,E 是折边,每条边带一个山折、谷折、平折或边界的标签,这三层继承自 FOLD 标准。O 记录每个面的正反朝向,给模型做视觉跟踪用,是模型把当前帧与上一状态对上的依据。L 是共面面片从底到顶的层叠排列,对应 FOLD 里的 faceOrders 字段,是本文为视觉任务新增的部分。FOLD FoldingAgent

图注:状态 S 的五元组示意,顶点、面片、折边三层继承 FOLD 标准,朝向与层叠两层是为视觉任务扩展的。层叠 L 画在最底层并高亮,它正是单帧照片里看不见、只能靠时序累加推断的部分。FOLD
五层里藏着任务最硬的那个难点:L。两张连续的关键帧轮廓可能一模一样,但面片的上下顺序可以完全不同,像素里根本没有"谁压着谁"的信息。这就像一叠只露出顶面的牌:你能看到最上面那张,却不知道下面叠着怎样的顺序,只有看着一张张放下去,才知道谁在谁上面。层叠顺序只能在帧与帧之间由已保存的状态一步步累加出来,这正是这个任务必须"逐步"做的根本原因。
到这里,任务被重构成了"每帧一个完整、可验证的几何状态,帧间一个动作",这为后面"逐步验证、错了重来"铺好了地基。但还悬着一个问题:谁来做这个一步步的推断,又怎么知道自己走得对不对?
为什么答案必须是一个 agent,而不是一次预测?
先回答"为什么不能一次预测",两个动机都来自任务的物理结构。第一,层叠结构在任何单帧里都不可见,模型必须借助已保存的上一状态 S_{t-1} 当记忆,一点点恢复。第二,越长的序列里一个早期错位越会滚雪球,第 3 步折偏一点,后面每一步都建立在这个错位上,十几步之后整个形状就歪得没法看。一次预测意味着没有任何机会纠正自己,这两点决定了它必然失败。
失败有多惨,论文给了个直接数字:让一个原始 VLM 直接预测整张折痕图(VLM-CP 档),输出能通过编译的只有约 8%。反常的地方在于,这不是模型不够强,而是"一次猜到底"这个姿势本身就不对。FoldingAgent
FoldingAgent 于是把单次预测拆成一场闭环对话。中央是一个预训练 VLM,也就是 Gemini 3.1 Pro Preview,当 agent 用,为折纸任务没有做任何微调。它每次只处理一个过渡,从第 t-1 帧到第 t 帧,通过工具库跟外界打交道。工具分四类。Origami Actions 把五个原语暴露给 agent,由确定性仿真器逐条执行。Viewing 是一组看图工具,包括 view_frame 和 observe_movement 这类观察帧间运动的调用。Checkpoints 负责保存和恢复检查点。Verification 里最关键的是 ask_critic,召唤一个独立的验证器来把关。一个确定性的 Controller 解析 agent 的每次工具调用,把它派发给仿真器,再把结果送回 agent 继续推理。agent 从不直接改状态,它只能请求,改状态的永远只有仿真器。还有一点值得注意,agent 和 critic 用的是同一个模型家族的同一版本,区别只在角色。同一个模型,一个负责出主意,一个负责挑错,效果就比让模型自问自答好得多。FoldingAgent

图注:FoldingAgent 闭环。中央 VLM agent 坐在橙色 Controller 之上,两者之间有蓝色推理环。右侧工具库列明四类工具:Origami Actions、Viewing、Checkpoints、Verification。下游是确定性折纸仿真器与独立的 critic VLM。底部时间线显示每帧提交的 checkpoint 逐步累积。FoldingAgent
验证这一步的设计特意反着来:critic 是另一个 VLM,不是 agent 自己。ask_critic 会拼出一张 2×2 图,上半是真实照片 A 和 B,也就是源帧和目标帧,下半是渲染图 C 和 D,也就是当前状态与候选动作执行后的状态。critic 判断两者几何结构是否一致,给出 Match、Mismatch、Extreme Divergence 三档回答。论文的理由很直白:让做题的人自己检查自己的作业,它很容易为自己的错误辩护。换一个独立的模型当裁判,才能把"自信的错误"拦下来。就像学生写完作业自己检查往往看不出笔误,同桌帮忙看却一眼就发现问题,critic 就是那个同桌。
有了验证,还得有反悔的能力。每个关键帧有 C=5 次过渡尝试的预算,整条序列的工具调用上限是 300 次。critic 一直通不过时,由一个 selector 挑选最优候选,并禁用更早的回滚,用"局部最优"换"整体可行"。作者在项目页上把这种机制概括成一句话:重建变成了一棵纸状态树上的搜索,而不是一次前向推断。agent 可以回溯到最早分叉的地方重新规划。项目页

图注:回溯语义。上方是连续折纸过程照片,下方是纸状态树:绿色格是 critic 通过的节点,红色格被拒绝,灰色虚线箭头代表回滚(标注 undo transition(s)),最终节点有绿色对勾。项目页
这就像在森林里走一条陌生的路,边走边在路口撒面包屑。走进去一段发现不对,就沿着面包屑退回上一个还靠谱的路口,换一条路再走。检查点就是面包屑,回滚就是退回路口,重新规划就是换路。面包屑不是无限的,300 次调用上限就是带的干粮总数。
这套机制的成本不便宜。论文报告平均每序列约 140 次调用、约 400 万输入 token、约 6.8 万输出 token,折合约 8.9 美元。FoldingAgent 听起来像是把一次预测换成一场来回试错,但换来的是每一步都有据可查。剩下一个绕不开的问题:凭着这套闭环,怎么证明"折得出来"?这需要一把不靠人眼判断的尺子。
「说得对」不等于「折得出」:怎么量化可执行性?
要验证,先得有数据。论文附带了一个新数据集 PurelandFold,共 27 段折纸序列,指令模板取自 OrigamiWay 网站的 Easy Origami 类目,约 60 个模型里筛出 40 个 Pureland 模型。所有演示视频不是从网上爬的,而是作者自己拍的,用 iPhone 12 加 LED 环形灯、黑色 Bristol 板背景,刻意绕开网络视频的画质噪声和拍摄偏置。PurelandFold OrigamiWay
数据规模不大但密度很高。337 行记录,平均每序列约 12 帧,最少 5 帧、最多 21 帧。每行有 6 列:sequence、step、image、cp.svg、cp.fold、flat_folder。关键的从来不是那张照片,而是每帧照片旁边都配了全量的几何真值。真值里包含纸的拓扑、顶点和面片的几何、每条折边的山/谷/平/边界赋值、每个面的正反朝向、面与面之间的层叠顺序。机器看到的每张图,旁边都有一份"此刻的纸到底是什么状态"的标准答案。
光有标准答案还不够,还要有一把不偏心眼的尺子。论文的答案是 Compilation Validity,编译有效性,简称 CV:把预测出的 cp.fold(FOLD 格式的折痕图)喂给 Flat-Folder。Flat-Folder 是计算折纸社区公开的开源编译器,接收折痕图,产出所有满足几何约束的合法 flat-folded 状态。Flat-Folder
CV 测的是"这份几何真的能折得平",语法合法、拓扑一致、没有自交、层叠自洽,四样全满足才算通过。它不测"和视频长得像不像"。编译是件是非题,Flat-Folder 在折痕图的状态空间里找一个合法解,找到一个就算过,不做任何相似度比较。这个区别是整个评估体系的地基:哪怕预测结果看起来和视频一模一样,只要编译不出合法状态,就是一张折不出来的纸。相似度类指标 TSS、GS、CS、FFS 沿用 OrigamiSpace 的体系,加上来自更早工作的细粒度配对距离 CPD,但第一个要过的门槛永远是 CV。OrigamiSpace
数据集里的 flat_folder 列存的就是 ground-truth 用 Flat-Folder 编译的结果,全部通过校验,这让任何后来者都能在同一把尺子上复现评估,不必重新跑一遍真值编译。PurelandFold
现在可以问那个最要紧的问题了:这套 agent 系统到底赢在哪?换表示、加验证器、上 agent,哪一步才是真正让结果跨过门槛的那一下?
换表示、加验证、上 agent:哪一步才是关键?
论文用四档消融把增益一层层剥开,四档共用同一个模型骨干 Gemini 3.1 Pro Preview:
| 档位 | 预测什么 | 有 critic | 自主调用工具 | 能回溯 | 报告结果 |
|---|---|---|---|---|---|
| VLM-CP | 整张折痕图 | 无 | 无 | 无 | 仅约 8% 输出可编译 |
| VLM-S | 符号动作(新表示) | 无 | 无 | 无 | 编译率与拓扑/几何分提升 |
| VLM-S-C | 符号动作 | 有,非 agentic | 无 | 无 | 细粒度几何误差(CPD)进一步降低 |
| Full FoldingAgent | 符号动作 | 有 | 有 | 有(检查点+回滚) | 各指标全面改善 |
阶梯的含义很清楚。从 VLM-CP 到 VLM-S,只换表示、不动流程,编译通过率和拓扑几何分就上来了:把任务从"猜一张图"改成"推一步动作",模型立刻能干。从 VLM-S 到 VLM-S-C,加上 critic 但不让它自主调用工具,细粒度几何误差被进一步压低,说明独立验证确实抓得住动作参数上的小偏差。只有到最后一步,agent 自主调用工具、每帧存检查点、出错回滚,各项指标才全面改善。结论收敛成一句:表示铺路,闭环才是把结果拉过门槛的主要增益。
一个具体的失败案例让"回溯"有了血肉。在 fox 序列里,agent 早期放错了一个顶点,critic 误批通过。它的成功率约 88%,意味着漏批确实会发生。错误从关键帧 5 一路传到关键帧 7,直到 7 到 8 的一个翻面动作才暴露。agent 于是回滚到第 3 帧,重新尝试 5 到 6 的过渡,还多调了 observe_movement 这类观察工具,最终落下一条更准的折痕,一路保持到最后。这个故事回答了上一章 CV 指标回答不了的问题:几何最终折得对,不代表过程每一步都对。FoldingAgent 能把过程错误拦在局部,而不是让它长成一个不可收拾的结果。
数字之外还有人的判断。论文在 10 条同时完成的序列上收集了 600 次人工评判,完整方法的折纸流程分别以 84% 和 80% 的偏好率压过两个消融变体。FoldingAgent 这里补上的是主观偏好证据:在这 10 条受评序列和该任务的评判设置下,受评者更偏好完整方法的流程。它说明完整方法的产出在观感上更受欢迎,却不能当几何正确性或人类动作相似性的证明,那两类性质仍由 CV 编译与几何指标来背书。
单换模型、单换表示都不够。让错误能被发现(独立 critic)、能回滚(检查点)、并受预算约束(300 次上限),这才是 FoldingAgent 相对"一次预测"的本质增量。那么最后的问题来了:这套被证明有效的闭环,边界在哪里?
这条路走到哪算边:局限、范式与开放问题
论文自己列了四条边界。重度遮挡还是难,手挡住纸、层叠越叠越厚,单帧里能读到的信息就更少。旋转的同时翻面这类复合动作,超出了顺序动作空间的假设。范围锁死在 Pureland,扩展到更复杂的折纸"概念上可行,但需要更强的视觉语言推理"。最后,这套方法只在作者自录的 27 段视频上验证过,网络视频里真实的手部噪声和光影变化没有被系统性考验。自录是刻意的选择,为了避开噪声,代价是鲁棒性这条线还没被真实世界检验。
那为什么不能干脆等一个更强的大模型,非要专门搭这套框架?OrigamiSpace 给出了反证:在端到端折纸代码生成任务上,即便配上环境交互学习,当前最强模型 Gemini 2.5 Pro 的约束满足分也只有约 56.99%,同一评测里的其他顶级模型没有一个跨过 60%。OrigamiSpace 模型再强,几何硬约束这堵墙也立在原地,这正是必须把约束搬进工具和验证器的理由。
换个角度看,FoldingAgent 不是孤例,它踩在一条正在成型的范式上。Learn2Fold 是同范式的反方向:给定目标折痕图与文本语义目标(如折一只天鹅),由 LLM 提议候选、世界模型做前瞻、硬验证器把关,生成折叠序列,和"视频到程序"正好镜像。Learn2Fold COrigami 又把同一个骨架搬到设计:从一句"想要一只麋鹿"生成一张能物理折出的折痕图,LLM 出语义、算法求解器管几何、VLM 当审美裁判。COrigami 三条线共享同一个骨架:语义由大模型出,几何硬约束交给确定性求解器,最后一道门由验证器把守。折纸因为"多步、强约束、可验证"三个属性凑齐,正在成为检验 agentic VLM 空间推理的天然场地。
回到标题里的问题:AI 为什么总是折错?FoldingAgent 给出的答案不是"模型不够聪明",而是过去的姿势是"一次猜到底"。"猜"在数学上总会输,因为单帧里根本没有完整信息,错一步又会滚雪球。它把猜改成"折一步、查一步、错了退一步",人看一遍就会的折纸,机器终于能对着视频,一步步把它折对。这条路能走多远,下一站是真实世界视频、非 Pureland 折纸,以及真正动手的机器人,论文已经把接力棒递了出去。作者在结尾提醒,更复杂的折纸需要更强的视觉语言推理,而这样的推理"可能还没有出现"。这句话既是谦辞,也是这一整条路真实的水位线。
想深入可以读原文:FoldingAgent: Inferring Parametric Origami Procedures from Demonstration Videos,见 arXiv:2609.00377
参考文献
- FoldingAgent 锚论文(Moriya, Raab, Vinker, Dekel;arXiv:2609.00377;SIGGRAPH Asia 2026):https://arxiv.org/abs/2609.00377
- FoldingAgent 官方项目页:https://maya-moriya.github.io/origami-page/
- OrigamiSpace(Xu et al.;arXiv:2511.18450):https://arxiv.org/abs/2511.18450
- Kato et al., Origami Crease Recognition for Automatic Folding Diagrams Generation(ACPR 2025):https://doi.org/10.1007/978-981-95-4398-4_2
- Learn2Fold(Huang et al.;arXiv:2603.29585):https://arxiv.org/abs/2603.29585
- COrigami(Zahavy et al.;arXiv:2606.26299):https://arxiv.org/abs/2606.26299
- Flat-Folder: A Crease Pattern Solver(Jason S. Ku):https://github.com/origamimagiro/flat-folder
- FOLD: A New File Standard to Represent Folded Structures(Demaine, Ku, Lang;CGW 2016):https://erikdemaine.org/papers/FOLD_CGW2016/paper.pdf
- OrigamiWay Easy Origami 类目:https://www.origamiway.com/
- PurelandFold 数据集(HuggingFace):https://huggingface.co/datasets/mayaweiz/PurelandFold