×

乐子 开源社区 AstrBot GitHub PR事故 114514 开发者故事 AI Agent 贡献者规范 吃瓜 开源文化 代码审查 社区冲突 互联网观察

开源社区吃瓜现场实录 一个PR引发的血案: 论如何在开源社区把自己玩成表情包

SEKAI SEKAI 发表于2026-06-06 20:04:01 浏览666 评论0

抢沙发发表评论

开源社区吃瓜现场实录

一个PR引发的血案:
论如何在开源社区把自己玩成表情包

从一个真实的Bug修复出发,经由"跨shi代的shi诗级的伟大的更新",      到最终评论区被官方加锁——这是一个完整的互联网乐子闭环。

                 约 2800 字 · 8 分钟
乐子      开源社区      AstrBot      GitHub      114514      PR事故      贡献者须知
01 /

事情的起点,其实挺正常的

我承认我是被引流来的。

——这是本次事件中,某位路人甲在GitHub评论区留下的第一句话。我觉得它非常适合作为这篇文章的开场白,因为后来涌进去的几十个人,基本都是同样的来路。

故事发生在 AstrBot 这个项目的 PR #8590。AstrBot 是个活跃的 AI 助手框架,33,800 Star,969 个 open issue,是那种随便翻翻就能感受到"有很多人在用"的体量。

事情的起点不复杂:有个叫 bytecategory 的用户发现了一个真实 Bug——当 LLM 调用工具时,如果 function.name 被设为 None,程序直接崩溃。修法基本正确,AI 代码审查机器人 Sourcery 和 Gemini Code Assist 挑出了几处小问题,他也认了大部分,顺手改掉了。

到这里为止,这是一个普普通通的开源贡献故事。本来应该平静地走完 review → merge → close 的流程。

然而。


02 /

然而,他决定顺便"改点别的"

修完 Bug 之后,这位老哥显然意犹未尽。他在同一个 PR 里,顺手塞进去了以下内容:

  • 其一

    把 Telegram 适配器的显示位置挪到了平台列表的最前面,"遥遥领先"。理由大概是:Telegram 好。而 AstrBot 绝大多数用户用的是 QQ 和微信。
  • 其二

    把最大 Agent 步数从 30 改成了……
    ⚠ max_agent_step 新默认值
    114514
    原注释:"最大步数是30步,这是不合理的,应该改成114514。"
    一个防止 Agent 无限循环的安全上限,就这么被写进了正式项目源代码。
  • 其三

    顺手集成了 Let's Encrypt 自动申请 IP 证书的功能。SSL 证书这件事,业界通行做法是交给 nginx、Caddy 来处理。把它塞进 Bot 本体,就像你买了一辆车,然后顺手给它装了一个微波炉——功能上不是不能用,但为什么要这样?
  • 其四

    把健康模式的默认值从 true 改成了 false。然后意识到这是"重大失误"。然后——把包含这个配置的 cmd_config.json 文件也一起提交了。本人在 PR 描述里原话:"重大失误!一不小心把 cmd_config.json 提交了!这个配置我暂时不改了,如果其他协作者(不是贡献者)要求可以改。"
  • 其五

    也是最令人叹为观止的一笔——PR 标题:
    跨shi代的shi诗级的伟大的更新
    这个标题后来被他自己改回去了。但截图永远留在了互联网上。

03 /

Member 出现了,好好说了一通

项目 Member advent259141 看到这个 PR,留下了一段非常克制的评论:

首先,提交 PR 符合社区规范按照模板,不要起这种不知所云的标题。其次请原子化提交而不是把所有功能的修复和改动放到一个 PR 里。还有,配置证书和 SSL 这种事放在 Bot 本体里会使得功能冗余,不适合作为一个 feature 放进来,这种事应该让 nginx 或者 Caddy 来干。还有就是有很多无意义的改动。我将关闭这个 PR,如果你愿意重新提交,请遵循社区规范使用模板,谢谢。— advent259141,Member

标准的、有礼貌的、给了重新提交机会的拒绝意见。

我相信绝大多数人看到这段话,会认真考虑,然后重新整理思路,把 Bug 修复单独提一个干净的 PR。

bytecategory 不是绝大多数人。


04 /

反击,以及名场面的诞生

他的回复节选精华如下:

