news 2026/10/5 5:17:02

Slack+Cloudflare Workers+MCP:构建主动式AI Agent实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Slack+Cloudflare Workers+MCP:构建主动式AI Agent实战

1. 从一条 GitHub 热榜说起:company-brain 到底想解决什么问题

第一次在 GitHub 趋势榜上刷到company-brain这个项目时,我的第一反应是:终于有人把“AI 主动干活”这件事从演示视频里拽出来,塞进了团队每天真正在用的工具里。它的定位很直白——在 Slack 里给团队装一个会主动干活的 AI。注意关键词是“主动”,不是那种你问一句它答一句的问答机器人,而是能感知团队上下文、自己判断该不该出手、然后真的把活干完的角色。

我见过太多团队把 AI 助手接进聊天工具,最后都变成了一个“高级搜索框”:大家新鲜三天,之后就没人 @ 它了。原因很简单,被动响应的 AI 本质上还是个工具,你得先想到它、再组织语言、再等它回复,这个链路比直接问同事还长。company-brain 想打破的就是这个链路——它要做的不是“你来找我”,而是“我发现这事该我管,我就上了”。

这个项目适合谁来研究?我认为有三类人值得花时间:一是中小团队的技术负责人,想用极低成本给团队加一个“虚拟运营/虚拟助理”;二是做 AI Agent 方向的开发者,想看看一个真实可用的主动式 Agent 是怎么设计的;三是任何对MCP、Cloudflare Workers这套组合感兴趣、想找个完整案例上手的人。它不是一个玩具 demo,而是一个把“感知—决策—执行—反馈”闭环跑通的最小可用系统。

在展开细节之前,先把它的核心骨架说清楚:Slack 负责交互入口和事件来源,Cloudflare Workers 负责常驻运行和调度,MCP 负责把外部能力(比如查数据、调工具)标准化地接进来,AI 模型负责判断和生成。这四块拼在一起,才构成了“会主动干活”这件事的技术底座。下面我按自己的理解,把这个项目从设计思路到落地细节完整拆一遍。

2. 整体设计思路拆解:为什么是 Slack + Workers + MCP 这套组合

2.1 为什么入口选 Slack 而不是自建网页

很多人做 AI 助手的第一反应是做个网页或者做个独立 App,但 company-brain 把入口放在 Slack,这个选择背后有很实在的考量。团队每天的沟通、决策、任务分配本来就发生在 Slack 里,信息密度最高的地方就是这里。你把 AI 放在 Slack,等于让它直接站在信息流的旁边,不需要用户切换上下文,也不需要额外培养使用习惯。

更关键的是,Slack 提供了完整的事件订阅机制。消息发出、频道创建、表情回应、成员加入,这些都能变成 AI 的“感知信号”。一个主动式 Agent 最怕的就是“看不见”,而 Slack 的事件流天然就是它的眼睛和耳朵。相比之下,自建网页只能被动等用户输入,感知能力几乎为零。

提示:如果你的团队不用 Slack,这个项目的思路完全可以平移到其他支持事件订阅的协作工具上,核心逻辑不变,只是适配层要重写。

2.2 Cloudflare Workers 在这里扮演什么角色

主动式 AI 和被动式 AI 最大的工程差异在于:主动式需要一个“一直在场”的运行环境。它得定时醒来看看有没有事、得随时响应 Slack 推过来的事件、还得在需要的时候调用外部工具。传统做法是租一台服务器跑个常驻进程,但这对小团队来说既贵又麻烦。

Cloudflare Workers 的优势在这里体现得很明显:它是事件驱动的无服务器环境,有请求就执行,没请求就不占资源,冷启动又快。配合 Cron Triggers 做定时任务,配合 Durable Objects 做状态保持,一个“轻量常驻 Agent”就成型了。成本上,小团队的日常用量基本落在免费额度或极低付费区间,这对一个内部工具来说太重要了。

我实测下来的感受是,Workers 特别适合这种“低频但要求随时在线”的场景。你不需要为它维护服务器、打补丁、盯监控,写完部署上去就不用管了,这对没有专职运维的团队是刚需。

2.3 MCP 为什么是这套方案的关键拼图

MCP(Model Context Protocol)是这两年 AI 工程领域最值得关注的东西之一。简单说,它是一套让 AI 模型和外部工具、数据源之间标准化对话的协议。在没有 MCP 之前,你每接一个工具就要写一套适配代码,接十个工具就是十套,维护成本爆炸。有了 MCP,工具方按协议暴露能力,AI 方按协议调用,双方解耦。

