言語モデル
Visual Studio Code は、大規模言語モデル (LLM) を使用して AI 機能を強化しています。GitHub Copilot プランを通じて複数のモデルから選択したり、独自のモデルを使用したりできます。この記事では、言語モデルの仕組み、その特性、およびモデル選択の考え方について説明します。
言語モデルの仕組み
言語モデルはテキスト入力(「プロンプト」)を処理して、テキストを出力として生成します。VS Code では、プロンプトはユーザーのメッセージ、会話履歴、ファイルの内容、ツールの出力、カスタム指示など、複数のソースから組み立てられます。モデルは、説明やコードの編集、あるいはツール呼び出しの要求を含む応答を生成します。
言語モデルは、コードを直接実行したりファイルにアクセスしたりすることはありません。その代わりに、エージェントループがアクションとして解釈するテキストを生成します。モデルがツール呼び出しを要求すると、VS Code がツールを実行し、その結果を次の反復のためにモデルへフィードバックします。
主な特性
- 非決定論的 (Nondeterministic): 同じプロンプトでも、実行するたびに異なる結果が生成されることがあります。これは意図的なものであり、モデルが確率分布からどのようにサンプリングを行うかを反映しています。
- コンテキスト依存 (Context-dependent): 応答の品質は、プロンプトで提供されるコンテキストの品質と関連性に依存します。
- 知識の境界 (Knowledge boundaries): モデルは特定の期日までのデータでトレーニングされているため、トレーニングデータに含まれないトピックについては、古かったり不正確だったりする情報を生成する可能性があります。VS Code は、ツールやワークスペースのインデックス作成によってこれを補っています。
コンテキストウィンドウ
コンテキストウィンドウとは、モデルが一度のリクエストで処理できる情報の総量のことです。これには、システムプロンプト、カスタム指示、会話履歴、ファイルの内容、ツールの出力、現在のメッセージなど、すべてが含まれます。モデルによってコンテキストウィンドウのサイズは異なります。
コンテキストウィンドウがいっぱいになると、VS Code は会話の古い部分を自動的に要約して空き容量を作ります。つまり、長い会話の初期段階における重要な詳細が圧縮または失われる可能性があります。また、チャット入力に /compact と入力することで、いつでも手動で圧縮を開始できます。必要に応じて、コマンドの後にカスタム指示を追加して要約をガイドすることも可能です(例: /compact focus on the API design decisions)。
VS Code がどのようにコンテキストを組み立てるか、およびコンテキストの圧縮の詳細をご覧ください。
推論と思考
一部の言語モデルは、応答を生成する前に「思考 (Thinking)」と呼ばれる拡張推論を実行できます。即座に回答を生成するのではなく、推論モデルはまず内部的に問題に取り組み、複数のアプローチを検討し、トレードオフを評価し、段階的な思考プロセスを構築します。この内部的な推論は、最終的な出力とは別の専用の「思考トークン」内で行われます。
推論モデルは、複数ステップのデバッグ、アーキテクチャの計画、コードのリファクタリング、数学的または科学的分析といった複雑なタスクに特に効果的です。ボイラープレートの生成や基本的な質問への回答などの単純なタスクでは、余分な推論はメリットが少ない一方で、レイテンシ(遅延)が増加します。
思考の労力 (Thinking effort)
思考の労力は、モデルが各リクエストに対してどの程度の推論を行うかを制御します。労力を高く設定するとより徹底的な内部推論が行われ、複雑な問題に対する品質が向上します。労力を低く設定すると、思考ステップを制限またはスキップすることで、レイテンシとトークン使用量を削減します。
利用可能な労力レベルとデフォルト値は、モデルやプロバイダーによって異なります。一部のモデルはアダプティブ思考 (Adaptive thinking) をサポートしており、固定の思考予算を常に使うのではなく、各リクエストの複雑さに基づいてモデルが動的に推論の有無や量を決定します。
VS Code は評価やオンラインのパフォーマンスデータに基づいてデフォルトの労力レベルを設定しており、サポートされている場合はアダプティブ推論が有効になっています。ほとんどのユースケースでは、変更しなくてもデフォルト設定でうまく機能します。
思考トークン (Thinking tokens)
思考トークンは、応答には表示されませんが、モデルのコンテキストウィンドウの容量としてカウントされます。実際の思考プロセスは、通常は要約された形式で返されるか、低レイテンシを実現するために完全に省略される場合があります。思考の労力レベルを高くすると、思考トークンが増え、レイテンシが増加する可能性があることに留意してください。
VS Code で思考の労力レベルを設定する方法をご覧ください。
適切なモデルの選択
各モデルには異なる長所があります。一部のモデルは速度が最適化されており、迅速な編集や単純な質問に適しています。また、コンテキストウィンドウが広いモデルや推論能力に優れたモデルもあり、これらは複雑なタスクに最適です。一般的なガイドラインは以下の通りです。
- 高速モデルは、迅速なコード編集、ボイラープレートの生成、直接的な質問に最適です。
- 推論モデルは、複雑なリファクタリング、アーキテクチャの決定、複数ステップのデバッグ、トレードオフの分析が必要なタスクに優れています。
- 大規模コンテキストモデルは、大規模なコードベースや、より多くの情報を保持することが重要な長い会話に適しています。
特定のタスクのニーズに合わせて、いつでもモデルを切り替えることができます。詳細な比較については、GitHub Copilot ドキュメントの「タスクに適した AI モデルの選択」を参照してください。
自動モデル選択
自動モデル選択は、2つのシステムを組み合わせて各リクエストを最適なモデルにルーティングします。1つのシステムはリアルタイムのモデルの健全性と可用性を追跡し、もう1つのシステムがタスクの複雑さを評価します。これらが連携して各タスクを最も効率的に解決できるモデルにマッチングさせ、コストの高い推論モデルはそれが必要な問題のために確保し、単純なタスクはより高速なモデルへとルーティングします。
自動選択は複数のモデルから行われ、組織のモデルアクセス設定を尊重します。管理者のポリシーによって除外されたモデルや、データ所在地ポリシーによって制限されたモデルは選択されません。
詳細については、GitHub ドキュメントの「Copilot の自動モデル選択について」を参照してください。
AI クレジットとモデルコスト
各 Copilot プランには、月ごとの AI クレジットが付与されます。モデルの種類や処理されたトークン数に応じて、モデルごとに AI クレジットの消費率が異なります。高性能なモデルはトークンあたりのコストが高く、軽量なモデルはより長く使用できます。自動モデル選択を使用する場合、VS Code は品質とコストのバランスを考慮し、効率的なモデルに各リクエストをルーティングします。
他にも、思考の労力(労力を高くすると思考トークンが増えます)、コンテキストウィンドウサイズ、ツールの使用状況などもクレジット消費に影響します。クレジット消費を削減するための実用的なヒントについては、「AI クレジットの使用を最適化する」を参照してください。
VS Code で言語モデルを選択および構成する方法をご覧ください。
独自の言語モデルキーの使用
組み込みモデルがニーズを満たさない場合、独自の言語モデル API キー (BYOK) を使用して、他のプロバイダーのモデルを利用したり、モデルをローカルで実行したりできます。BYOK を使用すると、VS Code のチャット体験やツールを維持したまま、互換性のある任意のモデルプロバイダーに接続できます。
独自のキーを使用する理由
- モデルの選択: 組み込みモデルだけでなく、さまざまなプロバイダーが提供する数百のモデルにアクセスできます。
- 実験: 組み込みモデルではまだ利用できない新しいモデルや機能を試すことができます。
- ローカルコンピューティング: GitHub Copilot でサポートされているモデルや、まだ利用できないモデルを、自身のコンピューティングリソースを使用して実行できます。
- より強力な制御: 組み込みモデルに課せられている標準的なレート制限や制限を回避できます。
- オフラインおよびエアギャップ環境: GitHub アカウント、Copilot プラン、またはインターネット接続なしで、Ollama のようなローカルモデルを使って AI チャット機能を利用できます。
考慮事項
- BYOK はチャット体験とユーティリティタスクにのみ適用されます。インライン補完(コード補完)や、セマンティック検索などの埋め込み (embeddings) に依存する機能には、引き続き GitHub アカウントが必要です。
- 機能はモデルに依存し、ツール呼び出し、画像認識、思考などのサポート状況が組み込みモデルと異なる場合があります。
- BYOK を使用する場合、モデルの出力に対して責任ある AI フィルタリングが適用されるという保証はありません。
VS Code で独自の言語モデルキーを追加する方法をご覧ください。