![]()
678KB。1MB内存。一个用Zig写的二进制文件,跑在每月7美元的VPS上,已经稳定服务了三个月。
这是George Larson的个人网站AI代理「nully」的硬件账单。不是ChatGPT Plus的20美元月费,不是Claude Pro的订阅,是7美元。他把这比作「雇佣一个门卫,但只付他一杯咖啡的钱」。
更反常的是传输层:他没选Discord,没选Telegram,没碰WebSocket,选了IRC——那个诞生于1988年的协议,现在连黑客都嫌它老派。但Larson说,这正是关键。「IRC是文本的、无状态的、可审计的。一个频道就是一条消息队列,天然适合代理协作。」
两个盒子,两道门
架构图很简单,但边界画得很死。nullclaw是前台,ironclaw是后台,中间隔着Tailscale和一道IRC频道#backoffice。
访客从浏览器进来,经过Cloudflare的TLS终止,落到ergo IRC服务器。nully在#lobby频道等着,像个真正的门卫: greeting、分流、回答公开项目的问题。需要克隆仓库、读代码、跨文件分析时,它把任务丢进#backoffice,ironclaw接手。
物理隔离是设计,不是妥协。 nullclaw那台机器上没有任何私钥、邮件、日历。ironclaw在另一台更强的机器上,通过Tailscale组网,连GitHub都要重新认证。Larson的原话:「public box has no access to private data」——这句话在架构图里出现了两次,他怕人看不见。
这种「双代理」设计避开了单点故障的经典陷阱。今年早些时候,OpenAI的API密钥泄露事件波及数千个项目,原因是很多开发者把密钥硬编码在前后端同一份代码里。Larson的拆分意味着:就算nullclaw被攻破,攻击者最多读到他GitHub上公开的内容,邮件和日历在另一个网络平面里。
模型选型:小模型守门,大模型干活
这是最容易被忽视的细节,也是整个项目最反直觉的地方。
nully用的是轻量模型,具体型号Larson没公开,但强调「sub-second responses, pennies per conversation」。它的工作很窄:问候、分流、简单背景问答。速度比深度重要,成本比能力重要。
只有当需要克隆仓库、分析测试覆盖率、读CI配置时,请求才会路由到ironclaw,调用Claude 3.5 Sonnet。Larson算过账:如果所有对话都用Opus(Claude最强模型),账单会涨10倍以上,但90%的查询根本不需要那个级别的推理。
他管这叫「为推理付费,而不是为闲聊付费」。 更关键的是硬性上限:public-facing agent必须有 spending cap。没有上限的API密钥是负债,不是资产。Larson给nully设了天花板,烧完就停,防止被恶意刷爆。
这种「分层推理」正在变成行业暗线。Anthropic的提示缓存(prompt caching)把重复查询的成本砍了90%,Cursor的tab自动补全用轻量模型,只有显式调用才上Sonnet。Larson的IRC架构把这个逻辑推到了极致:用协议层做调度,而不是在代码里写if-else。
为什么不是Discord?
Larson列了三条理由,每条都踩在现代AI产品的痛点上。
IRC是文本原生。没有富文本、没有按钮、没有卡片,代理和人类的交互格式完全一致。这意味着调试时你可以直接telnet进去,看原始消息流。Discord的嵌入式消息是JSON结构,代理要解析一层,人类要再解析一层,中间多了一道语义损耗。
IRC是无状态的。连接断了重连,历史消息可以选择性同步,代理重启后不需要恢复复杂的会话状态。这对长期运行的agent至关重要——Larson的nully已经跑了三个月,期间升级过模型、调整过prompt,IRC频道里的上下文始终干净。
IRC是可审计的。每个频道就是一个日志文件,grep就能查。Larson说他的#backoffice频道记录了所有ironclaw的调用,「比任何observability工具都直接」。相比之下,Discord的审计日志是付费功能,且导出格式封闭。
但真正的潜台词是:IRC够旧,旧到没有厂商锁定。Discord可以改API条款,Telegram可以封账号,WebSocket可以变协议版本。IRC在1988年定型,RFC 1459之后几乎没有破坏性更新。Larson的架构依赖的是一个比他自己还老的技术,这反而成了稳定性来源。
从「客厅把戏」到「可验证的声称」
Larson建这个系统的动机,是对现有AI聊天bot的厌倦。
「每个作品集网站的AI聊天bot都做同一件事:把简历喂给模型,让访客换种方式重述它。这是客厅把戏(parlor trick)。模型说不出简历里没有的东西。」
他想要的是可验证性。当招聘经理问「George怎么处理测试覆盖率」,答案不应该是「George重视全面测试」——这是简历上的原话。答案应该是克隆仓库、数测试文件、读CI配置、返回具体数字。
nully现在能做到这个程度。它可以被问到「你用过Rust吗」,然后自己去GitHub翻commit历史,确认哪些项目有Cargo.toml,再回来回答「我在X、Y、Z三个项目里用了Rust,最近一个是2024年3月的async runtime实验」。这个链条里的每一步都可以被复查:仓库是公开的,commit是签名的,CI配置是版本控制的。
![]()
这是「检索增强生成」(RAG)的极端形式:不是从向量数据库里检索,是从源代码里实时检索。 代价是延迟——克隆仓库需要秒级时间,分析大型代码库可能需要几十秒。但Larson认为值得:「招聘流程本身就是慢速的,等10秒得到一个可验证的答案,比等1秒得到一个幻觉强。」
7美元的技术栈
成本拆解很有意思。VPS是Hetzner的CX11,1 vCPU、2GB内存、20GB SSD,月付4.51欧元(约4.9美元)。ergo IRC服务器和gamja Web客户端自己编译部署,占用可以忽略。Cloudflare的免费 tier 处理TLS和DDoS防护。Tailscale个人版免费。
真正的变量成本是API调用。Larson没公开具体数字,但按他的描述估算:轻量模型假设用GPT-4o-mini级别,百万token输入0.15美元、输出0.6美元;Sonnet百万token输入3美元、输出15美元。如果每月1000次对话,90%走轻量模型,API成本约在5-15美元区间。
总成本控制在7-20美元/月,取决于流量。这比大多数「AI作品集」的订阅方案便宜一个数量级——那些方案通常绑定Vercel Pro、Pinecone向量数据库、以及按量计费的GPT-4调用,轻松突破50美元。
更隐蔽的节省在维护成本。Zig的678KB二进制文件,部署就是scp过去、systemctl restart。没有Docker,没有Kubernetes,没有冷启动问题。Larson说他的更新流程是:本地编译、rsync、重启服务,「比改博客配置还快」。
IRC作为代理协作协议
这个项目的副产品,是一套「用IRC调度AI代理」的模式。
#lobby和#backoffice的设计,本质上是一个轻量级的任务队列。nully是producer,ironclaw是consumer,IRC频道是message broker。这比RabbitMQ简单,比Redis Stream易调试,比Kafka便宜。
Larson提到可以扩展:再加一个#coding频道,专门处理代码审查请求;加一个#research频道,对接更贵的Opus模型做深度分析。每个频道就是一条业务线,权限通过IRC的channel key管理,审计通过日志文件完成。
这种模式有个名字:「agent mesh」。不是中心化的orchestrator调度所有agent,而是agent之间通过标准协议自发协作。IRC在这里的角色,类似于HTTP在微服务里的角色——足够简单,足够通用,足够被忽视以至于没人想垄断它。
已经有模仿者出现。HN评论区有人用类似架构接了Slack,有人把IRC换成了Matrix(更现代的联邦协议)。Larson的回应是:「Matrix很好,但我的VPS只有2GB内存,ergo比Synapse轻量十倍。」
边界案例与未解问题
系统运行三个月,Larson遇到过几个真实挑战。
GitHub API的速率限制。克隆大型仓库时,nully偶尔会触发abuse detection,需要手动换token。他现在的方案是:小仓库直接clone,大仓库先用GitHub API列文件结构,按需fetch。
上下文窗口的硬边界。Sonnet的200K token上限,在分析巨型monorepo时仍然吃紧。Larson的应对是「分片检索」:先让轻量模型生成文件摘要,再决定哪些文件值得送进去细读。这增加了延迟,但避免了截断导致的幻觉。
最棘手的是「解释性」问题。当nully返回一个代码分析结果时,如何证明它不是编的?Larson现在的做法是在回答里附引用链接,但承认「这仍然需要用户自己去点」。他考虑过生成diff视图,但UI复杂度会指数上升。
还有一个他没解决、但意识到的问题:如果ironclaw被提示注入攻击,诱导泄露#backoffice频道里的敏感信息怎么办?Tailscale的网络隔离能防外部入侵,但防不了模型本身的越狱。Larson的当前方案是「最小上下文」——ironclaw只在处理具体任务时加载相关邮件/日历片段,而不是常驻全量数据。
「这不是完美的安全模型,」他在HN回复里写,「但对于一个个人项目,它比把OpenAI API密钥扔在Next.js环境变量里强。」
为什么这值得关注
Larson的项目很小,但指向一个正在被忽视的趋势:AI基础设施的「去中心化」。
过去两年,AI应用的标准架构是「大模型+向量数据库+Serverless前端」,全部托管在云上,按调用付费。这种模式的优势是快,劣势是贵和锁。当OpenAI涨价、Pinecone改计费维度、Vercel调整带宽策略时,整个栈的成本结构都会变。
Larson的路线是反过来的:用最小的托管服务(VPS),最老的协议(IRC),最轻量的运行时(Zig),把可变成本压到API调用本身。他的栈里没有vendor lock-in,ergo可以换成inspircd,Cloudflare可以换成自托管的nginx,Tailscale可以换成WireGuard。
这种「可逃逸架构」在AI领域罕见,因为大模型本身就是最大的锁定。但Larson证明了一件事:模型可以换(他从Claude 3换到3.5,计划测试Gemini),但协议和架构可以保持稳定。
更深层的信号是「代理协作协议」的缺失。业界忙着定义MCP(Model Context Protocol)、A2A(Agent-to-Agent),但Larson用IRC展示了「足够好」的替代方案。不是每个代理系统都需要JSON-RPC over HTTP,有时候纯文本频道就够了。
他的最后一条HN评论是:「我还在想,如果两个nully实例在同一个IRC网络里相遇,它们会怎么自我介绍?」
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.