八个 AI 智能体,一台 AMD 小主机:我的本地智能体技术栈(OpenClaw)
- 发布日期
- 2026年7月11日
- 作者
- Jacob Lloyd —— 项目完成后,在 AI 协助下撰写
- 阅读时长
- 约 9 分钟阅读
简单来说: 带你参观我家里一台小电脑上运行的八个 AI 助手,每一个都有自己的名字和分工——从回答家人的问题到起草邮件草稿。大部分工作都不花钱,因为跑在本地,私密对话也从不离开这栋房子。它展示了一个不用每月交钱的家庭 AI 系统可以是什么样子。
此刻,我家一台迷你 PC 上正住着八个有名字的 AI 智能体。它们各有分工,有一套先来后到的等级秩序,还有一个全家人都能从手机打开的群聊。运行这一切每个月大概花 24 美元——DeepSeek 便宜的 API 扛下日常思考工作,而那些不该出家门的活儿,交给免费的本地模型来干。
tl;dr
最终得到什么
先说日常的样子。这是 DisPatch,我自己写来给这个网关当前端的聊天应用——截图里是那篇文章用的沙盒演示数据,我真实的对话记录还是留给我自己。



| 项目 | 数字 |
|---|---|
| 有名字的智能体 | 8 个(Bits、Flash、Brains、Hermes、Doxy、Charley、Alpha、Beta) |
| 路由表里的云端模型 | 2 个(DeepSeek 的 flash 和 pro) |
| 本地模型条目 | 主机上约 7 个,溢出流量再靠第二台电脑的另外 6 个 |
| 最大的本地模型 | 一个 120B 参数的 MoE,跑在核显上 |
| 实测月度云端账单 | 约 24 美元(DeepSeek 是主要开销) |
| 网关端口 | 18789 |
| 聊天端口 | 8765,家庭内网 |
| 夜间备份 | 02:17 |
| 网关心跳 | 每 2 小时一次 |
| 看门狗窗口 | 5 分钟,过后不出声的工作者就会被追查 |
这台机器本身
以上这一切全跑在一台机器上。没有机柜,没有租云端 GPU,也没有为此背上二次房贷。
- AMD Ryzen AI Max+ 395(俗称"Strix Halo")——32 线程,Radeon 8060S 核显
- 128GB 统一内存,其中 64GB 被划作 GPU 显存(操作系统能看到剩下大约 62GB)
- 1TB NVMe,运行 Bazzite Linux(不可变系统,基于 Fedora Atomic)
- 用的是 ROCm,不是 CUDA——行为跟教程默认的情况略有出入,但确实能用
那 64GB 的划分才是重点:足够在核显上以可用的速度本地跑一个 120B 的混合专家(mixture-of-experts)模型。网络上的第二台电脑负责处理溢出流量和兜底模型。
登场角色
与其一个聊天窗口对着一个模型说话,我这里更像是一个小型办公室。每个人都有自己的分工和与之匹配的模型——大部分工作交给便宜的 DeepSeek 云端,涉及隐私或视觉的部分交给免费的本地模型。(本地模型原本是最初的计划;实际用下来,它们的加载时间和能力上限让它们变成了兜底层,而不是默认选项。)
| 智能体 | 分工 | 主要模型 | 运行位置 |
|---|---|---|---|
| Bits | 前台接待。负责跟我说话,自己不干任何工具活,全都外包出去 | DeepSeek(云端,flash 档) | 云端 |
| Flash | 快活——摘要、查资料、常规编辑。零个性,纯工具人 | DeepSeek(云端,flash 档) | 云端 |
| Brains | 硬核思考——架构设计、调试、代码审查 | DeepSeek(云端,pro 档) | 云端 |
| Hermes | 部署和写代码,通过一个独立的智能体运行时桥接进来。默认 dry-run;真正部署需要我明确点头 | DeepSeek(云端,pro 档) | 云端 |
| Doxy | 大批量苦力活。本地模型没有计量表,所以能整夜免费跑 | 120B MoE(本地) | 这台机器 |
| Charley | 视觉——真的会去看截图、图表、报错弹窗 | Gemma-4 31B,支持视觉(本地) | 这台机器 |
| Alpha / Beta | 给家庭设备用的安全"前台"机器人,只有只读工具 | flash(云端)/ Gemma-4 26B(本地) | 混合 |
每个智能体都配有兜底模型——如果主模型忙碌或掉线,会悄悄切到备用模型,不管是云端还是本地的。Beta 和 Charley 被严格限制只能用只读工具:查资料、生成图片,绝不碰文件也不能执行命令。这正是你希望一个十岁小孩能打开的机器人该有的样子。跨智能体消息功能是开着的,谁能跟谁说话由一份许可名单管着。
各个部件
这一切不是一个单独的程序,而是八个各司其职的小服务,全都由 systemd 而不是某个专门盯着的脚本来监管。
| 服务 | 作用 | 位置 |
|---|---|---|
openclaw-gateway.service | OpenClaw 网关——整套系统的大脑 | 端口 18789,仅限本机回环,令牌认证 |
local-chat.service | DisPatch,聊天前端 | 端口 8765,局域网 |
lm-studio.service | 本地模型服务器(解压出来的 AppImage),提供所有本地模型,外加嵌入模型 | 端口 1234,本机 |
comfyui.service | 图像生成(核显上跑的 ComfyUI + Z-Image Turbo)——智能体和聊天界面都能启动和停止它 | 本机,按需启动 |
openclaw-email.service | 邮件分诊——起草回复,绝不发送 | — |
hermes-gateway.service | 桥接部署/编程智能体的独立网关 | — |
openclaw-backup.timer | 夜间备份 | 02:17 触发 |
dispatch-tracker-watch.path | 看门狗触发器(详见下文) | — |
每个单元都会在失败时自动重启,调校到崩溃只意味着几秒钟的宕机,而不是凌晨两点的报警电话。LM Studio 那个单元会先自查一遍自己的 API,才敢宣称自己已就绪。网关的配置支持热重载,所以大多数路由改动都不需要重启。自动更新被特意关掉了——有一次更新把整套系统搞挂了,从那以后版本升级就按我自己的节奏来。查看整个动物园的状态:
systemctl --user status openclaw-gateway local-chat lm-studio comfyui
journalctl --user -u openclaw-gateway -f
一条聊天消息实际是怎么流动的
路径跟你猜的差不多:浏览器 → DisPatch → 网关 → 智能体的模型(本地或云端),再原路返回。有两个细节值得一提:如果主模型忙碌或掉线,会由备用模型顶上来回答;而返回浏览器的过程走的是冗余路径确认送达,所以连接中断不会丢消息。
让它真正干点活
聊天回复只是简单的那部分。真正好用的模式,是抛出一个大任务,让整个阵容自己去分工。
重活——批量图像处理、大段重构、任何枯燥的事——都会交给 Doxy,跑在免费的本地 120B 上,只花点电费就能不知疲倦地磨上一整个小时。
盯紧自己
一份外包出去的工作悄无声息地死掉,比它压根没开始还糟糕——你要主动去查才会发现。所以这里有一个看门狗,是这套系统里唯一一个我真正引以为傲的部件。
这个方案取代了一个不折不扣的馊主意:一个每五分钟就跑一次的永久 LLM cron 任务。它自己给模型灌垃圾请求,还造成了它本该抓的那种超时问题——看门狗自己制造了它存在的意义要防止的那个问题。事件驱动版本只在有需要监视的派发时才启动,不管结果如何都会自我删除。
花多少钱
经济账才是这套阵容分工的全部意义所在。云端定价,按每百万 token 算:
| 模型 | 输入 | 输出 |
|---|---|---|
| DeepSeek flash 档(Bits、Flash、Alpha) | $0.14 / 百万 token | $0.28 / 百万 token |
| DeepSeek pro 档(Brains、Hermes) | $0.435 / 百万 token | $0.87 / 百万 token |
| 本地 120B(Doxy)、本地视觉(Charley)、本地 Gemma(Beta) | $0 | $0 |
就算是"贵"的那一档,一次典型请求也不过是几分钱的零头。真正省下来的钱,在于流量放在哪儿:重复性的、动辄几千 token 的工作交给免费的本地模型;云端的计量表只在需要判断力的时候才转。记忆检索也跑在本地的嵌入模型上,所以那些持续不断的后台查询同样不会碰到付费 API。
不会被打破的规则
一个能生成智能体、能运行工具的网关,需要一些不依赖模型自觉遵守的护栏。
- 摄像头访问、屏幕录制、短信,以及联系人/日历相关的命令,在网关层面就被彻底拒绝——不是"智能体不应该",而是真的被拦下来。
- Beta 和 Charley 只拿到只读工具。不管你怎么好声好气地请求,都没有文件写入,也没有 shell。
- 插件是一份严格的七项许可名单:两个本地模型提供方、DeepSeek、Brave 网络搜索、一个无头浏览器、智能体间记忆共享,以及部署桥接。别的什么都不会加载,不管装没装。
- Hermes——唯一能碰生产环境的智能体——默认 dry-run。真正的部署需要我明确点头,我自己业务网站的部署也挂在同一道关卡后面。
容易踩的坑
诚实的清单——按咬我的先后顺序,列出真正出过问题的地方:
- 本地模型需要显式设置
reasoning: true。我这边的模型会在正式回答之前吐出一条单独的推理流;这个开关设错了,网关会把这当成卡死,大约在 6.5 分钟时就把请求杀掉。模型其实没卡住——它只是在网关不知道的一个频道上自言自语地思考。 - 每个超时的默认值都是按云端速度设的。核显上跑的 120B 是慢,不是坏。我把 provider、turn、abort 三层超时分别调到了大约 20 分钟、30 分钟、35 分钟;在那之前,长任务会因为"本地运行"这个"罪名"在想到一半的时候就被处决。
- LM Studio 的 AppImage 会 SIGBUS 崩溃。每当内存压力导致它的
/tmpFUSE 挂载被回收,就会发生一次真正的总线错误(不是 OOM kill)。把 AppImage 解压出来,以普通 systemd 服务的方式运行,问题就消失了。 - 消息许可名单区分大小写,但网关内部会把智能体 ID 统一转成小写。直到我给每个名字都加上小写的重复项之前,跨智能体发送一直失败。没有报错,没有日志——就是什么都送不到。
- 跨智能体消息需要两个独立的开关——功能开关和会话可见性设置。只开一个不开另一个,默认值就会悄悄拦下每一条发送。
- 定时的 LLM 看门狗是自己给自己制造的故障——就是上面那个每五分钟一次的 cron 的故事。事件驱动完胜定时轮询,而且赢得毫无悬念。
- 有一次一个智能体复活了自己的坏配置。一次身份核对流程重新注入了一份过时的工作区文件,把网关拖进了崩溃循环。智能体能碰到的配置,就是能反咬你一口的配置。
- 非空的插件许可名单是绝对的。把某一项标成
enabled: true毫无意义,除非它的 ID 也在许可名单里。许可名单说了算,而且不动声色。