17人团队,一台德国服务器,AI代理每晚做梦
在撰写本文时,Artie 是一个 17 人的团队。我们每个人都与 Hermes 并肩工作——这是 @NousResearch 发布的一个开源 AI 代理框架。它运行在德国的一台物理机器上,为每个团队提供不同的性格,并且在夜晚会做梦。
它之所以变成这样,缘起如下。
它始于一个工程师的 WhatsApp 联系人
几个月前,我们的一位工程师(Ani,@anirudhsriramzz)正在为自己运行 Hermes。那只是一个个人配置,他通过 WhatsApp 与它对话。
大约同一时间,我们的 CTO Robin 参加了一个黑客马拉松,回来后,他的朋友向他展示了一整套运行着各种工作的代理。他带回的问题很简单:我们如何让 Artie 的每个人都能用上这种能力,而不仅仅是工程师?
我们先看了 OpenClaw。它不错。但很容易看到一个代理跑偏,去做没人要求它做的事;在追求规模之前,我们更想要安全护栏。所以我们选择了 Hermes,并开始思考护栏应该是什么样。
一颗戴上眼罩的大脑
我们的想法是:每个实验室都推出了一颗大脑。你可以问它任何问题,它都会回答。同一个问题问五次,你会得到五个答案,都貌似合理,但形态各不相同。
这在聊天窗口里没问题。但当你需要这颗大脑去做一份工作时,就成了问题。如果一位销售工程师想对 25 个进行中的客户会话做风险评估,他们每次都需要相同的格式,才能据此行动、进行周与周之间的比较,并信任这个工具。
赛马戴上眼罩,是为了专心跑赛道,而不是看台观众。技能和工具就是眼罩。框架则是你系上眼罩的方式。Hermes、Codex、Claude Code 以及其他同类工具,都是同一个想法的变体:一种决定模型被允许做什么、以及它的输出看起来应该是什么样子的方式。
一旦我们这样想,这个项目就不再是“搭建一个聊天机器人”,而变成了“为 Artie 的每项工作打造眼罩”。
一台每年60美元的德国服务器运行着一切
在一个周末,Robin 和 Ani 用了大约三个小时就搭建了第一个 Hermes。我们租用了 Railway 上最便宜的套餐,用一个默认配置启动了 Hermes,然后让工程团队去使用它。
不到五天,我们就一次又一次地撞上 Railway 的使用上限。每条警报都提示我们升级。这是第一个真正的教训:当一个团队真正采用一个代理时,账单看起来就不像副业了。
我们的生产基础设施运行在 AWS 上,并且会继续留在那里。但这只是一个内部代理沙箱,不是面向客户的基础设施,我们想看看能把它做到多便宜。我们找到了 Hetzner(@Hetzner_Online),一家德国托管公司,以每年 60 美元的价格购买了一台物理机器。如今 Artie 的每个 Hermes 都运行在那台机器上。
我们是一家精打细算的公司。Artie 在 AI 上的整个问题一直是:如何让团队尽可能 AI 原生,又不至于烧钱?Hetzner 那台机器是第一个答案。
我们真正想要的是什么
有了一台能承载负载的机器后,我们坐下来决定了 Hermes 的用途。两个目标。
每个人都得到一个副手。工程师、销售、运营、市场、设计。一个初级版的你自己,帮助你做更多事,而不是取代你的东西。行业里的恐惧是代理会抢走工作。我们的经验恰恰相反:当每个人都有了一个代理时,每个人的交付速度都更快,并能承担以前无法承担的工作。
人始终在回路中。Hermes 可以做任何被指示去做的事。但在任何东西进入生产环境、写入文档或呈现在客户面前之前,必须由人审阅。
人各有所长,代理也应如此
在一个 17 人的团队里,没有人只擅长一件事。但每个人总有所长。我们就是为这个所长而招聘的。
所以我们问,为什么我们的代理应该有所不同?一个初级工程师去做营销文案是浪费。一个初级市场人员钻进代码库更糟。我们像思考人一样来设计代理:给每个代理一个领域、一种性格,以及该领域所需的访问权限。
这样我们就得到了一组 Hermes 配置,每个团队一个。
Hermes Plan 和 Hermes Code 属于工程团队。Plan 是为技术负责人准备的:判断我们是先做 A 再做 B,还是 A 和 B 并行然后做 C,并把它写下来。Plan 将工作分派到看板上。Code 拾取工单,在后台针对现有代码库执行,打开 PR,然后等待。由人审阅 PR,只有在那之后才会合并到主分支。一个任务完成,就会在计划中启动下一个任务。
没有人预料到的副作用是:工程团队的大部分时间现在都花在计划上。以前,人们活在代码和执行中;现在,他们活在系统设计和审阅中,而 Hermes Code 处理中间的部分。
Hermes Sales 会在需求发现电话之前做准备。它会研究潜在客户,弄清他们现有的技术栈,并拉取交易的当前背景。因为它也掌握我们的文档和工程知识,所以还能更进一步:如果潜在客户告诉我们他们正在用某个特定工具迁移数据,Hermes 可以在电话开始前就告诉销售代表该工具容易在哪些地方出问题,比如模式漂移。
Hermes Design 和 Hermes Code 一起,让市场团队无需拉上工程师就能设计、构建和发布着陆页。我们的营销网站基于 Next.js,我们已不再使用 CMS。Design 在现有组件系统内工作,在发明新组件之前先检查组件是否已存在,然后交给 Code 去实现。
Hermes BizOps 负责重复性的运营工作:管道审查、对账、追踪器更新,以及找出需要人工介入的异常。
另外还有一个默认配置,用于所有不符合以上分类的工作。
我们大多数人通过 Slack 与这些代理对话。有些人使用 Hermes 桌面端。无论如何,整个系统从被动转向了主动:代理已经拥有代码库、文档、CRM 和互联网,因此它们可以从任何地方作答,而不必等着被投喂上下文。
技能,从第一天起就像代码一样版本化
技能是处理一类真实工作的可复用流程:先检查什么,哪些来源是权威的,输出长什么样,如何验证它。我们从第一周起就自己编写技能,并把它们放进一个 Git 仓库。每个 Hermes 都从这里读取。当技能发生变化时,它就是一次提交,带有历史记录,所有配置都会获取到。
我们刻意不去写太多技能。让 AI 为你工作的方式有成千上万种,而互联网上大多数内容会告诉你建立一个 24/7 的自主代理工厂。如果你有无穷无尽的 token,那当然可以。但我们没有。一个代理翻阅数百个技能来决定用哪一个,会把 token 浪费在“做决定”上。所以,我们砍掉了一切没有明显值得其成本的技能,而且我们还在继续砍。
我们最终得到的规则是:如果价值显而易见,成本就是合理的。如果价值含糊,那就不做。
Hermes 会做梦
Hermes 有一个 cron 系统。你可以给它一个任务和一个节奏,它就会自行运行。
受 Anthropic 在代理记忆方面工作的启发,我们用这个机制来模仿人类的行为。在快速眼动(REM)睡眠期间,你的大脑会整理一天的事情。有些东西会被提升为长期记忆,有些则被丢弃。一个你搬了城市、频繁旅行的一年之所以令人难忘,是因为没有什么事情是重复的。
所以,每天晚上,当没人使用它时,每个 Hermes 都会做梦。它会回顾当天做了什么,判断哪些有用、哪些没用,把有用的部分提升为记忆,把其余部分降级。然后它会向我们的工程师发送一份报告。报告会这样说:我这件事做错了,那件事做错了,我已经修正了,我存储了修正,并且我已经忘记了导致错误的那种习惯。
几周之后,每个配置对于自己应该在团队中做什么、不应该做什么,会变得越来越有主见。我们并没有编写这些主见。它们来自做梦。
为什么我们自己运行框架
人们问我们为什么不用 Cursor、Codex 或 Claude Code。
我们本可以用,而且技术上明天就能把工作负载迁移过去。但正因为我们自己运行和运营 Hermes,底层的模型可以是任何一家的。如果下个星期某家实验室涨价,我们就切换。现在我们的配置已经足够稳定,换模型不会让它们出问题。周一我们可能还在用 Anthropic 的模型;如果定价变动,周五我们可能就换到了 OpenAI。
第二个原因是功能。如果 Cursor 不支持你需要的身份验证,或者在你的代码库里反复犯同样的错误,你只能提交工单然后等待。当 Hermes 需要某个功能时,我们自己构建。Hermes 是 Artie 的一部分,像任何内部工具一样接入我们的系统,而不是我们拼接上去、然后希望它能继续工作的东西。
AI 工程现在之所以昂贵,是因为 token 的经济性尚未稳定。总有一天,运行这些东西的成本会接近于零。在那之前,拥有框架是我们控制账单的方式。
它如今走到了哪里,以及接下来会发生什么
Hermes 大概已经完成了 85% 到 90%。它每天都在做真正的工作。第一遍的结果并不总是最好的。
所以我们正在投入做评估。每次 Hermes 收到一个问题并产生一个答案,我们都想知道哪些地方耗时,它调用了哪些技能,哪些工具失败了以及为什么。我们自托管了开源的 Arize Phoenix,这样我们不需要再购买另一个工具就能获得这些数据。来自 Hermes 的追踪数据进入 Phoenix,Phoenix 会告诉我们:这个任务调用了五个技能和两个工具,这个工具耗时最长,那个失败了,原因如下。
在它之下,我们通过 Datadog 运行遥测:token 花费、每个任务的成功率,如果某个 Hermes 宕机或记忆存储满了,就会向值班人员发出警报。每个任务都在沙箱中运行,我们还构建了自己的清理系统,每天清理沙箱。
这一切的重点在于,我们不再需要猜测某个改动是否让 Hermes 变得更好了。我们改动一个技能,就会得到一份报告。如果更好了,就保留;如果更糟了,就回滚。
我们还把文档写进了 Hermes 服务器本身:你的配置里有什么,你被允许做什么,这些数据意味着什么。任何 Hermes 都能读取它。这意味着我们可以启动一个 Hermes,它的唯一工作就是读取评估数据并改进其他配置。
它基本上就是 Hermes 教练。它教练 Hermes。
17 个人,一台德国服务器,一组每晚入睡、醒来后变得更敏锐的代理。我们构建它,是因为我们很小,却想交付得像我们并不小一样。