參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

Copilot 聊天的提示工程

本文介紹了編寫提示詞的技巧,以便從 Visual Studio Code 中的 Copilot 聊天獲得更好、更相關的響應。提示工程(Prompt engineering)或提示詞製作(prompt crafting)是您在討論人工智慧時會聽到的一個常用短語,指的是如何將資訊打包併發送到人工智慧 API 端點。

如果您是 VS Code 或 GitHub Copilot 的新手,您可能需要先閱讀 GitHub Copilot 概述文章,或者直接進入入門教程。

有多種選項可以最佳化您在內聯建議和聊天方面的 Copilot 體驗

充分利用 Copilot 內聯建議

GitHub Copilot 擴充套件程式會自動提供建議,以幫助您更高效地編寫程式碼。您可以做一些事情來幫助(“提示”)Copilot 給出最佳建議。好訊息是,您現在可能已經在做這些了,因為它們也能幫助您和您的同事理解您的程式碼。

向 Copilot 提供上下文

當 Copilot 擁有足夠的上下文來了解您在做什麼以及您需要什麼幫助時,它的工作效果最好。就像在請求同事幫助完成特定程式設計任務時會提供上下文一樣,您也可以對 Copilot 做同樣的事情。

開啟檔案

對於程式碼補全,Copilot 會檢視編輯器中當前和已開啟的檔案來分析上下文並建立適當的建議。在使用 Copilot 時,在 VS Code 中開啟相關檔案有助於設定此上下文,並讓 Copilot 看到您專案的更大圖景。

頂層註釋

就像您會向同事簡要、高層次地介紹情況一樣,在您正在處理的檔案中新增一個頂層註釋可以幫助 Copilot 理解您正在建立的各個部分的整體上下文。

適當的包含和引用

最好手動設定工作所需的包含(includes)或模組引用。Copilot 可以提出建議,但您可能最清楚需要包含哪些依賴項。這也有助於讓 Copilot 知道在製作建議時您希望它使用哪些框架、庫及其版本。

在下面的 TypeScript 示例中,我們想要記錄 add 方法的輸出。當我們沒有任何包含時,Copilot 建議使用 console.log

Copilot inline suggestion proposes Console.log when no imports in the file.

另一方面,當您新增對 Log4js 的引用時,Copilot 會建議使用該框架來記錄輸出

Copilot inline suggestion proposes logging using the imported logging framework.

有意義的函式名

就像一個名為 fetchData() 的方法對同事(或幾個月後的您自己)意義不大一樣,fetchData() 也對 Copilot 沒有多大幫助。使用有意義的函式名有助於 Copilot 提供一個能實現您想要的功能的函式體。

具體且範圍明確的函式註釋

函式名要想具有描述性,就不能太長。函式註釋可以幫助補充 Copilot 可能需要知道的細節。

用示例程式碼引導 Copilot

讓 Copilot 進入正確狀態的一個技巧是,將與您所需內容相近的示例程式碼複製並貼上到您開啟的編輯器中。提供一個小例子可以幫助 Copilot 生成與您想要實現的語言和任務相匹配的建議。一旦 Copilot 開始為您提供您想要並且會實際使用的程式碼,您就可以從檔案中刪除示例程式碼。當它預設提供舊程式碼建議時,這對於引導 Copilot 使用較新的庫版本尤其有幫助。

保持一致並維持高質量標準

Copilot 會根據您的程式碼來生成遵循現有模式的建議,所以“垃圾進,垃圾出”這句老話同樣適用。

始終保持高品質標準需要自律。特別是在您為了讓某些東西能執行而快速隨意編碼時,您可能希望在“試驗”模式下停用程式碼補全。要臨時暫停程式碼補全,請在狀態列中選擇 Copilot 選單,然後選擇暫停按鈕,每次將暫停時間增加五分鐘。要恢復程式碼補全,請在 Copilot 選單中選擇取消暫停按鈕。

