Kibotos
场景

操作桌面

操作图形桌面的 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 screens
created 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 迁移。

下一步

本页内容