company-brain 用 MCP 来接入各种能力:查项目进度、读文档、发通知、更新表格等等。这意味着它的能力边界是可以随时扩展的——今天接一个查数据的 MCP Server,明天接一个发邮件的,AI 能干的活就变多了,而核心代码几乎不用动。这种可扩展性对一个要长期演进的团队工具来说,价值极高。

2.4 “主动”这两个字的技术含义

很多人以为“主动”就是加个定时任务,其实远不止。真正的主动包含三层:第一层是感知,能持续接收 Slack 的事件和定时轮询的结果;第二层是判断,用 AI 判断当前信息是否触发了某个该执行的动作;第三层是执行与反馈,干完活之后把结果同步回 Slack,并且记录状态避免重复执行。

这三层里最难的是第二层。判断“该不该出手”需要给 AI 足够的上下文和清晰的规则,否则它要么什么都不做,要么乱做。company-brain 的做法是把判断逻辑和上下文一起喂给模型,让模型输出结构化的决策结果,再由代码去执行。这个“模型决策 + 代码执行”的分工,是它稳定的关键。

3. 核心细节解析与实操要点:把每个模块拆开看

3.1 Slack App 的配置要点与权限设计

要让 AI 在 Slack 里干活,第一步是创建一个 Slack App。这里有几个容易踩坑的地方。权限(Scopes)一定要按最小必要原则申请,常用的包括读取消息、发送消息、读取频道列表、读取用户信息。权限申请多了审核麻烦,申请少了功能跑不起来,建议先列清楚 AI 要干的活,再反推需要哪些权限。

事件订阅(Event Subscriptions)是主动感知的核心。你需要把 Slack 的事件推送到 Cloudflare Workers 的某个 URL 上。这里要注意 Slack 的 URL 验证机制:它会在配置时发一个 challenge 请求,你的 Worker 必须正确响应才能通过验证。很多人卡在这一步,其实只要按官方文档把 challenge 原样返回就行。

注意:Slack 的事件推送有重试机制,如果你的 Worker 处理超时或报错,Slack 会重复推送同一条事件。所以你的处理逻辑必须做幂等,否则 AI 可能对同一条消息重复干活。

3.2 Cloudflare Workers 的部署与定时任务配置

Workers 的部署现在很顺滑,用 Wrangler CLI 几条命令就能搞定。核心是wrangler.toml这个配置文件,里面要写清楚入口文件、环境变量、以及 Cron Triggers。环境变量里放 Slack 的 Token、AI 模型的 API Key 这些敏感信息,千万别硬编码在代码里。

定时任务是主动性的来源之一。比如你可以配置每 30 分钟跑一次,让 AI 去检查有没有逾期任务、有没有需要提醒的事项。Cron 表达式按需配置,但要注意 Workers 的免费额度对执行次数有限制,别把频率设得太高。

name = "company-brain" main = "src/index.js" compatibility_date = "2024-01-01" [triggers] crons = ["*/30 * * * *"] [vars] SLACK_BOT_TOKEN = "xoxb-..."

上面这个配置的意思是每 30 分钟触发一次。实际用的时候,我建议先从低频开始,观察 AI 的判断质量,稳定了再考虑提高频率。

3.3 MCP Server 的接入方式与工具注册

MCP 的接入是这套方案里技术含量最高的部分。你需要一个 MCP Server 来暴露团队内部的能力。比如一个“查项目状态”的工具,输入项目名,输出当前进度。MCP Server 可以用任意语言写,只要遵循协议规范。

接入的时候,Worker 作为 MCP Client 去连接 Server,把可用的工具列表拉过来,然后在需要的时候调用。这里的关键是工具描述要写清楚,因为 AI 是靠描述来判断该不该用这个工具的。描述模糊,AI 就会乱用或者不用。

工具名称输入参数输出内容使用场景
get_project_status项目名进度百分比、负责人被问到项目进展时
list_overdue_tasks无逾期任务列表定时巡检时
send_reminder用户、内容发送结果需要提醒某人时
search_docs关键词相关文档片段回答知识类问题时

这张表是我根据常见实践整理的,实际项目里工具会更多。每加一个工具,AI 的能力就扩展一分,但也要注意别加太多导致判断混乱。

3.4 AI 决策层的提示词设计

提示词是主动式 Agent 的大脑。company-brain 的提示词需要包含几块内容:角色设定(你是团队的助理)、当前上下文(最近的 Slack 消息、定时任务的结果)、可用工具列表、以及输出格式要求。输出格式一定要结构化,比如要求模型返回 JSON,包含“是否执行动作”“执行哪个工具”“参数是什么”。

