用 OpenClaw 给 OpenClaw 提 PR,合并了
今天中午,手机弹了个 GitHub 通知。
PR #17798,merged。
愣了两秒。然后跟小虾说:”你的代码被合了。”
小虾是我的 AI 助手。这个 PR 从第一行到最后一行,都是她写的。我干了什么呢——描述需求,看了眼代码,跑了下测试,点了提交。
有一瞬间觉得心虚。但也就一瞬间。
我遇到了什么问题
我在飞书上跑了好几个 AI 助手,都是通过 OpenClaw 接入的。私聊没啥问题,群聊就炸了。
所有人的消息都往一个 session 里塞。张三问技术问题,李四问天气,AI 一脸懵逼,还以为李四在追问张三的 Java 报错。
之前有个按话题隔离的选项,叫 topicSessionMode,但话题这个概念在飞书群聊里太松了。我要的是按人隔离——每个人有自己的上下文,别串。
翻了半天源码没找到现成方案。行吧,自己加。
改了什么
加了一个配置项 groupSessionScope,三种模式:
group——默认,整群共享,就是现在这个乱的状态group_sender——按人隔离,群里每个人跟 AI 独立对话group_topic_sender——按人+话题双重隔离,最细
配置长这样:
{
"channels": {
"feishu": {
"groups": {
"oc-xxxxxx": {
"groupSessionScope": "group_sender"
}
}
}
}
}
旧的 topicSessionMode 也兼容了,不会把老用户搞挂。
实际过程
我跟小虾说了一句话:”群聊上下文串了,加个按发送者隔离的功能。”
然后她去读源码,找到 session routing 那块逻辑,改了路由规则,加了配置项解析,写了四个测试用例——按人路由、按人+话题路由、旧配置兼容、边界情况。
我 review 的时候主要看了两个东西:路由 key 的拼接逻辑对不对,兼容性会不会 break 现有配置。看完觉得没问题,pnpm test 跑过,提了 PR。
总共一个小时左右。
如果我自己写,光理解 OpenClaw 的 session routing 架构就得半天。不是写不了,是性价比太低。
想明白一件事
第一次用这种方式提 PR 的时候,我纠结过”这算我的贡献吗”。
现在觉得这个问题本身就问错了。
我之所以知道群聊 session 要按人隔离,是因为我每天在用这个东西,踩到了坑。这个 bug 不在 issue 列表里,不在 roadmap 上,是一个只有实际用户才会遇到的痛点。
能判断小虾的代码改得对不对,是因为我理解 session routing 应该怎么工作。key 怎么拼,兼容性怎么做,这些判断她提供选项,我来拍板。
发现问题、定义需求、判断方案——这三件事 AI 干不了。把方案变成 TypeScript 代码然后写好测试——这件事她干得比我快十倍。
分工明确,各取所长。PR 署名 yfge,Co-authored-by 里有 Tak Hoffman 帮忙做的验证。没什么好心虚的。
一个细节
PR 合并后几分钟,就被四五个 fork 同步了。
看到那几条 commit 引用的时候挺爽的——这需求确实有人要。不是我在自嗨,确实有人需要这个功能。
有时候对开源最有价值的贡献,就是一个真实用户把自己的痒处翻译成了代码。