AI 队友:monday.com 如何在 Amazon Bedrock 上运行生产级 AI 智能体
标题:AI Teammates:monday.com 如何在 Amazon Bedrock 上运行生产级 AI 代理
原文:
AI 队友就是搭建在 Amazon Bedrock 上的智能代理(agentic AI),而像 monday.com 这样把这类代理大规模部署到生产环境的工程团队,屈指可数。如今,九成开发者每月都在使用 AI 编码工具,而半年前这个比例只有大约一半。每位工程师的 PR 吞吐量(Pull Request 处理量)提升了超过 50%。本文中的所有数据都来自 monday 内部的真实生产数据。在这篇文章里,我们会分享这些数字背后的架构、在一个运行了十年的代码库上做适配的经验,以及一种带置信度评分的合并操作(confidence-scored merge play),让系统一步步接近完全自主运行。
这不是一个从零开始的绿地项目。monday.com 的代码库已经运行了十年,拥有数百万付费用户、数百个微前端(microfrontends)和微服务,以及数百名“构建者”(包括工程师、产品经理、分析师和产品设计师)。代理每开一个 PR,都会进入一个被数百万用户依赖的系统——用户希望下次部署时它依然能正常工作。绿地项目的演示很简单,但要在真实有值班、有客户监管、有合规要求的企业 SaaS 里跑代理,才是真正的硬仗。
AI 工程的三个层次
我们可以把整个过程分成三个层次:
- L1,助手模式:工程师把 AI 当作结对编程伙伴。快速的反馈工作用 Cursor,重活交给 Claude Code。采用率同比增长近一倍。
- L2,技能与子代理:团队为重复工作构建可复用的代理,工程师负责把控方向。这是目前 monday 大部分工作的运行状态,也是让每位开发者 PR 吞吐量提升超过 50% 的关键阶段。
- L3,多代理模式:完全自主化。代理端到端负责交付,工程师负责编排,从看板取任务、在 Slack 和 monday 上沟通、到最后和人类一起发布代码。
代理是队友,不是任务
Sphera 是 monday 内部的代理系统。你一进系统看到的不是任务队列,而是一个“团队”页面:人类和代理混编在一起,每个角色都有个人资料、直属经理、工作范围和绩效评分。本文核心代理 Atlas 就是其中之一:角色是软件工程师,职责是接工单、写 PR、发布功能,没有 IDE。和其他人用同一个待办列表。这可不是装饰,这就是系统的数据模型。
每个代理都有一个稳定的身份,贯穿 Slack、GitHub 和 monday 平台——人类可以像对待其他团队成员一样,标记、分配、代码审查或停用它们。那些真正产生影响的代理,都归属于真实团队,做实际工作,并对结果负责。
架构
下面来看这套系统是如何组合在一起的——从代理监听的收件箱,到承载每个事件的 AWS 服务。
三个收件箱,一个代理
一个 monday 构建的代理有三个一等收件箱:Slack 中的 @提及、monday 中的项目分配、GitHub 上的 PR 审查请求。这三者都进入同一个代理会话,共享同一份内存和磁盘上的工作空间:同一事件的三种形式,同一个队列,同一条路径。我们并没有运行三套代理系统,只运行一套。
架构一图览
我们使用了七个 AWS 服务:Amazon Simple Notification Service (Amazon SNS)、Amazon Simple Queue Service (Amazon SQS)、Amazon Elastic Kubernetes Service (Amazon EKS)、Amazon Relational Database Service (Amazon RDS)、Amazon ElastiCache、Amazon Elastic File System (Amazon EFS) 和 Amazon Simple Storage Service (Amazon S3)。此外,AWS Secrets Manager 负责每个会话的密钥管理,Amazon Bedrock 处理模型调用,monday-agent-sdk 则运行在每个代理运行器 Pod 内。
事件路径:从 SNS 到 SQS 再到 monday Builders CoWORK
所有外部触发器先落入 SNS,SNS 根据主题和路由键将事件分发到每个团队的 SQS 队列。monday Builders CoWORK(一个运行在 EKS 上的 SQS 消费者集群)拉取每条消息,解析出该事件归属哪个代理,然后交给对应的代理运行器 Pod。
发布/订阅加队列的组合,给了我们四样不会放弃的能力:开箱即用的重试和死信队列、Amazon Bedrock 限流时的背压控制、可持久重放(在发布新版本前,我们会用过去一天的事件对修补后的构建进行回放验证),以及并发扇出。如果 Claude Agent SDK 将来在运行时层提供了更好的方案,我们就会删掉自己的实现,但底层框架会保留。
monday-agent-sdk:薄薄一层,刻意为之
Claude Agent SDK 是运行时。我们在此基础上再包一层,原因有三:
- 调用端的提供商中立性:代理的 LLM 调用会路由到 Amazon Bedrock 模型端点。
- 冷启动成本: