AgentDepthAgent 工程学习指南
输入概念或问题,检索正文和待编写目录。
第一次学习?从 L0 总览开始 →

Computer Use、登录态与回放

我的学习 →

正在读取学习记录…

Computer Use 让 Agent 通过屏幕、鼠标和键盘操作桌面应用。它像接手同事正在使用的电脑:先看当前是谁登录、哪扇窗口在前面,再决定点哪里。浏览器能读到按钮名称,桌面操作则经常只有一张截图与坐标。截图是某一时刻的界面记录,坐标的含义随窗口、缩放和弹窗改变。

假设账号 account-A 正在确认导出报表,确认按钮矩形横向覆盖 100 到 180 像素、纵向覆盖 40 到 80 像素。点击中心 (140,60) 后,界面应从“确认导出”变成“导出完成”。保存这次观察与动作,再按同样前提执行,叫回放。回放需要恢复观察前提,否则旧坐标可能点到另一账号的按钮。

从输入到可核对结果

下面用人工定义的界面状态与按钮矩形重放一次确认动作。Screen 中的 account 对应登录身份,revision 对应截图版本,dialog 对应窗口内容。真正截图包含像素,示例把影响动作的字段单独列出,方便逐项检查。

replay 先比较账号,再比较截图版本,随后判断坐标是否落在按钮内,最后确认当前窗口名称。四项都满足才返回新状态。replace 创建新的 Screen,原对象保留,因而能对照动作前后。下一次动作必须使用新版本 2;继续拿版本 1 操作会被拒绝。Anthropic 的官方计算机工具实现可以看到坐标缩放与范围检查。

回放条件本例保存值条件变化后的处理
登录账号account-A账号变化时停止
截图版本1界面改变后重新观察
按钮区域100..180 × 40..80缩放后重算坐标
窗口标题确认导出切换弹窗后重新定位
账号A / 截图v1,然后账号·版本·坐标校验,然后确认动作,然后完成截图v2,身份或版本变化 → 重新观察
按箭头阅读一次正常路径;下方分支标出当前主题的条件变化。

保存并运行这两个文件

在 PowerShell 创建练习目录:

PowerShell
New-Item -ItemType Directory -Force l9-computer
cd l9-computer

macOS 终端:

Bash
mkdir -p l9-computer
cd l9-computer

把下面第一段完整代码保存为 desktop_replay.py,第二段保存为 test_desktop_replay.py,两份文件放在这个目录。

Python
from dataclasses import dataclass, replace

SESSION = "account-A"

@dataclass
class Screen:
    account: str
    revision: int = 1
    dialog: str = "确认导出"
    exported: bool = False

def replay(screen, session, observed_revision, point):
    # 回放动作绑定账号和截图版本;同一坐标在另一张屏幕可能有别的含义。
    if screen.account != session:
        raise ValueError("登录账号不匹配")
    if screen.revision != observed_revision:
        raise ValueError("截图已过期")
    x, y = point
    if not (100 <= x <= 180 and 40 <= y <= 80):
        raise ValueError("未点中确认按钮")
    if screen.dialog != "确认导出":
        raise ValueError("当前窗口无法确认")
    return replace(screen, revision=screen.revision + 1,
                   dialog="导出完成", exported=True)

if __name__ == "__main__":
    screen = Screen("account-A")
    print("动作前:账号=" + screen.account + ",版本=" + str(screen.revision))
    try:
        screen = replay(screen, SESSION, 1, (140, 60))
        print("动作后:" + screen.dialog + ",版本=" + str(screen.revision))
    except ValueError as error:
        print("停止:" + str(error))
Python
import unittest
import desktop_replay as lab


class MechanismTests(unittest.TestCase):
    # 正常、边界和失败输入都由这里提供,直接运行即可。

    def test_normal(self):
        original = lab.Screen("account-A")
        result = lab.replay(original, "account-A", 1, (140, 60))
        self.assertTrue(result.exported)
        self.assertFalse(original.exported)

    def test_boundary_button_edge(self):
        self.assertTrue(lab.replay(lab.Screen("a"), "a", 1, (100, 40)).exported)

    def test_failure_session_and_stale(self):
        for session, rev in [("b", 1), ("a", 0)]:
            with self.assertRaises(ValueError):
                lab.replay(lab.Screen("a"), session, rev, (140, 60))


if __name__ == "__main__":
    unittest.main()

打开 PowerShell,逐行输入下列命令。cd 是进入文件夹,dir 是列出文件;确认列表里有刚保存的两个 .py 文件,再运行 Python。

Bash
# 在刚才创建的练习目录检查文件,再运行程序。
ls
python -X utf8 desktop_replay.py
python -X utf8 -m unittest -v test_desktop_replay.py

程序输出:

TXT
动作前:账号=account-A,版本=1
动作后:导出完成,版本=2

测试末尾应显示 Ran 3 tests 与 OK。若找不到文件,检查当前目录与扩展名;若导入失败,确认测试和主程序在同一文件夹。测试描述的三组材料就在上方代码,不需要另外准备输入。

改一处,再看结果

正常输出显示版本从 1 变成 2。测试还确认原状态的 exported 仍为 False,这使我们可以比较前后,而不会把旧观察悄悄改掉。矩形边缘 (100,40) 也允许点击,显示条件使用闭区间。

把 SESSION = "account-A" 改成 SESSION = "account-B",再次运行。输出会变成“停止:登录账号不匹配”,导出状态没有推进。恢复为 account-A 后重跑。真实应用接入时,登录恢复文件可能包含 Cookie 或令牌,应限制保存位置与读取权限;回放前应从应用读到账号标识,不能凭文件名认定身份。

重复导出、付款和删除等动作有自己的业务副作用。重放要核对是否已经完成,使用可查询的业务ID;仅靠截图版本能防止旧观察复用,却不足以阻止网络重试导致重复提交。

改动后仍在刚才的 PowerShell 目录运行:

Bash
python -X utf8 desktop_replay.py

确认上述变化后,把参数恢复成原值,保存并再次执行这条命令。

把机制接回 Agent

桌面工具接入时,先采集当前截图并记录屏幕尺寸、账号和版本,把这些观察交给模型。模型返回动作与坐标后,执行器转换坐标、验证当前窗口、执行鼠标键盘操作,再截取新画面。需要桌面控制权限、可隔离的测试账号与截图存储位置;每轮动作都要留有重新观察的入口。

课后练习展开习题收起习题

4 道练习 · 客观题规则评分 · 其余题目待批改

正在读取本地记录…

不调用模型,不执行代码。简答、代码和场景题仅保存答案并展示自查标准,不生成评分、徽章或认证。输入内容不会自动保存,请点击提交;不要填写个人信息或密钥。

练习 1 / 4 · v1.0.1

选择题 · 先判断边界

关于“Computer Use、登录态与回放”,哪种做法更稳妥?

对应知识点:L9-computer

选择一个答案
练习 2 / 4 · v1.0.0

简答题 · 解释失败

写出一个失败输入并说明记录字段。

对应知识点:L9-computer

练习 3 / 4 · v1.0.0

代码题 · 边界测试

补充正常、边界、失败三组输入和预期结果。

对应知识点:L9-computer

练习 4 / 4 · v1.0.0

场景题 · 结果未知

证据不足时如何设计状态和人工接管?

对应知识点:L9-computer

图片查看器
100%

文章配图 · 按 Esc 关闭