场景
操作桌面
操作图形桌面的 Agent 运行一个循环:截图,决定做什么,发送键鼠输入,再看结果。本页演示这个循环。完整程序是 examples/go/computer-use。
前提条件
- Go 1.27 或更新版本,以及 Kibotos 仓库的一份检出。
- ctrl 地址,以及用
kibo enrollment create --operator为这个程序生成的注册密钥(enrollment key),见身份与注册。 - 带桌面的 Template,例如
kibotos-desktop,以及具备workspace.desktop能力的服务端。
步骤
1. 创建 Workspace 与桌面会话
桌面和浏览器需要比最小配置更多的资源。这个会话只能查看和操作桌面,所以 Agent 工具出错时也不能运行命令:
session, err := dataplane.Open(client, workspaceID,
dataplane.WithCommandPrefix("computer-use"),
dataplane.WithScopes(ctrlv1.DataPlaneScope_DATA_PLANE_SCOPE_DESKTOP))
if err != nil {
return err
}
defer session.Close()
desktop, err := session.Desktop(ctx)2. 等桌面画出来
第一次调用会启动桌面,而新桌面的第一张截图通常是空白的。程序持续截图直到画面变化,再留出时间让桌面稳定,见程序里的 waitForDrawing。
3. 截图
response, err := desktop.Screenshot(ctx, connect.NewRequest(&ctrlv1.ScreenshotRequest{}))
if err != nil {
return err
}
image := response.Msg.GetImage()把图片连同 GetWidth()、GetHeight() 发给模型,让它能返回坐标。
4. 发送操作
把模型的回答转换成操作。在请求里加一个等待,下一张截图就能显示结果:
result, err := desktop.PerformActions(ctx, connect.NewRequest(&ctrlv1.PerformActionsRequest{
Actions: []*ctrlv1.DesktopAction{
{Action: &ctrlv1.DesktopAction_ClickPointer{ClickPointer: &ctrlv1.ClickPointer{
Button: ctrlv1.PointerButton_POINTER_BUTTON_RIGHT,
Count: 1,
Position: &ctrlv1.ScreenPosition{X: 640, Y: 400},
}}},
{Action: &ctrlv1.DesktopAction_Wait{Wait: &ctrlv1.WaitInput{DurationMs: 1000}}},
},
}))服务端先检查整个列表,再执行其中的操作。限制见用 API。
5. 运行程序
程序代替模型做决定:右键打开菜单,按 escape 关闭,并保存每一步的画面:
go run ./examples/go/computer-use -endpoint https://ctrl.example.com:18092 \
-identity "$HOME/.local/state/kibotos-computer-use" -enrollment-key-file computer-use.key \
-template kibotos-desktop -output screenscreated Workspace ws-06gvz1jkrhy4h7cahwqck873d0
step 0: 1280x960 screen saved to screens/step-0.png
step 0: pointer at 640,480
step 1: 1280x960 screen saved to screens/step-1.png
step 1: pointer at 640,480
step 2: 1280x960 screen saved to screens/step-2.png
deleted Workspace ws-06gvz1jkrhy4h7cahwqck873d0屏幕大小由 Template 决定,在你的部署上可能不同。
注意
- 用户可以同时用
kibo workspace desktop view查看或操作,双方互不抢占,见在浏览器中查看桌面。 - 截图可能包含桌面显示的任何内容,包括输入的密钥。按 Agent 其他数据的方式处理它们。
- 这个场景没有 E2B SDK 版本:
@e2b/desktop未在 Kibotos 上测试,见从 E2B 迁移。
下一步
- 桌面:所有输入操作、按键名称与限制。
- 接入 Agent 平台:身份、会话对应与失败处理。
- DesktopService:所有方法与消息。