在 VS Code 中自訂 AI 回應
Visual Studio Code 中的聊天功能,若提供正確的上下文,便能產生符合您的編碼習慣與專案需求的程式碼回應及程式碼。與其在每次聊天提示中重複輸入這些資訊,不如將這些上下文儲存於檔案中,並自動納入每次的聊天請求。本文將引導您了解如何透過自訂指示(custom instructions)與提示檔案(prompt files)來客製化 VS Code 中的 AI 回應。
在 Visual Studio Code 中自訂 AI 回應有三種主要方法:
-
自訂指示:定義常見的準則或規則,例如程式碼產生、程式碼檢閱或產生認可訊息。自訂指示描述 AI 應如何執行任務(即任務的執行方式)。了解如何定義自訂指示。範例情境
指定程式碼撰寫規範、偏好的技術或專案需求,讓產生的程式碼符合您的標準。
設定程式碼檢閱規則,例如檢查安全性漏洞或效能問題。
提供產生提交訊息或提取請求標題與描述的說明。
-
提示檔案:定義常用任務的可重複使用提示,例如產生程式碼或執行程式碼檢閱。提示檔案是您可以直接在聊天中執行的獨立提示。它們描述要執行的任務(應做什麼)。您可以選擇性地包含任務特定的指南,說明任務應如何執行,或在提示檔案中參考自訂指示。了解如何建立提示檔案。範例情境
為常見的程式碼任務建立可重複使用的提示,例如建構新元件、API 路由或產生測試。
定義用於執行程式碼檢閱的提示,例如檢查程式碼品質、安全性弱點或效能問題。
為複雜的流程或專案特定模式建立逐步指南。
定義用於生成實施計畫、架構設計或遷移策略的提示詞。
-
自訂聊天模式:定義聊天如何運作、可以使用哪些工具,以及如何與程式碼庫互動。每個聊天提示都在聊天模式的界限內執行,無需為每個請求設定工具和指示。範例情境
建立一個規劃專用的聊天模式,讓 AI 僅能唯讀程式碼庫,且只能產出實施計畫。
定義一個研究聊天模式,讓 AI 可以透過外部資源來探索新技術或收集資訊。
建立一個前端開發者聊天模式,讓 AI 只能生成和修改與前端開發相關的程式碼。
自訂指示
自訂指示可讓您描述常見的準則或規則,以獲得符合您特定程式設計實務和技術堆疊的回應。您無需在每次聊天查詢中手動包含此內容,自訂指示會自動將此資訊納入每次聊天請求中。
程式碼補全不會考量自訂指示。
自訂指示的類型
VS Code 支援多種方式來定義自訂指令:
自訂提示類型 |
說明 |
|---|---|
.github/copilot-instructions.md 檔案 |
|
.instructions.md 個檔案 |
|
| VS Code 設定 |
|
您可以結合使用這些方法來定義自訂指示,所有指示都會包含在聊天請求中。指示之間沒有特定的順序或優先順序,因此請確保避免在檔案中出現相互衝突的指示。
自訂指示範例
以下範例將示範如何使用自訂指示:
範例:通用程式碼規範
---
applyTo: "**"
---
# Project general coding standards
## Naming Conventions
- Use PascalCase for component names, interfaces, and type aliases
- Use camelCase for variables, functions, and methods
- Prefix private class members with underscore (_)
- Use ALL_CAPS for constants
## Error Handling
- Use try/catch blocks for async operations
- Implement proper error boundaries in React components
- Always log errors with contextual information
範例:TypeScript 與 React 編碼規範
請注意,這些指示會引用一般的程式碼指南檔案。您可以將指示分成多個檔案,以保持其組織性並專注於特定主題。
---
applyTo: "**/*.ts,**/*.tsx"
---
# Project coding standards for TypeScript and React
Apply the [general coding guidelines](./general-coding.instructions.md) to all code.
## TypeScript Guidelines
- Use TypeScript for all new code
- Follow functional programming principles where possible
- Use interfaces for data structures and type definitions
- Prefer immutable data (const, readonly)
- Use optional chaining (?.) and nullish coalescing (??) operators
## React Guidelines
- Use functional components with hooks
- Follow the React hooks rules (no conditional hooks)
- Use React.FC type for components with children
- Keep components small and focused
- Use CSS modules for component styling
使用 .github/copilot-instructions.md 檔案
您可以將自訂指示儲存在工作區或程式碼儲存庫的 .github/copilot-instructions.md 檔案中,並使用 Markdown 來描述您的程式設計慣例、偏好的技術和專案需求。這些指示僅適用於該檔案所在的儲存庫。
VS Code 會自動將 .github/copilot-instructions.md 檔案中的指示納入每個聊天請求,並用於生成程式碼。
若要使用 .github/copilot-instructions.md 檔案:
-
將 github.copilot.chat.codeGeneration.useInstructionFiles 設定為true,即可指示 VS Code 使用自訂的指示檔案。 -
在您的工作區根目錄建立一個.github/copilot-instructions.md檔案。若有需要,請先建立一個.github目錄。 -
請使用自然語言並以 Markdown 格式描述您的指示。
指令之間的空格會被忽略,所以您可以將指令寫成單一段落、每行一個指令,或是用空白行分隔以增加可讀性。
GitHub Copilot 在 Visual Studio 和 GitHub.com 中也會偵測到 .github/copilot-instructions.md 檔案。如果您有一個同時在 VS Code 和 Visual Studio 中使用的專案,您可以使用同一個檔案來為這兩個編輯器定義自訂指示。
使用 .instructions.md 檔案
您也可以建立一個或多個 .instructions.md 檔案,用來儲存特定任務的自訂指令。例如,您可以為不同的程式語言、框架或專案類型建立指令檔案。
VS Code 可以自動為所有聊天要求新增指示檔案,或者您可以指定指示應自動套用到哪些檔案。您也可以手動將指示檔案附加到聊天提示。
VS Code 的指令檔案支援兩種範圍:
工作區的指示檔案僅在工作區內可用,並儲存在工作區的.github/instructions資料夾中。
使用者指令檔案:可在多個工作區中使用,並儲存在目前的 VS Code 設定檔中。
指令檔案結構
指令檔案是副檔名為 .instructions.md 的 Markdown 檔案,其中包含兩個區段:
-
(選用)包含中繼資料的標頭(Front Matter 語法)-
"description:這是說明檔的簡短描述。當您在聊天檢視中將滑鼠懸停在說明檔上時,就會顯示此描述。" -
"applyTo:指定一個 glob 模式,用於自動套用指示的檔案。若要始終包含自訂指示,請使用**模式。"
例如,以下指示檔案一律會被套用:--- applyTo: "**" --- Add a comment at the end of the file: 'Contains AI-generated edits.'
-
-
包含指示內容的機身
使用 Markdown 格式以自然語言指定自訂指示。您可以使用標題、列表和程式碼區塊來架構這些指示。
您可以使用 Markdown 連結來參考其他指令檔案。請使用相對路徑,並確保路徑相對於指令檔案的位置是正確的。
建立說明檔案
建立說明檔案:
-
在命令面板 (⇧⌘P) 中執行「Chat: New Instructions File」指令。 -
請選擇要建立指令檔案的位置。
使用者指令檔案會儲存在目前的設定檔資料夾中。您可以透過「設定同步」功能,在多個裝置間同步您的使用者指令檔案。請務必在「設定同步:設定指令」中配置「提示與指令」設定。
預設情況下,工作區的指示檔案會儲存在您工作區的.github/instructions資料夾中。您可以使用 `chat.instructionsFilesLocations` 設定,為您的工作區新增更多指示檔案的資料夾。 -
請輸入您的指令檔案名稱。 -
使用 Markdown 格式撰寫自訂說明。
參考額外的 Markdown 連結工作區檔案([index](../index.ts)),或在說明檔案中以#index.ts方式參考。
使用「命令選擇區」中的「Chat: Configure Instructions」指令,來選取並編輯現有的指示檔案。此指令會在編輯器中開啟指示檔案,您可以在其中編輯指示和中繼資料。
在聊天中使用說明檔
若要將說明檔手動附加到聊天提示中:
-
在「聊天」檢視中,選取「新增內容」>「指示」,然後從「快速選擇」中選取指示檔案。 -
從命令選擇區 (⇧⌘P) 執行「Chat: Attach Instructions」指令,然後從快速選擇中選取指示檔案。
若要自動套用指示檔案,請在指示檔案中指定 applyTo 中繼資料屬性:
"**:將指示套用於所有聊天要求。"
根據聊天內容中的檔案類型套用指示。
在設定中指定自訂指令
您可以在使用者或工作區設定中配置自訂指示。這對於指定非程式碼生成場景的自訂指示很有幫助。VS Code 會自動將設定中的自訂指示套用到聊天要求或特定任務。
針對不同情境有特定的設定。下表列出了各類自訂指示的設定。
| 指令類型 | 設定名稱 |
|---|---|
| 程式碼產生 | GitHub Copilot Chat 程式碼生成說明 |
| 測試生成 | 在 VS Code 中自訂 AI 回應 |
| 程式碼檢閱 | 自訂 VS Code 中的 AI 回應 |
Commit 訊息生成 |
在 VS Code 中自訂 AI 回應 |
提取「source」欄位中的內容。 |
GitHub Copilot Chat 提取要求說明生成說明 |
您可以將自訂指示定義為設定值中的文字( text 屬性),或在您的工作區中引用外部檔案( file 屬性)。
下列程式碼片段說明如何在 settings.json 檔案中定義一組指示。
"github.copilot.chat.codeGeneration.instructions": [
{
"text": "Always add a comment: 'Generated by Copilot'."
},
{
"text": "In TypeScript always use underscore for private field names."
},
{
"file": "general.instructions.md" // import instructions from file `general.instructions.md`
},
{
"file": "db.instructions.md" // import instructions from file `db.instructions.md`
}
],
定義自訂指示的訣竅
-
您的指示應保持簡短且獨立,每個指示都應為單一、簡單的陳述。若需提供多項資訊,請使用多個指示。 -
指示中請勿提及外部資源,例如特定的程式碼撰寫規範。 -
將指示分割成多個檔案。這種方法有助於依主題或任務類型來整理指示。 -
透過將自訂指示儲存在指示檔案中,可輕鬆與團隊或跨專案共用。您也可以對檔案進行版本控制,以追蹤隨時間的變更。 -
在指令檔案的標頭中,使用applyTo屬性即可將指令自動套用到特定的檔案或資料夾。 -
在您的提示檔案中引用自訂指示,讓提示保持簡潔、專注,並避免為不同任務重複相同的指示。
提示檔案(實驗性質)
提示檔案是可重複使用的提示,用於常見任務,例如產生程式碼或執行程式碼檢閱。您可以在 Markdown 檔案中定義提示內容。提示檔案是您可以直接在聊天中執行的獨立提示。您也可以選擇性地包含執行任務的指南。
提示檔案可利用指示檔案來重複使用通用指南,並將特定任務的指示納入提示中。例如,安全審查提示檔案可引用描述通用安全實務的自訂指示,同時也包含關於如何報告審查結果的特定指示。
VS Code 支援兩種提示檔案的範圍:
工作區提示檔案:僅限於工作區內使用,並儲存在工作區的.github/prompts資料夾中。
使用者提示檔案:可在多個工作區中使用,並儲存在目前的 VS Code 設定檔中。
提示檔範例
以下範例將示範如何使用提示檔案:
範例:產生一個 React 表單元件
---
mode: 'agent'
tools: ['githubRepo', 'codebase']
description: 'Generate a new React form component'
---
Your goal is to generate a new React form component based on the templates in #githubRepo contoso/react-templates.
Ask for the form name and fields if not provided.
Requirements for the form:
* Use form design system components: [design-system/Form.md](../docs/design-system/Form.md)
* Use `react-hook-form` for form state management:
* Always define TypeScript types for your form data
* Prefer *uncontrolled* components using register
* Use `defaultValues` to prevent unnecessary rerenders
* Use `yup` for validation:
* Create reusable validation schemas in separate files
* Use TypeScript types to ensure type safety
* Customize UX-friendly validation rules
範例:對 REST API 進行安全性檢閱
---
mode: 'edit'
description: 'Perform a REST API security review'
---
Perform a REST API security review:
* Ensure all endpoints are protected by authentication and authorization
* Validate all user inputs and sanitize data
* Implement rate limiting and throttling
* Implement logging and monitoring for security events
提示檔案結構
提示檔案是副檔名為 .prompt.md 的 Markdown 檔案,主要包含以下兩個區段:
-
(選用)包含中繼資料的標頭(Front Matter 語法)
"mode:執行提示時要使用的聊天模式:ask、edit或agent(預設)。"
tools:工具(集合)名稱的陣列,用以指定代理模式中可使用的工具(集合)。請選擇「設定工具」,從工作區中可用工具的清單裡選取工具。若指定的工具(集合)在執行提示時無法使用,系統將會忽略它。
"description:提示的簡短說明。"
-
包含提示內容的主體
提示檔案的格式如同聊天中的提示詞。這讓您可以混合使用自然語言指令、額外內容,甚至將其他提示檔案連結作為相依性。您可以使用 Markdown 格式來架構提示內容,包含標題、列表和程式碼區塊。
您可以透過 Markdown 連結來引用其他工作區檔案、提示檔案或說明檔案。請使用相對路徑來引用這些檔案,並確保路徑相對於提示檔案的位置是正確的。
在提示檔案中,您可以使用 ${variableName} 語法來引用變數。您可以引用以下變數:
工作區變數 -${workspaceFolder},${workspaceFolderBasename}
選取變數 -${selection},${selectedText}
檔案內容變數 -${file}、${fileBasename}、${fileDirname}、${fileBasenameNoExtension}
輸入變數 -${input:variableName}、${input:variableName:placeholder}(將值從聊天輸入欄位傳遞至提示)
建立工作區提示檔案
工作區的提示檔案會儲存在該工作區內,且僅限於該工作區使用。
提示檔案預設會儲存在您工作區的 .github/prompts 目錄中。您也可以透過 chat.promptFilesLocations 設定來指定額外的提示檔案位置。
若要建立工作區提示檔案:
-
從命令選擇區 (⇧⌘P) 執行「Chat: New Prompt File」指令。 -
請選擇要建立提示檔案的位置。
預設僅提供.github/prompts資料夾。請透過 chat.promptFilesLocations 設定,為您的工作區新增更多提示資料夾。 -
請輸入提示檔案的名稱。
或者,您也可以直接在工作區的 prompts 資料夾中建立一個.prompt.md檔案。 -
使用 Markdown 格式撰寫聊天提示。
在提示檔案中,您可以將其他工作區檔案參考為 Markdown 連結([index](../index.ts)),或在提示檔案中參考為#index.ts。
您也可以參考其他.prompt.md檔案,藉此建立提示的階層結構。同樣地,您也可以參考指示檔案。
建立使用者提示檔案
使用者提示檔案會儲存在您的使用者設定檔中。透過使用者提示檔案,您可以在多個工作區間共用可重複使用的提示。
建立使用者提示檔案:
-
從命令選擇區 (⇧⌘P) 選取「Chat: New Prompt File」指令。 -
將「使用者資料夾」選為提示檔案的位置。
如果您使用多個 VS Code 設定檔,提示檔案會建立在目前設定檔的使用者資料夾中。 -
請輸入提示檔案的名稱。 -
使用 Markdown 格式撰寫聊天提示。
您也可以參考其他使用者提示檔案或使用者說明檔案。
在聊天中使用提示詞檔案
您有幾種方式可以執行提示檔案:
-
從命令選擇區 (⇧⌘P) 執行「Chat: Run Prompt」指令,然後從快速選擇中選取提示檔案。 -
在「聊天」檢視中,於聊天輸入欄輸入/後接上檔案名稱。
此選項可讓您在聊天輸入欄位中傳遞額外的資訊。例如,/create-react-form或/create-react-form: formName=MyForm。 -
在編輯器中開啟提示檔案,然後按下編輯器標題列的播放按鈕。您可以選擇在目前的聊天工作階段執行提示,或開啟一個新的聊天工作階段。
這個選項對於快速測試和迭代您的提示檔案很有幫助。
在不同裝置間同步使用者的提示檔案
VS Code 可透過「設定同步」功能,在多個裝置間同步您的自訂提示檔案。
若要同步您的使用者提示檔案,請為提示和指示檔案啟用「設定同步」功能:
-
請確認您已啟用「設定同步」功能。 -
在命令選擇區執行「設定同步」:從命令選擇區進行設定 (⇧⌘P)。 -
從設定清單中選取要同步的提示和指示。
在 VS Code 中集中管理指示和提示檔案
您可以使用 chat.promptFiles 設定,在 VS Code 中啟用或停用提示檔案。
若要在組織內集中啟用或停用此設定,請參閱企業文件中的「集中管理 VS Code 設定」。
設定
自訂指示設定
-
chat.promptFiles(實驗音樂):啟用可重複使用的提示與說明檔案。 -
github.copilot.chat.codeGeneration.useInstructionFiles:控制是否將來自.github/copilot-instructions.md的程式碼指示加入 Copilot 要求。 -
chat.instructionsFilesLocations(實驗音樂): 一個包含指示檔案位置的字典,以及一個表示是否啟用的布林值。相對路徑會從您工作區的根資料夾解析。支援檔案路徑的 glob 模式。預設情況下,指示檔案位於您工作區的.github/instructions資料夾。"chat.instructionsFilesLocations": { "src/frontend/instructions": true, "src/backend/instructions": false } -
github.copilot.chat.codeGeneration.instructions(實驗): 將會加入到產生程式碼的 Copilot 要求中的指示集。 -
github.copilot.chat.testGeneration.instructions(實驗): 一組將會被加入到 Copilot 請求中以產生測試的指示。 -
github.copilot.chat.reviewSelection.instructions(預覽): 這是一組將會加入 Copilot 要求中的指示,用於檢閱目前編輯器中的選取內容。 -
github.copilot.chat.commitMessageGeneration.instructions(實驗): 產生 commit 訊息時,會將此指示集加入 Copilot 的要求中。 -
github.copilot.chat.pullRequestDescriptionGeneration.instructions(實驗性):產生提取請求標題與描述時,會將此指令集加入 Copilot 的請求中。
提示檔案設定
-
chat.promptFiles(實驗音樂):啟用可重複使用的提示與指令檔案。 -
'chat.promptFilesLocations(實驗): 一個字典,其中包含提示檔案的位置以及一個表示它們是否已啟用的布林值。相對路徑會從工作區的根資料夾解析。支援檔案路徑的 glob 模式。預設情況下,提示檔案位於您工作區的.github/prompts資料夾中。'"chat.promptFilesLocations": { ".github/prompts": false, "setup/**/prompts": true }