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