ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

莫拉维克悖论下的Computer Use:从界面理解到工程兜底的实践指南

莫拉维克悖论下的Computer Use:从界面理解到工程兜底的实践指南

莫拉维克悖论这个词,最早是从搞机器人方向的朋友嘴里听到的。他的原话是:“让机器算微积分它一秒搞定,让它像三岁小孩一样自己穿袜子,它能把自己缠成粽子。”这话糙,但把问题说透了。后来我把这个视角挪到Computer Use这个方向上,发现它几乎是理解当前所有“让AI操作电脑”类项目天花板的一把钥匙。所谓Computer Use,说白了就是让模型像人一样看屏幕、点鼠标、敲键盘,替你把电脑上的活儿干了。听起来很酷,但真正上手做过的人都知道,难的不是让它写代码,而是让它稳稳当当地点中一个按钮。这篇东西就是想把我在这个方向上踩过的坑、想明白的道理、以及那些文档里不会写的细节,掰开揉碎讲清楚。不管你是刚接触这个方向想搞明白它为什么这么难,还是已经在做相关项目被各种诡异失败折磨得够呛,下面这些内容应该都能对上你的胃口。

1. 先搞清楚莫拉维克悖论到底在说什么

1.1 一个反直觉的难度排序

莫拉维克悖论的核心表述其实很简单:对人类来说越难的事情,对机器往往越容易;对人类来说越容易的事情,对机器反而越难。下棋、算数、逻辑推理,这些人类需要专门训练才能掌握的能力,机器靠着算力堆上去就能碾压人类。但走路、抓东西、辨认一张脸、在杂乱的桌面上找到自己的杯子,这些人类几乎不费吹灰之力的事情,机器做起来却磕磕绊绊。

这个悖论放到Computer Use场景里,表现得淋漓尽致。你让一个模型去解一道复杂的数学题,它可能几秒钟就给你一个漂亮的推导过程。但你让它去一个从没见过的网页上,找到“提交”按钮并准确点击,它可能反复点偏、点错、或者干脆对着一个长得像按钮的广告图点下去。这不是模型不够聪明,而是感知与行动的耦合这件事本身,对机器来说就是另一个维度的难题。

我刚开始接触这个方向的时候也不理解,觉得“看屏幕点鼠标”这么简单的事,模型怎么可能做不好。后来自己动手搭了一套流程才明白,人类做这件事的时候,背后调动的是视觉识别、空间定位、手眼协调、常识判断、纠错反馈一整套系统,而且这套系统是经过几十年日常训练打磨出来的。模型要在几秒钟内复现这套东西,难度被严重低估了。

1.2 为什么“简单”的动作反而最难

要理解这个,得把“点鼠标”这个动作拆开看。人类点一个按钮,大脑里发生的事大致是:眼睛看到屏幕,视觉皮层识别出“那是一个按钮”,空间认知系统定位它的坐标,运动皮层规划手部移动轨迹,小脑微调力度和精度,手指执行点击,同时视觉系统持续反馈确认点中了没有。这一整套流程在人类身上是高度自动化、几乎无意识的。

模型要做同样的事,得把这条链路全部显式地重建出来。它需要从像素里理解界面语义(这是按钮还是装饰),需要把语义映射到精确的屏幕坐标(这个按钮在1920x1080的哪个位置),需要生成一个动作(点击坐标x,y),还需要在执行后判断结果(点对了没有,界面变了没有)。每一步都可能出错,而且错误会累积。第一步识别错了,后面全白搭。

更麻烦的是,这些步骤之间没有清晰的边界。人类是一体化处理的,模型却得靠不同的模块拼接。拼接的地方就是最容易出问题的地方。我见过太多案例,模型明明“看懂”了界面,但坐标算错了几个像素,点到了旁边的空白处,整个任务就卡住了。这种失败在人类看来简直莫名其妙,但对模型来说却是家常便饭。

1.3 这个悖论对Computer Use意味着什么

理解了莫拉维克悖论,你就能明白为什么Computer Use类项目的进展总是“看起来很近,做起来很远”。演示视频里模型流畅地操作各种软件,看起来很惊艳,但真正部署到实际环境里,各种边角情况立刻暴露。这不是团队不努力,而是这个方向天然就踩在悖论最难的那一侧。

