从源码看 Qwen Code 的设计思路

简介: Qwen Code 是基于AI Agent的智能编程助手,采用模块化分层架构。其核心为可循环执行的Agent对话机制,协调用户输入、大模型推理与工具调用,支持Plan/Default/Auto-edit/YOLO四种执行模式,并集成子智能体、MCP协议及会话管理等服务。本文将从源码角度来解析其设计思路。

1 项目概述项目概述

Qwen Code 是一个基于 AI Agent 的智能编程助手,采用模块化分层架构设计。核心是一个AI Agent 对话循环,持续协调用户输入、大语言模型(LLM)推理和工具执行,直到任务完成。

项目代码仓库:https://github.com/QwenLM/qwen-code.git

开发者指南: https://qwenlm.github.io/qwen-code-docs/zh/developers/architecture/

2 整体架构设计



2.1 架构分层


2.2 模块职责说明

层级

模块

职责

路径

客户端层


CLI Package

命令行客户端,提供交互式 UI、ACP 服务端、Session 管理

packages/cli

VSCode Plugin

VSCode 扩展,ACP 客户端,通过 JSON-RPC 调用 CLI

packages/vscode-ide-companion

Zed Extension

Zed 编辑器扩展,ACP 客户端

packages/zed-extension

SDK (TS/Java)

程序化接口,通过进程通信(JSON Lines)调用 CLI

packages/sdk-typescript

packages/sdk-java

核心引擎层


Agent Loop

核心对话循环,协调用户输入、模型响应、工具执行

packages/core/src/core/

Tool System

工具注册表和执行系统

packages/core/src/tools/

Tool Scheduler

工具调度器,管理工具调用状态机

packages/core/src/core/coreToolScheduler.ts

Subagent System

子智能体管理系统,支持任务分解和嵌套 Agent Loop

packages/core/src/subagents/

Config

核心配置管理器,连接所有核心组件的桥梁

packages/core/src/config/

Services

核心服务:会话记录、循环检测、对话压缩

packages/core/src/services/

Extension System

扩展系统,支持 MCP 服务器、自定义工具和子智能体

packages/core/src/extension/


2.3 客户端集成方式对比


客户端

通信方式

协议格式

使用场景

特点

CLI 交互式

直接方法调用

N/A

终端命令行使用

Ink UI,实时交互

VSCode/Zed

进程通信

ACP (JSON-RPC)

IDE 编辑器集成

Webview UI,双向通信

SDK

进程通信

JSON Lines

程序化集成、自动化

可嵌入 MCP 服务器


3 核心流程详解



3.1 交互流程

从用户输入到最终响应的完整交互流程:


3.2 Agent Loop 执行流程


Agent Loop 是 Qwen Code 的核心对话循环机制,负责协调用户输入、模型响应、工具执行之间的交互,直到任务完成。

3.2.1 Agent Loop 入口触发条件

Agent Loop 在以下情况下被触发:

  • 用户发送消息时:当用户通过 CLI 输入问题或命令时,调用 GeminiClient.sendMessageStream() 方法进入 Loop

  • 工具执行结果需要继续对话时:当工具执行完成后,将工具结果作为新的用户消息重新进入 Loop

  • 模型主动要求继续时:通过 checkNextSpeaker 检测到模型需要继续发言时,递归调用 sendMessageStream

3.2.2 详细执行流程


3.2.3 详细步骤说明


步骤 1: 入口检查 (sendMessageStream)

  • 检查会话 Turn 数是否超过 maxSessionTurns 限制
  • 检查 Token 数是否超过 sessionTokenLimit 限制
  • 确保不超过硬编码的最大轮数 MAX_TURNS(默认 100)
  • 创建 Turn 实例,传入 chat 会话和 prompt_id

步骤 2: Turn 执行 (Turn.run)

  • 构建请求消息,包含:
  • 用户输入内容
  • 对话历史记录
  • 可用工具定义(function declarations)
  • 系统提示(system prompt)
  • 调用模型 API(Gemini/Qwen/Anthropic)
  • 接收流式响应,逐块解析

