在开发 AI Agent 时你有没有思考过——如果能在一个容器里同时打开浏览器、终端、VSCode、Jupyter,并能让智能体直接调用这些能力,那该有多方便?效率定能翻倍!

没错,AIO Sandbox 项目就是干这件事情的,项目官网在这里 👉 https://sandbox.agent-infra.com。这是一款 All-in-One 超级容器,它把开发者常用的所有工具,打包成一个可编程的统一沙盒环境,并通过 API 或 SDK 暴露给智能体使用。

背景:为什么会诞生这个项目?

做智能体(Agent)开发时,我们经常需要以下几件事:

  • 打开浏览器去爬网页或截图;
  • 运行脚本、执行 shell 命令;
  • 读写文件;
  • 在 VSCode 或 Jupyter Notebook 里调试结果。

这些工具分散在不同的地方,环境切来切去,不仅麻烦,还很难让智能体“无缝协作”这些能力。很明显 AIO Sandbox(All-In-One Sandbox) 就是为了解决此问题而诞生的:

AIO Sandbox 是一个一体化的 Agent 沙盒环境,在单个 Docker 容器中结合了浏览器、Shell、文件、MCP 操作和 VSCode Server。基于云原生轻量级沙盒技术构建,它为 AI Agent 和开发者提供了统一的沙盒环境。

能力与特点:这不是一款普通的容器

AIO Sandbox 的核心特性有几个关键词:

🗂 统一文件系统

浏览器下载、终端输出、VSCode 编辑的文件都在同一个共享目录下,彻底告别跨进程文件搬运的痛点。

🖥 多界面融合

容器中自带了浏览器(VNC 可视化)、VSCode(code-server)、终端(Shell)、Jupyter、文件管理器、MCP 操作。你可以直接在浏览器界面完成所有交互,体验就像远程桌面。

🤖 面向 Agent 的 API

它不仅能手动操作,更重要的是——所有能力都能通过 API 或 SDK 调用。这意味着你的智能体可以直接控制浏览器、执行 shell、操作文件、甚至运行 Jupyter 代码。

🧩 多语言 SDK 支持

官方支持 Python、TypeScript/JavaScript、Go 三种语言。这些 SDK 让你能把沙盒作为智能体的“后端执行环境”接入你的系统。

根据以上特点,可以总结 AIO Sandbox 非常适合构建需要以下功能的 AI Agent:

  • 浏览网站并与 Web 应用程序交互
  • 在安全沙盒中执行代码
  • 操作文件并运行 Shell 命令
  • 无缝访问多个开发工具

比如下图中的 Agent 需要执行下载 paper 并生成 PPT 的任务,那么仅需要一个 AIO Sandbox 容器即可支撑全部需求。

Agents
Agents

快速开始:一条命令跑起来

使用 Docker 运行:

1
2
# 拉取并运行最新版本
$ docker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 ghcr.io/agent-infra/sandbox:latest

运行 Docker 命令后,我们将看到 AIO Sandbox ASCII 标志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ docker run --security-opt seccomp=unconfined --rm -it -p 8080:8080 ghcr.io/agent-infra/sandbox:1.0.0.125
█████╗ ██╗ ██████╗ ███████╗ █████╗ ███╗ ██╗██████╗ ██████╗ ██████╗ ██╗ ██╗
██╔══██╗██║██╔═══██╗ ██╔════╝██╔══██╗████╗ ██║██╔══██╗██╔══██╗██╔═══██╗╚██╗██╔╝
███████║██║██║ ██║ ███████╗███████║██╔██╗ ██║██║ ██║██████╔╝██║ ██║ ╚███╔╝
██╔══██║██║██║ ██║ ╚════██║██╔══██║██║╚██╗██║██║ ██║██╔══██╗██║ ██║ ██╔██╗
██║ ██║██║╚██████╔╝ ███████║██║ ██║██║ ╚████║██████╔╝██████╔╝╚██████╔╝██╔╝ ██╗
╚═╝ ╚═╝╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝

