Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

模型: gpt-5.4 (openai/gpt-5.4) 生成日期: 2026-04-01 书名: Claude Code VS OpenCode:架构、设计与未来 章节: 第5章 — 会话与上下文管理 Token消耗: 约 18,000 input + 4,000 output(估算)

5.2 消息结构

消息结构决定了智能体“如何理解自己说过什么、做过什么、还剩什么”。很多人把消息想成一串文本,但在编码智能体里,消息其实更像带类型的操作记录。它不仅包含自然语言,还包含推理片段、工具调用、文件附件、快照、补丁以及压缩标记。消息结构越精细,系统越容易恢复上下文、做差量处理和追踪执行历史。

OpenCode 的代表实现是 MessageV2。从 /packages/opencode/src/session/message-v2.ts 可见,它把一条消息拆成多个 part,常见类型包括 textreasoningtoolfilesnapshotpatch,还包括 compactionsubtaskstep-startstep-finish 等。这里体现的是一种多部分消息模型:用户和助手只是外层容器,真正重要的是内部 part。这样设计的好处是,系统可以单独压缩旧工具输出、保留 patch 哈希、记录某次 step 的 token/cost,也可以在恢复时精准知道“这段是推理,那段是文件,那次是工具结果”。

Claude Code 的中心类型则是 TranscriptMessage。在 src/types/logs.ts 中,它本质上是 SerializedMessage 再加上 parentUuidlogicalParentUuidisSidechain 等恢复字段。也就是说,Claude Code 的重点不是把“消息内部零件”拆得极细,而是把“消息之间的链路”保存得很强。它像一串可追溯的链表:一条消息接上一条消息,再叠加 compact boundary、title、tag、worktree-state 等外围记录,形成完整 transcript。

这也带来两种不同的工程哲学。OpenCode 更像“语义块导向”,先问一条消息由哪些部分组成;Claude Code 更像“日志回放导向”,先问一条记录在链路中的位置是什么。前者适合插件在 message transform、tool prune、summary 注入等位置做细粒度改写;后者适合大规模追加写入与会话回放。

用户要求解释的“扩展思维”,可以理解为 Anthropic 体系里常说的 extended thinking。它不是教科书中的经典名词,更像产品化推理暴露层:模型在正式输出前,会产生 thinkingredacted_thinking 这类内容块,系统还会用 budget_tokens 控制它能花多少推理预算。通俗地说,扩展思维就是“允许模型先在内部写草稿,再给用户答案”的运行模式。OpenCode 把这类内容明确存成 reasoning part;Claude Code 则更多以消息内容块和 API 预算参数来承接。

另一个需要解释的术语是 JSONL。JSONL 不是数据库,也不是单个 JSON 文档,而是 JSON Lines:一行一个 JSON 记录,天然适合追加。它像财务流水,而不是一份总账快照。Claude Code 采用它,意味着任何 user、assistant、summary、compact boundary、tag 都能作为独立事件写入磁盘;恢复时再把这些事件重新拼成可继续运行的会话状态。

OMO 在消息结构上基本继承 OpenCode,但它更强调“消息之外的工作协议”。比如 todo、任务同步、恢复提示、钩子注入,本质上都在给消息结构补充“执行约束”。因此,Agent 设计的关键经验是:不要只设计消息内容,还要设计消息可被恢复、压缩、审计和续接的形状。聊天系统用字符串够了,工作系统不够。