Обзор архитектуры Qwen Code
В этом документе представлен высокоуровневый обзор архитектуры Qwen Code.
Основные компоненты
Qwen Code состоит из двух основных пакетов, а также набора инструментов, которые система может использовать при обработке ввода из командной строки:
1. CLI-пакет (packages/cli)
Назначение: Содержит пользовательскую часть Qwen Code: обработку начального ввода пользователя, вывод финальных результатов и управление общим пользовательским опытом.
Основные функции:
- Обработка ввода: Принимает пользовательский ввод различными способами: прямой ввод текста, слэш-команды (например,
/help,/clear,/model), at-команды (@fileдля включения содержимого файла) и команды с восклицательным знаком (!commandдля выполнения в shell). - Управление историей: Сохраняет историю диалога и поддерживает функции вроде возобновления сессии.
- Отрисовка вывода: Форматирует и отображает ответы в терминале с подсветкой синтаксиса и корректным оформлением.
- Настройка темы и интерфейса: Поддерживает кастомизацию тем и элементов UI для персонализации.
- Настройки конфигурации: Управляет параметрами конфигурации через JSON-файлы настроек, переменные окружения и аргументы командной строки.
2. Core-пакет (packages/core)
Назначение: Выполняет роль бэкенда Qwen Code. Получает запросы от packages/cli, координирует взаимодействие с настроенным model API и управляет выполнением доступных инструментов.
Основные функции:
- API-клиент: Взаимодействует с Qwen model API для отправки промптов и получения ответов.
- Формирование промптов: Создает промпты для модели, включая историю диалога и описания доступных инструментов.
- Регистрация и выполнение инструментов: Управляет регистрацией доступных инструментов и запускает их по запросам модели.
- Управление состоянием: Хранит информацию о состоянии диалога и сессии.
- Серверная конфигурация: Обрабатывает серверные настройки и параметры конфигурации.
3. Инструменты (packages/core/src/tools/)
Назначение: Отдельные модули, расширяющие возможности модели Qwen и позволяющие ей взаимодействовать с локальным окружением (например, с файловой системой, shell-командами, веб-запросами).
Взаимодействие: packages/core вызывает эти инструменты на основе запросов от модели Qwen.
Основные инструменты включают:
- Операции с файлами: Чтение, запись и редактирование файлов
- Shell-команды: Выполнение системных команд с подтверждением пользователя для потенциально опасных операций
- Поиск: Поиск файлов и содержимого в проекте
- Веб-инструменты: Получение контента из интернета
- Интеграция с MCP: Подключение к серверам Model Context Protocol для расширения возможностей
Порядок взаимодействия
Типичный процесс взаимодействия с Qwen Code выглядит следующим образом:
- Ввод пользователя: Пользователь вводит промпт или команду в терминал, который обрабатывается
packages/cli. - Запрос в Core:
packages/cliпередает ввод пользователя вpackages/core. - Обработка запроса: Core-пакет:
- Формирует промпт для настроенного model API, при необходимости включая историю диалога и описания доступных инструментов.
- Отправляет промпт в model API.
- Ответ от Model API: Model API обрабатывает промпт и возвращает ответ. Это может быть прямой ответ или запрос на использование одного из доступных инструментов.
- Выполнение инструмента (если применимо):
- Когда model API запрашивает инструмент, core-пакет готовится к его выполнению.
- Если запрошенный инструмент может изменять файловую систему или выполнять shell-команды, пользователю сначала показываются детали инструмента и его аргументы, после чего требуется подтверждение выполнения.
- Операции только для чтения, например чтение файлов, могут не требовать явного подтверждения пользователя.
- После подтверждения (или если оно не требуется) core-пакет выполняет соответствующее действие в инструменте и отправляет результат обратно в model API.
- Model API обрабатывает результат работы инструмента и формирует финальный ответ.
- Ответ в CLI: Core-пакет отправляет финальный ответ обратно в CLI-пакет.
- Отображение пользователю: CLI-пакет форматирует и выводит ответ пользователю в терминал.
Параметры конфигурации
Qwen Code предоставляет несколько способов настройки своего поведения:
Уровни конфигурации (в порядке приоритета)
- Аргументы командной строки
- Переменные окружения
- Файл настроек проекта (
.qwen/settings.json) - Файл пользовательских настроек (
~/.qwen/settings.json) - Системные файлы настроек
- Значения по умолчанию
Основные категории настроек
- Общие настройки: режим vim, предпочитаемый редактор, настройки автообновления
- Настройки UI: кастомизация темы, видимость баннера, отображение футера
- Настройки модели: выбор модели, лимиты итераций сессии, параметры сжатия
- Настройки контекста: имена файлов контекста, включение директорий, фильтрация файлов
- Настройки инструментов: режимы подтверждения, песочница, ограничения инструментов
- Настройки конфиденциальности: сбор статистики использования
- Расширенные настройки: параметры отладки, пользовательские команды для отправки отчетов об ошибках
Ключевые принципы проектирования
- Модульность: Разделение CLI (фронтенд) и Core (бэкенд) позволяет вести независимую разработку и добавлять расширения в будущем (например, разные фронтенды для одного бэкенда).
- Расширяемость: Система инструментов спроектирована так, чтобы её можно было расширять, добавляя новые возможности через кастомные инструменты или интеграцию с MCP-серверами.
- Пользовательский опыт: CLI ориентирован на предоставление богатого интерактивного опыта работы в терминале с подсветкой синтаксиса, настраиваемыми темами и интуитивно понятной структурой команд.
- Безопасность: Реализованы механизмы подтверждения для потенциально опасных операций и опции песочницы для защиты системы пользователя.
- Гибкость: Поддерживает несколько методов конфигурации и адаптируется к различным рабочим процессам и окружениям.