Обзор архитектуры 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: Обеспечивает связь с API модели Qwen для отправки запросов и получения ответов.
- Формирование запросов: Создает подходящие запросы для модели, включая историю разговора и определения доступных инструментов.
- Регистрация и выполнение инструментов: Управляет регистрацией доступных инструментов и выполняет их по запросу модели.
- Управление состоянием: Сохраняет информацию о состоянии разговора и сессии.
- Серверная конфигурация: Обрабатывает серверные настройки и параметры конфигурации.
3. Инструменты (packages/core/src/tools/)
Назначение: Это отдельные модули, которые расширяют возможности модели Qwen, позволяя ей взаимодействовать с локальной средой (например, файловой системой, командами оболочки, веб-запросами).
Взаимодействие: packages/core вызывает эти инструменты на основе запросов от модели Qwen.
Общие инструменты включают:
- Файловые операции: Чтение, запись и редактирование файлов
- Команды оболочки: Выполнение системных команд с одобрения пользователя для потенциально опасных операций
- Поисковые инструменты: Поиск файлов и поиск содержимого в проекте
- Веб-инструменты: Получение контента из интернета
- Интеграция MCP: Подключение к серверам протокола контекста модели для расширения возможностей
Поток взаимодействия
Типичное взаимодействие с Qwen Code происходит по следующему сценарию:
- Ввод пользователя: Пользователь вводит запрос или команду в терминал, который обрабатывается пакетом
packages/cli. - Запрос к ядру: Пакет
packages/cliотправляет пользовательский ввод в пакетpackages/core. - Обработка запроса: Ядро пакета:
- Формирует соответствующий запрос для настроенного API модели, при необходимости включая историю разговора и определения доступных инструментов.
- Отправляет запрос в API модели.
- Ответ от API модели: API модели обрабатывает запрос и возвращает ответ. Этот ответ может быть прямым ответом или запросом на использование одного из доступных инструментов.
- Выполнение инструмента (при необходимости):
- Когда API модели запрашивает инструмент, ядро пакета подготавливается к его выполнению.
- Если запрошенный инструмент может изменять файловую систему или выполнять команды оболочки, пользователю сначала предоставляются подробности о инструменте и его аргументах, после чего пользователь должен подтвердить выполнение.
- Операции только для чтения, такие как чтение файлов, могут не требовать явного подтверждения пользователя для продолжения.
- После подтверждения, либо если подтверждение не требуется, ядро пакета выполняет соответствующее действие внутри нужного инструмента, и результат отправляется обратно в API модели через ядро пакета.
- API модели обрабатывает результат работы инструмента и формирует окончательный ответ.
- Ответ в CLI: Ядро пакета отправляет финальный ответ обратно в пакет CLI.
- Отображение пользователю: Пакет CLI форматирует и отображает ответ пользователю в терминале.
Параметры конфигурации
Qwen Code предлагает несколько способов настройки своего поведения:
Уровни конфигурации (в порядке приоритета)
- Аргументы командной строки
- Переменные окружения
- Файл настроек проекта (
.qwen/settings.json) - Файл пользовательских настроек (
~/.qwen/settings.json) - Системные файлы настроек
- Значения по умолчанию
Основные категории конфигурации
- Общие настройки: режим vim, предпочитаемый редактор, настройки автообновления
- Настройки интерфейса: Настройка тем, видимость баннера, отображение нижнего колонтитула
- Настройки модели: Выбор модели, ограничения по количеству ходов в сессии, настройки сжатия
- Настройки контекста: Имена файлов контекста, включение каталогов, фильтрация файлов
- Настройки инструментов: Режимы одобрения, песочница, ограничения инструментов
- Настройки конфиденциальности: Сбор статистики использования
- Расширенные настройки: Параметры отладки, пользовательские команды для отправки отчетов об ошибках
Ключевые принципы проектирования
- Модульность: Разделение CLI (фронтенда) и ядра (бэкенда) позволяет разрабатывать их независимо и обеспечивает возможность будущего расширения (например, различные фронтенды для одного бэкенда).
- Расширяемость: Система инструментов спроектирована с учетом возможности расширения, что позволяет добавлять новые функции через пользовательские инструменты или интеграцию с сервером MCP.
- Удобство использования: CLI ориентирован на обеспечение богатого и интерактивного терминального опыта с такими возможностями, как подсветка синтаксиса, настраиваемые темы и интуитивно понятная структура команд.
- Безопасность: Реализованы механизмы одобрения потенциально опасных операций и опции песочницы для защиты системы пользователя.
- Гибкость: Поддерживает несколько методов конфигурации и может адаптироваться к различным рабочим процессам и средам.