Slack消息发完2小时,PM的私信准时抵达:" auth bug修得漂亮,Jira状态改了吗?"
这种对话每天重复3-5次。开发者已经在#daily-standup里自然汇报了进度,却还要开新标签、等Jira加载、找对sprint、点按钮——说一模一样的话。
上周末,一位工程师决定终结这套冗余流程。他用Next.js和Claude 3.5搭了个Slack机器人:读取日常更新,识别对应工单,自动关闭。PM再也没机会问那句"改了吗"。
第一关:Slack的3秒死亡倒计时
Slack Events API有个臭名昭著的规矩:收到webhook后必须在3秒内返回200 OK,否则判定应用死亡,重试事件。重试意味着重复调用AI,账单爆炸,逻辑混乱。
但Anthropic API + Jira API的调用链远超3秒。工程师不能在主线程里await AI处理。
解法藏在Vercel的`waitUntil`函数里。这是Next.js部署在Vercel时的专属工具,让serverless函数立即返回200 OK满足Slack,同时保持执行环境在后台跑完AI流水线:
// 伪代码核心逻辑:先响应,后干活
代码里分两步走:第一步用`waitUntil`把重活扔进后台队列;第二步立刻返回`{ ok: true }`。Slack收到心跳就闭嘴,机器人在暗处继续解析消息、匹配工单、关闭ticket。
这个模式的关键是Vercel的serverless运行时支持。换成其他平台,可能得引入消息队列或Lambda异步调用,复杂度翻倍。
第二关:阻止AI乱关工单
比技术更难的是精度。工程师最怕场景:"我明天开始搞header"——AI如果看到"header"就关"Header Redesign"工单,就是灾难。
他给Claude 3.5设计了一套强制JSON输出格式。不是问"匹配吗?",而是要求模型返回带`confidence_score`的结构化结果。阈值以下直接放弃,阈值以上才执行。
系统提示词里埋了多层约束:时态识别("完成了"vs"将要做")、主语确认("我修的"vs"团队修的")、上下文消歧(同名ticket的sprint归属)。Claude 3.5的指令跟随能力在这里被压到极限。
工程师在博客里没有公开完整prompt,但提到一个细节:他让AI先输出"推理过程"字段,再输出"决策结果"。这样调试时能追溯模型为什么给某个分数,方便迭代。
第三关:让PM彻底失业(不是)
机器人跑起来后,工程师在Slack发"终于搞定了那个诡异的auth bug,准备迁移数据库",后台自动解析、匹配、关闭Jira ticket。PM的私信再也没来过。
但他留了个后门:机器人每次操作后会在线程里回复一条确认消息,带ticket编号和关闭时间。PM随时能查,只是不需要问了。
这个设计很产品经理思维——自动化不是消灭信息,而是消灭重复劳动。状态同步从"人找人问"变成"系统主动推"。
项目开源在GitHub,核心依赖就三个:Next.js 14(App Router)、Slack Bolt SDK、Anthropic SDK。部署到Vercel后,免费额度足够小团队用。
工程师最后算了一笔账:每天省3次上下文切换,每次切换恢复专注需要15分钟,一周就是5.25小时。写代码的时间多了,回PM消息的时间少了。
你的团队还在手动同步Slack和Jira吗?还是已经有人偷偷写了类似的脚本,只是没告诉你?
热门跟贴