跳到主要内容

引擎循环

源码: QueryEngine.ts (47KB)

1. 核心引擎

QueryEngine.ts 是 Claude Code 的心脏。它执行 模型调用 → 工具调用 → 结果回灌 的循环。

2. 工具循环流程

用户输入


┌──────────────────────┐
│ 构建消息列表 │
│ (system + user + history) │
└──────────┬───────────┘


┌──────────────────────┐
│ 调用 Claude API │
│ (streaming response) │
└──────────┬───────────┘


解析响应

┌─────┴─────┐
│ │
[纯文本] [工具调用]
│ │
↓ ↓
输出给用户 权限检查

┌─────┴─────┐
│ │
[允许] [拒绝]
│ │
↓ ↓
执行工具 返回拒绝消息


工具结果


回灌给模型


继续循环

└→ 无更多工具调用 → 结束

3. 关键方法

class QueryEngine {
// 主执行方法
async execute(systemPrompt: string, input: string, config: QueryConfig): Promise<void>

// 工具调用
async callTool(toolName: string, input: unknown): Promise<ToolResult>

// 模型调用
async callModel(messages: Message[]): Promise<ModelResponse>

// 流式处理
async handleStreamingResponse(response: ModelResponse): Promise<void>

// 权限检查
async checkPermission(toolName: string, input: unknown): Promise<PermissionResult>
}

4. 状态追踪

引擎内部维护以下状态:

class QueryEngine {
private messages: Message[] // 对话历史
private discoveredSkillNames: Set<string> // 已发现的技能
private loadedNestedMemoryPaths: Set<string> // 已加载的记忆路径
// ...
}

上一节:查询编排 | 下一节:Token 预算