• 请不要在回答技术问题时复制粘贴 AI 生成的内容
twursc
V2EX  ›  程序员

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

  •  
  •   twursc · 1 day ago · 3150 views

    我司有一个在线对话+开发的平台,是基于 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

    19 replies    2026-08-16 18:58:48 +08:00
    yidinghe
        1
    yidinghe  
    PRO
       1 day ago
    太可怕了。这个用最新的大模型去排查,不知道能不能排掉。
    isbase
        2
    isbase  
    PRO
       1 day ago via iPad
    这个软件质量确实非常一般,我现在用 pi 代替它
    twursc
        3
    twursc  
    OP
       1 day ago
    @yidinghe 就是发现 msg_id 不对劲之后用 AI 扫了一遍源码确认的 bug ,用的 ds v4 flash ,还是很好使的
    twursc
        4
    twursc  
    OP
       1 day ago
    @isbase 是的,opencode 本身就很多 bug ,我们是内部维护了一个 fork ,提前修了一批官方还没来的修的 bug ,然后定期 follow 官方的最新版本。但这次还是给我们整了个措手不及
    lqbk
        5
    lqbk  
       1 day ago
    很好奇 “在线对话+开发的平台” 这个平台主要用途是啥。
    twursc
        6
    twursc  
    OP
       1 day ago
    @lqbk 我们提供云环境和模型,研发可以用自己的 git 仓库创建任务,然后在平台上直接开发,不用本地电脑,也不用自己配模型,开发完可以在线预览以及把代码推回 git 进行部署。有 saas 版 https://monkeycode-ai.com/ 可以了解下
    INCerry
        7
    INCerry  
       1 day ago
    opencode 俗称 bugcode ,话说楼主提 pr 修复了吗?感觉我也快遇到这个问题了
    kera0a
        8
    kera0a  
       1 day ago via iPhone
    opencode 的代码也不可能是人写的呀,这个"特性"不知道 ai 从哪学的,测试又很难测出来
    twursc
        9
    twursc  
    OP
       1 day ago
    @INCerry 官方修复了所以我们没另外修,你可以更新 opencode 试试,如果还遇到的话就 /new 一下好了
    twursc
        10
    twursc  
    OP
       1 day ago
    @kera0a 是的,他们也可能没有好好 review ,用个好的的模型 review 或许都能发现
    wKong753900
        11
    wKong753900  
       1 day ago
    修了吗?是不是最新版还没发?
    twursc
        12
    twursc  
    OP
       1 day ago
    @wKong753900 官方说 1.18.15 修了,已经发了
    wKong753900
        13
    wKong753900  
       1 day ago
    @twursc OK ,谢谢
    vance123
        14
    vance123  
       22h 33m ago via iPhone
    为什么用 opencode 而不是 codex 或 pi ?
    twursc
        15
    twursc  
    OP
       22h 14m ago
    @vance123 半年前选的,当时还没有 pi ,在这之前用的是 claude 和 codex ,但因为这俩不直接开源,opencode 开源比较好自己定制,所以选了 opencode
    dragondove
        16
    dragondove  
       22h 7m ago
    @vance123 codex 也不是没有问题,磁盘耗尽的问题也没过去多久吧,还有大量图片复制的问题( base64 存储图片)。
    vance123
        17
    vance123  
       9h 24m ago via iPhone
    我们选了开源的 codex ,存储是自己实现的,没交给 codex 管理. 没选择 pi 是因为 pi 的扩展功能比如 subagent 等基本都是社区实现,担心社区没法长期维护
    twursc
        18
    twursc  
    OP
       2h 19m ago
    @vance123 你们也是类似的对话平台吗
    vance123
        19
    vance123  
       1h 25m ago
    差不多, 不过不是面向开发者
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2772 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:23 · PVG 20:23 · LAX 05:23 · JFK 08:23
    ♥ Do have faith in what you're doing.