ARTICLE · 1117287
把社群交给AI之后,我发现最难的不是自动回复
前几天,我对自己搭建的社群管理系统做了一次只读核查。
只看,不动。
系统里同时运行着消息采集、手机监控、私信、群内被@后的回复、新人入群流程、社群巡检等多个组件。
我原以为会发现一堆东西“没开”。结果不是。
大部分链路其实都在运行。真正的问题,藏在两个地方:局部断点,以及历史状态失真。
这比“系统挂了”更麻烦。挂了,一眼就能看到;失真时,它看起来一切正常,却可能做出错误动作。
真有申请时,脚本反而失败
第一个坑来自微信界面改版。
过去,“新的朋友”入口位置和文字相对固定。改版以后,有未读申请时,第一行可能直接显示申请信息,原来那几个字反而消失了。
于是出现一个很反常的现象:
真正有新申请时,脚本更容易失败;没有申请时,它反而能通过。
最直接的办法,是放宽识别条件。但放宽识别,等于让脚本学会“猜”。猜对了省事,猜错了就可能进入别的页面,甚至对错误对象执行操作。
最后的做法是:先借助附近稳定不变的元素定位入口;进入页面后,再用页头和按钮进行二次硬校验;校验不通过就退出,不执行任何业务动作。
这件事带给我的第一个心得是:
宁可这一轮什么都不做,也不要在错误的页面上做事。
状态文件说没做完,其实早已完成
第二个坑更隐蔽。
新人入群有一套固定流程,系统用状态文件记录每个人走到了哪一步。问题是,状态记录可能长期落后于真实对话。
如果系统只相信状态文件,就可能给已经完成流程的人再发一遍欢迎语、资料或邀请。
后来我换了一个思路:不只看状态文件怎么写,而是回到原始证据重新对账。
看真实消息由谁发出,看服务端有没有发送回证,看哪些关键步骤已经实际完成。经过一轮核对,多条历史状态被纠正,重复发送的风险也被消除。
我由此想明白:
业务真相不能只存在状态机里,必须随时能够回到原始证据核验。
既要知道什么时候闭嘴,也要记住答应过什么
对账时还出现了两个意外。
一类对话看起来像“对方发了消息,我们没有回复”,但仔细看,对方最后一句只是礼貌结束语。这种时候机械续聊,反而是在打扰别人。
另一类更值得警惕:人曾经答应过一件事,但它没有进入系统状态,后来也就没有被执行。
这两件事放在一起,让我重新理解了社群自动化:
它既要避免多说,也要能发现那些人已经承诺、系统却没有记下的事情。
输入法,成了一个意想不到的对手
手机自动发送消息时,需要临时切换输入法。另一个守护进程却可能在发送途中把输入法切回去。
结果就是:文字没有输入,也没有拿到发送回证。
最直觉的修法是失败就重试。但我没有这样做,因为“没收到回证”并不等于“没有发出去”。无限重试,最坏的结果是同一句话连续发出几遍。
最后的改法是:给手机操作加统一独占锁,同一时间只允许一个进程操作;明确允许发送的进程白名单;失败后先查回证,结果不明就停止自动重发。
这条原则后来也延伸到整套系统:
不确定,不等于失败;不确定时最重要的动作,是对账。
什么交给脚本,什么交给Claude
踩完这些坑,我对AI与自动化的分工也发生了变化。
群内被@、私信、新人SOP,看起来都是“回复消息”,其实并不是同一种工作。
纯脚本适合做增量刷新、去重、账号与收件人核验、文字识别、固定字段判断和服务端回证。这些事情规则清晰,应该做到稳定、便宜、可重复。
需要交给Claude的,是语气、上下文、身份关系,以及一个更关键的问题:这条消息到底该不该回复?
反过来也一样。AI不应该承担机械轮询,更不能自己证明“我已经把消息发出去了”。理解、执行和证明,必须彼此分开。
正在搭建的三层结构
基于这些实际使用心得,我最近形成了一套三层分工。需要说明的是,它还处于设计和最小改造阶段,并没有全部上线。
第一层,由脚本持续刷新事件并写入队列。没有新事件,就不调用模型。
第二层,由Claude只处理需要理解的事件,输出结构化判断或回复草稿,但不直接操作手机。
第三层,由独立执行器再次核对授权、发送对象、正文和规则版本,确认无误后执行发送,并保存服务端回证。
同一个事件要用稳定编号去重;同一个人的消息要排队处理,不能并发;一旦有新消息进入,旧决策就需要重新确认;额度、认证或输出格式出现异常时,停在明确的状态里,不能偷偷换模型;发送结果不明,只对账,不重发。
我最大的感受
做之前,我以为社群自动化最难的是“会不会回复”。
真正用起来才发现,最难的是:
什么时候不该回复。
正确率只是一部分。系统还要面对重复、并发、状态漂移、人工介入,以及外部界面的不断变化。
自动化也不是为了替代运营者。它应该把人从一遍遍机械检查中解放出来,同时把每一次有风险的发送,变成可授权、可追踪、可回查的动作。
所以,一个真正可以交付的社群管理系统,不是一段提示词,也不是一个“自动回复机器人”。
它应该是一套由事实、规则、授权、执行和回证组成的闭环。每一步都知道依据是什么,每一步都能停下来,每一步都可以回头检查。
接下来,方向已经清楚:脚本负责刷新和核对,Claude负责需要理解语境的互动判断,独立执行器负责发送和留下回证。
先小范围灰度,跑稳以后,再逐步扩大。
不急。因为社群里的每一条消息,背后都是一个真人。