聊天參與者 API

聊天參與者是專門的助理,讓使用者能夠透過領域專家來擴充 VS Code 中的聊天功能。使用者可以透過 @提及(@-mention)來呼叫聊天參與者,隨後該參與者將負責處理使用者的自然語言提示。

在本擴充功能指南中,您將學習如何使用聊天參與者 API 來建立聊天參與者。

VS Code 內建了幾個聊天參與者,例如 @vscode@terminal@workspace。它們針對各自的領域問題進行了最佳化。

聊天參與者與語言模型工具不同,後者是作為 LLM 編排解決使用者聊天提示所需步驟的一部分而被呼叫。聊天參與者會接收使用者的提示,並自行編排所需的任務。

為什麼要在您的擴充功能中實作聊天參與者?

在您的擴充功能中實作聊天參與者有幾個好處:

  • 擴充聊天功能:具備專業的領域知識與技能。例如,內建的 @vscode 參與者具備有關 VS Code 及其擴充功能 API 的知識。
  • 掌控對話:管理使用者聊天提示與回應的端到端過程。
  • 與 VS Code 深度整合:使用廣泛的擴充功能 API。例如,使用偵錯 API 來取得當前的偵錯上下文,並將其作為工具功能的一部分。
  • 發佈與部署:透過 Visual Studio Marketplace 分發聊天參與者,為使用者提供可靠且無縫的體驗。使用者無需進行額外的安裝與更新程序。

如果您希望提供可在自主代理程式編碼會話中自動呼叫的領域特定功能,可以考慮實作語言模型工具MCP 伺服器。請參閱 AI 擴充性概覽,了解不同選項的詳細資訊以及如何決定使用哪種方法。

聊天使用者體驗的組成部分

以下截圖展示了範例擴充功能在 Visual Studio Code 聊天體驗中的不同概念。

Chat concepts explanation

  1. 使用 @ 語法呼叫 @cat 聊天參與者
  2. 使用 / 語法呼叫 /teach 命令
  3. 使用者提供的查詢,也稱為使用者提示
  4. 圖示與參與者 fullName,表示 Copilot 正在使用 @cat 聊天參與者
  5. Markdown 回應,由 @cat 提供
  6. 包含在 Markdown 回應中的程式碼片段
  7. 包含在 @cat 回應中的按鈕,該按鈕會呼叫 VS Code 命令
  8. 由聊天參與者提供的建議後續問題
  9. 聊天輸入欄位,帶有由聊天參與者 description 屬性提供的預留位置文字

建立聊天參與者

實作聊天參與者包含以下部分:

  1. 在擴充功能的 package.json 檔案中定義聊天參與者。
  2. 實作請求處理常式(request handler)來處理使用者的聊天提示並傳回回應。
  3. (選用)實作聊天斜線命令(slash commands),為使用者提供常用任務的簡寫標記。
  4. (選用)定義建議的後續問題。
  5. (選用)實作參與者偵測,讓 VS Code 在沒有明確提及的情況下,自動將聊天請求路由到適當的參與者。

您可以從基礎範例專案開始。

Diagram showing how extension can contribute to chat

1. 註冊聊天參與者

建立聊天擴充功能的第一步是在 package.json 中註冊它,並包含以下屬性:

  • id:聊天參與者的唯一識別碼,定義於 package.json 檔案中。
  • name:聊天參與者的簡稱,用於聊天中的 @-提及。
  • fullName:聊天參與者的全名,顯示在回應的標題區域。
  • description:聊天參與者用途的簡短描述,用作聊天輸入欄位中的預留文字。
  • isSticky:一個布林值,指示聊天參與者在回應後是否保留在聊天輸入欄位中。
"contributes": {
        "chatParticipants": [
            {
                "id": "chat-sample.my-participant",
                "name": "my-participant",
                "fullName": "My Participant",
                "description": "What can I teach you?",
                "isSticky": true
            }
        ]
}

我們建議使用小寫的 name 並使用標題大小寫(Title Case)的 fullName,以與現有的聊天參與者保持一致。獲取更多關於聊天參與者命名慣例的資訊。

注意

某些參與者名稱是保留的。如果您使用此類保留名稱,VS Code 會顯示您的聊天參與者的完整名稱(包含擴充功能 ID)。

