Skip to main content

16GB 内存也能跑 AI Agent?我把 OpenClaw 放进了 macOS Sandbox

·502 words·3 mins

最近一段时间,本地 AI Agent 项目越来越热。

尤其是 M4 Mac Mini 发布之后,很多开发者第一次意识到:一台只有巴掌大的机器,已经可以在本地运行完整的 AI 工作流。

但真正开始折腾之后,大多数人很快会撞上一堵墙:16GB 内存并没有想象中那么宽裕。

模型、Docker、上下文缓存、浏览器、IDE、LSP、文件扫描、Shell 工具链一起跑起来之后,系统很快开始 Swap。随后,推理变慢,Agent 变迟钝,整个体验会从“未来感”迅速退化成“风扇压力测试”。

所以这个项目最初并不是为了做安全。

它的起点其实很现实:

如何在 16GB 的 Mac Mini 上,稳定运行 OpenClaw?

但继续做下去之后,我逐渐发现:性能问题和安全问题,在本地 Agent 里其实经常是同一个问题。

因为真正的问题不只是“模型占多少内存”,而是 Agent Runtime 能不能被边界化:资源边界、文件边界、执行边界、网络边界,本质上都在回答同一个问题:

这个 Agent 到底可以使用什么,又不应该碰什么?

于是就有了这个项目:OpenClaw Sandbox macOS

本地 Agent 真正的问题,不是模型能不能跑 #

本地 Agent Runtime

很多人第一次接触 AI Agent 时,看到的只是一个聊天框。

但真正复杂的部分,其实都藏在后面。

Agent 如何规划任务?

Tool Call 如何执行?

Context 为什么会不断膨胀?

模型如何读取文件、调用 Shell、修改代码?

这些东西,如果只使用云端 Agent,其实很难真正理解。因为大多数云端 Agent 本质上仍然是黑盒系统,开发者只能看到最后的结果,很难观察 Runtime 内部发生了什么。

本地 Agent 不一样。

它让你可以直接看到整个执行链路:

  • Ollama 的推理状态
  • Context 的增长过程
  • Workspace 的文件变化
  • Shell 调用链路
  • Tool Routing
  • 容器 Runtime 行为
  • 文件系统读写过程

某种意义上,本地 Agent 更像一个可以拆开的 AI Runtime 实验室。

对于学习阶段的开发者来说,这一点非常重要。

即使只是 3B、4B、Q4 量化模型,也足够理解 Agent Workflow、Context Management、Tool Calling、Runtime Scheduling 和 Sandbox Isolation 这些核心问题。

云端模型更像生产服务。

本地模型更像实验室。

如果目标是理解 AI Agent 到底怎么运转,那么第一步未必是调用最强 API,而是先把一个本地 Agent 真正跑起来。

AI 正在从聊天进入执行 #

AI Agent 执行能力

过去几年,大模型最重要的变化,并不只是“更会聊天”。

更重要的是,它开始具备行动能力。

传统 ChatBot 的工作方式很简单:用户提问,模型生成文本,然后结束。

But Agent 完全不同。

Agent 更像一种自动执行系统。用户只提供目标,模型负责规划、调用工具、执行任务、读取结果,并持续迭代。

它已经不只是回答问题。

它开始真正参与系统执行:

  • 读取文件
  • 执行 Shell
  • 修改代码
  • 操作浏览器
  • 调用本地工具链
  • 根据执行结果决定下一步

这也是 OpenClaw 开始变得有意思的地方。

它让 AI 真正进入了本地操作系统,而不只是停留在聊天窗口内部。

但危险也从这里开始。

真正危险的,并不是模型本身。

而是:

一个拥有系统权限的大模型。

一旦 Agent 可以执行命令,风险等级就完全不同了。理论上,它可以读取本地文件、访问 SSH Key、执行任意 Shell、操作浏览器,甚至修改系统配置。

于是问题开始转变:如果 OpenClaw 默认拥有整个系统权限,能不能把它关进一个边界清晰的运行环境里?

这就是 Sandbox 的意义。

为什么 16GB 会这么容易崩? #

16GB 内存压力

很多人以为,本地 AI 的瓶颈是 GPU。

但真正运行 Agent 后会发现,问题远远不只是推理。

一个完整的 Agent Runtime 同时会消耗很多资源:

  • Docker 虚拟化开销
  • 模型显存占用
  • Context Window 膨胀
  • KV Cache 增长
  • Workspace 文件扫描
  • 浏览器自动化
  • IDE 与 LSP 服务
  • Shell 工具链与临时文件

在 Apple Silicon 的 UMA 架构上,CPU 和 GPU 共享同一块统一内存。

这意味着模型、容器、系统服务、浏览器和开发工具都在争抢同一块 16GB 内存。

一旦开始 Swap,体验就会迅速崩掉。

这也是为什么很多人明明能运行模型,却跑不动 Agent。

能跑模型,只说明推理链路能工作。

能跑 Agent,考验的是整个 Runtime。

这个 Sandbox 做了什么 #

Sandbox Runtime 架构

为了让 16GB Mac Mini 更稳定地运行 OpenClaw,我最后采用了一种混合 Runtime 架构:

  • Ollama 原生运行在 macOS 宿主机上
  • OpenClaw Agent 运行在 Colima 容器里
  • Colima 使用 vz 作为虚拟化后端
  • 文件挂载使用 virtiofs
  • Workspace 通过受限目录挂载进容器
  • Agent 只能访问明确暴露的工作目录
  • 推理与执行被拆到两个不同边界里

核心思路其实只有一句话:

把推理与执行解耦。

Ollama 留在宿主机上,尽量减少模型运行的额外开销。

