观测与画面
本页是多模态优先这条原则落到调用上的参考:一次观测里有什么、系统的哪个部分读什么,以及模型怎样取得画面。
一次观测有多种形式
Section titled “一次观测有多种形式”每个环境都用同一个调用 observe 作答,返回几种形式的输入:
| 形式 | 例子 |
|---|---|
| 文本 | 任务指令、终端的输出、文件的内容、窗口的大纲 |
| 结构 | 状态:窗口及其元素的角色、名称和值;机器人的关节、夹爪和位姿 |
| 图像 | 截图、游戏画出的画面、带标定信息的摄像头视图 |
每种形式都按环境报告的样子到达:截图是图像,单元格的值是一个值,命令的输出是文本。
每个部分用适合它的形式
Section titled “每个部分用适合它的形式”系统的各个部分需要不同的输入,各取所需。
- 模型每一轮读到的是文本:任务指令、状态、程序打印的内容和每一步的结果。只有它的程序去看的时候,图才会到它面前。看不看、多久看一次、一张图在视野里留多久,都由模型决定。
- 程序直接处理文本和结构:读取一个元素的值,或者解析一条命令的输出。当图像才是最好的依据时,程序可以就它向视觉模型提问,或者让视觉模型指出其中的某个东西,再根据答案继续。
- 反应规则按控制频率在观测上运行,依据的是测量值,不调用模型。
- 学习型策略通过环境的适配器,以原生形式接收摄像头视图和机器人状态。
- 验证器判断一个说法时,拿到的证据与模型能拿到的一样:状态、环境报告的元素或页面文本,以及画面。
模型需要时才看
Section titled “模型需要时才看”三个调用在所有环境里都一样,模型用它们取得画面:
| 调用 | |
|---|---|
look(camera=None, region=None) |
把一个画面或其中一部分,连同这个程序的结果一起放进下一轮。点一下再看,是一次模型调用 |
watch(cameras=None) |
从现在起每个程序的结果都带上画面,直到 unwatch() |
look(keep=3)、look(pin="before")、unpin("before") |
一张图默认只在下一次回复里可见;模型可以保留最近几个程序的画面,或把某一张钉住 |
从表格里读一个合计不需要图:单元格的值就在窗口的元素里。检查页面渲染成什么样需要图:程序在改完之后看一次。游戏和运动的场景靠看而不是靠读,所以模型在那里自己打开 watch()。结构和文本也是这样按需取用:elements()、read_page()、读文件。
不能读图的模型,在文本和结构够用的地方照常工作。模型列表记录每个模型能否读图;不能读图的模型不会收到图,它去看的时候,由你指定的视觉模型把画面描述给它(模型和 provider)。
评测规则规定了固定观测的,在自己的配置里声明:runtime.cameras 写明哪些画面每一轮都带上。
每一步用合适的模态
Section titled “每一步用合适的模态”从表格单元格里读出的合计,或者一条命令退出时的文本,便宜而且准确。画布、游戏和真实场景,则通过图像来了解。模型和它写的程序逐步选择,每种形式对它们始终可用。
在哪里工作也是如此。对话从你选的环境开始,也可以不用环境;某一步需要别的环境时再取用:项目任务要看页面效果,就在问过你之后取用浏览器(环境)。
同一个控制循环因此可以用于彼此几乎没有共同点的环境。桌面、网站、游戏和机器人,报告的内容不同,动作不同,节奏也不同。每个环境在它的环境定义里说明一次自己报告什么,agent 的 skill 无需修改就能在上面工作。