2. 實作請求處理常式

使用 Chat Participant API 實作聊天參與者。這包含以下步驟:

  1. 在擴充功能啟用時,使用 vscode.chat.createChatParticipant 建立參與者。

    提供您在 package.json 中定義的 ID,以及對您在下一步中實作的請求處理常式的參考。

    export function activate(context: vscode.ExtensionContext) {
      // Register the chat participant and its request handler
      const cat = vscode.chat.createChatParticipant('chat-sample.my-participant', handler);
    
      // Optionally, set some properties for @cat
      cat.iconPath = vscode.Uri.joinPath(context.extensionUri, 'cat.jpeg');
    
      // Add the chat request handler here
    }
    
  2. activate 函式中,定義 vscode.ChatRequestHandler 請求處理常式。

    請求處理常式負責處理 VS Code Chat 檢視中使用的聊天請求。每次使用者在聊天輸入欄位中輸入提示時,都會呼叫聊天請求處理常式。

    const handler: vscode.ChatRequestHandler = async (
      request: vscode.ChatRequest,
      context: vscode.ChatContext,
      stream: vscode.ChatResponseStream,
      token: vscode.CancellationToken
    ): Promise<ICatChatResult> => {
      // Chat request handler implementation goes here
    };
    
  3. vscode.ChatRequest 確定使用者的意圖。

    若要確定使用者請求的意圖,您可以參考 vscode.ChatRequest 參數來存取使用者的提示文字、命令與聊天位置。

    (選用)您可以使用語言模型來確定使用者的意圖,而不是使用傳統邏輯。作為 request 物件的一部分,您會得到一個使用者在聊天模型下拉選單中選擇的語言模型執行個體。了解如何在您的擴充功能中使用語言模型 API

    以下程式碼片段展示了先使用命令,然後使用使用者提示來確定使用者意圖的基本結構。

    const handler: vscode.ChatRequestHandler = async (
      request: vscode.ChatRequest,
      context: vscode.ChatContext,
      stream: vscode.ChatResponseStream,
      token: vscode.CancellationToken
    ): Promise<ICatChatResult> => {
      // Test for the `teach` command
      if (request.command == 'teach') {
        // Add logic here to handle the teaching scenario
        doTeaching(request.prompt, request.variables);
      } else {
        // Determine the user's intent
        const intent = determineUserIntent(request.prompt, request.variables, request.model);
    
        // Add logic here to handle other scenarios
      }
    };
    
  4. 新增處理使用者請求的邏輯。

    通常,聊天擴充功能會使用 request.model 語言模型執行個體來處理請求。在這種情況下,您可能會調整語言模型提示以符合使用者的意圖。

    或者,您可以透過呼叫後端服務、使用傳統程式設計邏輯,或組合使用這些選項來實作擴充功能邏輯。例如,您可以呼叫網頁搜尋來收集額外資訊,然後將其作為上下文提供給語言模型。

    在處理當前請求時,您可能需要參考先前的聊天訊息。例如,如果先前的回應傳回了 C# 程式碼片段,使用者的當前請求可能是「用 Python 提供該程式碼」。了解如何使用聊天訊息記錄

    如果您想根據聊天輸入的位置(聊天檢視、快速聊天、內嵌聊天)以不同方式處理請求,可以使用 vscode.ChatRequestlocation 屬性。例如,如果使用者從終端機內嵌聊天發送請求,您可能會查找 Shell 命令;而如果使用者使用聊天檢視,則可以傳回更詳盡的回應。

  5. 將聊天回應傳回給使用者。

    處理完請求後,您必須在聊天檢視中向使用者傳回回應。您可以使用串流(streaming)來回應使用者的查詢。

    回應可以包含不同的內容類型:Markdown、圖片、參考資料、進度、按鈕與檔案樹。

    Response from the cat extension that includes code, markdown and a button

    擴充功能可以使用回應串流的相關方式:

    stream.progress('Picking the right topic to teach...');
    stream.markdown(`\`\`\`typescript
    const myStack = new Stack();
    myStack.push(1); // pushing a number on the stack (or let's say, adding a fish to the stack)
    myStack.push(2); // adding another fish (number 2)
    console.log(myStack.pop()); // eating the top fish, will output: 2
    \`\`\`
    So remember, Code Kitten, in a stack, the last fish in is the first fish out - which we tech cats call LIFO (Last In, First Out).`);
    
    stream.button({
      command: 'cat.meow',
      title: vscode.l10n.t('Meow!'),
      arguments: []
    });
    

    獲取更多關於支援的聊天回應輸出類型的資訊。

    實際上,擴充功能通常會向語言模型發送請求。一旦從語言模型獲得回應,它們可能會進一步處理它,並決定是否應將任何內容串流回給使用者。VS Code Chat API 是基於串流的,並且與串流式語言模型 API 相容。這使得擴充功能能夠持續報告進度和結果,目標是提供流暢的使用者體驗。了解如何使用語言模型 API

