891 Views
December 11, 25
スライド概要
[AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば - connpass]( https://aid.connpass.com/event/374658/ ) の登壇スライドです。
VS CodeのCopilot Chat拡張機能のコードを読んで興味深かった箇所のうちMCP Clientとしてのツール選択の実装とInline suggestionsのコンテキストについてまとめています
バックエンドエンジニア。 主にC#, Azure, Terraform, GitHub Actionsをいじっています。Microsoft MVP for Azure, Azure AI Foundry, GitHub Star
GitHub Copilotのフロントエンド VS Code の Copilot Chat 拡張から学ぶ GitHub Copilot & MCP Client AI 駆動開発勉強会 フロントエンド支部 #1 2025/12/10 Maki Nagase
Maki Nagase @yuma_prog • My Info • 株式会社ゼンアーキテクツ所属 • GitHub Star • Microsoft MVP for Azure, Azure AI Foundry • 運営・主催コミュニティ • AI駆動開発勉強会, JAZUG(Japan Azure User Group), Azure わいがや会, GitHub Vibe Riders, Hack Everything., GitHub dockyard, AOAI Dev Day • 好きな技術 • Azure PaaS, Azure AI, C#, Terraform, GitHub Copilot • 趣味 • 技術コミュニティ,アニメ,キャンプ,しゃぼん玉,法螺貝, サバゲ,などなど
VS CodeのGitHub Copilot Chatとは
VS Codeの拡張機能 • VS CodeでのGitHub Copilotは拡張機能をイ ンストールすることで利用できる • GitHub Copilot拡張 • Inline suggestions(Completion)を行って いる拡張機能 • GitHub Copilot Chat拡張 • インラインでのChat含め、Chat関連の機 能
VS Codeの拡張機能 • VS CodeでのGitHub Copilotは拡張機能をイ ンストールすることで利用できる • GitHub Copilot拡張 • Inline suggestions(Completion)を行って いる拡張機能 • GitHub Copilot Chat拡張 • インラインでのChat含め、Chat関連の機 能 VS CodeのGitHub Copilot拡張は GitHub Copilotのフロントエンド!
VS Code Copilot Chat • 2025/6/30 Copilot Chat拡張がオープン ソース化 • Open Source AI Editor: First Milestone • 2025/11/6 GitHub Copilot の Inline SuggestionsがCopilot Chatと統合されて オープンソース化 • 2026年初頭 GitHub Copilot拡張廃止、 GitHub Copilot Chat1つに統合される予定 • 今後 VS Code coreにCopilot ChatのAI機能の 一部を統合予定 Open Source AI Editor: Second Milestone https://github.com/microsoft/vscode-copilot-chat
過去3回 コードを読む配信をしました GitHub Vibe Riders – YouTube GitHub Copilotの更新情報キャッチアップや検証をゆるーくライブ 配信するチャンネル •9/19 VS Code Copilot ChatのCode Reading会(Agent Mode) •9/26 第2回 VS Code Copilot ChatのCode Reading会(MCP) •12/9 VS Code Copilot ChatのInline suggestionsのコードを読む会
お断り 読み違えている可能性もあるので、もし実際コードを読んでみて解釈が異なることに 気づいた場合は優しく教えていただけるとうれしいです!
MCP ClientとしてのCopilot 拡張の実装
MCP Tool選択の実装 GitHub Copilot Chat agent modeのツール上限は128個ですが、 ツール選択の精度の制御どうなってるんだ?? って思ったことありませんか
MCP Tool選択の実装 • ユーザーの入力をベクトル化→ツールに対して類似度検索してTop10でフィルタリン グ https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/tools/common/virtualTools/virtualToolGr ouper.ts#L339-L340
MCP Tool選択の実装 • ツールが多すぎる場合「仮想ツール(VirtualTools)」でツールをグループ化している • 仮想ツールでグループ化する条件 • VS Codeの設定で有効になっている+ツール数が既定以上 https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/tools/common/virtualTools/virtualToolGr ouper.ts#L52
MCP Tool選択の実装 • ツールが多すぎる=64個以上(上限128個の半分)の時に仮想ツール化が走る https://github.com/microsoft/vscode-copilotchat/blob/main/src/extension/tools/common/virtualTools/virtualToolsConstants.ts#L9
MCP Tool選択の実装 • MCP Tool Name+ ‘\n\n’ + MCP Tool Description をベクトル化して、意味合いが近いもの をグループ化している • 配信で読んだときは確かDescrtiptionは考慮していなかったので改善が入っていた https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/tools/common/virtualTools/toolEmbedding sComputer.ts#L156-L157
MCP Tool選択の実装 • 類似ツールのグループに対してどういうグループなのかSummaryを生成して Descriptionに追加している https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/tools/common/virtualTools/virtualToolGrou per.ts#L391-L392
MCP Tool選択の実装 • LLMに渡すツールとグループ数の上限は現状 128 – 10 – 30 = 88 • ここからさらに組み込みのツールを引いた数の範囲でLLMに渡すツールを絞っている https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/tools/common/virtualTools/virtualToolsCon stants.ts#L35-L36
MCP Tool選択の実装 • 以前読んだ時は使用頻度が低いツールに対して内部的に無効化フラグを立てる、と いう実装があったが、今回は確認できなかった • ツール選択ロジックはまだまだ試行錯誤されていそう
Inline suggestions
何をコンテキストにしているのか https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/completions-core/vscodenode/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.tsx#L126
何をコンテキストにしているのか • CurrentFile • カーソル位置の前後(トークン上限内であればファイル全体) https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/completions-core/vscodenode/lib/src/prompt/components/currentFile.tsx#L30
何をコンテキストにしているのか • SimilarFile(NeighborFiles) • 最大20ファイル、200000文字、直近でアクセスしたものを優先 • ワークスペース内での現在のファイルのパス • OpenTab https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/completions-core/vscodenode/lib/src/prompt/similarFiles/openTabFiles.ts#L63
何をコンテキストにしているのか • OpenTab • 開いているタブで同じ Language Id(言語グルー プ)のもの • 「フロントエンドフレー ムワークのような特定の 言語の場合は他の言語も 見た方が有益かもしれな いので今後実験したい」 とコメントがある https://github.com/microsoft/vscode-copilotchat/blob/b8595a8d26c4d414f93422a506faa55f1a293bb5/src/extension/completions-core/vscodenode/lib/src/prompt/similarFiles/neighborFiles.ts#L45
何をコンテキストにしているのか • 見ている限り、たとえば.tsファイルで作業しているときにREADME.mdを開いて いてもコンテキストにしていなそう • 初期によく言われていたが最新仕様でも変わらず(読み落としている可能性あり)
Inline suggestionsはコードが深くて読み切れて いる気がしないので、実際に読んで気づきが あればXなどで教えてください!
宣伝
12月12日 第 9 回 JAZUG for Women https://jazug.connpass.com/event/371615/
12月22日 第57回 Tokyo Jazug Night https://jazug.connpass.com/event/375673/
12月25日 Azureわいがや会2周年 • Microsoft Ignite RecapしてM5Stack猫耳を作り https://azure-waigaya.connpass.com/event/375717/ @ponponmikankanさん がDJをします