Screenshot of the Copilot menu in the Status Bar with Snooze and Cancel Snooze buttons.

充分利用聊天功能

當您使用聊天時,有幾件事可以做來最佳化您的體驗。

使用聊天參與者和斜槓命令

聊天參與者旨在收集關於程式碼庫或特定領域或技術的額外上下文。透過使用適當的參與者,人工智慧可以找到並提供更好的資訊傳送給大語言模型(LLM)。例如,如果您想詢問有關您開啟的專案的問題,請使用 @workspace;如果您想了解更多關於 VS Code 功能和 API 的資訊,請使用 @vscode

Asking the @vscode participant how to change the VS Code colors

斜槓命令可以幫助 Copilot 聊天理解您提問時的意圖。您是在瞭解程式碼庫(/explain),需要幫助修復問題(/fix),還是在建立測試用例(/tests)?透過讓 Copilot 聊天知道您想做什麼,它可以根據您的任務調整回覆,並提供有用的命令、設定和程式碼片段。

Inline Chat slash command list

您可以用自然語言查詢寫出您的專案範圍或當前任務,但使用聊天參與者和斜槓命令更簡潔、更明確。

瞭解更多關於 Copilot 聊天中的聊天參與者斜槓命令

使用聊天變數提供上下文

聊天參與者,如 @workspace@vscode,可以提供特定領域上下文的聊天變數。您可以在聊天提示中使用 # 符號引用聊天變數。透過使用聊天變數,您可以更具體地說明您在聊天提示中包含的上下文。

例如,透過 #<檔名>#<資料夾名>,您可以在聊天提示中引用工作區中的特定檔案或資料夾。這透過提供有關您正在處理的檔案的上下文,有助於使 Copilot 聊天的回答與您的程式碼更相關。您可以問諸如“你能對 #package.json 提出改進建議嗎?”或“我如何在 #devcontainer.json 中新增擴充套件?”之類的問題。

您還可以透過聊天檢視中的附加上下文按鈕為您的聊天訊息新增上下文。然後,您可以從快速選擇器中選擇特定型別的上下文,例如當前選擇、工作區中的一個或多個檔案,或原始碼中的一個或多個符號。

Screenshot of VS Code Copilot Chat view, showing the Attach context button and context Quick Pick.

瞭解更多關於在 Copilot 聊天中使用上下文變數

具體化並保持簡單

當您要求 Copilot 做某事時,您的要求要具體,並將一個大任務分解成多個獨立的小任務。例如,不要讓 Copilot 建立一個使用 TypeScript 和 Pug 的 Express 應用,並且該應用有一個從 MongoDB 資料庫檢索資料的產品頁面。相反,首先讓 Copilot 建立使用 TypeScript 和 Pug 的 Express 應用。接下來,要求新增一個產品頁面,最後要求從資料庫中檢索客戶資料。

當您要求 Copilot 執行特定任務時,要具體說明您想使用的輸入、輸出、API 或框架。您的提示越具體,結果就越好。例如,不要說“從資料庫讀取產品資料”,而應該說“按類別讀取所有產品,以 JSON 格式返回資料,並使用 Mongoose 庫”。

迭代您的解決方案

在向 Copilot 聊天尋求幫助時,您不必滿足於第一個響應。您可以迭代並提示 Copilot 改進解決方案。Copilot 既有生成程式碼的上下文,也有您當前對話的上下文。

這是一個使用內聯聊天建立斐波那契數計算函式的例子

First response from Copilot for a function to calculate Fibonacci numbers

也許您更喜歡一個不使用遞迴的解決方案

Ask Copilot to not use recursion and new result

您甚至可以要求 Copilot 遵循編碼規範或改進變數名

Ask Copilot to use better variable names and new result

即使您已經接受了一個結果,您也隨時可以稍後要求 Copilot 對程式碼進行迭代。

更多關於 Copilot 提示的資源

如果您想了解更多關於高效使用 GitHub Copilot 的資訊,可以關注這些影片和部落格文章