我的判断是,当前阶段不要指望模型能像人一样“通用地”操作任何界面。更现实的路径是把任务拆窄、把环境收窄、把容错做厚。比如专门针对某一类后台管理系统做操作,界面元素相对固定,模型只需要处理有限的变化,成功率就能拉上去。反过来,如果你一上来就想做一个“什么都能点”的通用助手,大概率会在无穷无尽的边角情况里耗尽精力。

这个认知很重要,它决定了你做项目的策略。是追求通用性还是追求可靠性,是堆模型能力还是堆工程兜底,这些选择背后都是对莫拉维克悖论的理解深度。我个人的经验是,在感知和行动这条链路上,工程兜底的价值被严重低估了。很多人把希望全押在模型变强上,但模型再强,像素级的坐标误差、界面加载的时序问题、弹窗的意外干扰,这些还是得靠工程手段去消化。

2. 拆解Computer Use的核心技术链路

2.1 从屏幕像素到界面语义的理解层

模型要操作电脑,第一步是“看懂”屏幕。这一步的输入是一张截图,输出是对界面的结构化理解。听起来像普通的图像识别,但实际难度高得多。普通图像识别是“这张图里有只猫”,而界面理解需要的是“这个区域是一个可点击的按钮,它的功能是提交表单,当前处于禁用状态”。

这里的关键难点在于界面语义的层次性。一个网页截图里,有文字、有图标、有输入框、有下拉菜单、有广告、有装饰性元素。模型需要区分哪些是可交互的,哪些是纯展示的,哪些是干扰项。人类扫一眼就能分辨,因为我们对界面有大量的先验知识——我们知道按钮通常长什么样,知道输入框有边框,知道广告位通常在侧边。模型没有这些先验,得靠训练数据去学。

我在实际项目里试过几种做法。一种是直接用通用的视觉模型做界面描述,让它输出“屏幕上有什么”。实测下来,描述得挺像那么回事,但一到具体坐标就含糊了。另一种是专门训练一个界面元素检测模型,输出所有可交互元素的边界框和类型。这个路子更靠谱,但需要大量标注数据,而且遇到没见过的界面风格就容易漏检。

提示:界面理解层不要追求“描述得多好”,而要追求“定位得多准”。描述再漂亮,坐标偏了就是废的。评估这个模块的指标应该是元素定位的准确率和召回率,而不是描述文本的流畅度。

还有一个容易被忽略的点是界面状态的时序变化。截图是静态的,但界面是动态的。点击一个按钮后,可能弹出加载动画,可能跳转新页面,可能原地刷新内容。模型如果只理解单帧,就会在状态切换时迷失。我的做法是在理解层里加入前后帧的对比逻辑,让模型知道“哪些区域发生了变化”,这样它对“刚才的操作产生了什么效果”就有感知了。

2.2 动作空间的表示与生成

理解层输出的是“界面上有什么”,动作层要解决的是“接下来做什么”。这里的核心问题是动作怎么表示。最直接的方式是坐标点击,输出一个(x, y)坐标加上点击类型(左键、右键、双击)。这种方式简单直接,但精度要求极高,差几个像素就可能点空。

另一种方式是元素索引,让理解层给每个可交互元素编个号,动作层输出“点击第3号元素”。这种方式对坐标精度不敏感,但依赖理解层的检测质量,漏检了就点不了。我在项目里两种方式都试过,最后倾向于混合方案:优先用元素索引,索引不可用时回退到坐标点击。这样既保证了常见情况的稳定性,又保留了处理意外界面的灵活性。

动作空间里还有键盘操作。输入文字、快捷键、Tab切换焦点,这些在人类操作里占比很高,但对模型来说同样有坑。输入文字看似简单,但涉及到焦点管理——你得先确保光标在正确的输入框里,否则文字就打到别处去了。快捷键更麻烦,不同软件、不同系统下的快捷键行为不一致,模型很难建立稳定的预期。

动作类型表示方式优势主要坑点
坐标点击(x, y) + 点击类型通用性强,不依赖检测精度要求高,易点偏
元素索引点击元素ID精度不敏感,稳定依赖检测质量,漏检即失效
文字输入文本内容 + 目标元素语义清晰焦点管理易出错
快捷键组合键序列效率高跨软件行为不一致
滚动方向 + 距离处理长页面滚动量难精确控制

