[吐槽] OpenCode 惊现 两年虫 大 bug,线上业务几千个会话在同一时间一起炸了...

12 天前
 twursc

我司有一个在线对话+开发的平台,是基于 opencode acp 实现的。

昨天晚上刚准备下班,就看到业务群里有一大波反馈,说对话消息不回复了,但创建新的会话就能恢复正常。与此同时我本地的 opencode 开发任务似乎也不回复了。

仔细排查了半天容器日志和 opencode 会话日志,发现是 opencode 在七点之后生成的 message ID 竟然比之前小,ID 生成器轮转了,而 opencode 的 message.latest() 是基于最大的 message ID 来找的。这就导致新消息发出去之后,获取的最新用户消息仍然是七点前的消息,导致对话不能正常工作了。。

结合代码发现确实如此,message id 中的时间戳是被截断之后存进 buffer 的,最多只能存 2^36ms ~= 795 天,大概两年,刚好在昨天 (8.14) 晚上 19:19 会发生轮转msg_id 会从 msg_ffff 变成 msg_0000

let now = BigInt(currentTimestamp) * BigInt(0x1000) + BigInt(counter)
now = direction === "descending" ? ~now : now
const timeBytes = Buffer.alloc(6)   // MessageID 只存了时间戳的 48 位
for (let i = 0; i < 6; i++) {
  timeBytes[i] = Number((now >> BigInt(40 - 8 * i)) & BigInt(0xff))
}

准备提 issue 的时候发现已经有老哥也踩到坑了,看起来官方也已经修了:

https://github.com/anomalyco/opencode/issues/42583

但还是不理解为啥 opencode 要对时间戳做截断,官方似乎也没有对这个 bug 发更新通知,更重要的是如果当时任务在循环里,会一直无限重试,把 token 额度用光。

不知道有没有 V 友也遇到这个问题的,感觉多少有点草台班子了,orz

4130 次点击
所在节点    程序员
20 条回复
yidinghe
12 天前
太可怕了。这个用最新的大模型去排查,不知道能不能排掉。
isbase
12 天前
这个软件质量确实非常一般,我现在用 pi 代替它
twursc
12 天前
@yidinghe 就是发现 msg_id 不对劲之后用 AI 扫了一遍源码确认的 bug ,用的 ds v4 flash ,还是很好使的
twursc
12 天前
@isbase 是的,opencode 本身就很多 bug ,我们是内部维护了一个 fork ,提前修了一批官方还没来的修的 bug ,然后定期 follow 官方的最新版本。但这次还是给我们整了个措手不及
lqbk
12 天前
很好奇 “在线对话+开发的平台” 这个平台主要用途是啥。
twursc
11 天前
@lqbk 我们提供云环境和模型,研发可以用自己的 git 仓库创建任务,然后在平台上直接开发,不用本地电脑,也不用自己配模型,开发完可以在线预览以及把代码推回 git 进行部署。有 saas 版 https://monkeycode-ai.com/ 可以了解下
INCerry
11 天前
opencode 俗称 bugcode ,话说楼主提 pr 修复了吗?感觉我也快遇到这个问题了
kera0a
11 天前
opencode 的代码也不可能是人写的呀,这个"特性"不知道 ai 从哪学的,测试又很难测出来
twursc
11 天前
@INCerry 官方修复了所以我们没另外修,你可以更新 opencode 试试,如果还遇到的话就 /new 一下好了
twursc
11 天前
@kera0a 是的,他们也可能没有好好 review ,用个好的的模型 review 或许都能发现
wKong753900
11 天前
修了吗?是不是最新版还没发?
twursc
11 天前
@wKong753900 官方说 1.18.15 修了,已经发了
wKong753900
11 天前
@twursc OK ,谢谢
vance123
11 天前
为什么用 opencode 而不是 codex 或 pi ?
twursc
11 天前
@vance123 半年前选的,当时还没有 pi ,在这之前用的是 claude 和 codex ,但因为这俩不直接开源,opencode 开源比较好自己定制,所以选了 opencode
dragondove
11 天前
@vance123 codex 也不是没有问题,磁盘耗尽的问题也没过去多久吧,还有大量图片复制的问题( base64 存储图片)。
vance123
11 天前
我们选了开源的 codex ,存储是自己实现的,没交给 codex 管理. 没选择 pi 是因为 pi 的扩展功能比如 subagent 等基本都是社区实现,担心社区没法长期维护
twursc
10 天前
@vance123 你们也是类似的对话平台吗
vance123
10 天前
差不多, 不过不是面向开发者
catamaran
10 天前
@twursc #6 cait

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1234574

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX