来自 every 的自我批评,不应该让每个员工一个 Agent
Every 是一家做 AI 应用和内容的公司,最近把自己用了半年的企业 Agent 公开,同时批评自己之前的做法:
受 OpenClaw 的影响,Every 为员工每人一个 agent,但在实践过程中,发现了在「维护」层面产生了诸多的问题,导致这种方法不可持续。
它的联合创始人兼 CEO Dan Shipper 在发布文里写下结论:一个公开干活的共享 agent,比一群个人 agent 更快地让公司吃下 AI。
这篇文章要说的是,企业 Agent 的设计答案可以拆成四个具体决定。每个决定背后都有 Every 半年多的实测做底,有的是账单,有的是花掉的设计工夫。
一、先看个人 agent 是怎么失败的
Every 最早的方案叫 Plus One,每人一个跑在租来的虚拟机上的 Slack agent。工程复盘里,工程师 Paridhi Agarwal 记下了账单:几十台云机器 24 小时照看,每 30 秒检查一次 agent 是否还活着,崩了要修,为此专门有 /heal-bot 命令;agent 的 ChatGPT 登录态一过期就不出声,直到有人手动重新登录;还有一个每小时跑一次的任务,只为刷新 Slack 访问令牌。他们跑的 agent 程序 OpenClaw 本就不是为团队做的:每天凌晨 4 点重置对话,几套记忆系统彼此重叠,很难理清。
Paridhi 的原话是,大多数人不想照看一个 agent,并写下 servers should be cattle, not pets——服务器该像牲口,不该像宠物。Plus One 等于给每个人发一只高维护的宠物,再把"让几十只宠物活着"派给工程师。
就算养活了,个人 agent 也有天花板。它只知道自己主人的工作,不知道公司其他部分在做什么、那些事怎么影响这个人;有人摸索出的好工作流只留在自己的 agent 里,想让每个 agent 都学会,同一份更新要做几遍;agent 坏了还得主人自己修。
他们观察到的是:效果最好的场合,是全队把某一个 agent 拉进同一个 thread。
二、第一个决定:共享一个,而不是每人一个
于是有了全公司共享的 agent。它看得见整个团队的上下文,一个人学会的技能所有人都能用,只需要维护一个。
怎么让它被用起来?Dan 用自己公司的事解释:他把主编 Kate 的 30,000 条历史 copyedit 做成一个叫 Kate Pass 的技能,但推动大家采用像 shouting into a hurricane(对着飓风喊话)。解法是在公开的地方做事,让人看见,而不是靠说。
发布片把这叫"公开 prompt":员工把 iPhone 放进冰箱让它自动下单 Dr Pepper,因为办公室总有人喝光 Diet Dr Pepper;真正的主张是同事看着你在 Slack 里用 AI,于是也开始用,整个组织进入 AI 环境。Dan 没有另做一个新界面,入口就放在人已经在的 Slack 里。
有个 beta 用户的说法可以概括换来的东西。Emily Whitehead Foundation 执行董事 George Eastwood 说,这"不是把工作自动化掉,而是给团队一份共享的能力,它随着我们学会一起用它而变好"。
三、第二个决定:基础设施自己建,还是交出去
先解释两个词。harness:模型只生成文字,要让它真的去搜文件、跑代码、发消息,得有一个软件替它执行工具、再把结果喂回给它,这个软件就是 harness。托管:自己维护运行 agent 的机器和软件,还是把这摊交给别人。
Claude Code 有一套 harness,但它是为一个人的电脑设计的;自己托管 harness,周围的一切都会变成你的活。Every 起先想自己托管那个唯一的 agent:Dan Shipper 觉得管得过来,工程师 Willie Williams 不信;试过之后,一个月内的维护工作量说服了 Dan。Paridhi 记下的原话是,他们想做的是一个同事,不是运维一个基础设施团队。
五月初写下重建计划,一周内 @Every 就在 Slack 里回话,老的那批 agent 全下线。他们交给了 Anthropic 的 Claude Managed Agents。这套设计把脑和手分开:Claude 和 harness 是脑,虚拟机和工具是手,session 在两者之外充当运行日志,也就是一次工作从开始到结束的记录,所以任一边崩了,工作还在。每个 session 配一台虚拟电脑,运行期间 8 美分一小时。缓存和上下文压缩由托管方负责。缓存就是把模型处理过的一段上下文暂时存下来,下次直接用,省得重新读。托管方也允许中途打断 agent。
四、剩下两件必须自己设计的事
Paridhi 的原文把这件事讲得最清楚:聊天机器人谁说话都答,Slack 里的同事得知道哪条消息是找它的、它又在替谁行动。
第三个决定,一条消息是不是对它说的。做法是:每条没 @ 它的消息,先由一个小而快的模型读,连同 thread 里有谁、@Every 上次说了什么,再决定是回复、回个表情、还是不插话;拿不准时保持安静。
第四个决定,它代表谁行动。要去别的应用读信息或做事时,托管方暂停 agent,把请求交给 Every 自己的服务器,服务器用请求者本人的登录调用,只把结果回给 agent。agent 全程不持有密码或访问令牌,所以没法拿这个凭据做请求者没要求的事。技能同理:任何人都可以要求改技能,但要技能所有者批准才生效。
Dan 给技能沉淀下的定义是:你最好的人做事的方式,包括他为做对而做的每一次纠正,变成全公司都能做的事。
五、已经付过的五条代价
第一条,自家代码挨着托管 agent 的 bug。托管方在 Every 服务器重启时仍保持 session,于是他们有时在 agent 干活时部署更新、在响应请求之前关掉服务器,agent 就一直等一个不会来的响应,新消息失败、打断也没用,得把它所有未完成请求都补上响应才能恢复。Paridhi 的结论是,任何把自家代码跑在托管 agent 旁边的团队,都会撞上某个版本的这个 bug。
第二条,换模型会改变行为。七月底换到 Opus 5,@Every 一夜之间变啰嗦,典型回复从约 280 字符涨到约 880,同事开始叫它小作文,让它"用一半的字重说一遍,像正常人那样";他们花几周写简洁性与格式规则和测试,九月换到 Opus 5.5,小作文才停。
第三条,长会话的缓存经济学。有个客户的私聊连续跑三天、33 轮,是一个 session;消息之间缓存过期,模型得把整段历史重新写进缓存,比重新读一遍更贵;接近上下文上限时,Opus 有时什么都不返回。解法是提前开新 session,带一份旧会话的短摘要。拿这个改动重跑过去的对话,总成本降 39%,没有任何一轮比原来更贵。
第四条,平台锁定。托管服务只能跑 Claude,可以给每个 session 挑不同的 Claude 模型,快问题走更快更便宜的,但没法路由到别家实验室的模型;因为要保留 session 历史以便恢复,它也不符合 Anthropic 的零数据保留选项,有些公司要求这个,他们现在给不了。
第五条,退出成本。他们整理了一份"要离开这套服务得替换什么"的架构文档,比谁预期的都长:harness、session、记忆、工具、沙箱,要几个月,还会带出一批新 bug。
六、可以带走的清单
-
共享一个 agent,而不是每人一个:它看得见整个团队的上下文,一个人学会的技能所有人能用,只需要维护一个。
-
基础设施托管出去:把脑和手分开,session 当运行日志,任一边崩了工作还在。
-
让它判断哪条消息是找它的:没 @ 它的消息先由一个小而快的模型读,拿不准就保持安静。
-
让它不持有凭据:托管方暂停,服务器用请求者本人的登录调用,只把结果回给 agent。
-
入口放在人已经在的地方,比如 Slack,而不是又一个新界面。
-
技能沉淀:把最好的人做事的方式、连同他为做对而做的每一次纠正,变成全公司能做的事。
-
成本怎么收写清楚:Every 是每人 15 美元免费额度、每个工作区最多 500 美元,之后 30 美元一个月,token 按原价透传,他们的说法是模型对他们变便宜,对客户也一样变便宜。
-
Frontier Alerts:每当有新模型发布,agent 翻一遍你现在的工具和工作流,告诉你这个模型值不值得你关注。
-
给缓存经济留退路:长会话提前开新 session、带短摘要,Every 用这个改动把总成本降了 39%。
链接
发布片:https://www.youtube.com/watch?v=jDHjR1ScChY
Dan Shipper 的发布文:https://every.to/on-every/introducing-the-every-agent
Paridhi Agarwal 的工程复盘:https://every.to/source-code/why-we-handed-our-agent-s-infrastructure-to-anthropic
#Agent工程 #企业AI