步骤 3: 响应处理

  • 文本内容:通过 yield 发送 Content 事件,实时展示给用户
  • 工具调用:收集
  • name: 工具名称
  • args: 工具参数
  • id: 调用 ID(用于匹配响应)
  • 完成信号:记录 finishReason(STOP、MAX_TOKENS、SAFETY 等)

步骤 4: 工具调用执行

  • 工具查找:通过 ToolRegistry.getTool() 根据工具名称查找对应的工具实例
  • 构建调用:调用 tool.build() 创建 ToolInvocation 对象,封装参数和执行逻辑
  • 权限检查:根据当前执行模式(ApprovalMode)决定如何处理:
  • Plan 模式
  • 如果是 exit_plan_mode 工具:显示计划确认对话框,用户可选择继续执行或取消
  • 其他工具:阻止执行,返回错误提示(Plan 模式下不允许执行普通工具)
  • Default 模式
  • 需要确认的工具:显示确认对话框等待用户批准
  • 不需要确认的工具:直接执行
  • Auto-edit 模式
  • 编辑类工具(如 write_file、edit):自动执行无需确认
  • 其他工具:需要确认
  • YOLO 模式:所有工具自动执行,无需确认
  • 执行工具:调用 invocation.execute() 执行实际逻辑
  • 返回结果:封装为 ToolResult 返回,包含执行结果或错误信息

步骤 5: 循环控制

  • 如果有工具执行结果,将结果构建为 nextMessage,继续下一轮 Loop
  • 如果没有工具调用,检查
  • 如果是 STOP,Loop 正常结束
  • 如果模型需要继续(通过 checkNextSpeaker 判断),发送 "Please continue" 继续 Loop
  • 检查是否达到最大轮数,防止无限循环


3.2.4 两种 Loop 调用方式对比

Qwen Code 中有两种 Agent Loop 的调用方式,核心 Loop 逻辑都在 packages/core/src/core/client.ts 中实现,非交互式模式通过 packages/cli/src/nonInteractiveCli.ts 再进行了一次包装适配。

特性

Core 层 Loop (client.ts)

非交互式包装 Loop (nonInteractiveCli.ts)

实现方式

递归调用 sendMessageStream

while 循环包装递归调用

使用场景

交互式终端、直接 API 调用

IDE 集成、SDK 集成、非交互式模式

通信协议

直接方法调用

JSON Lines 或 ACP (JSON-RPC)

流式输出

直接通过 AsyncGenerator

通过 Adapter 转换为 JSON Lines/ACP 通知

权限处理

终端交互确认(Ink UI)

控制请求 requestPermission(通过 Control Plane)

控制平面

不需要

需要(ControlService 处理双向通信)

为什么需要非交互式包装?非交互式包装的核心目的是将直接 API 调用转换为进程间通信协议

  • 协议适配:将内部 AsyncGenerator 事件转换为 JSON 格式输出,让 IDE/SDK 能解析

  • 控制平面:IDE 集成需要双向通信(权限请求、模式切换、中断控制等)

关系对比:


交互式 CLI ──→ 直接调用 sendMessageStream() ──→ Core Agent Loop (递归)                   
非交互式 CLI ──→ while 循环包装 ──→ 协议转换/控制平面

Core 层 Loop 伪代码:

# client.ts
 async function* sendMessageStream(request, turns = MAX_TURNS):
    // 1. 检查限制
    if exceedMaxTurns() or exceedTokenLimit():
        yield { type: 'MaxSessionTurns' } / { type: 'SessionTokenLimitExceeded' }
        return turn

    // 2. 执行 Turn
    turn = new Turn(chat, prompt_id)
    for event in turn.run(model, request):
        yield event  // Content, ToolCallRequest, Error 等

    // 3. 检查是否需要继续(模型主动要求继续)
    if no pending tools and not aborted:
        nextSpeaker = checkNextSpeaker()
        if nextSpeaker == 'model':
            // 递归调用,turns - 1
            yield* sendMessageStream([{ text: 'Please continue.' }], turns - 1)

    return turn