3. 註冊斜線命令

聊天參與者可以提供斜線命令,這些命令是擴充功能所提供特定功能的捷徑。使用者可以在聊天中使用 / 語法來參考斜線命令,例如 /explain

回答問題的任務之一是確定使用者意圖。例如,VS Code 可能會推斷「建立一個帶有 Node.js Express Pug TypeScript 的新工作區」意味著您想要一個新專案,但 @workspace /new Node.js Express Pug TypeScript 更明確、簡潔且節省輸入時間。如果您在聊天輸入欄位中輸入 /,VS Code 會提供已註冊命令及其描述的清單。

List of commands in chat for @workspace

聊天參與者可以透過在 package.json 中新增斜線命令及其描述來提供它們:

"contributes": {
    "chatParticipants": [
        {
            "id": "chat-sample.cat",
            "name": "cat",
            "fullName": "Cat",
            "description": "Meow! What can I teach you?",
            "isSticky": true,
            "commands": [
                {
                    "name": "teach",
                    "description": "Pick at random a computer science concept then explain it in purfect way of a cat"
                },
                {
                    "name": "play",
                    "description": "Do whatever you want, you are a cat after all"
                }
            ]
        }
    ]
}

獲取更多關於斜線命令命名慣例的資訊。

4. 註冊後續請求

在每次聊天請求後,VS Code 會呼叫後續提供者(follow-up providers)來取得建議的後續問題以顯示給使用者。使用者隨後可以選擇後續問題,並立即將其發送給聊天擴充功能。使用 ChatFollowupProvider API 來註冊類型為 ChatFollowup 的後續提示。

以下程式碼片段展示瞭如何註冊聊天擴充功能中的後續請求:

cat.followupProvider = {
    provideFollowups(result: ICatChatResult, context: vscode.ChatContext, token: vscode.CancellationToken) {
        if (result.metadata.command === 'teach') {
            return [{
                prompt: 'let us play',
                label: vscode.l10n.t('Play with the cat')
            } satisfies vscode.ChatFollowup];
        }
    }
};
提示

後續問題應寫成問題或指示,而不僅僅是簡潔的命令。

5. 實作參與者偵測

為了讓使用自然語言的聊天參與者更容易使用,您可以實作參與者偵測。參與者偵測是一種自動將使用者的問題路由到合適參與者的方法,無需在提示中明確提及參與者。例如,如果使用者問「我該如何在專案中新增登入頁面?」,該問題會自動路由到 @workspace 參與者,因為它能回答關於使用者專案的問題。

VS Code 使用聊天參與者的描述和範例來決定將聊天提示路由到哪個參與者。您可以在擴充功能 package.json 檔案的 disambiguation 屬性中指定此資訊。disambiguation 屬性包含偵測類別的清單,每個類別都有描述和範例。

屬性 說明 範例
類別 (category) 偵測類別。如果參與者服務於不同目的,您可以為每個目的建立一個類別。
  • cat
  • workspace_questions
  • web_questions
description 對適合此參與者之問題類型的詳細描述。
  • 使用者想要以非正式的方式學習特定的電腦科學主題。
  • 使用者只是想放鬆並觀看貓咪玩耍。
範例 (examples) 代表性問題的範例清單。
  • 使用隱喻向我教授 C++ 指標
  • 以簡單的方式向我解釋什麼是連結串列
  • 你能向我展示一隻貓在玩雷射筆嗎?

您可以為整個聊天參與者、特定命令或兩者的組合定義參與者偵測。

