过去很长一段时间,Agent 工程的主流叙事大多围绕 code agent、云端强模型、大上下文和复杂工具调用展开。
这些方向当然重要。强模型能做复杂推理,能写代码,能拆长任务,也能在多工具之间做规划。
但我最近更关心另一个方向:如果 Agent 不运行在云端大服务器上,而是运行在智能家居、工业设备、企业内网流程、涉密系统这类垂直场景里,Harness 应该怎么设计?
这些场景里,问题会变得不一样。
我们不一定需要一个开放式强推理模型,也不一定需要很长的自由对话。很多时候,真正需要的是一个本地、低延迟、可控、可回放的执行系统。
而且端侧设备往往有很硬的资源限制。很多设备可能只有 2GB 或 4GB RAM。这个时候,Agent Harness 的重点就不再只是“如何让模型完成更复杂的任务”,而是变成:
- 如何让 1B 小模型稳定输出结构化 JSON?
- 如何避免复 读和死循环?
- 如何保证字段稳定?
- 如何控制上下文和输出长度?
- 如何在低内存下不崩溃?
- 如何防止错误指令直接进入设备执行层?
- 如何让失败可以回放和评测?
这就是我现在做 EdgeHome Harness 的原因。

项目是什么
EdgeHome Harness 是一个面向 1B 端侧小模型的 Rust Agent Harness 项目。
它的产品形态是智能家居本地控制中台,但核心目标不是替代米家 App、小米音箱或 Home Assistant,而是验证一件事:
在低资源边缘设备上,如何把一个容易输出不稳、容易复读、容易死循环的小模型,约束进一条真实可执行、可回放、可评测的本地控制链路。
我当前使用的模型是:
openbmb/minicpm5:latest
模型包大小:688MB
在 Ollama 路线下,MiniCPM5-1B q4 模型加载后的运行时预算大约在 1.0GB 到 1.25GB 之间。首次加载、首次请求、KV cache、推理 buffer、page cache 都会带来波动,峰值可能更高。
所以在 2GB RAM 设备上,预算并不宽裕:
MiniCPM5 / Ollama runtime: 1.0GB - 1.25GB
Rust Harness: 25MB - 64MB
SQLite / trace / executor: 32MB - 64MB
系统和基础服务: 350MB - 450MB
请求波动和缓存: 100MB - 150MB
必须保留 MemAvailable: 250MB - 350MB
也就是说,2GB 可以跑,但必须加很多限制。
无桌面系统 短上下文 短输出 单并发 低 temperature 限制重试 限制 trace buffer 长期记忆不常驻内存 低内存时关闭长期记忆注入 必要时降级到 rule-only
当然,实际部署和演示,我更推荐 4GB RAM。2GB 更适合作为 low_memory profile 的极限验证目标。
为什么用 Rust
这个项目选择 Rust,不是为了炫技,而是因为端侧 Harness 本身就是一个资源预算问题。
如果模型运行时已经占用 1.0GB 到 1.25GB,那么 Harness 自己就不能再成为第二个大内存服务。
当前设计里,Rust Harness 的目标 RSS 是 25MB 到 64MB,硬上限 96MB。它应该是一个小占比控制层,而不是一个重型 Web 后端。
Rust 在这里的价值主要是:
- 低运行时开销
- 可控内存
- 静态二进制
- 强类型边界
- 长期常驻服务
- 本地 SDK / runtime 集成
如果用 TS 或 Python,也不是不能做。但在 2GB RAM 这种极限预算下,Node.js 或 Python runtime 通常会多吃几十到几百 MB。对服务器来说这不算什么,但对 2GB 板子来说,这些内存正好是模型波动、KV cache、trace buffer 和 MemAvailable 的安全余量。
所以这个项目用 Rust 的核心理由不是语法,而是部署边界。