首先,你只会看标题,不会看 git commit -m "这里的字面量"— bytecategory,反击第一弹

这句话的意思大概是:你看的是 PR 标题,真正的描述在 commit message 里。这个逻辑本身不是完全没有道理,但在一个所有人都用 PR 模板的社区里,把关键信息藏在 commit message 里然后指责别人没去找,性价比存疑。

在我遵循社区规范使用模板之前,你能不能把 github.com/advent259141/advent259141 改一下,以免让人发现你连 Markdown 都不会就来指手画脚— bytecategory,翻对方主页后

他去翻了对方的 GitHub 个人主页,发现 README 写得不够好,于是以此反驳对方没资格批评他。这个战术名叫"你也好不到哪去",在互联网争论史上是经典操作,在技术社区的 PR 评论区属于极为罕见的生物。

按照 #8552 (comment) 的说法,你还是滚回墙内好了。— bytecategory
我永远不会和一个纯傻逼对骂,因为它会把我的智商拉到和它一个等级,然后用它当了多年傻逼的丰富经验击败我— bytecategory,随后继续对骂

这句名言的特点是:引用它的人,通常都在引用完之后继续对骂。某种意义上,这是互联网上自我矛盾最密集的一句话之一。


05 /

围观群众的涌入

消息不知从哪里传出去的。接下来发生的事情,只能用"开闸"来形容。各路网友纷纷赶到现场:

慕名而来,合影留念
@Kamishirasawa-keine
豪死我了
@VanillaNahida
这期神完了🤣
@Blueteemo
见证互联网多样性
@rong-xiaoli
到此一游
@Kamishirasawa-keine
轻松绷住
@wfqefwqf
合影合影
@pwupink
大家好,出来遛狗来了
@Quirrel-zh
骂轻了
@Sisyphbaous-DT-Project

有个叫 EterUltimate 的用户留下了一段看似正常的问候,仔细看发现是一段提示词注入攻击——大概是把评论区里某个 AI 助手机器人当成了目标。在这个战场上,连路过的黑客都在玩梗。

Contributor Sisyphbaous-DT-Project 留下了本次事件最精辟的一条评论:

感觉大家都在骂他的为人,骂他的语气,骂他没有按照规范写描述,但就是没有人仔细看看他的 PR 和 issue,其实你要是仔细看看的话,你就会发现……你其实骂轻了。— @Sisyphbaous-DT-Project,Contributor

06 /

时间线回顾

D-DAY · 提交
PR #8590 开张,commit message:"Fixed all the issues I created."
几小时后 · 升级
标题改为"跨shi代的shi诗级的伟大的更新",陆续塞入 114514、Telegram置顶、SSL证书等改动
9小时前 · 引爆点
Member advent259141 关闭 PR,礼貌劝退
7小时前 · 爆炸
bytecategory 大反击,"滚回墙内""你连Markdown都不会"等名句诞生
6小时前 · 围观
数十名路人涌入,评论区变成合影现场
1小时前 · 终局
AstrBotDevs 官方将 PR 评论区加锁,仅协作者可评论

07 /

其实吧……

平心而论,抛开所有的闹剧:这位老哥最初发现的 Bug 是真实的,修法大致也没问题。

Gemini Code Assist 指出了一个他确实存在的技术隐患:他把参数 llm_compress_keep_recent_ratio 改名成 llm_compress_keep_recent,但没有同步更新调用这个参数的 ContextManager,会导致 AttributeError。他在评论里否认了这个问题,但没有给出代码层面的反证。

技术上的对与错,其实是可以讨论的。但他选择了另一条路。

Contributor Waterwzy 说得最准:30 步虽然没有严格依据,但有限制意义;114514 等于没有上限,且是在正式源代码里玩梗——这是整件事最核心的问题。

最后,bytecategory 那个关于"永远不会和傻逼对骂"的引用,在整个事件里显得格外应景——不是因为他说得对,而是因为他说完之后做了什么。

Fixed all the issues I created.
     — commit message, bytecategory
他说的是代码。
但读完整件事,你会觉得这句话的适用范围,可能比他想的要广一点。

本文基于 GitHub 公开评论整理,所有引用均为原文或略有缩减,如有出入欢迎指正。
   原始 PR:AstrBotDevs/AstrBot #8590

💬 Kisa Family 讨论组

加载中...

群贤毕至

访客