八个 AI 智能体,一台 AMD 小主机:我的本地智能体技术栈(OpenClaw)

发布日期
2026年7月11日
作者
Jacob Lloyd —— 项目完成后,在 AI 协助下撰写
阅读时长
约 9 分钟阅读

简单来说: 带你参观我家里一台小电脑上运行的八个 AI 助手,每一个都有自己的名字和分工——从回答家人的问题到起草邮件草稿。大部分工作都不花钱,因为跑在本地,私密对话也从不离开这栋房子。它展示了一个不用每月交钱的家庭 AI 系统可以是什么样子。

此刻,我家一台迷你 PC 上正住着八个有名字的 AI 智能体。它们各有分工,有一套先来后到的等级秩序,还有一个全家人都能从手机打开的群聊。运行这一切每个月大概花 24 美元——DeepSeek 便宜的 API 扛下日常思考工作,而那些不该出家门的活儿,交给免费的本地模型来干。

tl;dr

  • 这是什么: OpenClaw,一个自托管的 AI 智能体网关,运行着 8 个有名字的智能体——每个都有自己的分工、模型路由和工具权限——在我自己写的聊天应用背后运作。
  • 花多少钱: 日常工作大约每月 24 美元的 DeepSeek API 费用;负责视觉和私密任务的本地模型是 $0。
  • 需要什么: 一台内存给力的机器(我这台:128GB 统一内存,其中 64GB 划作显存)、Linux,外加跟 systemd死磕的耐心。
  • 最终得到什么: 全家共用一个聊天网址,能互相派活、还会追着不出声的同伴的智能体,本地图像生成,以及没有我同意就绝不会发出去的邮件草稿。

最终得到什么

先说日常的样子。这是 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.serviceOpenClaw 网关——整套系统的大脑端口 18789,仅限本机回环,令牌认证
local-chat.serviceDisPatch,聊天前端端口 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 崩溃。每当内存压力导致它的 /tmp FUSE 挂载被回收,就会发生一次真正的总线错误(不是 OOM kill)。把 AppImage 解压出来,以普通 systemd 服务的方式运行,问题就消失了。
  • 消息许可名单区分大小写,但网关内部会把智能体 ID 统一转成小写。直到我给每个名字都加上小写的重复项之前,跨智能体发送一直失败。没有报错,没有日志——就是什么都送不到。
  • 跨智能体消息需要两个独立的开关——功能开关和会话可见性设置。只开一个不开另一个,默认值就会悄悄拦下每一条发送。
  • 定时的 LLM 看门狗是自己给自己制造的故障——就是上面那个每五分钟一次的 cron 的故事。事件驱动完胜定时轮询,而且赢得毫无悬念。
  • 有一次一个智能体复活了自己的坏配置。一次身份核对流程重新注入了一份过时的工作区文件,把网关拖进了崩溃循环。智能体能碰到的配置,就是能反咬你一口的配置。
  • 非空的插件许可名单是绝对的。把某一项标成 enabled: true 毫无意义,除非它的 ID 也在许可名单里。许可名单说了算,而且不动声色。

← 更多AI 与本地 LLM