核心执行引擎(Query Loop)对比分析
2026/4/27大约 2 分钟
核心执行引擎(Query Loop)对比分析
1. Claude Code (claude-code-rev)
Claude Code 的核心是一个高度定制化的 while(true) 循环,位于 src/query.ts 和 src/QueryEngine.ts。
核心特性:
- 自定义事件流处理:不依赖标准 SDK,直接处理 Anthropic API 的原始流式输出(
message_start,content_block_delta,tool_use,message_stop)。 - 多阶段循环控制:在每一轮循环中,它会进行:
- 上下文压缩预处理:在发送请求前进行 5 层压缩。
- 并发工具执行:使用
StreamingToolExecutor并行运行工具,并实时回填tool_result。 - 思考块(Thinking Blocks)管理:显式处理模型的思考逻辑并更新终端 UI。
- 复杂错误恢复:当模型输出超出
max_output_tokens或触发特定错误时,具备reactivePTL等响应式重试机制。
2. Opencode (opencode)
Opencode 的执行逻辑主要位于 packages/opencode/src/session/processor.ts。
核心特性:
- 标准 SDK 驱动:主要利用 Vercel AI SDK (
ai库) 的streamText等功能来管理模型交互和工具调用。 - Effect 架构集成:整个执行流程被封装在
Effect的函数式框架中,具有极强的可组合性和错误处理能力(利用Effect.retry,Effect.catchAll等)。 - 消息驱动模式:同样遵循
stream -> tool_use -> tool_result -> iterate循环,但逻辑层级更清晰,将“处理结果”和“生成响应”解耦得更彻底。
3. 对比总结
| 维度 | Claude Code | Opencode |
|---|---|---|
| 底层库 | 自研 API 封装 (Bun-based) | Vercel AI SDK |
| 循环逻辑 | 命令式 while(true) + 事件监听 | 函数式 Effect 管道 |
| 细粒度控制 | 极高(手动管理每个 content block) | 较高(依赖 SDK 提供的 Hooks) |
| 可扩展性 | 模块化但紧耦合 | 基于 Effect 的松耦合架构 |
Claude Code 倾向于极致的底层控制和 Prompt Cache 优化;而 Opencode 则更强调工程上的整洁度和利用成熟的社区方案。