以下程式碼片段展示瞭如何在參與者層級實作參與者偵測。

"contributes": {
    "chatParticipants": [
        {
            "id": "chat-sample.cat",
            "fullName": "Cat",
            "name": "cat",
            "description": "Meow! What can I teach you?",

            "disambiguation": [
                {
                    "category": "cat",
                    "description": "The user wants to learn a specific computer science topic in an informal way.",
                    "examples": [
                        "Teach me C++ pointers using metaphors",
                        "Explain to me what is a linked list in a simple way",
                        "Can you explain to me what is a function in programming?"
                    ]
                }
            ]
        }
    ]
}

同樣地,您也可以透過在 commands 屬性中的一個或多個項目新增 disambiguation 屬性,在命令層級設定參與者偵測。

應用以下指導原則來提高您擴充功能參與者偵測的準確性:

  • 具體明確:描述和範例應盡可能具體,以避免與其他參與者衝突。避免在參與者和命令資訊中使用通用術語。
  • 使用範例:範例應代表適合該參與者的問題類型。使用同義詞和變體來涵蓋廣泛的使用者查詢。
  • 使用自然語言:描述和範例應以自然語言編寫,就像在向使用者解釋該參與者一樣。
  • 測試偵測:使用多種範例問題測試參與者偵測,並驗證其是否與內建聊天參與者無衝突。
注意

內建聊天參與者在參與者偵測中具有優先權。例如,在工作區檔案上運作的聊天參與者可能會與內建的 @workspace 參與者衝突。

使用聊天訊息記錄

參與者可以存取當前聊天會話的訊息記錄。參與者只能存取提及它的訊息。history 項目是 ChatRequestTurnChatResponseTurn。例如,使用以下程式碼片段來檢索使用者在當前聊天會話中發送給您的參與者的所有先前請求:

const previousMessages = context.history.filter(h => h instanceof vscode.ChatRequestTurn);

記錄不會自動包含在提示中,由參與者決定在將訊息傳遞給語言模型時,是否要新增記錄作為額外的上下文。

支援的聊天回應輸出類型

若要傳回聊天請求的回應,您可以使用 ChatRequestHandler 上的 ChatResponseStream 參數。

