Qwen Code アーキテクチャ概要
このドキュメントでは、Qwen Code のアーキテクチャの概要を説明します。
コアコンポーネント
Qwen Code は主に2つのメインパッケージと、コマンドライン入力の処理中にシステムが使用できる一連のツールから構成されています。
1. CLI パッケージ (packages/cli)
目的: ユーザー向けの Qwen Code の部分を含み、初期ユーザー入力の処理、最終出力の表示、全体的なユーザーエクスペリエンスの管理を行います。
主な機能:
- 入力処理: 直接テキスト入力、スラッシュコマンド(例:
/help、/clear、/model)、アットコマンド(ファイル内容を含めるための@file)、感嘆符コマンド(シェル実行のための!command)など、さまざまな方法でユーザー入力を処理します。 - 履歴管理: 会話履歴を維持し、セッション再開などの機能を有効にします。
- 表示レンダリング: シンタックスハイライトと適切な書式設定を使用して、ターミナルで応答をフォーマットし、ユーザーに表示します。
- テーマと UI のカスタマイズ: カスタマイズ可能なテーマと UI 要素をサポートし、パーソナライズされたエクスペリエンスを提供します。
- 設定: JSON 設定ファイル、環境変数、コマンドライン引数を介してさまざまな設定オプションを管理します。
2. Core パッケージ (packages/core)
目的: Qwen Code のバックエンドとして機能します。packages/cli から送られたリクエストを受け取り、設定されたモデル API との対話を調整し、利用可能なツールの実行を管理します。
主な機能:
- API クライアント: Qwen モデル API と通信してプロンプトを送信し、応答を受信します。
- プロンプト構築: モデルに適切なプロンプトを構築し、会話履歴と利用可能なツール定義を組み込みます。
- ツールの登録と実行: 利用可能なツールの登録を管理し、モデルのリクエストに基づいてそれらを実行します。
- 状態管理: 会話とセッションの状態情報を維持します。
- サーバー側設定: サーバー側の設定を処理します。
3. ツール (packages/core/src/tools/)
目的: Qwen モデルの機能を拡張する個別のモジュールであり、ファイルシステム、シェルコマンド、Web フェッチなど、ローカル環境との対話を可能にします。
相互作用: packages/core は Qwen モデルからのリクエストに基づいてこれらのツールを呼び出します。
一般的なツール:
- ファイル操作: ファイルの読み取り、書き込み、編集
- シェルコマンド: 危険な可能性がある操作に対してユーザーの承認を得てシステムコマンドを実行
- 検索ツール: プロジェクト内のファイルの検索とコンテンツの検索
- Web ツール: Web からのコンテンツ取得
- MCP 統合: Model Context Protocol サーバーに接続して機能を拡張
相互作用フロー
Qwen Code の典型的な相互作用は以下のフローに従います。
- ユーザー入力: ユーザーがターミナルにプロンプトまたはコマンドを入力します。これは
packages/cliによって管理されます。 - Core へのリクエスト:
packages/cliがユーザーの入力をpackages/coreに送信します。 - リクエスト処理: Core パッケージは以下を実行します。
- 設定されたモデル API に対して適切なプロンプトを構築します(会話履歴と利用可能なツール定義を含む場合があります)。
- プロンプトをモデル API に送信します。
- モデル API の応答: モデル API がプロンプトを処理し、応答を返します。この応答は直接的な回答か、利用可能なツールのいずれかを使用するリクエストの場合があります。
- ツールの実行(該当する場合):
- モデル API がツールをリクエストした場合、Core パッケージは実行の準備をします。
- リクエストされたツールがファイルシステムを変更したりシェルコマンドを実行したりできる場合、ユーザーにはまずツールとその引数の詳細が表示され、ユーザーは実行を承認する必要があります。
- ファイルの読み取りなどの読み取り専用操作では、明示的なユーザー確認は必要ない場合があります。
- 確認が行われた後、または確認が不要な場合、Core パッケージは該当するツール内で関連するアクションを実行し、その結果が Core パッケージによってモデル API に送り返されます。
- モデル API はツールの結果を処理し、最終的な応答を生成します。
- CLI への応答: Core パッケージが最終応答を CLI パッケージに送り返します。
- ユーザーへの表示: CLI パッケージが応答をフォーマットし、ターミナルに表示します。
設定オプション
Qwen Code では、動作を設定するための複数の方法があります。
設定レイヤー(優先順位順)
- コマンドライン引数
- 環境変数
- プロジェクト設定ファイル (
.qwen/settings.json) - ユーザー設定ファイル (
~/.qwen/settings.json) - システム設定ファイル
- デフォルト値
主な設定カテゴリ
- 一般設定: vim モード、優先エディター、自動更新の設定
- UI 設定: テーマのカスタマイズ、バナーの表示/非表示、フッターの表示
- モデル設定: モデルの選択、セッションターン制限、圧縮設定
- コンテキスト設定: コンテキストファイル名、ディレクトリの包含、ファイルフィルタリング
- ツール設定: 承認モード、サンドボックス化、ツールの制限
- プライバシー設定: 使用統計情報の収集
- 詳細設定: デバッグオプション、カスタムバグ報告コマンド
主要な設計原則
- モジュール性: CLI(フロントエンド)を Core(バックエンド)から分離することで、独立した開発と将来の拡張(例:同じバックエンドに対する異なるフロントエンド)が可能になります。
- 拡張性: ツールシステムは拡張可能になるように設計されており、カスタムツールや MCP サーバー統合を通じて新しい機能を追加できます。
- ユーザーエクスペリエンス: CLI は、シンタックスハイライト、カスタマイズ可能なテーマ、直感的なコマンド構造などの機能を備えた、リッチでインタラクティブなターミナルエクスペリエンスの提供に重点を置いています。
- セキュリティ: 危険な可能性がある操作に対する承認メカニズムと、ユーザーのシステムを保護するためのサンドボックス化オプションを実装しています。
- 柔軟性: 複数の設定方法をサポートし、さまざまなワークフローや環境に適応できます。
Last updated on