Обзор архитектуры Qwen Code
В этом документе представлен общий обзор архитектуры Qwen Code.
Основные компоненты
Qwen Code состоит в первую очередь из двух основных пакетов, а также набора инструментов, которые система может использовать при обработке ввода из командной строки:
1. Пакет CLI (packages/cli)
Назначение: Содержит пользовательский интерфейс Qwen Code, включая обработку первоначального ввода пользователя, вывод итогового результата и управление общим пользовательским опытом.
Ключевые функции:
- Обработка ввода: Обрабатывает ввод пользователя различными способами: прямой ввод текста, команды с косой чертой (например,
/help,/clear,/model), команды с символом «@» (@file— для включения содержимого файла) и команды с восклицательным знаком (!command— для выполнения в оболочке). - Управление историей: Ведёт историю диалога и обеспечивает такие функции, как возобновление сеанса.
- Отрисовка вывода: Форматирует и отображает ответы пользователю в терминале с подсветкой синтаксиса и корректным форматированием.
- Настройка темы и интерфейса: Поддерживает настраиваемые темы и элементы интерфейса для персонализации.
- Конфигурационные параметры: Управляет различными параметрами конфигурации через JSON-файлы настроек, переменные окружения и аргументы командной строки.
2. Основной пакет (packages/core)
Назначение: Этот пакет выступает в роли серверной части Qwen Code. Он принимает запросы, отправленные из packages/cli, координирует взаимодействие с настроенным API модели и управляет выполнением доступных инструментов.
Ключевые функции:
- Клиент API: Обменивается данными с API модели Qwen для отправки промптов и получения ответов.
- Формирование промптов: Создаёт соответствующие промпты для модели, включая историю диалога и определения доступных инструментов.
- Регистрация и выполнение инструментов: Управляет регистрацией доступных инструментов и выполняет их по запросам модели.
- Управление состоянием: Хранит информацию о состоянии диалога и сессии.
- Конфигурация на стороне сервера: Обрабатывает конфигурацию и настройки на стороне сервера.
3. Инструменты (packages/core/src/tools/)
Назначение: Это отдельные модули, расширяющие возможности модели Qwen и позволяющие ей взаимодействовать с локальной средой (например, файловой системой, командами оболочки, загрузкой веб-контента).
Взаимодействие: Пакет packages/core вызывает эти инструменты на основе запросов от модели Qwen.
Распространённые инструменты включают:
- Операции с файлами: чтение, запись и редактирование файлов
- Команды оболочки: выполнение системных команд с подтверждением пользователя для потенциально опасных операций
- Поисковые инструменты: поиск файлов и содержимого внутри проекта
- Веб-инструменты: загрузка контента из интернета
- Интеграция с MCP: подключение к серверам Model Context Protocol для расширения возможностей
Поток взаимодействия
Типичное взаимодействие с 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, предпочитаемый редактор, параметры автоматического обновления
- Настройки интерфейса: настройка темы, отображение баннера, отображение нижнего колонтитула
- Настройки модели: выбор модели, ограничения на количество ходов в сессии, параметры сжатия
- Настройки контекста: имена файлов контекста, включение каталогов, фильтрация файлов
- Настройки инструментов: режимы подтверждения, изоляция (sandboxing), ограничения на использование инструментов
- Настройки конфиденциальности: сбор статистики использования
- Дополнительные настройки: параметры отладки, пользовательские команды для отправки отчётов об ошибках
Ключевые принципы проектирования
- Модульность: Разделение CLI (интерфейса) и ядра (бэкенда) позволяет вести независимую разработку и обеспечивает потенциальную возможность расширения в будущем (например, использование различных интерфейсов для одного и того же бэкенда).
- Расширяемость: Система инструментов спроектирована так, чтобы её можно было легко расширять: добавлять новые возможности с помощью пользовательских инструментов или интеграции с сервером MCP.
- Пользовательский опыт: CLI ориентирован на обеспечение богатого и интерактивного опыта работы в терминале, включая подсветку синтаксиса, настраиваемые темы и интуитивно понятные структуры команд.
- Безопасность: Реализованы механизмы подтверждения для потенциально опасных операций, а также предусмотрены варианты изоляции (sandboxing) для защиты системы пользователя.
- Гибкость: Поддерживает несколько способов конфигурирования и может адаптироваться к различным рабочим процессам и окружениям.