query loop

Query Loop 是 Claude Code 的核心执行引擎,基于 JavaScript 异步生成器实现。

设计理念

传统的请求-响应模式存在问题:

  • 用户需要等待完整响应

  • 无法实时看到进度

  • 难以实现中断

异步生成器解决了这些问题:

  • 逐 token 流式输出

  • 实时显示工具执行

  • 支持随时中断

核心实现

函数签名

async function* query(
  messages: Message[],
  tools: Tool[],
  options: QueryOptions
): AsyncGenerator<QueryEvent, void, unknown>

参数:

  • messages - 对话历史

  • tools - 可用工具列表

  • options - 配置选项(model, temperature, etc.)

返回: 异步生成器,yield 各种事件

事件类型

执行流程

1

初始化阶段

2

流式响应阶段

3

工具执行阶段

4

继续对话阶段

关键特性

流式输出

用户可以实时看到 AI 的思考过程:

并发工具执行

多个工具可以同时执行:

限制:

  • 最多 5 个工具并发

  • 写操作串行执行

  • 错误会级联中断

中断处理

用户可以随时按 Ctrl+C 中断:

性能优化

Token 预算管理

缓存优化

预测性执行

错误处理

分层错误处理

重试策略

  • API 错误: 指数退避,最多 3 次

  • 工具错误: 返回错误信息给 AI,让其调整

  • 权限拒绝: 等待用户确认

实际示例

简单查询

多轮对话

与其他系统的集成

与 Tool System 集成

与 State 集成

与 UI 集成

下一步

  • 了解 状态管理 的实现

  • 探索 消息流转 的细节

  • 查看 System Prompt 的构建