以下清單提供了聊天檢視中聊天回應的輸出類型。聊天回應可以組合多種不同的輸出類型。

  • Markdown

    呈現一段 Markdown 文字、簡單文字或圖片。您可以使用 CommonMark 規範的一部分的任何 Markdown 語法。使用 ChatResponseStream.markdown 方法並提供 Markdown 文字。

    範例程式碼片段

    // Render Markdown text
    stream.markdown('# This is a title \n');
    stream.markdown('This is stylized text that uses _italics_ and **bold**. ');
    stream.markdown('This is a [link](https://vscode.com.tw).\n\n');
    stream.markdown('![VS Code](https://vscode.com.tw/assets/favicon.ico)');
    
  • 程式碼區塊

    呈現支援 IntelliSense、程式碼格式化以及互動式控制項(以將程式碼套用到作用中編輯器)的程式碼區塊。若要顯示程式碼區塊,請使用 ChatResponseStream.markdown 方法並套用程式碼區塊的 Markdown 語法(使用反引號)。

    範例程式碼片段

    // Render a code block that enables users to interact with
    stream.markdown('```bash\n');
    stream.markdown('```ls -l\n');
    stream.markdown('```');
    
  • 命令連結

    在聊天回應中呈現內嵌連結,使用者可以選擇該連結以呼叫 VS Code 命令。若要顯示命令連結,請使用 ChatResponseStream.markdown 方法並使用連結的 Markdown 語法 [link text](command:commandId),其中您在 URL 中提供命令 ID。例如,以下連結會開啟命令面板:[Command Palette](command:workbench.action.showCommands)

    為了在從服務載入 Markdown 文字時防範命令注入,您必須使用 vscode.MarkdownString 物件,並將 isTrusted 屬性設定為受信任 VS Code 命令 ID 的清單。此屬性是啟用命令連結運作所必需的。如果未設定 isTrusted 屬性或命令未列入其中,命令連結將無法運作。

    範例程式碼片段

    // Use command URIs to link to commands from Markdown
    let markdownCommandString: vscode.MarkdownString = new vscode.MarkdownString(
      `[Use cat names](command:${CAT_NAMES_COMMAND_ID})`
    );
    markdownCommandString.isTrusted = { enabledCommands: [CAT_NAMES_COMMAND_ID] };
    
    stream.markdown(markdownCommandString);
    

    如果命令帶有參數,您需要先對參數進行 JSON 編碼,然後將 JSON 字串編碼為 URI 元件。然後,您將編碼後的參數作為查詢字串附加到命令連結中。

    // Encode the command arguments
    const encodedArgs = encodeURIComponent(JSON.stringify(args));
    
    // Use command URIs with arguments to link to commands from Markdown
    let markdownCommandString: vscode.MarkdownString = new vscode.MarkdownString(
      `[Use cat names](command:${CAT_NAMES_COMMAND_ID}?${encodedArgs})`
    );
    markdownCommandString.isTrusted = { enabledCommands: [CAT_NAMES_COMMAND_ID] };
    
    stream.markdown(markdownCommandString);
    
  • 命令按鈕

    呈現一個呼叫 VS Code 命令的按鈕。該命令可以是內建命令,也可以是您在擴充功能中定義的命令。使用 ChatResponseStream.button 方法並提供按鈕文字和命令 ID。

    範例程式碼片段

    // Render a button to trigger a VS Code command
    stream.button({
      command: 'my.command',
      title: vscode.l10n.t('Run my command')
    });
    
  • 檔案樹

    呈現檔案樹控制項,讓使用者可以預覽個別檔案。例如,在提議建立新工作區時顯示工作區預覽。使用 ChatResponseStream.filetree 方法並提供檔案樹元素陣列以及檔案的基礎位置(資料夾)。

    範例程式碼片段

    // Create a file tree instance
    var tree: vscode.ChatResponseFileTree[] = [
      {
        name: 'myworkspace',
        children: [{ name: 'README' }, { name: 'app.js' }, { name: 'package.json' }]
      }
    ];
    
    // Render the file tree control at a base location
    stream.filetree(tree, baseLocation);
    
  • 進度訊息

    在長時間執行的操作期間呈現進度訊息,以提供使用者中間回饋。例如,報告多步驟操作中每個步驟的完成情況。使用 ChatResponseStream.progress 方法並提供訊息。

    範例程式碼片段

    // Render a progress message
    stream.progress('Connecting to the database.');
    
  • 參考資料

    將外部 URL 或編輯器位置的參考新增至參考清單,以指示您使用哪些資訊作為上下文。使用 ChatResponseStream.reference 方法並提供參考位置。

    範例程式碼片段

    const fileUri: vscode.Uri = vscode.Uri.file('/path/to/workspace/app.js'); // On Windows, the path should be in the format of 'c:\\path\\to\\workspace\\app.js'
    const fileRange: vscode.Range = new vscode.Range(0, 0, 3, 0);
    const externalUri: vscode.Uri = vscode.Uri.parse('https://vscode.com.tw');
    
    // Add a reference to an entire file
    stream.reference(fileUri);
    
    // Add a reference to a specific selection within a file
    stream.reference(new vscode.Location(fileUri, fileRange));
    
    // Add a reference to an external URL
    stream.reference(externalUri);
    
  • 內嵌參考

    新增 URI 或編輯器位置的內嵌參考。使用 ChatResponseStream.anchor 方法並提供錨點位置與選用的標題。若要參考符號(例如類別或變數),您可以使用編輯器中的位置。

    範例程式碼片段

    const symbolLocation: vscode.Uri = vscode.Uri.parse('location-to-a-symbol');
    
    // Render an inline anchor to a symbol in the workspace
    stream.anchor(symbolLocation, 'MySymbol');
    

重要:圖片和連結僅在源自受信任網域清單中的網域時才可用。獲取更多關於 VS Code 連結保護的資訊。

實作工具呼叫

為了回應使用者請求,聊天擴充功能可以呼叫語言模型工具。深入了解語言模型工具工具呼叫流程

您可以透過兩種方式實作工具呼叫:

  • 使用 @vscode/chat-extension-utils 程式庫來簡化在聊天擴充功能中呼叫工具的過程。
  • 自行實作工具呼叫,這讓您對工具呼叫過程有更多控制權。例如,在發送給 LLM 之前,執行額外的驗證或以特定方式處理工具回應。