动作生成还有一个隐蔽的难点是动作序列的规划。很多任务不是一步能完成的,需要多步操作。比如“在电商后台修改商品价格”,得先登录、再找到商品、再进入编辑页、再定位价格字段、再修改、再保存。每一步都依赖上一步的结果,中间任何一步失败,后面全乱。模型需要具备一定的规划能力,知道当前处于哪个阶段,下一步该干什么。这个规划能力目前主要靠提示词引导或者少量示例来激发,稳定性还远远不够。

2.3 执行反馈与闭环纠错

动作执行出去之后,得知道结果如何。这一步是很多项目容易偷懒的地方——点完就点完了,不检查结果。但在实际环境里,不检查结果的系统基本不可用,因为失败太常见了。

闭环纠错的核心是“执行后重新观察”。点完一个按钮,重新截一张图,对比前后变化,判断操作是否生效。如果没生效,得分析原因:是点偏了?是按钮禁用了?是弹窗挡住了?然后决定重试还是换策略。这个循环听起来简单,但实现起来要考虑很多细节。

首先是等待时机。点完按钮后界面可能不会立刻变化,有加载时间。截太早,看到的是旧界面,会误判为失败;截太晚,浪费时间。我的做法是设置一个自适应等待,先短间隔轮询,检测到变化就停,超过阈值还没变化就判定为异常。这个阈值需要根据具体应用的响应速度来调,没有通用值。

其次是变化检测的粒度。整张图对比太粗,一个像素的闪烁都会触发误报;局部对比又可能漏掉关键变化。我一般是对比关键区域,比如按钮附近、内容主区域,忽略掉时钟、动画这类持续变化的元素。这个需要针对具体界面做配置,没法完全自动化。

注意:闭环纠错不是万能的。如果模型对界面的理解本身就是错的,它可能把“点错了但碰巧触发了别的功能”误判为成功。所以纠错逻辑里最好加入任务层面的校验,比如“价格是否真的改成了目标值”,而不只是“界面是否发生了变化”。

还有一个实战教训是重试策略要有上限。我见过系统陷入死循环,反复点同一个按钮,每次都失败,每次都重试,把资源耗光。正确的做法是设置最大重试次数,超过就上报异常或者切换策略。这个上限设多少合适,取决于任务的重要程度和环境的稳定性,一般三到五次比较合理。

3. 实操搭建一套可用的操作流程

3.1 环境准备与基础工具选型

动手之前先把环境理清楚。Computer Use类项目的基础设施大致包括:一个能截屏的宿主环境、一个能模拟鼠标键盘的接口、一个能跑模型的推理服务、以及一个调度这些组件的控制逻辑。这四块怎么拼,直接决定了后续开发的顺手程度。

宿主环境我建议用虚拟机或者容器化的桌面环境,好处是隔离性好,出问题了好恢复,而且可以并行跑多个实例做测试。直接在物理机上跑也不是不行,但一旦模型乱点把系统搞乱了,恢复成本很高。我早期图省事在主力机上直接跑,结果模型把一个配置文件点开改乱了,折腾半天才恢复,从那以后老老实实用隔离环境。

截屏和输入模拟这块,不同系统下的工具选择差别挺大。核心要求是截屏要快、输入要准。截屏慢会导致整个循环的节奏被拖垮,输入不准会导致点击偏移。选型的时候重点测这两个指标,别只看功能列表。有些工具功能很全但延迟高,实际用起来很难受。

推理服务这块,如果模型是本地跑的,要注意显存和并发的平衡;如果是调远程接口,要注意网络延迟对循环节奏的影响。我的经验是,整个循环的耗时里,推理往往不是瓶颈,截屏和输入模拟的延迟才是。所以优化的时候先看这两块,别一上来就想着换更大的模型。

3.2 界面理解的落地实现

界面理解模块的落地,我走过两条路,各有优劣。第一条是纯提示词路线,把截图丢给多模态模型,让它输出界面描述和可点击元素列表。这条路开发快,不用训练,但稳定性和精度都一般,尤其是元素坐标经常不准。第二条是专用检测模型路线,自己标注数据训练一个界面元素检测器,精度高很多,但前期投入大。

如果项目处于验证阶段,建议先走提示词路线快速跑通闭环,验证整体思路可行。等确认方向没问题了,再逐步替换成专用模型提升精度。这个渐进策略能帮你省下大量前期投入,避免在方向没验证清楚的时候就陷进数据标注的泥潭。

