Go SDK使用指南
探索使用 Go SDK 与 Lybic 平台交互的实用示例。
本指南提供了使用 Lybic Go SDK 与 Lybic 平台交互的示例。
平台 API 示例
以下示例说明了如何通过 SDK 与 Lybic 平台的多种功能进行交互。
沙箱管理
沙箱是按需创建、独立隔离的云端环境,用于运行GUI智能体。
列出沙箱
检索所有可用沙箱的列表。
ctx := context.Background()
sandboxes, err := client.ListSandboxes(ctx)
if err != nil {
fmt.Printf("列出沙箱时出错: %v", err)
return
}
fmt.Printf("找到 %d 个沙箱。\n", len(sandboxes))
for _, sandbox := range sandboxes {
fmt.Printf("- 沙箱 ID: %s, 名称: %s\n", sandbox.Id, sandbox.Name)
}创建沙箱
创建新沙箱。并非所有参数都需要填写。标有 * 的参数是可选的。
_sandboxName := "Test Sandbox"
createDto := lybic.CreateSandboxDto{
Name: &_sandboxName,
}
sandbox, err := client.CreateSandbox(ctx, createDto)
if err != nil {
fmt.Printf("创建沙箱时出错: %v", err)
return
}
fmt.Printf("已创建沙箱: %+v\n", sandbox)获取沙箱详情
检索特定沙箱的详细信息。
sandbox, err := client.GetSandbox(ctx, "sandbox-id")
if err != nil {
fmt.Printf("获取沙箱时出错: %v\n", err)
return
}
fmt.Printf("沙箱信息: %+v\n", sandbox)与沙箱交互
您可以执行鼠标点击或键盘输入等操作,并截取截图(预览)。
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: lybic.ComputerUseActionDtoActionOneOf{
ComputerUseActionDtoActionOneOfInterface: map[string]any{
"type": "mouse:click",
"x": map[string]any{
"type": "px",
"value": 10,
},
"y": map[string]any{
"type": "px",
"value": 10,
},
"button": 1,
},
},
})
if err != nil {
fmt.Println("执行计算机使用操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)获取预览(截图):
previewSandbox, err := client.PreviewSandbox(ctx, "sandbox-Id")
if err != nil {
fmt.Printf("预览沙箱时出错: %v\n", err)
return
}
fmt.Printf("已预览沙箱: %+v\n", previewSandbox)延长沙箱
延长运行中沙箱的生命周期。
var maxLife float32 = 86400 // 24 小时(秒)
err = client.ExtendSandbox(ctx, "sandbox_id", lybic.ExtendSandboxDto{
MaxLifeSeconds: &_maxLife,
})
if err != nil {
fmt.Printf("延长沙箱时出错: %v\n", err)
return
}
fmt.Println("沙箱延长成功。")删除沙箱
当您完成使用后删除沙箱。
sandboxId := "your-sandbox-id"
err := client.DeleteSandbox(context.Background(), sandboxId)
if err != nil {
fmt.Printf("删除沙箱时出错: %v", err)
return
}
fmt.Println("沙箱删除成功。")项目管理
项目用于组织和管理你的资源。
列出项目
projects, err := client.ListProjects(ctx)
if err != nil {
fmt.Println("列出项目时出错:", err)
return
}
for _, project := range projects {
fmt.Printf("项目 ID: %s, 名称: %s\n", project.Id, project.Name)
}创建项目
projectDto := lybic.CreateProjectDto{
Name: "My New AI Agent",
}
project, err := client.CreateProject(ctx, projectDto)
if err != nil {
fmt.Println("创建项目时出错:", err)
return
}
fmt.Println("项目创建成功:", project.Name)删除项目
err = client.DeleteProject(ctx, "project-id")
if err != nil {
fmt.Println("删除项目失败:", err)
return
}
fmt.Println("项目删除成功")组织统计信息
检索组织的当前使用统计信息。
stats, err := client.GetStats(ctx)
if err != nil {
fmt.Println("获取统计信息时出错:", err)
return
}
fmt.Printf("平台统计: %+v\n", stats)使用 MCP 客户端
对于涉及开发具备工具调用能力的高级智能体,您需要使用MCP(模型上下文协议)客户端。
MCP 客户端初始化
您可以从现有的 lybic.Client 或 lybic.Config 对象初始化 McpClient。
// 假设 'client' 是您已初始化的 lybic.Client
mcpClient, err := lybic.NewMcpClient(ctx, lybic.McpOption{
UsingClient: client,
})
if err != nil {
panic(err)
}
defer mcpClient.Close()
// 使用 mcpClient...
fmt.Println("MCP 客户端初始化成功!")调用工具
MCP 客户端的主要功能是调用工具,例如 computer-use 服务。
// 此示例假设您有一个与沙箱关联的 MCP 服务器。
args := map[string]any{
"action": "doubleClick",
"x": 120,
"y": 240,
}
service := "computer-use"
result, err := mcpClient.CallTools(context.Background(), args, &service)
if err != nil {
fmt.Printf("调用工具时出错: %v", err)
return
}
fmt.Printf("工具调用结果: %+v\n", result)MCP 服务器管理
您也可以管理 MCP 服务器本身。
列出 MCP 服务器
servers, err := mcpClient.ListMcpServers(ctx)
if err != nil {
fmt.Println("列出 MCP 服务器时出错:", err)
return
}
fmt.Println("MCP 服务器:")
for _, server := range servers {
fmt.Printf("ID: %s, 名称: %s\n", server.Id, server.Name)
}创建 MCP 服务器
m, err := mcpClient.CreateMcpServer(ctx, lybic.CreateMcpServerDto{
Name: "MCP-server-01",
})
if err != nil {
fmt.Println("创建 MCP 服务器时出错:", err)
return
}
fmt.Println("已创建 MCP 服务器:")
fmt.Printf("ID: %s, 名称: %s\n", m.Id, m.Name)与沙箱的 Action 结构体进行交互
您可以执行鼠标点击或键盘输入等操作,并截图。以下示例演示如何使用 SDK 中提供的各种action(操作)。
执行鼠标点击操作:
// 在位置 (100, 200) 使用鼠标左键创建鼠标点击操作。
action := lybic.NewMouseClickAction(
lybic.NewPixelLength(100),
lybic.NewPixelLength(200),
1, // 1 表示左键
)
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行鼠标点击操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)执行鼠标双击操作:
// 在屏幕中心创建鼠标双击操作。
action := lybic.NewMouseDoubleClickAction(
lybic.NewFractionalLength(1, 2), // 屏幕宽度的 1/2
lybic.NewFractionalLength(1, 2), // 屏幕高度的 1/2
1, // 1 表示左键
)
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行鼠标双击操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)执行鼠标移动操作:
// 将鼠标移动到位置 (300, 400)。
action := lybic.NewMouseMoveAction(
lybic.NewPixelLength(300),
lybic.NewPixelLength(400),
)
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行鼠标移动操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)执行鼠标滚动操作:
// 在位置 (300, 400) 垂直滚动 10 步。
action := lybic.NewMouseScrollAction(
lybic.NewPixelLength(300), // x 位置
lybic.NewPixelLength(400), // y 位置
10, // 垂直滚动步数
0, // 水平滚动步数
)
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行鼠标滚动操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)执行鼠标拖动操作:
// 从 (100, 100) 拖动鼠标到 (500, 500)。
action := lybic.NewMouseDragAction(
lybic.NewPixelLength(100),
lybic.NewPixelLength(100),
lybic.NewPixelLength(500),
lybic.NewPixelLength(500),
)
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行鼠标拖动操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)执行键盘输入操作:
// 创建键盘输入动作,输入 "Hello, Lybic!"。
action := lybic.NewKeyboardTypeAction("Hello, Lybic!", false)
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行键盘输入操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)执行键盘快捷键操作:
// 按 Ctrl+C。
action := lybic.NewKeyboardHotkeyAction("ctrl+c")
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行键盘快捷键操作时出错:", err.Error())
return
}
fmt.Println("操作执行成功:", actionResult)获取截图:
// 获取沙箱的截图。
action := lybic.NewScreenshotAction()
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("获取截图时出错:", err.Error())
return
}
// 截图数据将在 actionResult 中。
fmt.Println("截图获取成功:", actionResult)获取预览(截图的便捷方法):
// 这是一个对截图动作进行封装的辅助函数。
previewSandbox, err := client.PreviewSandbox(ctx, "sandbox-Id")
if err != nil {
fmt.Printf("预览沙箱时出错: %v\n", err)
return
}
fmt.Printf("已预览沙箱: %+v", previewSandbox)执行等待操作:
// 等待 5 秒(5000 毫秒)。
action := lybic.NewWaitAction(5000)
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("执行等待操作时出错:", err.Error())
return
}
fmt.Println("等待操作完成成功:", actionResult)标记任务完成:
// 发送任务成功完成。
action := lybic.NewFinishedAction()
// 可选地,您可以添加消息。
// action.Message = "任务完成!"
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("标记任务完成时出错:", err.Error())
return
}
fmt.Println("标记完成成功:", actionResult)标记任务失败:
// 标记任务失败。
action := lybic.NewFailedAction()
// 可选地,您可以添加消息。
// action.Message = "出现了问题。"
actionResult, err := client.ExecuteComputerUseAction(ctx, "sandbox-Id", lybic.ComputerUseActionDto{
Action: action,
})
if err != nil {
fmt.Println("标记失败时出错:", err.Error())
return
}
fmt.Println("标记失败成功:", actionResult)