使用聊天擴充功能程式庫實作工具呼叫

您可以使用 @vscode/chat-extension-utils 程式庫來簡化在聊天擴充功能中呼叫工具的過程。

聊天參與者vscode.ChatRequestHandler 函式中實作工具呼叫。

  1. 確定當前聊天上下文的相關工具。您可以使用 vscode.lm.tools 存取所有可用工具。

    以下程式碼片段展示瞭如何將工具過濾為僅包含具有特定標籤的工具。

    const tools =
      request.command === 'all'
        ? vscode.lm.tools
        : vscode.lm.tools.filter(tool => tool.tags.includes('chat-tools-sample'));
    
  2. 使用 sendChatParticipantRequest 將請求和工具定義發送給 LLM。

    const libResult = chatUtils.sendChatParticipantRequest(
      request,
      chatContext,
      {
        prompt: 'You are a cat! Answer as a cat.',
        responseStreamOptions: {
          stream,
          references: true,
          responseText: true
        },
        tools
      },
      token
    );
    

    ChatHandlerOptions 物件具有以下屬性:

    • prompt:(選用)聊天參與者提示的說明。
    • model:(選用)請求使用的模型。如果未指定,則使用聊天上下文中的模型。
    • tools:(選用)請求要考慮的工具清單。
    • requestJustification:(選用)描述發出請求原因的字串。
    • responseStreamOptions:(選用)啟用 sendChatParticipantRequest 以將回應串流回 VS Code。選用情況下,您還可以啟用參考資料和/或回應文字。
  3. 傳回來自 LLM 的結果。這可能包含錯誤詳細資料或工具呼叫中繼資料。

    return await libResult.result;
    

工具呼叫範例的完整原始碼可在 VS Code Extension Samples 儲存庫中取得。

自行實作工具呼叫

對於更進階的情境,您也可以自行實作工具呼叫。選用情況下,您可以使用 @vscode/prompt-tsx 程式庫來製作 LLM 提示。透過自行實作工具呼叫,您對工具呼叫過程有更多控制權。例如,在發送給 LLM 之前執行額外的驗證,或以特定方式處理工具回應。

查看在 VS Code Extension Samples 儲存庫中透過使用 prompt-tsx 實作工具呼叫的完整原始碼。

衡量成功

我們建議您透過新增針對「無幫助」(Unhelpful)使用者回饋事件以及您的參與者處理的請求總數的遙測記錄來衡量參與者的成功。初始參與者成功指標可以定義為:unhelpful_feedback_count / total_requests

const logger = vscode.env.createTelemetryLogger({
  // telemetry logging implementation goes here
});

cat.onDidReceiveFeedback((feedback: vscode.ChatResultFeedback) => {
  // Log chat result feedback to be able to compute the success metric of the participant
  logger.logUsage('chatResultFeedback', {
    kind: feedback.kind
  });
});

任何與您的聊天回應的其他使用者互動都應被視為正面指標(例如,使用者選擇了聊天回應中生成的按鈕)。當使用 AI 工作時,透過遙測衡量成功至關重要,因為它是一種非確定性的技術。進行實驗、衡量並反覆改進您的參與者,以確保良好的使用者體驗。

指導原則與慣例

指導原則

聊天參與者不應只是純粹的問答機器人。在建置聊天參與者時,請發揮創意並使用現有的 VS Code API 在 VS Code 中建立豐富的整合。使用者也喜愛豐富且便捷的互動,例如回應中的按鈕、將使用者帶到聊天中參與者的選單項目。請思考 AI 可以協助使用者的現實生活場景。

並非每個擴充功能都適合提供聊天參與者。在聊天中擁有過多的參與者可能會導致糟糕的使用者體驗。當您想要控制完整提示(包含給語言模型的指令)時,聊天參與者效果最好。您可以重複使用精心設計的 Copilot 系統訊息,並可以為其他參與者提供上下文。

