VS與VSC的GitHub Copilot在處理.github/*-instructions.md的行為差異

VS與VSC的GitHub Copilot在處理.github/*-instructions.md的行為差異

在開始導入 GitHub Copilot 協助開發的過程中,有個重要的 instructions(指引)檔,它能為 GitHub Copilot 提供方案(專案)重要的 Context(情境、脈絡),讓 GitHub Copilot 能提供更精確的回應或處理。不過在開發過程中發現 Visual Studio(VS)與 Visual Studio Code(VSC)在 .github/*-instructions.md 的處理上有些差異。

以下來自 VS 與 VSC 開發工具裡的 GitHub Copilot 本身的回答,我僅簡單做一些機敏資訊的修飾。

Visual Studio 的 instructions.md 處理模式

Q:在開始此Session處理之前,或在我未說明、指定的情況下,你會先去找 .github\*-instructions.md 來瞭解嗎? A:

非常好的問題!讓我誠實回答:

🤔 實際情況是 不會自動去找。我的標準工作流程是:

預設行為(未被告知時)

  1. 分析用戶的問題/需求
  2. 查看當前打開的文件
  3. 搜索相關的程式碼檔案
  4. 根據我的訓練知識和程式碼模式來實作

只有在以下情況才會主動查找指引文件

  • ✅ 用戶明確提到「參考 .github/copilot-instructions.md」
  • ✅ 用戶說「按照專案規範」、「遵循開發模式」
  • ✅ 用戶要求「參考現有的開發慣例」

💡 為什麼不會自動查找?

  1. 工具限制 - 我沒有「自動掃描整個專案尋找文件」的預設行為
  2. 效率考量 - 避免每次都執行大量檔案搜尋
  3. 脈絡優先 - 優先使用用戶提供的脈絡和打開的檔案

🎯 這次 Session 的特殊情況

這次我會去找指引文件,是因為您明確告訴我:

"我已經在所有專案目錄下準備好 .github\copilot-instructions.md 讓你可以先行參考。"

這個提示讓我知道:

  1. ✅ 有指引文件存在
  2. ✅ 您希望我參考它
  3. ✅ 它包含重要的開發規範

📋 我的建議改善方式

如果您希望未來所有協作都自動參考指引,可以考慮:

方案 1:在 Workspace 說明中加入提示

在 .vscode/settings.json 或專案 README 中加入:

{
  "github.copilot.chat.welcomeMessage": "請先參考 .github/copilot-instructions.md 了解專案規範"
}

方案 2:在每次對話開始時提醒

您:「實作 XXX 功能(請參考專案指引)」

方案 3:建立 Copilot 指示檔(推薦)⭐

在根目錄建立 .github/copilot-instructions.md,GitHub Copilot 會自動讀取(這正是您已經做的!)

但問題是:我目前不會主動去讀取它,除非:

• 用戶明確要求 • 或者在對話中提及

🔄 改進建議

對您來說每次開始新任務時,可以加一句提示:

「實作 XXX,請先查看專案的 .github/copilot-instructions.md」

對我來說我可以在收到新任務時,主動詢問:

「我注意到這是一個現有專案,是否有開發指引或規範文件需要參考?」

✨ 總結

坦白說:我不會自動去找指引文件

但這次之所以做得好,是因為:

  1. ✅ 您明確告訴我有指引文件
  2. ✅ 您要求我「按照此路徑下的開發模式」
  3. ✅ 我查看了範例檔案(ComponentTraceRawService)
  4. ✅ 指引文件寫得非常清楚完整

建議: 如果專案很重要且有明確規範,每次開始新功能時加一句:

"請參考 .github/copilot-instructions.md 進行開發"

這樣我就會確保遵循所有規範!🎯

Visual Studio Code 的 instructions.md 處理模式

Q:在開始此Session處理之前,或在我未說明、指定的情況下,你會先去找 .github\*-instructions.md 來瞭解嗎? A:

是的,我會!作為 AI 助理,我被設計為在工作區中尋找並使用 copilot-instructions.md 或類似的指示檔案來理解專案。

在這個對話的一開始,您可以看到我的系統已經自動載入了:

<attachment filePath="c:\\Repos\\xxx\\.github\\copilot-instructions.md">
## xxx 專案的 AI 協作指南(繁體)
...
</attachment>

這個機制會:

  • 自動掃描:在工作區根目錄尋找 copilot-instructions.md
  • 自動載入:將內容作為 attachment 提供給我
  • 優先參考:在回答問題或執行任務時,優先遵循這些指示

指示檔案的階層,根據我收到的 attachment,有以下階層結構:

檔案路徑 適用範圍 優先級
c:\Users\BruceChen\.github\copilot-instructions.md 全域(所有專案)
c:\Repos\xxx\.github\copilot-instructions.md xxx 整體專案
c:\Repos\xxx\Services\.github\copilot-instructions.md Services 專案 高(當工作在此專案時)
c:\Repos\xxx\DataAccess\.github\copilot-instructions.md DataAccess 專案 高(當工作在此專案時)
c:\Repos\xxx\Application\.github\copilot-instructions.md Application 專案 高(當工作在此專案時)

指示檔案中提到的特殊模式

您專案中還有特殊的模式指示檔案(applyTo 屬性):

  • postman-collections-*.instructions.md - 適用於 **/*-post-c-pm-*
  • tools.instructions.md - AI Toolkit 相關
  • azure.instructions.md - Azure 最佳實踐

實際運作方式,即使您沒有明確說明,當我:

  • 需要建立新檔案時 → 會參考指示中的慣例
  • 需要修改現有程式碼時 → 會遵循指示中的 SOLID 原則、命名規範
  • 不確定如何實作時 → 會優先參考指示中提到的既有檔案與模式

小結

說真的,這結果讓我有點意外,也不意外。意外的是,就 GitHub Copilot 的文件來說,Visual Studio 預設行為應該要能自動載入 .github/copilot-instructions.md,這個組態 Visual Studio 裡預設也是 Enabed 的。不意外的是,就是越對話越覺得不太對勁,老是覺得 Visual Studio 裡的 GitHub Copilot 不太受控(沒照著指引做事),Visual Studio Code 就正常很多,才會有上面的 Q&A 出現。

另一份從 Visual Studio 2022 Release 文件中 Target your Copilot instructions 查詢到的結果也是說應該是要主動載入

由 VSC 的回答中可以看到,這個專案是個標準三層式架構的專案。

Solution
├── Application (Main)
    ├── Application.sln
├── DataAccess
    ├── DataAccess.sln
└── Services
    └── Services.sln

讓我想到一個可能是專案使用上的差異性,在 Visual Studio 我們習慣一個一個 .sln 的開啟並進行開發,而那個預設的 Enable custom instructions to be loaded from .github/copilot-instructions.md files and added to requests 實際上是指 Repos 根目錄那層 .github,因此在載入各專案的工作區域並未包含到根目錄,因此它沒有主動讀入根目錄 .github/copilot-instructions.md

但在 Visual Studio Code,我習慣由 Terminal 進入,而且進入點是 xxx 專案的根目錄,例如:

cd c:\Repos\xxx
code .

因此它能發現根目錄的 .github 與專案內容的 .github 來讀取指引。

或許我應該按照 Visual Studio 2022 Release 說明中,把所有 instructions 重新整理後都放到根目錄的 .github\instructions\*-instructions.md 再透過 applyTo 套用到指定目錄下:

---
applyTo: "src/**/*.cs"
---

這個再等我試試看,不知道會不會有下集,哈哈!

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。