非交互式 Loop 伪代码:


# nonInteractiveCli.ts
async function runNonInteractive(userInput):
    currentMessages = [{ role: 'user', parts: userInput }]
    
    while true:
        turnCount++
        if turnCount > maxSessionTurns:
            handleMaxTurnsExceededError()
        
        // 调用核心层的递归 Loop
        responseStream = geminiClient.sendMessageStream(...)
        

        toolCallRequests = [ ]

        
        // 处理流式响应,转换为 JSON Lines
        for await (event of responseStream):
            adapter.processEvent(event)  // 转换为 JSON 输出
            if event.type == 'ToolCallRequest':
                toolCallRequests.push(event.value)
        
        // 执行工具调用
        if toolCallRequests.length > 0:

            toolResponseParts = [ ]

            for request in toolCallRequests:
                // 可能需要通过 Control Plane 请求权限
                response = await executeToolCall(config, request, abortSignal)
                toolResponseParts.push(...response.responseParts)
            
            // 工具结果作为下一轮输入
            currentMessages = [{ role: 'user', parts: toolResponseParts }]
            // ← 继续 while 循环
        else:
            // 没有工具调用,Loop 结束
            adapter.emitResult({ isError: false, numTurns: turnCount })
            return

3.2.5 Loop 退出条件详解

退出条件

触发时机

返回值/行为

正常完成

没有待执行工具且 finishReason == 'STOP'

stopReason: 'end_turn'

达到最大 Turn 数

sessionTurnCount > maxSessionTurns

type: MaxSessionTurns

单次请求达到最大轮数

turns <= 0

返回当前 Turn

Token 限制

lastPromptTokenCount > sessionTokenLimit

type: SessionTokenLimitExceeded

用户取消

signal.aborted == true

stopReason: 'cancelled'

模型返回 STOP

finishReason == 'STOP'

Loop 正常结束

发生错误

event.type == 'Error'

返回当前 Turn,携带错误信息

检测到循环

loopDetector.addAndCheck() == true

阻止重复执行

安全拦截

内容被安全过滤器拦截

type: SafetyBlocked


4 核心模块详解



4.1 CLI 模块 (packages/cli)

CLI 模块是用户的主要交互入口,负责命令解析、界面渲染、会话管理和配置设置。

4.1.1 控制平面 (Control Plane)

控制器列表:

  • SystemController: 处理初始化、中断、模型设置、命令查询

  • PermissionController: 处理工具权限请求和权限模式设置

  • SdkMcpController: 处理 MCP 服务器状态管理

4.1.2 ACP 通信系统

ACP (Agent Client Protocol) 实现 IDE 与 Qwen Code CLI 之间的双向通信,基于 JSON-RPC 2.0 协议。核心文件:

  • packages/cli/src/acp-integration/ 
  • packages/vscode-ide-companion/

ACP 消息通信流程:

4.2 Core 模块 (packages/core)

Core 模块是业务逻辑核心,提供 API 客户端、提示构建、工具注册与执行、状态管理等功能。

4.2.1 Agent Loop 与 Tools/Subagent 衔接

Subagent 的实现是一种特殊的 tools。

4.2.2 工具系统

工具系统是 Qwen Code 的核心能力之一,采用注册表模式实现工具的动态发现、注册和执行。系统主要由三个核心组件构成:ToolRegistry(工具注册表)、CoreToolScheduler(工具调度器)和各类 Tool(工具实现)。核心文件位置:

  • 工具注册表
    packages/core/src/tools/tool-registry.ts

  • 工具调度器
    packages/core/src/core/coreToolScheduler.ts

  • 工具实现
     packages/core/src/tools/

4.2.2.1 工具系统图


4.2.2.2 工具定义与分类

Qwen Code 中的工具分为三大类:

工具类型

说明

示例

注册方式

内置工具

核心功能工具,随系统启动自动注册

