000 不是给聊天模型外挂一张截图。它把原始屏幕读成可操作的对象——窗口、按钮、输入框,每一个都带有位置和标签——先执行操作,再回到屏幕上核对这次操作本应造成的变化。控件的作用来自经验的学习,而不是凭空假设。它会以可审计的形式报告自己看到了什么、做了什么、实际发生了什么——而且在你的屏幕上工作得越久,就越好用。
带类型的感知结果——每个窗口、按钮和输入框,都附带位置和标签——仅凭原始截图得出。不用 DOM,不用无障碍树。同样的感知能力以 API 形式开放给你自己的智能体,也包括其他模型。
每一次点击都会与它本应造成的变化进行核对。没有产生任何效果的操作会被重试并如实上报,绝不含糊带过。
当屏幕并不支持某个操作时,它会直说,而不是随手点一个看起来合理的地方。自信满满的误点击,正是它被设计来消除的失败模式。
控件的作用来自它自己的操作历史。第一天它会问;到第三十天,它已经摸熟了你的应用。
实时接口
用一次 API 调用,在一个会话背后启动 CommandAGI 000。该会话在工作过程中可被观察,并保留了每一步背后的证据。
它返回什么
一个端点——POST /v1/transduce——接收一个模型 id 及其带类型的输入,并返回该模型带类型的输出。GET /v1/models 会列出每一个签名。
不存在 /v1/act。模型只输出结构;决定拿这个结构做什么,是策略层的工作——通过 API 由你决定,或者当你在一个会话内运行它时由我们决定。
import os, requests
res = requests.post(
"https://api.commandagi.com/threads",
headers={"Authorization": f"Bearer {os.environ['COMMANDAGI_API_KEY']}"},
json={
"model": "commandagi/CommandAGI-000",
"environment": "ubuntu",
"task": "Open a browser and book the cheapest flight to Tokyo next month.",
},
)
thread = res.json()
print(thread["id"], thread["watchUrl"])把屏幕读取为带类型的、可落地的对象,而不是从一团模糊的像素中猜测。
使用真实的鼠标、键盘、终端、应用程序,以及所连接的机器。
核查每一次操作原本要引发的变化,恢复,并持续到完成为止。