我试过用自然语言让模型直接输出动作,结果很不稳定,有时候它会在回复里夹带解释,导致解析失败。改成强制 JSON 输出之后,稳定性提升非常明显。这是实操中非常值得记住的一点:凡是需要代码解析的模型输出,一律用结构化格式。

4. 实操过程与核心环节实现:从零跑通一个主动 Agent

4.1 环境准备与依赖安装

先把基础环境搭起来。你需要 Node.js 环境、Wrangler CLI、一个 Slack 工作区的管理员权限、一个 Cloudflare 账号,以及一个可用的 AI 模型 API。依赖装好之后,初始化项目结构,大致分成入口文件、Slack 处理模块、MCP 客户端模块、AI 决策模块四块。

npm install -g wrangler wrangler login npm init -y npm install @slack/web-api @modelcontextprotocol/sdk

装依赖的时候注意版本兼容,MCP 的 SDK 更新比较快,建议锁定一个稳定版本,别用 latest 免得踩到 breaking change。

4.2 Slack 事件接收与验证实现

Worker 的入口要处理两类请求:一类是 Slack 的事件推送,一类是定时任务触发。事件推送进来之后,先做签名验证,确认请求确实来自 Slack,这是安全底线。验证通过后,解析事件内容,判断是消息事件还是其他类型,然后交给对应的处理逻辑。