read_file, write_file, shell, edit

代码硬编码注册

MCP 工具

通过 MCP 协议连接的外部工具

数据库查询、API 调用、文件系统

动态发现

子智能体工具

特殊的工具类型,触发嵌套 Agent Loop

@code-reviewer, @security-audit

配置注册

内置工具列表:

工具名称

功能

是否需要确认

适用模式

read_file

读取文件内容

所有

write_file

写入文件内容

是(Default)

Default/Auto-edit/YOLO

edit

编辑文件内容

是(Default)

Default/Auto-edit/YOLO

ls

列出目录内容

所有

grep

文本搜索

所有

shell

执行 Shell 命令

Default/Auto-edit/YOLO

web_search

网络搜索

所有

web_fetch

获取网页内容

所有

task

任务管理

所有

todoWrite

待办事项

所有

memoryTool

记忆管理

所有

exit_plan_mode

退出规划模式

特殊处理

Plan 模式

4.2.2.3 工具注册流程


工具注册代码逻辑:


// Config.createToolRegistry 方法
async createToolRegistry(sendSdkMcpMessage) {
  const registry = new ToolRegistry(this, eventEmitter, sendSdkMcpMessage);

  // 1. 注册内置工具
  registry.registerTool(new ReadFileTool(this));
  registry.registerTool(new WriteFileTool(this));
  registry.registerTool(new ShellTool(this));
  // ... 其他内置工具

  // 2. 发现外部工具
  await registry.discoverAllTools();

  return registry;
}


4.2.2.4 工具调用&执行流程


核心步骤:

  • 模型请求工具调用 - 返回 functionCalls 数组,包含工具名称、参数、调用 ID

  • 工具查找与构建 - 从 ToolRegistry 获取工具,调用 tool.build() 创建 ToolInvocation


  • 权限检查与执行 - CoreToolScheduler 根据执行模式决定是否需要确认(详见 4.2.3 节)


  • 结果返回 - 构建 functionResponse,作为下一轮消息发送给模型

4.2.3 执行模式系统

Qwen Code 提供四种执行模式控制工具调用的权限:

模式

ID

读工具

写工具

Shell

适用场景

Plan

plan

代码审查、架构分析

Default

default

确认

确认

日常开发

Auto Edit

auto-edit

确认

大规模重构

YOLO

yolo

自动化脚本

核心代码位置:

组件

文件路径

说明

模式枚举定义

packages/core/src/config/config.ts

ApprovalMode 枚举

权限检查逻辑

packages/core/src/core/coreToolScheduler.ts

_schedule 方法中的检查

工具确认接口

packages/core/src/tools/tools.ts

shouldConfirmExecute 方法

模式切换(CLI)

packages/cli/src/ui/hooks/useGeminiStream.ts

模式切换和自动批准逻辑

模式切换(ACP)

packages/cli/src/acp-integration/session/

ACP 协议的模式设置

权限检查流程:

关键衔接点:

  • 工具定义层 - 每个工具实现 shouldConfirmExecute() 方法,返回是否需要确认

  • 调度器层 - CoreToolScheduler._schedule() 调用 shouldConfirmExecute() 并根据 ApprovalMode 决定行为

  • 配置层 - Config.getApprovalMode() 提供当前模式,Config.setApprovalMode() 切换模式

  • UI 层 - 用户通过命令或快捷键切换模式,触发 setApprovalMode()


Plan 模式特殊机制:当处于 Plan 模式时,Agent 可以使用 exit_plan_mode 工具来提交计划并退出规划模式。

4.2.4 子智能体系统

子智能体系统是 Qwen Code 实现任务分解和专业化处理的核心机制。通过子智能体,可以将复杂任务拆分为多个子任务,由专门的智能体并行或串行处理,最后汇总结果。

核心代码位置:

组件

文件路径

说明

子智能体管理器

packages/core/src/subagents/subagent-manager.ts

SubagentManager 类,管理子智能体配置

子智能体执行环境

packages/core/src/subagents/subagent.ts