提示词路线里有个技巧值得分享:让模型输出结构化的元素列表,而不是自由描述。比如要求它按固定格式输出每个元素的类型、文本、大致位置、是否可点击。结构化输出便于后续程序解析,也便于你做质量评估。自由描述看起来灵活,但下游没法用,等于白做。

专用检测模型路线里,标注质量是生命线。我踩过的坑是标注标准不统一,同一个人不同时间标的都不一样,导致模型学得稀里糊涂。后来定了一份详细的标注规范,明确什么算按钮、什么算输入框、边界框怎么画,情况才好转。这份规范本身也是团队协作的基础,没有它,多人标注就是灾难。

3.3 动作执行与状态机的组织

动作执行这块,我强烈建议用状态机来组织,而不是让模型自由发挥。状态机的好处是把任务拆成明确的阶段,每个阶段有清晰的进入条件、执行动作、退出条件。模型只需要在单个阶段内做决策,不用操心全局,稳定性能提升一大截。

举个具体的例子。一个“填写表单并提交”的任务,可以拆成这几个状态:定位表单区域、逐个填写字段、检查填写结果、点击提交、确认提交成功。每个状态里,模型的动作空间被大幅收窄,比如“填写字段”状态下,它只需要关心当前该填哪个字段、填什么内容,不用考虑提交按钮在哪。这种收窄对提升成功率非常有效。

状态机的状态转移条件要设计得保守一些。宁可多检查一步,也不要贸然进入下一个状态。我见过系统在表单还没填完的时候就跳到了提交状态,结果提交了个半成品。转移条件最好基于明确的界面信号,比如“检测到所有必填字段都有值了”才允许进入提交状态,而不是基于“大概填得差不多了”这种模糊判断。

提示:状态机的状态数量不要太多,超过七八个状态就很难维护了。如果任务确实复杂,考虑拆成多个子任务,每个子任务一个状态机,用上层逻辑串联。这样每个状态机都保持简单,整体又可扩展。

3.4 一个完整的操作循环示例

把上面几块拼起来,一个完整的操作循环大致是这样的:截屏、理解界面、根据当前状态决定动作、执行动作、等待并观察结果、更新状态、进入下一轮。这个循环不断重复,直到任务完成或者触发异常退出。

我用一段伪代码把这个循环的骨架写出来,方便你对照自己的实现:

state = "init" max_steps = 50 step = 0 while state != "done" and step < max_steps: screenshot = capture_screen() ui_graph = understand_interface(screenshot) if state == "init": action = plan_initial_action(ui_graph) elif state == "filling": action = decide_fill_action(ui_graph, form_context) elif state == "submitting": action = decide_submit_action(ui_graph) execute_action(action) changed = wait_for_change(timeout=adaptive_timeout()) if not changed: handle_no_change(state) else: state = transition_state(state, ui_graph, changed) step += 1

这段骨架里,几个关键点值得展开说。adaptive_timeout是自适应等待,根据历史响应时间动态调整,避免固定等待造成的浪费或误判。handle_no_change是异常处理分支,界面没变化时不能傻等,得分析原因并决定重试还是放弃。transition_state是状态转移逻辑,基于界面变化和当前状态决定下一步去哪。

实际跑起来,这个循环的节奏控制很关键。太快了,界面还没反应过来就截下一张,全是旧状态;太慢了,整体效率低下。我的经验是,在关键动作后加一个短延迟,在观察阶段用轮询,两者结合能兼顾效率和准确性。这个短延迟设多少,得根据目标应用的响应速度实测,没有通用值。

4. 那些文档里不会写的坑与排查经验

4.1 坐标偏移与分辨率适配

坐标偏移是最高频的问题,没有之一。模型输出的坐标和实际点击位置对不上,差几个像素就点空。这个问题在换了分辨率或者缩放比例之后尤其明显。我遇到过最诡异的一次,模型在开发机上点得好好的,部署到测试机上全部偏移,查了半天发现是两台机器的显示缩放设置不一样。

解决这个问题的根本办法是统一坐标基准。截屏的时候记录下当前的分辨率和缩放比例,所有坐标计算都在这个基准下进行,执行动作前再换算回实际屏幕坐标。这个换算逻辑要封装成一个独立模块,所有涉及坐标的地方都走它,避免各处各算各的导致不一致。

还有一个隐蔽的坑是多显示器环境。模型可能把坐标算到了主显示器上,但目标窗口在副显示器上,点击就落空了。处理办法是在截屏时明确指定目标显示器,或者在理解层里加入显示器边界的判断。这个坑不常遇到,但一旦遇到就很难查,因为从截图上看一切正常,就是点不中。

