数据截至 (上游 commit 5d92feea9f1e)
统一动作空间与坐标契约(一切的地基)
30 秒导读: ScaleCUA 是一个"看屏幕、动鼠标键盘"的 GUI agent。要让一个模型能操作 Ubuntu 桌面、安卓手机和浏览器,第一件事不是写代码,而是先定两条约定:模型被允许说哪些"动作词",以及动作里的坐标怎么写。这一章只讲这两条约定和它们对应的数据结构——它们是后面所有章节的地基。
本章讲清整个框架最底层的两个"宪法条款":
- 模型输出什么 —— 一套用 Python 函数签名声明的动作空间 DSL,外加
<think>/<operation>/<action>三段标签格式。 - 坐标怎么表达 —— 动作里的
x/y一律是相对屏幕的归一化浮点(0~1)。
外加一个承上启下的东西:代码侧的语义动作原语(带 @agent_action 的高层方法),它把"打一段字"这种人类意图,展开成一串低层动作字典。
本章只讲约定与数据结构。动作字符串如何被解析出来,见 第 3 章 之前的 第 2 章;归一化坐标如 何反算回像素,见 第 3 章;一个动作字典如何落到 pyautogui / adb / playwright,见 第 4 章。
1. 为什么需要"动作空间"这个东西(零基础也能懂)
先建立直觉。一个 GUI agent 的工作循环极其朴素:
看一张截图 → 想一下 → 说一句"我要点这里 / 打这段字" → 真的去点 / 去打 → 再看新截图……
问题出在中间那句"说一句"。模型是个只会吐文字的东西——它怎么"说"才能被程序可靠地执行?
- 如果让它自由发挥(比如"点一下右上角那个蓝色按钮"),那这句话既不好解析,也没法直接驱动鼠标。
- 如果给它一套固定的、像编程语言一样的动作词表,让它只能从里面选、并按规定填参数,那么"说"就变成了"写一小段可执行代码",程序照着执行即可。