Qwen Code 架构概览
本文档对 Qwen Code 的架构进行高层级概述。
核心组件
Qwen Code 主要由两个核心包构成,并附带一套可供系统在处理命令行输入时使用的工具。
1. CLI 包 (packages/cli)
目的: 包含 Qwen Code 面向用户的部分,例如处理用户初始输入、呈现最终输出以及管理整体用户体验。
主要功能:
- 输入处理: 通过多种方式处理用户输入,包括直接文本输入、斜杠命令(例如
/help、/clear、/model)、“@”命令(@file用于包含文件内容)以及感叹号命令(!command用于执行 Shell 命令)。 - 历史管理: 维护对话历史,并支持会话恢复等功能。
- 显示渲染: 在终端中格式化并呈现对用户的响应,支持语法高亮和适当的格式。
- 主题与界面自定义: 支持可自定义的主题和界面元素,以提供个性化体验。
- 配置设置: 通过 JSON 设置文件、环境变量和命令行参数管理各种配置选项。
2. 核心包 (packages/core)
目的: 作为 Qwen Code 的后端。它接收来自 packages/cli 的请求,协调与已配置模型 API 的交互,并管理可用工具的执行。
主要功能:
- API 客户端: 与 Qwen 模型 API 通信,发送提示词并接收响应。
- 提示词构建: 为模型构建合适的提示词,包含对话历史和可用工具定义。
- 工具注册与执行: 管理可用工具的注册,并根据模型请求执行这些工具。
- 状态管理: 维护对话和会话状态信息。
- 服务端配置: 处理服务端配置和设置。
3. 工具 (packages/core/src/tools/)
目的: 这些是独立的模块,用于扩展 Qwen 模型的能力,使其能够与本地环境交互(例如文件系统、Shell 命令、网页抓取)。
交互: packages/core 根据 Qwen 模型的请求调用这些工具。
常用工具包括:
- 文件操作: 读取、写入和编辑文件
- Shell 命令: 执行系统命令,对于潜在危险操作需用户批准
- 搜索工具: 查找文件,搜索项目中的内容
- Web 工具: 从网页获取内容
- MCP 集成: 连接模型上下文协议(MCP)服务器以扩展能力
交互流程
与 Qwen Code 的典型交互遵循以下流程:
- 用户输入: 用户在终端输入提示词或命令,由
packages/cli管理。 - 发送请求到核心:
packages/cli将用户的输入发送给packages/core。 - 请求处理: 核心包执行以下操作:
- 为已配置的模型 API 构建合适的提示词,可能包含对话历史和可用工具定义。
- 将提示词发送给模型 API。
- 模型 API 响应: 模型 API 处理提示词并返回响应。该响应可能是一个直接回答,也可能是使用某个可用工具的请求。
- 工具执行(如适用):
- 当模型 API 请求使用某个工具时,核心包准备执行该工具。
- 如果请求的工具可能修改文件系统或执行 Shell 命令,则会先向用户展示该工具及其参数的详细信息,用户必须批准执行。
- 只读操作(例如读取文件)可能无需用户明确确认即可继续。
- 一旦确认(或无需确认),核心包会在相关工具中执行相应操作,然后将结果由核心包发送回模型 API。
- 模型 API 处理工具结果并生成最终响应。
- 返回 CLI: 核心包将最终响应发送回 CLI 包。
- 显示给用户: CLI 包在终端中格式化并显示给用户。
配置选项
Qwen Code 提供多种方式来配置其行为:
配置层级(按优先级从高到低)
- 命令行参数
- 环境变量
- 项目设置文件(
.qwen/settings.json) - 用户设置文件(
~/.qwen/settings.json) - 系统设置文件
- 默认值
主要配置类别
- 通用设置: Vim 模式、首选编辑器、自动更新偏好设置
- 界面设置: 主题自定义、横幅可见性、页脚显示
- 模型设置: 模型选择、会话轮次限制、压缩设置
- 上下文设置: 上下文文件名、目录包含、文件过滤
- 工具设置: 批准模式、沙箱、工具限制
- 隐私设置: 使用统计数据收集
- 高级设置: 调试选项、自定义错误报告命令
关键设计原则
- 模块化: 将 CLI(前端)与 Core(后端)分离,支持独立开发以及未来可能的扩展(例如同一后端支持不同前端)。
- 可扩展性: 工具系统设计为可扩展,允许通过自定义工具或 MCP 服务器集成来添加新能力。
- 用户体验: CLI 专注于提供丰富且交互式的终端体验,具备语法高亮、可自定义主题以及直观的命令结构等功能。
- 安全性: 对潜在危险操作实施批准机制,并提供沙箱选项以保护用户系统。
- 灵活性: 支持多种配置方式,能够适应不同的工作流程和环境。
Last updated on