注意:坐标偏移问题在测试阶段容易被忽略,因为开发环境往往配置统一。上线前一定要在多种分辨率、多种缩放比例、多显示器环境下做一轮回归测试,否则线上翻车概率很高。

4.2 界面加载时序与竞态问题

界面加载的时序问题比想象中普遍。点击一个按钮后,界面可能先显示一个加载动画,然后才渲染出目标内容。如果模型在加载动画阶段就截图理解,看到的是一个残缺的界面,决策自然就错了。更麻烦的是,有些界面是分块加载的,上半部分先出来,下半部分后出来,模型可能基于不完整的界面做了判断。

应对这个问题的思路是等待稳定态。不要一检测到变化就立刻截图,而是等界面连续几帧没有明显变化了再截。这个“连续几帧”的判断可以用简单的图像差异检测实现,差异小于阈值就认为稳定了。阈值设多少需要根据界面的动态程度调,动态元素多的界面阈值要放宽,否则永远等不到稳定。

竞态问题在表单填写场景里特别常见。模型快速连续填写多个字段,但每个字段的输入可能触发异步校验,校验结果回来之前界面状态是不确定的。如果模型不等校验完成就填下一个,可能触发校验冲突或者覆盖。我的做法是在每个字段填写后加一个校验等待,检测到校验通过的信号(比如错误提示消失、对勾出现)再继续。这个等待会增加整体耗时,但换来的是稳定性,值得。

4.3 弹窗、广告与意外干扰的处理

真实环境里的界面从来不干净。弹窗、广告、通知、引导提示,这些干扰元素随时可能冒出来挡住目标区域。模型如果没意识到这些干扰,就会对着被遮挡的区域操作,自然失败。

处理干扰的第一道防线是在理解层识别干扰元素。训练检测模型的时候,把弹窗、广告位、通知条这些也作为一类标注进去,让模型能认出来。识别到之后,动作层优先处理干扰——能关的关掉,关不掉的绕开。这个优先级逻辑要写死在状态机里,不能指望模型自己判断。

第二道防线是操作前的遮挡检查。在执行关键动作前,检查目标区域是否被其他元素覆盖。这个检查可以用简单的区域重叠判断实现,如果目标元素的边界框和某个干扰元素的边界框重叠面积超过阈值,就先处理干扰。这个检查增加了一点开销,但能避免大量莫名其妙的失败。

还有一种干扰是动态内容。有些页面的某些区域会持续变化,比如轮播图、实时数据、动画效果。这些变化会干扰变化检测逻辑,让系统误以为操作生效了。处理办法是在变化检测时排除掉这些已知的动态区域,只关注关键区域的变化。这个排除列表需要针对具体应用配置,没法通用。

4.4 常见问题速查与排查思路

把上面这些坑整理成一张速查表,方便你在遇到问题时快速定位:

现象可能原因排查方向处理办法
点击无反应坐标偏移对比模型坐标与实际点击位置统一坐标基准,加偏移校正
点击落到错误元素元素检测漏检或误检检查理解层输出的元素列表提升检测精度,加元素索引回退
操作后界面无变化等待时机不对检查等待逻辑和超时设置改自适应等待,加轮询
反复重试同一动作状态转移条件失效检查状态机转移逻辑加最大重试次数,加异常上报
表单填写错位焦点管理出错检查输入前的焦点确认逻辑输入前显式点击目标字段
被弹窗挡住操作失败干扰元素未处理检查干扰识别和遮挡判断加干扰处理优先级,加遮挡检查
换环境后全部失败分辨率或缩放不匹配对比环境配置差异统一环境配置,加适配层

排查的时候有个通用思路:先确认感知对不对,再确认动作准不准,最后确认反馈灵不灵。大部分问题出在感知层,模型看到的和实际的不一致。把截图存下来人工看一眼,往往就能发现问题。我养成了一个习惯,每次失败都保存当时的截图和模型输出,事后复盘的时候一目了然。

提示:日志要记全。截图、模型输出、执行的动作、执行后的截图,这四样凑齐了,绝大多数问题都能定位。缺了任何一样,排查就像盲人摸象。日志存储成本不高,但价值极大,别在这上面省。

5. 关于能力边界与工程兜底的思考

