Lybic Docs

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.Clientlybic.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)

本页内容