🚀 AIO(All-in-One) Agent Sandbox Environment
📦 Image Version: 1.0.0.125
🌈 Dashboard: http://localhost:8080
📚 Documentation: http://localhost:8080/v1/docs

================================================================

注意:这里我指定运行的容器 tag 为 1.0.0.125,而非官方文档中默认的 latest。这是因为我尝试了多次最新镜像,一直都报错,可能当时的镜像存在 Bug,再尝试多个版本后发现 1.0.0.125 版本是可用的。

当然既然是 All-In-One 容器,那么镜像一定不会小,agent-infra/sandbox 镜像在我的电脑中显示 5.61GB。

运行后,你可在浏览器中以访问不同的界面分别查看效果:

Access Points
Access Points

比如仪表板 http://localhost:8080/index.html

Dashboard
Dashboard

实战:用 AIO Sandbox 把网页变成 Markdown

AIO Sandbox 官网提供了一个很有意思的示例,展示了如何用浏览器抓取页面,然后在沙盒里通过 Jupyter 把 HTML 转换成 Markdown。

以 Python 代码为例,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import asyncio
import base64
from playwright.async_api import async_playwright
from agent_sandbox import Sandbox


async def site_to_markdown():
# 初始化沙盒客户端
c = Sandbox(base_url="http://127.0.0.1:8080")
home_dir = c.sandbox.get_context().home_dir

# 浏览器:自动化下载 html
async with async_playwright() as p:
browser_info = c.browser.get_info().data
page = await (await p.chromium.connect_over_cdp(browser_info.cdp_url)).new_page(
viewport={
"width": browser_info.viewport.width,
"height": browser_info.viewport.height,
}
)
await page.goto("https://sandbox.agent-infra.com/", wait_until="networkidle")
html = await page.content()
screenshot_b64 = base64.b64encode(
await page.screenshot(full_page=False, type='png')
).decode('utf-8')

# Jupyter:在沙盒中运行代码将 html 转换为 markdown
c.jupyter.execute_code(
code=f"""
from markdownify import markdownify
html = '''{html}'''
screenshot_b64 = "{screenshot_b64}"

md = f"{{markdownify(html)}}\\n\\n![Screenshot](data:image/png;base64,{{screenshot_b64}})"

with open('{home_dir}/site.md', 'w') as f:
f.write(md)

print("完成!")
"""
)

# Bash:执行命令列出沙盒中的文件
list_result = c.shell.exec_command(command=f"ls -lh {home_dir}")
print(f"\n沙盒主目录中的文件:\n{list_result.data.output}")

open("./output.md", "w").write(
c.file.read_file(file=f"{home_dir}/site.md").data.content
)

return "./output.md"


if __name__ == "__main__":
# 运行异步函数
result = asyncio.run(site_to_markdown())
print(f"\nMarkdown 文件保存在:{result}")

注意:在我实测的过程中,发现官方 Python SDK 最新版本也存在 Bug,执行示例代码后报错,错误与 pydantic 版本有关(这个库也是个大坑)。我尝试了好几个版本,最终选用 agent-sandbox==0.0.14 版本跑通代码。

踩坑期间我发现不同版本 SDK API 略有变化,无奈,这也是 Python 项目的坑,很多作者小版本变更就会更改不兼容的 API。这事在 Go 中会好很多,不太容易出现。

成果展示:

output.md
output.md

总结

从工具到平台的可能性,AIO Sandbox 给人的感觉很像一块“智能体的实验田”——它既是一个干净的运行时,也是一个极佳的研发 playground。你可以用它快速验证你的智能体想法,而无需关心是否会破坏系统环境。

AIO Sandbox 不是一个人人都要用的工具,但如果你在研究多能力智能体,或者希望快速验证某个系统的执行闭环,它绝对值得你试一试。

最后,工具是自由的延伸,它让我们能更快地实验想法,也能更好地理解智能体的边界。

本文示例源码我都放在了 GitHub 中,欢迎点击查看。

希望此文能对你有所启发。

延伸阅读

联系我