SubAgentScope 类,隔离执行环境

子智能体工具

packages/core/src/tools/task.ts

TaskTool 类,作为工具被调用

子智能体类型定义

packages/core/src/subagents/types.ts

配置、事件、钩子等类型定义

内置子智能体

packages/core/src/subagents/builtin-agents.ts

内置子智能体注册表

关键衔接点:

  • 工具层衔接 - TaskTool 作为普通工具注册到 ToolRegistry

  • 管理器层衔接 - Config.getSubagentManager() 提供子智能体管理器实例

  • 执行层衔接 - SubAgentScope.create() 创建隔离环境,启动嵌套 Agent Loop

  • 配置层衔接 - 子智能体配置文件(.qwen/agents/*.md)通过 SubagentManager 加载

子智能体调用流程:

常见场景:

  • 代码审查:专门的审查智能体,只读模式,检查代码质量

  • 安全审计:扫描安全漏洞,生成安全报告

  • 多智能体并行:前端、后端、测试智能体并行处理复杂任务

4.2.4.1 子智能体系统架构

关键特性:

  • 隔离的配置和工具集

  • 独立的系统提示词

  • 可配置的执行限制

  • 结果以自然语言返回

4.2.5 MCP 系统集成

MCP (Model Context Protocol) 是一个开放协议,用于标准化 AI 模型与外部工具、数据源之间的集成。

4.3 SDK 模块

4.3.1 TypeScript SDK 架构

SDK 采用进程间通信(IPC)方式与 Qwen Code CLI 交互:

4.3.2 SDK 与 ACP 协议对比

对比维度

SDK 集成方式

ACP 协议方式

通信方式

进程间通信(stdin/stdout)

进程间通信(stdin/stdout)

协议格式

JSON Lines(自定义消息格式)

JSON-RPC 2.0

消息类型

SDKMessage(user/assistant/system/result/stream_event)

ACP Message(request/response/notification)

控制平面

Control Request/Response

ACP Methods

初始化方式

发送 initialize 控制请求

JSON-RPC initialize 方法调用

权限处理

SDK 提供 canUseTool 回调函数

ACP requestPermission 方法

MCP 支持

SDK 可嵌入 MCP 服务器

ACP 原生支持 MCP 服务器配置

使用场景

程序化集成、脚本自动化

IDE 集成、编辑器插件

4.3.3 Java SDK 双模式支持

Java SDK 提供两套独立的 API:

4.4 VSCode IDE Companion


VSCode 插件提供 IDE 内嵌聊天界面、文件和编辑器集成、ACP 协议通信等功能。


5 模块间数据流向



5.1 完整数据流向

5.2 关键对接点

对接方向

接口/协议

说明

VSCode ↔ CLI

ACP (JSON-RPC)

IDE 通过 ACP 协议调用 CLI

SDK ↔ CLI

JSON Lines

SDK 通过进程通信调用 CLI

CLI ↔ Core

直接方法调用

CLI Session 直接调用 Core GeminiChat

Core ↔ Model

ContentGenerator

模型 API 抽象层

Core ↔ Tool

ToolRegistry

工具注册与查找

Tool ↔ Execute

CoreToolScheduler

工具调度执行


6 核心服务系统



6.1 会话记录服务 (ChatRecordingService)

会话记录服务负责将对话历史持久化到磁盘,支持会话恢复和审计。核心文件: packages/core/src/services/chatRecordingService.ts

6.1.1 存储格式

采用 JSONL (JSON Lines) 格式,每行一条记录:

interface ChatRecord {
  uuid: string; // 记录唯一标识
  parentUuid: string | null; // 父记录 UUID(树形结构)
  sessionId: string; // 会话 ID
  timestamp: string; // ISO 8601 时间戳
  type: 'user' | 'assistant' | 'tool_result' | 'system';
  subtype?:
    | 'chat_compression'
    | 'slash_command'
    | 'ui_telemetry'
    | 'at_command';
  cwd: string; // 工作目录
  version: string; // CLI 版本
  gitBranch?: string; // Git 分支
  message?: Content; // API 格式的消息内容
  usageMetadata?: GenerateContentResponseUsageMetadata;
  model?: string;
  toolCallResult?: Partial<ToolCallResponseInfo>;
  systemPayload?: Record<string, unknown>;
}


存储位置:~/.qwen/tmp/<project_id>/chats/<session_id>.jsonl


6.1.2 核心方法

方法

功能

写入时机

recordUserMessage

记录用户输入

立即写入

recordAssistantTurn

记录模型响应

Turn 结束后

recordToolResult

记录工具执行结果

工具执行完成

recordChatCompression

记录对话压缩检查点

压缩完成后

recordSlashCommand

记录斜杠命令

命令执行后

recordUiTelemetryEvent

记录 UI 遥测事件

事件发生时

recordAtCommand

记录 @ 命令

命令执行后

6.2 循环检测服务 (LoopDetectionService)

循环检测服务防止 AI 陷入无限循环,通过多种策略检测重复模式。核心文件: packages/core/src/services/loopDetectionService.ts


6.2.1 检测策略

策略

检测目标

阈值

触发条件

工具调用循环检测

连续相同的工具调用

5 次

相同工具名称和参数重复 5 次

内容循环检测

重复的文本内容

10 次(50 字符块)

相同文本块在短距离内重复

LLM 辅助循环检测

认知循环、无进展状态

置信度 > 0.9

30 轮后每 3-15 轮检查一次

6.2.2 工具调用循环检测

// 检测逻辑
private checkToolCallLoop(toolCall: { name: string; args: object }): boolean {
  const key = this.getToolCallKey(toolCall); // SHA256 哈希
  if (this.lastToolCallKey === key) {
    this.toolCallRepetitionCount++;
  } else {
    this.lastToolCallKey = key;
    this.toolCallRepetitionCount = 1;
  }
  return this.toolCallRepetitionCount >= TOOL_CALL_LOOP_THRESHOLD; // 5
}

6.2.3 内容循环检测

采用滑动窗口算法:

  1. 将流式文本分割为固定大小的块(50 字符)

  2. 对每个块计算 SHA256 哈希

  3. 跟踪相同哈希出现的位置

  4. 当相同块在短距离内重复 10 次时触发

特殊处理:


  • 代码块内容不检测(避免误报)


  • 表格、列表、标题等结构化内容重置检测

6.2.4 LLM 辅助循环检测

当对话超过 30 轮后,定期调用 LLM 分析最近 20 轮对话:

// 系统提示词(简化)
const LOOP_DETECTION_SYSTEM_PROMPT = `
你是一个专业的 AI 诊断智能体,负责识别对话是否陷入无进展状态。

无进展状态的特征:
1. 重复操作:重复相同的工具调用或响应
2. 认知循环:无法确定下一步,反复询问相同问题
3. 无净变化:在文件间循环但没有实质进展

请区分真正的循环和合理的增量进展。
`;

// 返回格式
{
  reasoning: string; // 推理过程
  confidence: number; // 0.0-1.0 的置信度
}


动态调整检查间隔:

  • 高置信度(> 0.9):触发循环检测

  • 中等置信度:缩短检查间隔(5 轮)

  • 低置信度:延长检查间隔(15 轮)

6.3 对话压缩服务 (ChatCompressionService)

对话压缩服务在对话历史过长时自动压缩,减少 Token 消耗。核心文件: packages/core/src/services/chatCompressionService.ts

6.3.1 压缩触发条件

条件

默认值

说明

Token 阈值

70% 上下文窗口

超过此阈值触发自动压缩

保留比例

30%

保留最近 30% 的对话历史

强制压缩

用户手动触发

忽略阈值,强制执行压缩

6.3.2 压缩流程

6.4 会话管理服务 (SessionService)

会话管理服务提供会话的列表、加载、保存、删除等操作。核心文件: packages/core/src/services/sessionService.ts

6.4.1 核心功能

功能

方法

说明

列出会话

listSessions()

列出所有可用会话

加载会话

loadSession(sessionId)

从磁盘加载会话历史

保存会话

saveSession()

保存当前会话(自动)

删除会话

deleteSession(sessionId)

删除指定会话

重建历史

buildApiHistoryFromConversation()

从记录重建 API 历史

重放遥测

replayUiTelemetryFromConversation()

重放 UI 遥测事件

6.4.2 会话恢复流程


7 总结



Qwen Code 采用清晰的两层架构设计:

  1. 客户端层 - 提供多种接入方式(CLI 交互式、VSCode/Zed IDE 集成、SDK 程序化调用)

  2. 核心引擎层 - 共享的 Agent Loop、工具系统、子智能体系统、核心服务

核心设计特点:

  • Agent Loop - 核心对话循环,协调用户输入、模型响应、工具执行

  • 多客户端支持 - CLI 直接调用、IDE 通过 ACP 协议、SDK 通过进程通

  • 工具注册表模式 - 动态发现和加载工具(内置、MCP、命令行发现)

  • 执行模式控制 - Plan/Default/Auto-edit/YOLO 四种权限策略

  • 核心服务系统 - 会话记录、循环检测、对话压缩等关键能力

  • 子智能体系统 - 支持任务分解和嵌套执行

  • MCP 集成 - 扩展外部工具生态

关键数据流:

客户端(CLI/IDE/SDK)→ Session  Agent Loop  模型 API
 工具调用  CoreToolScheduler  权限检查  工具执行
 结果返回  继续 Loop  流式输出


客户端集成方式:


CLI 交互式 ──直接调用──→ Session  Core
VSCode/Zed ──ACP 协议──→ Session  Core
SDK 程序化 ──JSON Lines──→ Session  Core


附录 A:关键文件索引


核心模块

功能

文件路径

Agent Loop 入口

packages/core/src/core/client.ts

Turn 执行

packages/core/src/core/turn.ts

工具注册表

packages/core/src/tools/tool-registry.ts

工具调度器

packages/core/src/core/coreToolScheduler.ts

子智能体管理器

packages/core/src/subagents/subagent-manager.ts

配置管理

packages/core/src/config/config.ts

核心服务

功能

文件路径

会话记录

packages/core/src/services/chatRecordingService.ts

循环检测

packages/core/src/services/loopDetectionService.ts

对话压缩

packages/core/src/services/chatCompressionService.ts

会话管理

packages/core/src/services/sessionService.ts

CLI 模块

功能

文件路径

ACP 集成

packages/cli/src/acp-integration/

非交互式 Session

packages/cli/src/nonInteractive/session.ts

控制平面

packages/cli/src/nonInteractive/control/

交互式 UI

packages/cli/src/ui/

IDE 集成

功能

文件路径

VSCode 扩展

packages/vscode-ide-companion/

Zed 扩展

packages/zed-extension/

IDE 上下文

packages/core/src/ide/ideContext.ts

附录 B:术语表

术语

说明

Agent Loop

核心对话循环,协调用户输入、模型响应、工具执行

Turn

一轮对话,包含用户输入和模型响应

Tool

工具,提供特定功能的可执行单元

ToolInvocation

工具调用实例,包含参数和执行逻辑

ToolRegistry

工具注册表,管理所有可用工具

CoreToolScheduler

工具调度器,管理工具调用状态机

Subagent

子智能体,独立的 Agent 实例,用于任务分解

MCP

Model Context Protocol,模型上下文协议

ACP

Agent Client Protocol,智能体客户端协议(基于 JSON-RPC 2.0)

Approval Mode

执行模式,控制工具调用的权限策略

JSONL

JSON Lines,每行一个 JSON 对象的文本格式

Control Plane

控制平面,非交互式模式的

IDE Context

IDE 上下文,编辑器状态信息

Loop Detection

循环检测,防止 AI 陷入无限循环

Chat Compression

对话压缩,减少长对话的 Token 消耗

Session Recording

会话记录,持久化对话历史



目录
相关文章
|
23天前
|
人工智能 运维 安全
一个客户需求,捅穿了 Anthropic 整套 Agent 架构
Anthropic推出Claude Managed Agents,提出“脑手分离”架构:将Agent的“大脑”(Harness)、“手”(Sandbox)与“会话”(Session)解耦为独立组件。此举解决模型升级导致框架失效、私有云接入困难、安全凭据泄露等痛点,提升稳定性、安全性与性能(TTFT中位数降60%),并实现基础设施与模型能力的独立演进。
251 1
|
2月前
|
存储 人工智能 机器人
你养的龙虾,怎么才能越用越聪明?
通过三本说明书立人设、建记忆系统告别金鱼脑、开启“心跳”主动服务、积累技能复利、接入生态学本领、组建多智能体团队——龙虾的能力上限,就是你想象力的边界。
730 2
|
2月前
|
人工智能 Rust JavaScript
uv 这个工具被 OpenAI 收购了
AI Coding 竞争正从“生成代码”转向“执行闭环”。OpenAI收购Python工具链公司Astral、Anthropic收购JS运行时Bun,均旨在强化底层执行层——涵盖环境管理、测试验证与静态分析,构建Coding Agent所需的反馈回路。这标志着AI工程重心下沉至本地工具链,“Harness Engineering”成为新战略高地。
204 5
|
2月前
|
人工智能 运维 JavaScript
【养虾教程】JVSClaw是什么?JVSClaw与OpenClaw有什么区别?阿里云/本地部署+百炼Coding Plan配置及避坑手册
2026年,AI智能体赛道迎来爆发式增长,OpenClaw(曾用名Clawdbot、Moltbot)凭借开源、高权限、全场景适配的优势成为全民热议的工具,而阿里云推出的JVSClaw则以“云端托管、零运维”的特点快速崛起。很多用户陷入困惑:JVSClaw到底是什么?它和OpenClaw(Clawdbot)有什么本质区别?该选择哪一个部署使用?
2712 6
|
3月前
|
人工智能 前端开发 安全
一文讲解与Agent前端发展相关的几个阶段和协议
本文梳理了Agent前端协议从“胶水代码”到标准化的演进历程。解析了MCP、MCPApps、A2A、AG-UI及A2UI在能力、协作、通信与呈现架构中的核心作用。通过深度集成,前端正实现AI能力的富交互呈现,推动人机交互走向“可见、可控、可信”。
583 4
|
4月前
|
前端开发 算法
深度研究Agent架构解析:4种Agent架构介绍及实用Prompt模板
本文系统梳理了深度搜索Agent的主流架构演进:从基础的Planner-Only,到引入评估反馈的双模块设计,再到支持层次化分解的递归式ROMA方案。重点解析了问题拆解与终止判断两大核心挑战,并提供了实用的Prompt模板与优化策略,为构建高效搜索Agent提供清晰路径。
1855 10
深度研究Agent架构解析:4种Agent架构介绍及实用Prompt模板
|
9天前
|
人工智能 JSON BI
Claude Code + DeepSeek V4 唯一的遗憾要被补齐了:多模态识图灰度上线
JeecgBoot AI专题研究 用 DeepSeek V4 几乎完美替代 Claude,唯一卡点就是不收图——这块短板马上要补上![](https://oscimg.oschina.net/oscnet/up9146c3ec0c19f2abe92a111fbac35c4e462.png) 一句
961 2
Claude Code + DeepSeek V4 唯一的遗憾要被补齐了:多模态识图灰度上线
|
2月前
|
人工智能 运维 监控
你的 AI Agent 真的在受控运行吗?
以 OpenClaw 为案例,从行业威胁态势与运行时防护的固有局限出发,系统拆解 AI Agent 可观测体系的设计方法论:通过 Session 审计日志、应用日志与 OpenTelemetry 遥测三条数据管道,构建行为审计、威胁检测、成本管控与运维观测的完整闭环。
你的 AI Agent 真的在受控运行吗?