OpenClaw 放进容器里,限制它能看到的文件系统和执行环境。

这样做之后,系统不再是一个“所有东西都挤在 Docker Desktop 里”的结构,而是变成了:

  • 宿主机负责模型推理
  • 容器负责 Agent 执行
  • Sandbox 负责权限边界
  • Workspace 负责可控上下文

这不是完美方案,但它比默认把 Agent 直接放在完整系统权限下运行要清晰得多。

为什么放弃 Docker Desktop? #

Colima 与 Docker Desktop 对比

因为它太重了。

尤其在 16GB UMA 架构上,Docker Desktop 本身就会长期占据不少内存。

再叠加浏览器、IDE、Ollama 和 Agent Runtime,系统很容易进入 Swap。

后来逐渐发现,对于 Apple Silicon 而言,Colima 更适合这种本地 Agent 场景。

原因并不复杂:

  • 更轻
  • 更接近 macOS 原生虚拟化
  • 可以使用 vz
  • 可以配合 virtiofs 改善文件挂载性能

这对 Agent 很关键。

因为本地 Agent 最大瓶颈,经常并不是 GPU,而是文件系统 I/O。

Agent 会频繁扫描 Workspace、监听文件变化、读写代码、生成临时文件、执行 Shell、调用各种工具链。

If 文件挂载速度太慢,整个 Agent 会显得非常迟钝。

virtiofs 在这里的收益很明显:文件系统响应更自然,工具调用的等待感也会少很多。

所以最后选择的是:

Colima + vz + virtiofs

而不是 Docker Desktop。

真正吃内存的,很多时候不是模型 #

Context 与 KV Cache 内存

另一个长期被低估的问题,是 Context Window。

很多人会关注:“7B 能不能跑?”

但真正拖死机器的,有时候并不是模型参数,而是上下文。

因为 Agent 会不断读取代码、累积历史、生成 Tool Calls、写入 Memory、维护长期状态。

这些内容都会推高 Context 和 KV Cache 的压力。

有时候,一个 4B 模型开启很长的 Context,甚至比一个 7B 模型使用较短 Context 更容易把机器拖进 Swap。

所以本地 Agent 的核心问题已经不是:“模型能不能跑。”

而是:“Runtime 能不能稳定管理上下文。”

这也是为什么 Sandbox 不只是安全设施。

它同样是资源治理设施。

当 Workspace、文件系统、执行环境和上下文入口都被边界化之后,Agent 的行为会更可控,资源消耗也更容易被理解和调整。

实际效果与取舍 #

实际效果与取舍

这套方案的目标不是让 16GB Mac Mini 变成高端工作站。

它解决的是另一个问题:

在有限内存下,让本地 Agent 尽可能稳定、可观察、可调试。

实际使用下来,几个变化比较明显:

  • Docker Desktop 带来的常驻负担减少了
  • Ollama 原生运行后,推理链路更直接
  • Colima + virtiofs 下 Workspace I/O 更顺
  • Agent 的文件访问边界更清晰
  • 出问题时更容易判断是模型、Context、容器还是工具链导致的

当然,它也有取舍。

16GB 仍然不适合无限制地开大模型、长 Context、多浏览器和复杂 IDE 项目。

如果模型太大,Context 太长,或者 Agent 一次性扫描过大的代码仓库,系统仍然会吃紧。

所以这套方案更适合:

  • 学习 Agent Runtime
  • 跑中小模型实验
  • 测试 Tool Calling
  • 观察本地执行链路
  • 搭建可控的个人 Agent 环境

它不是魔法。

它只是把混乱的资源竞争,拆成了更容易理解的几个边界。

OpenClaw 已经不太像传统 App #

OpenClaw 用户态操作系统

这是整个项目过程中最大的感受。

OpenClaw 本质上已经不太像传统应用程序。

它更像:

  • 一个 Runtime
  • 一个 Orchestrator
  • 一个 AI Shell
  • 一个用户态调度层

它开始拥有文件系统、长期状态、Tool Calling、Context 管理和系统交互能力。

某种意义上,AI Agent 正在逐渐长成一种用户态操作系统。

这也是为什么 Sandbox 会越来越重要。

未来真正危险的,可能不再是:“模型说错话。”

而是:

模型做错事。

这是完全不同的风险等级。

本地 Agent,可能才是真正的未来 #

本地个人 Agent

虽然现在很多 Agent 仍然运行在云端,但长期来看,我越来越觉得:真正强大的个人 Agent,一定会回到本地。

因为真正有价值的信息,本来就在本地:

  • 文件
  • 邮件
  • 浏览器状态
  • 工作目录
  • 本地工具链
  • 长期个人记忆

云端 Agent 很难天然拥有这些上下文。

但本地 Agent 天然具备。

未来很可能会形成一种新的结构:

  • 云端负责更强的模型能力
  • 本地负责执行、上下文和个人数据

而 Sandbox,会成为这两者之间最重要的边界之一。

Sandbox 并不能彻底解决问题 #

Sandbox 安全边界

这个项目并不能彻底解决 AI Agent 的安全问题。

但它至少提供了一个重要方向:

不要默认让 AI 拥有整个系统。

未来的 AI 系统,应该更像现代 App:

  • 最小权限
  • 可隔离
  • 可审计
  • 可撤销

而不是一个无限制的超级进程。

OpenClaw 很有意思,因为它让很多开发者第一次真正看到:AI 开始从聊天窗口进入操作系统。

而当 AI 真正开始操作系统时,Sandbox 很可能会成为下一阶段最重要的基础设施之一。

如果你也在用 16GB Mac 跑本地 Agent,可以直接从这个 Sandbox 配置开始改。

项目地址:OpenClaw Sandbox macOS