例如,語言擴充功能(如 C++ 擴充功能)可以透過多種其他方式做出貢獻:

  • 提供將語言服務智慧帶入使用者查詢的工具。例如,C++ 擴充功能可以將 #cpp 工具解析為工作區的 C++ 狀態。這為 Copilot 語言模型提供了正確的 C++ 上下文,以提高 C++ Copilot 回答的品質。
  • 提供使用語言模型的智慧動作,選用情況下結合傳統語言服務知識,以提供絕佳的使用者體驗。例如,C++ 可能已經提供了「萃取至方法」的智慧動作,該動作使用語言模型來為新方法生成合適的預設名稱。

如果聊天擴充功能即將執行昂貴的操作,或是即將編輯/刪除無法復原的內容,則應明確要求使用者同意。為了擁有絕佳的使用者體驗,我們不建議擴充功能提供多個聊天參與者。每個擴充功能最多一個聊天參與者是一個簡單且在 UI 中易於擴展的模型。

聊天參與者命名慣例

屬性 說明 命名指導原則
id 聊天參與者的全域唯一識別碼
  • 字串值
  • 使用擴充功能名稱作為前綴,後跟擴充功能的唯一 ID
  • 範例:chat-sample.cat, code-visualizer.code-visualizer-participant
name 聊天參與者的名稱,由使用者透過 @ 符號參考
  • 由字母數字字元、底線和連字號組成的字串值
  • 建議僅使用小寫以確保與現有聊天參與者的一致性
  • 確保參與者的用途可從其名稱中明顯看出(透過參考您的公司名稱或其功能)
  • 某些參與者名稱是保留的。如果您使用保留名稱,將顯示完整限定名稱,包含擴充功能 ID
  • 範例:vscode, terminal, code-visualizer
fullName (選用)參與者的全名,顯示為來自參與者的回應標籤
  • 字串值
  • 建議使用標題大小寫
  • 為您的參與者使用您的公司名稱、品牌名稱或使用者友善的名稱
  • 範例:GitHub Copilot, VS Code, Math Tutor
description (選用)聊天參與者功能的簡短描述,顯示為聊天輸入欄位或參與者清單中的預留文字
  • 字串值
  • 建議使用句子大小寫(Sentence case),結尾不要標點符號
  • 保持描述簡短以避免水平捲動
  • 範例:Ask questions about VS Code, Generate UML diagrams for your code

當在任何使用者面向的元素(如屬性、聊天回應或聊天使用者介面)中參考您的聊天參與者時,建議不要使用「參與者」(participant)一詞,因為它是 API 的名稱。例如,@cat 擴充功能可以稱為「Cat extension for GitHub Copilot」。

斜線命令命名慣例

屬性 說明 命名指導原則
name 斜線命令的名稱,由使用者透過 / 符號參考
  • 字串值
  • 建議使用小駝峰式命名法(lower camel case)以與現有斜線命令對齊
  • 確保命令的用途可從其名稱中明顯看出
  • 範例:fix, explain, runCommand
description (選用)斜線命令功能的簡短描述,顯示為聊天輸入欄位或參與者與命令清單中的預留文字
  • 字串值
  • 建議使用句子大小寫(Sentence case),結尾不要標點符號
  • 保持描述簡短以避免水平捲動
  • 範例:Search for and execute a command in VS Code, Generate unit tests for the selected code

發佈您的擴充功能

一旦建立了 AI 擴充功能,您就可以將其發佈到 Visual Studio Marketplace

透過 GitHub Apps 擴充 GitHub Copilot

或者,也可以透過建立一個在聊天檢視中提供聊天參與者的 GitHub App 來擴充 GitHub Copilot。GitHub App 由服務支援,並可在所有 GitHub Copilot 介面(如 github.com、Visual Studio 或 VS Code)上運作。另一方面,GitHub Apps 無法完全存取 VS Code API。若要深入了解透過 GitHub App 擴充 GitHub Copilot,請參閱 GitHub 文件

使用語言模型

聊天參與者可以透過多種方式使用語言模型。有些參與者僅使用語言模型來獲取自訂提示的答案,例如範例聊天參與者。其他參與者則更為進階,作用如同自主代理程式,在語言模型的幫助下呼叫多個工具。此類進階參與者的範例是內建的 @workspace,它了解您的工作區並能回答關於它的問題。在內部,@workspace 由多個工具驅動:GitHub 的知識圖譜,結合語意搜尋、本機程式碼索引與 VS Code 的語言服務。

© . This site is unofficial and not affiliated with Microsoft.