Quicksand(GitHub 仓库)

TLDR AI 工具

摘要

微软开源 Quicksand,一个用于启动、控制和快照 QEMU 虚拟机的异步 Python API,专注于为 AI 智能体提供沙箱环境,无需 root 权限或 Docker 即可运行。

Quicksand 是一个异步 Python API,用于启动、控制和快照 QEMU 虚拟机,特别专注于为 AI 智能体提供沙箱环境。它为 Ubuntu 和 Alpine 发行版提供了预构建的 Linux 虚拟机。Quicksand 支持 macOS、Linux 和 Windows 上的 x86_64 和 ARM64 架构。这些沙箱不需要 root 权限或 Docker。
查看原文
查看缓存全文

缓存时间: 2026/10/09 18:22

microsoft/quicksand

来源: https://github.com/microsoft/quicksand

Quicksand

PyPI (https://pypi.org/project/quick-sandbox/) 变更日志 (https://github.com/microsoft/quicksand/blob/main/CHANGELOG.md) 文档 (https://microsoft.github.io/quicksand/) 许可证: MIT

Quicksand

Quicksand 是一个异步 Python API,用于启动、控制和快照 QEMU (https://www.qemu.org) 虚拟机,特别专注于为 AI 智能体提供沙箱环境。Quicksand 提供了预构建的 Ubuntu 和 Alpine 发行版 Linux 虚拟机,支持 x86_64 和 ARM64 架构,可运行在 macOS、Linux 和 Windows 上。运行沙箱不需要 root 权限或 Docker;在支持的平台上安装 QEMU 和镜像扩展包即可获得内置运行时。

安装

pip install 'quick-sandbox[qemu,alpine]'

或者安装核心包,再单独添加 QEMU 和镜像:

pip install quick-sandbox
quicksand install qemu alpine

使用

Hello, World!

import asyncio
from quicksand import Sandbox

async def main():
    async with Sandbox(image="ubuntu") as sb:
        result = await sb.execute("echo 'Hello from the sandbox!'")
        print(result.stdout)

asyncio.run(main())

运行命令

result = await sb.execute("apt update && apt install -y python3")
print(result.stdout, result.exit_code)

挂载宿主机目录

可以在启动时或运行时将宿主机目录共享到虚拟机中。

# 启动时挂载
async with Sandbox(
    image="ubuntu",
    mounts=[Mount("./workspace", "/mnt/workspace")],
) as sb:
    ...

# 或在运行中的沙箱上动态挂载
handle = await sb.mount("/tmp/data", "/mnt/data")
await sb.execute("ls /mnt/data")
await sb.unmount(handle)

配置网络

沙箱默认网络隔离。通过 NetworkMode.FULL 选择启用互联网访问和端口转发。

async with Sandbox(
    image="ubuntu",
    network_mode=NetworkMode.FULL,
    port_forwards=[PortForward(host=8080, guest=80)],
) as sb:
    ...

多 Linux 用户

在单个沙箱虚拟机中为多个智能体分配独立的 Linux 用户账户。

async with Sandbox(image="ubuntu") as sb:
    alice = await sb.create_user("alice")
    bob = await sb.create_user("bob")

    await alice.execute("cat > hello.txt", stdin="Hello from Alice!\n")
    await bob.execute("cat > hello.txt", stdin="Hello from Bob!\n")

    for user in (alice, bob):
        result = await user.execute("whoami && pwd && cat hello.txt")
        print(result.stdout)
        await sb.delete_user(user.name)

保存与加载

将虚拟机的磁盘状态保存到目录中。之后可以加载,即使在不同的机器上。

await sb.execute("pip install numpy pandas")
await sb.save("my-env")  # 虚拟机继续运行

# 之后加载
async with Sandbox(image="my-env") as sb:
    await sb.execute("python3 -c 'import numpy; print(numpy.__version__)'")

检查点与回滚

捕获完整的虚拟机状态,出错时可以回滚。

await sb.checkpoint("before-experiment")
await sb.execute("apt install -y something-risky")
await sb.revert("before-experiment")  # 虚拟机回滚到检查点状态

控制桌面

桌面镜像提供完整的 Xfce4 图形环境和浏览器。使用 quicksand install ubuntu-desktop 或 quicksand install alpine-desktop 安装。

async with Sandbox(image="ubuntu-desktop", enable_display=True) as sb:
    await sb.screenshot("screen.png")
    await sb.type_text("hello world")
    await sb.press_key(Key.RET)
    await sb.mouse_move(500, 300)
    await sb.mouse_click("left")

配置

以下是所有 Sandbox 配置选项:

Sandbox(
    # 要启动的镜像或保存名称
    image="ubuntu",
    # 客户机内存(默认:"512M")
    memory="2G",
    # 虚拟 CPU 核心数(默认:1)
    cpus=4,
    # 启动时共享到虚拟机的宿主机目录
    mounts=[Mount("/host", "/guest")],
    # NONE、MOUNTS_ONLY(默认)或 FULL 互联网访问
    network_mode=NetworkMode.FULL,
    # 将宿主机 TCP 端口转发到客户机
    port_forwards=[PortForward(host=8080, guest=80)],
    # 启动时扩展客户机文件系统
    disk_size="10G",
    # 挂载虚拟 GPU、键盘和鼠标,用于截图/输入文字/鼠标控制
    enable_display=True,
    # 停止时自动保存虚拟机状态
    save="my-save-name",
)

可用镜像

镜像类型包大小安装命令说明
ubuntu基础镜像~309-357 MBquicksand install ubuntuUbuntu 24.04 无头版
alpine基础镜像~82-85 MBquicksand install alpineAlpine 3.23 无头版(启动更快)
ubuntu-desktop叠加镜像(基于 ubuntu)~273-281 MBquicksand install ubuntu-desktopUbuntu 24.04 + Xfce4 + Firefox
alpine-desktop叠加镜像(基于 alpine)~346-363 MBquicksand install alpine-desktopAlpine 3.23 + Xcef4 + Chromium
quicksand-agent叠加镜像(基于 ubuntu)~306-335 MBquicksand install quicksand-agentUbuntu + Python 3.12、uv、build-essential、requests、pyyaml、ddgs、markitdown
quicksand-cua叠加镜像(基于 quicksand-agent)~489-500 MBquicksand install quicksand-cua智能体沙箱 + Xvfb、x11vnc、noVNC、Playwright、Chromium

大小为 2026 年 9 月 14 日发布的完整镜像包下载大小的近似值,因架构而异。叠加镜像的大小不包含其基础镜像。

从源码构建

git clone https://github.com/microsoft/quicksand.git
cd quicksand
uv sync
uv run uvr build --all-packages

文档

主题使用指南底层原理
安装安装包QEMU 二进制文件、内核、qcow2 磁盘
沙箱生命周期创建和配置沙箱-m、-smp、-accel、机器类型
运行命令execute()、流式输出、退出码内核启动、智能体令牌、hostfwd
文件交换挂载、热挂载、数据进出通过 guestfwd 实现 CIFS、通过 -fsdev 实现 9p
保存与回滚检查点、回滚、持久化保存qcow2 叠加层、savevm、blockdev-snapshot-sync
桌面控制截图、键盘、鼠标VNC、GPU、USB 数位板、QMP 输入注入
网络与隔离网络模式、端口转发SLIRP NAT、restrict=on、guestfwd
性能是什么让它如此之快io_uring、IOThreads、TCG 与 KVM

贡献指南

指南适用场景
创建镜像构建新的基础镜像或叠加镜像包
扩展沙箱添加方法、操作系统、架构或 QEMU 参数
测试运行或编写测试
发布发布新版本

完整指南:用户指南 | 底层原理 | 贡献者指南

相似文章

TencentCloud/CubeSandbox

GitHub Trending (daily)

TencentCloud的CubeSandbox是一个开源、高性能的安全沙箱服务,专为AI智能体设计,基于RustVMM和KVM构建,提供硬件级隔离、低于60毫秒的启动时间,并兼容E2B SDK。

@NFTCPS: App Sandbox 这玩意儿有点东西,免费开源,Windows 11 家庭版不用开 Hyper-V 就能跑 Win11、Ubuntu、macOS 虚拟机,还带 GPU 加速。 最骚的是有 headless API 加 Python S…

X AI KOLs Timeline

App Sandbox 是一个免费开源的虚拟机管理工具,支持在 Windows 11 家庭版上运行 Windows、Ubuntu 和 macOS 虚拟机,无需 Hyper-V,具备 GPU 加速和 headless API/Python SDK,可编程化批量管理 VM,适合 AI agent 等自动化场景。