飞书群聊里 AI 助手太吵了。我用双机器人分流、话题隔离和只读索引,让它少插嘴。
codex-feishu 是我整理出来的一个飞书 / Lark 群聊机器人项目。
公开仓库在这里:
https://github.com/GitLaughs/codex-feishu我希望它在群里安静一点、可控一点,能长期放着用,而不是每句话都抢着接。
这件事听起来简单,但接入群聊后会遇到一个很现实的问题:如果机器人只在被 @ 时工作,它会错过文件、上下文和一些轻量指令;如果机器人监听每一句话,它又会浪费调用额度,甚至打断正常聊天。
所以这个项目选择了双机器人路由。
两个机器人,两种职责
我的设计里有两个飞书应用:
- mini bot:监听群消息,做轻量判断、静态命令、文件整理和只读查询。
- deep bot:只处理明确 @ 的复杂任务,调用更强的推理能力。
我这样拆,不是为了省一点调用费,而是为了让两个入口别互相抢活。
mini bot 的默认动作应该是沉默。它看见消息后先判断这句话是否真的需要机器人回应;如果只是普通闲聊,就什么都不做。只有遇到明确命令、文件整理、轻量查询或维护类动作时,它才介入。
deep bot 则相反。它不需要监听所有消息,只需要处理被明确交给它的任务。这样复杂任务不会被群里无关上下文污染,也不会让一个重模型长期盯着所有聊天内容。
这比“一个万能机器人监听全部消息”更容易维护,也更像真实群聊里该出现的工具。
群聊助手最重要的是别乱插话
群聊里的 AI 助手最烦人的时候,往往不是答错了,而是没人叫它也要说两句。
一个好用的群机器人至少要遵守几条规则:
- 没被叫到时,大多数时候别插话。
- 能用确定性命令完成的事,别强行走模型。
- 长任务必须给出可见进度,否则用户不知道它是不是卡住了。
- 回复链要隔离,别把两个任务混成一个上下文。
- 公开仓库只放脚本和模板,不放真实密钥、群 ID、用户 ID 或本地配置。
这些规则不花哨,但少了它们,机器人很快就会被群里的人嫌烦。群聊不是单人命令行,里面有多人、多话题、多文件和很多不需要 AI 参与的普通消息。
话题隔离
飞书的回复链天然适合映射成任务会话。
如果 A 在一个回复链里让机器人整理文档,B 在另一个回复链里让机器人检查脚本,这两个任务就不该共享上下文。否则 A 的资料可能影响 B 的回答,B 的追问也可能接到 A 的任务里。
所以我更倾向于把回复链当成一个单独 session:
reply chain -> isolated task session这个设计会让系统少一点“全知全能”的错觉,但可靠性更高。用户在一个话题里继续追问时,机器人能接上;换到另一个话题时,它就从另一个任务上下文开始。
静态命令比模型回答更可靠
这个项目里有一类命令不需要模型自由发挥,例如:
- 查看文件索引。
- 搜索本地记忆。
- 查看任务清单。
- 查看工作区状态。
- 运行健康检查。
这些动作最适合做成确定性只读命令。用户发出命令后,脚本读取本地索引或状态文件,返回结构化结果。这样更快、更便宜,也更容易控制权限。
我不喜欢把所有事情都交给大模型解释。模型适合处理开放任务,但不适合替代每一个可预测的系统查询。能用脚本稳定得到答案的,就应该用脚本。
长任务要有流式预览
群聊机器人还有一个常见问题:长任务没有反馈。
在命令行里等待几十秒还可以接受,因为用户知道进程在跑;但在群聊里,如果机器人长时间没动静,用户很难判断它是掉线、超时,还是正在处理。
所以 deep bot 需要做两层反馈:
- 收到任务后尽快给出“已开始处理”的平台层反馈。
- 任务运行时逐步更新可见预览,让用户看到进度。
这主要是为了降低不确定性。很多自动化系统最后能跑完,但中间太安静,用户就会怀疑它已经挂了。
文件和记忆只做工作区级索引
群聊里经常会出现文件。直接把文件丢给模型当然省事,但长期看会带来两个问题:文件会散,历史也不可追溯。
更稳的做法是先保存、分类、生成索引,再在需要时摘要或查询。这样工作区里会逐渐形成几个可读入口:
- 文件清单。
- 知识索引。
- 任务记录。
- 健康检查结果。
这些入口不该混成全局记忆,也不该跨工作区乱用。机器人服务的是一个具体群或具体项目,记忆也应该跟着项目走。
为什么公开仓库只放模板
这类项目很容易不小心泄露私有信息。飞书应用、群聊、用户、部署机器、日志和本地配置都可能包含敏感字段。
所以公开仓库必须收紧:
- 放安装脚本、模板、文档和通用逻辑。
- 不放真实应用密钥。
- 不放真实群聊或用户标识。
- 不放生成后的本地配置。
- 不放私有对话和运行日志。
这个原则会让安装多一步,但值得。机器人项目一旦跑起来,会接触大量真实协作信息,公开仓库必须从一开始就按“可分享模板”来设计。
这个项目想解决什么
我并不想把群聊改造成 IDE,更不想让 AI 接管每一次讨论。
更准确地说,我想要的是一个能放在群里的工程助手:
- 普通聊天时它安静。
- 被明确叫到时它能干活。
- 有文件进来时它能整理。
- 有长任务时它能显示进度。
- 有历史资料时它能只读检索。
- 有复杂问题时它能把任务隔离开处理。
这套思路也适合很多其他机器人系统。放到多人协作里,模型会不会答题只是第一层,入口怎么收、上下文怎么分、进度怎么露出来,都会影响大家愿不愿意继续用。
对我来说,codex-feishu 最值得记的地方就是这个取舍:平时少说废话,被明确叫到时再进入工作状态。
继续读