5.1 模型能力的天花板在哪里

做了一段时间之后,我对模型能力的天花板有了比较清醒的认识。当前的多模态模型在界面语义理解上已经相当不错,给它一张截图,它能比较准确地告诉你界面上有什么、大概是什么功能。但在精确空间定位上还差得远,坐标误差是常态。在多步规划上也不稳定,简单任务还行,步骤一多就容易乱。

这个能力分布决定了当前阶段的项目策略:把模型用在它擅长的地方,把不擅长的地方用工程手段补上。语义理解交给模型,坐标定位用检测模型或者模板匹配兜底,多步规划用状态机约束。这种分工不是对模型能力的否定,而是对现实的尊重。硬要让模型端到端地搞定一切,结果就是无穷无尽的调试。

我见过一些团队执着于“纯模型方案”,拒绝任何工程兜底,觉得那样不够优雅。结果就是系统在演示环境里跑得挺好,一到真实环境就崩。工程兜底不丢人,它是把不稳定的能力包装成稳定产品的必要手段。用户不关心你内部用了多少模型多少规则,他们只关心任务能不能可靠完成。

5.2 工程兜底策略的设计原则

工程兜底的设计,我总结了几条原则。第一条是兜底要分层。最上层是模型决策,中间层是规则校验,最下层是硬编码的保底逻辑。每层都有明确的职责,上层失败了下层接住,而不是所有逻辑混在一起。分层的好处是每层可以独立测试和替换,维护起来清晰。

第二条是兜底要可观测。兜底逻辑触发的时候要留下明确的日志,说明是哪一层兜住的、为什么触发的。没有这个观测,兜底逻辑就成了黑盒,出了问题根本不知道从哪查。我一般会在兜底触发时记录触发原因和当时的界面状态,方便后续分析。

第三条是兜底不能掩盖问题。兜底是为了保证任务完成,不是为了把失败藏起来。如果某个兜底逻辑频繁触发,说明上游的模型或者规则有问题,应该去修上游,而不是让兜底一直兜着。我会定期统计各层兜底的触发频率,频率高的地方就是需要优化的地方。

5.3 什么任务适合交给Computer Use

不是所有任务都适合用Computer Use来做。判断标准大致是:界面相对固定、操作步骤可枚举、失败可检测、重试成本低。符合这几条的任务,用Computer Use做成功率有保障。反过来,界面千变万化、步骤依赖大量常识判断、失败难以检测的任务,现阶段还是人工做更靠谱。

举个具体的对比。后台管理系统的数据录入,界面固定、步骤明确、填错了能看出来、重填成本低,非常适合。而开放式的网页浏览和信息搜集,界面不可控、目标模糊、失败难判断,就不太适合。这个判断很重要,它决定了你把资源投在哪个方向上。投错了方向,再努力也是事倍功半。

我在实际项目里的体会是,Computer Use最适合做“有明确成功标准的重复性操作”。这类任务人类做起来枯燥易错,模型做起来虽然慢但稳定,价值最明显。而那些需要灵活应变、需要大量背景知识的任务,现阶段还是人机配合更现实——模型做粗活,人做判断。

6. 从莫拉维克悖论回看这个方向

绕了一圈再回到莫拉维克悖论,我对它的理解比刚开始深了不少。这个悖论不是在说机器笨,而是在提醒我们人类习以为常的能力背后藏着巨大的复杂性。Computer Use这个方向之所以难,正是因为它要求机器去复现那些人类根本不觉得难的能力——看、点、判断、纠错。这些能力在人类身上是打包在一起的,拆开来看每一项都不简单。

我现在的看法是,这个方向的机会不在于追求“像人一样通用”,而在于找到那些人类做起来烦、机器做起来虽然笨但能稳定完成的场景。把场景收窄,把流程固化,把兜底做厚,模型的能力就能被转化成实际价值。反过来,如果一直盯着“通用操作”这个目标,就会不断撞上莫拉维克悖论的墙。

最后分享一个我在实操中养成的小习惯:每次系统失败,不要急着调参数或者换模型,先问自己一句“这个失败,人类来做会不会也出错”。如果人类在同样情况下也会出错,那说明是任务设计或者环境的问题,不是模型的问题,该改的是任务和环境。如果人类轻松就能做对而模型做不对,那才是模型能力需要提升的地方。这个区分能帮你把精力花在刀刃上,避免在错误的方向上反复折腾。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进