export default { async fetch(request, env, ctx) { const body = await request.text(); // 验证 Slack 签名 if (!verifySlackSignature(request, body, env.SLACK_SIGNING_SECRET)) { return new Response("Unauthorized", { status: 401 }); } const event = JSON.parse(body); if (event.type === "url_verification") { return new Response(event.challenge); } ctx.waitUntil(handleEvent(event, env)); return new Response("OK"); } };

这里用ctx.waitUntil是为了让 Worker 先快速返回 200 给 Slack,避免超时重试,实际处理逻辑放到后台跑。这个技巧在处理耗时任务时非常关键。

4.3 定时巡检任务的实现

定时任务通过scheduled事件触发。逻辑是:醒来之后,调用 MCP 工具拉取需要关注的信息,比如逾期任务,然后把这些信息连同判断规则一起喂给 AI,让 AI 决定要不要发提醒、发给谁、说什么。

async scheduled(event, env, ctx) { const overdueTasks = await mcpClient.call("list_overdue_tasks", {}); if (overdueTasks.length === 0) return; const decision = await aiDecide(overdueTasks, env); if (decision.shouldAct) { await slackClient.chat.postMessage({ channel: decision.channel, text: decision.message }); } }

这段逻辑里,aiDecide是核心。它把任务列表和规则交给模型,模型返回是否行动、行动内容。我实测下来,给模型明确的判断标准(比如“逾期超过一天且负责人未请假”)比让它自由发挥要稳得多。

4.4 主动响应的完整链路演示

举个具体场景:团队在 Slack 里讨论某个功能延期,AI 感知到这条消息,判断这涉及项目进度,于是调用get_project_status工具查到实际进度,发现确实延期了,于是主动在频道里发一条消息,附上当前进度和建议的调整方案。

这个链路走下来,用户什么都没问,AI 就把信息补齐了。这就是“主动干活”的价值。实现上,它依赖事件感知、工具调用、AI 判断、消息发送四个环节的顺畅衔接。任何一个环节卡住,体验都会断掉。

提示:第一次跑通链路时,建议把 AI 的动作先发到一个测试频道,人工确认判断质量,稳定后再放开到正式频道。

5. 常见问题与排查技巧实录

5.1 Slack 事件收不到怎么办

这是最常见的问题。排查顺序是:先看 Slack App 的事件订阅 URL 是否验证通过,再看 Worker 的日志有没有收到请求,最后看签名验证是否通过。我遇到过好几次是签名验证的密钥配错了,导致所有请求都被拒。还有一个坑是 Worker 返回超时,Slack 认为推送失败,这时候要检查处理逻辑是不是同步执行了耗时操作。

5.2 AI 判断不稳定怎么调

判断不稳定通常有三个原因:提示词不够明确、上下文给得不够、工具描述太模糊。我的经验是,先把判断规则写成明确的条目,再给足上下文,最后把工具描述改成人话。如果还是不稳,就降低主动性,从“只在明确触发条件下行动”开始,逐步放开。

5.3 MCP 工具调用失败排查

MCP 调用失败先看连接是否正常,再看工具名和参数是否匹配。常见错误是参数类型不对,比如该传字符串传了数字。另外要注意超时设置,外部工具响应慢的时候要设合理的超时,避免 Worker 卡死。

问题现象可能原因解决方向
事件收不到URL 验证失败或签名错误检查密钥和验证逻辑
AI 不行动提示词模糊或上下文不足明确规则、补充上下文
工具调用报错参数不匹配或超时核对参数、设置超时
重复执行未做幂等处理加事件去重逻辑
响应太慢同步执行耗时任务改用 waitUntil 异步

5.4 成本控制的实操心得

Workers 和 AI 模型都是按量计费的,小团队要控制成本。我的做法是:定时任务频率别太高,AI 调用做缓存,相同输入短时间内不重复调用模型。另外,把简单的判断逻辑用代码实现,只把真正需要理解语义的部分交给模型,这样能省下大量调用。

6. 这套方案还能怎么扩展

跑通基础版本之后,扩展空间很大。比如接入更多 MCP 工具,让 AI 能操作项目管理工具、能查代码仓库状态、能发邮件。再比如增加多轮记忆,让 AI 记住之前的判断结果,避免重复提醒。还可以做权限分级,不同频道的 AI 能力不一样。

我个人觉得最有价值的扩展方向是“判断逻辑的可配置化”。把判断规则从代码里抽出来,做成配置文件,团队可以自己调整 AI 什么时候该出手。这样非技术人员也能参与调优,AI 的行为会越来越贴合团队的实际需求。

最后分享一个小技巧:给 AI 的每条主动消息都加一个“为什么发这条”的简短说明,比如“检测到任务逾期”。这样团队成员能理解 AI 的判断依据,信任感建立得快,也不会觉得被莫名其妙打扰。这个细节看起来小,但对一个主动式 Agent 能不能被团队接受,影响很大。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 5:16:59

AI Agent工具调用治理实战:Dogwood如何为Agent立规矩

很多做 AI Agent 平台的朋友,一开始都被“工具调用”这四个字坑惨了。模型今天想调天气接口,明天想读写数据库,后天可能把删除接口当成查询接口用——你根本不知道它会怎么使唤这些工具。我搭过几套内部 Agent 平台,最大的体会是&…

作者头像 李华
网站建设 2026/10/5 5:15:40

安卓手机变身STM32调试上位机:USB串口通讯实战指南

把安卓手机当成STM32的调试上位机,这事儿听起来挺折腾,但实际做下来会发现,它比想象中简单,而且非常实用。尤其当你做便携式设备、野外调试,或者不想抱着笔记本跑来跑去的时候,手机通过USB串口直接跟单片机…

作者头像 李华
网站建设 2026/10/5 5:15:07

树莓派离线唤醒词引擎Snowboy安装实战与调试指南

我最初在树莓派上折腾Snowboy,是想给一个老旧的USB麦克风找个正经用途。树莓派装Snowboy,说到底就是在本地跑一个“离线唤醒词检测引擎”,让树莓派像智能音箱一样,听到特定词才响应,而不是连续录音上传到云端。这个项目…

作者头像 李华
网站建设 2026/10/5 5:14:48

AI编码助手、智能体平台与开源模型:2026年工程落地与避坑指南

早上刷完今天的信息流,我发现整个AI圈的状态和三个月前已经完全不一样了。没有那种动辄刷屏的“发布即炸场”事件,但编码助手、智能体平台、开源模型这三条线的动态密度反而比过去任何时候都要高:编码助手开始真正“干活”而不仅是“补全”&a…

作者头像 李华
网站建设 2026/10/5 5:14:02

即梦Seedance 2.0导演台实战:AI视频运镜与提示词全解析

1. 内容整体设计与思路拆解1.1 别急着喊“神器”,先看清它到底更新了什么前两天打开即梦,发现Seedance模型悄悄更新到了2.0,我第一反应是直接把几个旧项目重新生成对比了一下。老实说,这次不是挤牙膏式的升级,而是把视…

作者头像 李华
网站建设 2026/10/5 5:13:10

端侧Agent工程化实战:从架构设计到稳定性优化

1. 端侧 Agent 工程化:先想清楚边界,再谈落地做端侧 Agent 有一个很容易踩的坑:一上来就奔着"智能"去,把大模型塞进设备里,然后就开始堆功能。结果跑起来之后发现,模型在云端表现不错&#xff0c…

作者头像 李华