1. 项目背景:Computer Use 这个词被炒了两年,为什么落地还是这么难
先说清楚 Computer Use 是什么。它指的是让大模型直接操作电脑界面去完成任务,模型的眼睛是屏幕截图或者页面结构解析,手是鼠标点击、键盘输入、滚动拖拽这类动作指令。简单说就是给模型装上一双眼睛和一只手,让它像人一样坐在电脑前干活。
我在 GPT-5.6 时期接过两个实际项目,一个给客服后台做自动填单,一个给内部管理页面做周报数据提取。这两个项目的共同点是动作路径长、页面结构混乱、中间夹杂弹窗和 iframe 切换。跑下来之后我对 Computer Use 的感受很明确:模型识图能力其实早就够用了,真正拖后腿的是状态管理和操作上下文这两环。
GPT-6 Astra 这次引起我注意,不是因为宣传说它“多模态能力更强”,而是它把 Computer Use 里最让人头疼的“状态断片”问题用工程手段解决了。下面我结合自己的接入经验,拆一拆 GPT-5.6 到底卡在哪,Astra 改了哪些关键设计,以及想在一线业务里真正跑通 Computer Use,除了换模型还需要做哪些配套工作。
1.1 GPT-5.6 时代 Computer Use 的三个典型故障
先说我在项目里真实遇到的故障,不是跑通 demo 那种,而是长时间挂机运行后冒出来的问题。
第一个是元素定位漂移。页面第一次截图时按钮还在右上角,过几秒页面做了异步更新,按钮位置变了,但模型拿到的还是旧的截图信息,点击自然落空。更有意思的是,GPT-5.6 在把截图切分成网格块去定位元素的时候,经常出现目标元素恰好落在两条切分线边界的情况,模型会犹豫到底点左边还是点右边,最后随机选一侧,直接点错。
第二个是记忆断档。拿客服后台自动填单举例,整个流程超过 40 步,中间要上传附件、切换 iframe、关闭弹窗。GPT-5.6 的上下文里保存的是对话文本,不是操作状态。到了第 8 步需要勾选某个选项时,模型已经忘了第 3 步已经上传过附件,于是又跑去重复上传,甚至因为找不到上传按钮而在原地打转。
第三个是错误恢复能力弱。动作执行一旦失败,模型就陷入“截图-思考-点击-再截图”的死循环,不会跳出来重新规划。用户输入了错误格式的日期,页面弹出校验提示,模型每次都在同一个位置反复确认,完全看不出它在尝试换一条路。
这三个问题我整理成了一张表,方便对照:
| 故障类型 | 典型表现 | 根因 |
|---|---|---|
| 元素定位漂移 | 点错按钮、坐标偏移 | 截图信息滞后,网格切割不稳定 |
| 状态记忆断档 | 重复上传附件、跳过关键步骤 | 上下文保存的是对话文本而非操作状态 |
| 错误恢复能力弱 | 循环点击、原地打转 | 缺少动作执行后的验证和备用规划 |
1.2 为什么 GPT-5.6 一直没解决,问题不在视觉
很多团队以为是视觉识别精度不够,于是拼命提高截图分辨率、增加视觉 token。我一开始也这么干,后来发现治标不治本。
GPT-5.6 的 Computer Use 本质上还是“一帧一帧看屏幕”:每执行一个动作,截一张图,交给模型分析,再产出一个动作指令。这种方式有两个天然限制。
第一,截图是时间切片,不是持续状态。页面变了,模型不知道;弹窗出现了,模型没感知。它只能根据当前这张图做决策,无法把“刚才发生了什么”纳入考量。
第二,上下文组织方式是对话式的。GPT-5.6 会把操作历史按聊天消息的形式保存在上下文里,模型需要自己从一堆文字描述中推断当前页面的状态。这在短流程里没问题,但在长流程里,前期操作产生的状态信息会被淹没在新截图和新动作里。
所以 GPT-5.6 一直没解决 Computer Use 故障,不是某个参数没调好,而是整个架构缺少一个专门的“状态管理模块”。这个问题不换架构,光调参或者优化提示词,是无解的。
2. GPT-6 Astra 的核心变化:从“看屏幕”变成“懂界面状态”
GPT-6 Astra 解决这个问题的思路很直接:不再让模型被动地看一张张截图,而是主动维护一份持续更新的界面状态清单。我的理解是,Astra 在视觉理解和动作执行之间加了一层“状态描述器”,每次执行动作前先刷新这个状态描述器,模型基于它做决策。
这带来的变化可以归纳成三条。
2.1 屏幕锚点替代网格坐标
Astra 不再用固定的网格坐标来定位元素,而是给页面元素建立锚点。我理解这个锚点就是元素的语义身份,类似 DOM 里的 id 或者 data 属性,再结合视觉位置生成一个复合标识。实际操作中,页面异步刷新导致按钮位置变化时,Astra 会根据锚点重新定位,而不是像以前那样依赖上一次截图里的坐标。
这和人的操作逻辑是一致的。人不会记住“按钮在屏幕 20% 位置”,人会记住“这是提交按钮”。Astra 把这种认知迁移到了 Computer Use 里。
2.2 规划和执行分离
GPT-5.6 把规划和执行揉在一起,模型每看一帧图就重新想一下下一步做什么。Astra 把这两个环节拆开了。模型先读一遍任务描述,结合界面状态清单生成一份行动计划,然后才进入执行阶段。执行阶段的每一次动作都对照计划来验证,发现偏差就回到规划环节重新规划。
用开车类比:GPT-5.6 是边开车边看地图,每过一个路口才临时决定下一步;Astra 是上车前先设置好导航,行驶中只有偏离路线才重新计算。后者在复杂操作里明显更稳。
2.3 操作记忆持久化
这是我最看重的改进。Astra 会把操作历史压缩成结构化的状态数据,而不是简单地把对话消息堆在上下文里。比如已经上传的附件文件名、当前在第几步、哪个 iframe 处于激活状态,这些信息会被持久化保存,切换页面和弹窗之后依然能恢复。
我在实际测试中验证过一个场景:自动填单流程走到第 15 步,页面弹出系统通知,模型关闭通知后能准确说出“当前还在第 15 步,需要继续填写客户姓名”,而不是从头开始重新理解。
3. 实操:在 GPT-6 Astra 上跑通一次完整的 Computer Use 流程
讲完原理,说点能直接照做的。下面是我在测试环境里接入 GPT-6 Astra 的完整过程,供参考。
3.1 环境准备
我建议在沙箱环境里跑 Computer Use,尤其是第一次接入时。原因很简单:模型误操作的概率再低,一旦发生也是真实环境里的真点击、真提交。我用的是独立虚拟机,里面装了目标测试网站和一套录屏工具,方便回放操作轨迹。
接入方式上,Astra 提供了两类接口。一类是纯 API 调用,适合程序化控制;另一类是可以嵌入到桌面客户端里的 agent 环境,适合做交互式调试。我第一轮用的是 API 方式,方便把中间的状态数据抓出来分析。
3.2 核心调用思路
整个调用流程我按四个阶段来组织:初始化、规划、执行、验证。这是我在 GPT-6 Astra 上摸索出来的最稳的结构。
初始化阶段,给模型传入三样东西:任务目标、当前界面状态清单、操作历史。界面状态清单这一步很关键,不是直接把截图丢过去,而是先把页面渲染成带锚点的结构化描述,再让模型基于这个描述思考。
代码思路大致是这样:
# 伪代码示例,展示 Astra 接入时的核心数据结构 task = "在客服后台创建一个新工单,类型选择'售后',优先级设为'高',并备注客户描述" screen_state = extract_anchor_state( screenshot=current_screenshot, dom_tree=page.dom_snapshot, iframe_context=current_iframe_id, ) response = astra_client.begin_task( task=task, state=screen_state, operation_history=history_log, ) while not response.is_finished: action = response.next_action if action.type == "click": element = page.find_by_anchor(action.target_anchor) element.click() elif action.type == "input": page.fill(selector=action.target_selector, value=action.value) # 动作执行完,立刻刷新状态 new_state = extract_anchor_state( screenshot=page.screenshot(), dom_tree=page.dom_snapshot(), iframe_context=page.active_iframe(), ) response = astra_client.continue_task(new_state, action_result="success")几个注意点。extract_anchor_state 这个函数的价值在于把原始截图转换成模型更容易理解的结构化数据,建议自己封装一层,不要让模型直接拿原始截图做全部推理。operation_history 要记录动作类型、动作参数、执行结果,这是 Astra 持久化记忆的基础。
3.3 参数选择与调优经验
我跑了三轮测试,调整了三组参数,效果差异明显。
| 参数 | GPT-5.6 常用值 | GPT-6 Astra 推荐值 | 说明 |
|---|---|---|---|
| 截图分辨率 | 1280 | 按目标页面宽度自适应 | Astra 依赖锚点识别,不必强行喂高分辨率 |
| 单步超时时间 | 10s | 20s | Astra 的规划环节需要更多推理时间,但更准确 |
| 重试次数 | 0 | 2 | 允许单步动作重试,但重试前必须刷新状态 |
| 动作确认阈值 | 无 | 0.7 | 只有置信度高于阈值才执行,低于则重新规划 |
第三轮测试我加了动作确认阈值这个参数,效果特别好。GPT-6 Astra 会给每个动作输出一个置信度分数,低于 0.7 时不执行,而是回到规划环节生成备选动作。这大大减少了误点击次数。代价是速度稍慢,但在业务场景里,准确率远比速度重要。
4. 常见问题与排查技巧实录
接入 GPT-6 Astra 后,不是所有问题都消失了。换个思路说,GPT-5.6 时代怎么调都调不好的老问题,Astra 解决了一部分,但也暴露出新问题。这里把我踩过的坑和排查思路整理出来。
4.1 高频问题速查表
| 问题 | 现象 | 解决思路 |
|---|---|---|
| 锚点过期 | 页面内容刷新后模型还在操作旧锚点 | 每次动作执行后强制刷新状态,不依赖上一轮的缓存 |
| 循环点击同一位置 | 弹窗没关掉,模型以为点到了关闭按钮 | 验证动作结果时不仅看是否执行,还要看界面状态是否变化 |
| 流程中途变慢 | 第 20 步后响应时间明显增加 | 需要定期压缩操作历史,只保留最近 10 步的细节 |
| iframe 操作失败 | 目标元素在 iframe 内,锚点定位到了外层页面 | 在状态初始化阶段声明当前 iframe 上下文,切换时显式通知模型 |
| 旧坐标逻辑失效 | 之前写死的坐标偏移在 Astra 上频繁出错 | 把基于坐标的动作全部改为基于锚点的动作,坐标方式不再适用 |
4.2 从 GPT-5.6 迁移过来的两个深挖教训
第一个教训是不要混用两代模型接口。我有一次图省事,把 GPT-5.6 的坐标点击逻辑保留着,只在部分环节切换到 Astra。结果 Astra 给出的锚点信息跟旧逻辑完全不兼容,模型以为自己点击成功了,实际点击的位置是错的。后来我把整个流程统一改成 Astra 的锚点模式,问题立刻消失。
第二个教训是状态断言不能省。Astra 的判断逻辑依赖“操作是否改变了界面状态”,但这个状态变化需要开发者自己确认。我之前在图节点流程里只判断“是否执行了点击动作”,不判断“点击后界面是否发生了变化”,导致模型误以为操作无效,反复重试。加了状态断言后,比如“检查提交按钮是否从灰变亮”“确认上传文件列表里多了一条记录”,流程稳定了很多。
还有一个细节值得分享:在给 Astra 的任务描述里加一句“每完成一个关键步骤,用一句话总结当前状态和依据”,这句话能显著提高长流程的稳定性。原因是它强制模型在上下文中主动维护状态记录,而不是被动地让状态信息淹没在截图和动作日志里。
5. 个人体会与后续扩展方向
5.1 我的实际使用感受
把 GPT-6 Astra 接入真实业务后,我的体会是:Computer Use 终于从一个“需要人盯着看好每一步”的实验功能,变成了“可以放心的跑定期任务”的工程能力。我这边目前常驻跑三个自动化任务:客服工单自动分类、库存报表定时拉取、竞品页面价格监控。前两个在 GPT-5.6 时代完全不敢跑过夜,因为中途一次弹窗就可能导致整个流程卡死。Astra 到目前为止,最长连续运行了 9 个小时,没有出现需要人为干预的故障。
不过也要说一句公道话。Astra 的稳定性提升是工程层面的,不是魔法。它把状态管理、错误恢复这些基础能力做扎实了,但前提是业务方愿意做好配套:沙箱环境、状态断言、操作日志审计。我在测试阶段见过不少团队,期待值拉满,结果连最基础的操作历史记录都没建立,自然体验不到 Astra 的优势。
5.2 我后面打算做的两个方向
第一个方向是多个 Computer Use 实例并行。以前单实例长流程容易卡死,现在 Astra 状态管理稳定了,可以考虑让三到五个实例同时处理不同页面、不同账号的任务,之间通过一个任务调度中心协调。相当于把一个慢速单体自动化,拆成一组并行 worker。
第二个方向是跟已有的 RPA 流程结合。很多团队在前几年已经部署了 RPA 机器人做固定流程,但因为规则写死,一遇页面改版就崩溃。我计划让 Astra 负责“看懂页面变化并更新执行逻辑”,RPA 负责“执行高强度重复操作”,两边互补。这个思路目前还在测试阶段,但初步效果不错。
最后分享一个我自己一直在用的小技巧:所有 Computer Use 任务执行完后,要求模型固定输出一句“我完成了什么操作,依据是什么”的证据说明。这段话不仅方便回放排查,还能在跑偏时快速定位是哪个决策点出现了问题。