Skip to Content
Руководство для разработчиковАрхитектура

Обзор архитектуры 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 выглядит следующим образом:

  1. Ввод пользователя: Пользователь вводит промпт или команду в терминал; этим управляет packages/cli.
  2. Запрос в Core: packages/cli отправляет пользовательский ввод в packages/core.
  3. Обработка запроса: Пакет Core:
    • Формирует подходящий промпт для API настроенной модели, возможно, включая историю беседы и описания доступных инструментов.
    • Отправляет промпт в API модели.
  4. Ответ API модели: API модели обрабатывает промпт и возвращает ответ. Это может быть прямой ответ или запрос на использование одного из доступных инструментов.
  5. Выполнение инструмента (если применимо):
    • Когда API модели запрашивает инструмент, пакет Core готовится к его выполнению.
    • Если запрошенный инструмент может изменять файловую систему или выполнять shell-команды, пользователю сначала показываются детали инструмента и его аргументы, и пользователь должен подтвердить выполнение.
    • Операции только для чтения, такие как чтение файлов, могут не требовать явного подтверждения пользователя.
    • После подтверждения (или если подтверждение не требуется) пакет Core выполняет соответствующее действие в рамках соответствующего инструмента, и результат отправляется обратно в API модели пакетом Core.
    • API модели обрабатывает результат работы инструмента и генерирует окончательный ответ.
  6. Ответ в CLI: Пакет Core отправляет окончательный ответ обратно в пакет CLI.
  7. Отображение пользователю: Пакет CLI форматирует и отображает ответ пользователю в терминале.

Параметры конфигурации

Qwen Code предлагает несколько способов настройки поведения:

Уровни конфигурации (в порядке приоритета)

  1. Аргументы командной строки
  2. Переменные окружения
  3. Файл настроек проекта (.qwen/settings.json)
  4. Файл настроек пользователя (~/.qwen/settings.json)
  5. Системные файлы настроек
  6. Значения по умолчанию

Ключевые категории конфигурации

  • Общие настройки: Режим vim, предпочитаемый редактор, настройки автообновления
  • Настройки интерфейса: Настройка темы, видимость баннера, отображение нижнего колонтитула
  • Настройки модели: Выбор модели, лимиты сессий, настройки сжатия
  • Настройки контекста: Имена контекстных файлов, включение директорий, фильтрация файлов
  • Настройки инструментов: Режимы подтверждения, изоляция (sandboxing), ограничения инструментов
  • Настройки приватности: Сбор статистики использования
  • Расширенные настройки: Параметры отладки, пользовательские команды для сообщения об ошибках

Ключевые принципы проектирования

  • Модульность: Разделение CLI (фронтенда) и Core (бэкенда) позволяет независимо разрабатывать и в будущем расширять возможности (например, разные фронтенды для одного бэкенда).
  • Расширяемость: Система инструментов спроектирована расширяемой — новые возможности можно добавлять через пользовательские инструменты или интеграцию с MCP-серверами.
  • Пользовательский опыт: CLI ориентирован на обеспечение богатого и интерактивного терминального опыта с подсветкой синтаксиса, настраиваемыми темами и интуитивно понятными командами.
  • Безопасность: Реализует механизмы подтверждения для потенциально опасных операций и возможности изоляции для защиты системы пользователя.
  • Гибкость: Поддерживает множество способов конфигурации и может адаптироваться к различным рабочим процессам и окружениям.
Last updated on