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

聊天參與者 API

聊天參與者是專門的助手,允許使用者透過領域專家擴充套件 VS Code 中的聊天。使用者透過 @ 提及來呼叫聊天參與者,然後參與者負責處理使用者的自然語言提示。

本擴充套件指南將向您展示如何使用聊天參與者 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. @cat 提供的 Markdown 響應
  6. Markdown 響應中包含的程式碼片段
  7. @cat 響應中包含的按鈕,該按鈕呼叫 VS Code 命令
  8. 聊天參與者提供的建議 後續問題
  9. 聊天輸入欄位,其中包含由聊天參與者的 description 屬性提供的佔位符文字

建立聊天參與者

實現聊天參與者包括以下幾個部分:

  1. 在擴充套件的 package.json 檔案中定義聊天參與者。
  2. 實現請求處理程式以處理使用者的聊天提示並返回響應。
  3. (可選)實現聊天斜槓命令,為常見任務提供速記符號。
  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 和標題大小寫的 fullName,以與現有聊天參與者保持一致。獲取有關 聊天參與者命名約定 的更多資訊。

注意

某些參與者名稱是保留的。如果您使用此類保留名稱,VS Code 將顯示您的聊天參與者的完全限定名稱(包括擴充套件 ID)。

2. 實現請求處理程式

使用 聊天參與者 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 聊天檢視中的使用者聊天請求。每當使用者在聊天輸入欄位中輸入提示時,都會呼叫聊天請求處理程式。

    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. 將聊天響應返回給使用者。

    處理完請求後,您必須在聊天檢視中向用戶返回響應。您可以使用流式傳輸來響應使用者查詢。

    響應可以包含不同的內容型別: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 聊天 API 是基於流式傳輸的,並且與流式傳輸的 語言模型 API 相容。這允許擴充套件持續報告進度和結果,以實現流暢的使用者體驗。瞭解如何使用 語言模型 API

3. 註冊斜槓命令

聊天參與者可以提供斜槓命令,這些命令是擴充套件提供的特定功能的快捷方式。使用者可以使用 / 語法在聊天中引用斜槓命令,例如 /explain

回答問題時的任務之一是確定使用者意圖。例如,VS Code 可以推斷 Create a new workspace with 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 會呼叫後續提供程式以獲取建議的後續問題以顯示給使用者。然後,使用者可以選擇後續問題,並立即將其傳送到聊天擴充套件。後續問題可以激發使用者進一步對話,或發現聊天擴充套件的更多功能。

以下程式碼片段顯示瞭如何在聊天擴充套件中註冊後續請求:

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

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

5. 實現參與者檢測

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

VS Code 使用聊天參與者描述和示例來確定將聊天提示路由到哪個參與者。您可以在擴充套件 package.json 檔案中的 disambiguation 屬性中指定此資訊。disambiguation 屬性包含一個檢測類別列表,每個類別都包含描述和示例。

屬性 描述 示例
類別 檢測類別。如果參與者服務於不同的目的,您可以為每個目的設定一個類別。
  • 工作區問題
  • 網路問題
描述 適合此參與者的問題型別的詳細描述。
  • 使用者想以非正式的方式學習特定的計算機科學主題。
  • 使用者只想放鬆一下,看看貓玩耍。
示例 代表性示例問題列表。
  • 用比喻教我 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 擴充套件示例儲存庫中找到。

自己實現工具呼叫

對於更高階的場景,您也可以自己實現工具呼叫。您可以選擇使用 @vscode/prompt-tsx 庫來製作 LLM 提示。透過自己實現工具呼叫,您可以對工具呼叫過程有更多的控制權。例如,在將工具響應傳送到 LLM 之前執行額外的驗證或以特定方式處理工具響應。

在 VS Code 擴充套件示例儲存庫中檢視使用 prompt-tsx 實現 工具呼叫 的完整原始碼。

衡量成功

我們建議您透過為“無用”使用者反饋事件和您的參與者處理的總請求數新增遙測日誌來衡量您的參與者的成功。然後可以將初始參與者成功指標定義為: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++ 上下文,以提高 Copilot 對 C++ 答案的質量。
  • 貢獻智慧操作,使用語言模型,可選地結合傳統語言服務知識,以提供出色的使用者體驗。例如,C++ 可能已經提供了一個“提取到方法”智慧操作,該操作使用語言模型為新方法生成合適的預設名稱。

如果聊天擴充套件即將執行昂貴的操作或即將編輯或刪除無法撤銷的內容,則應明確徵求使用者同意。為了獲得出色的使用者體驗,我們不鼓勵擴充套件貢獻多個聊天參與者。每個擴充套件最多一個聊天參與者是一個在 UI 中擴充套件良好的簡單模型。

聊天參與者命名約定

屬性 描述 命名指南
id 聊天參與者的全域性唯一識別符號
  • 字串值
  • 使用副檔名作為字首,後跟擴充套件的唯一 ID
  • 示例:chat-sample.catcode-visualizer.code-visualizer-participant
name 聊天參與者的名稱,使用者透過 @ 符號引用
  • 由字母數字字元、下劃線和連字元組成的字串值
  • 建議只使用小寫,以確保與現有聊天參與者保持一致
  • 透過引用您的公司名稱或其功能,確保參與者的目的從其名稱中顯而易見
  • 某些參與者名稱是保留的。如果您使用保留名稱,則會顯示完全限定名稱,包括擴充套件 ID
  • 示例:vscodeterminalcode-visualizer
fullName (可選)參與者的全名,顯示為來自參與者的響應的標籤
  • 字串值
  • 建議使用 標題大小寫
  • 為您的參與者使用您的公司名稱、品牌名稱或使用者友好的名稱
  • 示例:GitHub CopilotVS CodeMath Tutor
描述 (可選)聊天參與者功能的簡短描述,顯示為聊天輸入欄位中的佔位符文字或參與者列表中的文字
  • 字串值
  • 建議使用句子大小寫,末尾不帶標點符號
  • 保持描述簡短,避免水平滾動
  • 示例:詢問有關 VS Code 的問題為您的程式碼生成 UML 圖

在任何面向使用者的元素(例如屬性、聊天響應或聊天使用者介面)中提及您的聊天參與者時,建議不要使用“參與者”一詞,因為它是 API 的名稱。例如,@cat 擴充套件可以稱為“GitHub Copilot 的 Cat 擴充套件”。

斜槓命令命名約定

屬性 描述 命名指南
name 斜槓命令的名稱,使用者透過 / 符號引用
  • 字串值
  • 建議使用 小駝峰式,以與現有斜槓命令保持一致
  • 確保命令的目的從其名稱中顯而易見
  • 示例:fixexplainrunCommand
描述 (可選)斜槓命令功能的簡短描述,顯示為聊天輸入欄位中的佔位符文字或參與者和命令列表中的文字
  • 字串值
  • 建議使用句子大小寫,末尾不帶標點符號
  • 保持描述簡短,避免水平滾動
  • 示例:在 VS Code 中搜索並執行命令為選定程式碼生成單元測試

釋出您的擴充套件

建立 AI 擴充套件後,您可以將擴充套件釋出到 Visual Studio Marketplace

透過 GitHub Apps 擴充套件 GitHub Copilot

或者,可以透過建立 GitHub App 來擴充套件 GitHub Copilot,該 App 在聊天檢視中貢獻一個聊天參與者。GitHub App 由服務支援,並適用於所有 GitHub Copilot 介面,例如 github.com、Visual Studio 或 VS Code。另一方面,GitHub App 無法完全訪問 VS Code API。要了解有關透過 GitHub App 擴充套件 GitHub Copilot 的更多資訊,請參閱 GitHub 文件

使用語言模型

聊天參與者可以透過多種方式使用語言模型。一些參與者僅使用語言模型來獲取自定義提示的答案,例如 示例聊天參與者。其他參與者更高階,並像自主代理一樣,在語言模型的幫助下呼叫多個工具。此類高階參與者的一個示例是內建的 @workspace,它瞭解您的工作區並可以回答有關它的問題。在內部,@workspace 由多個工具提供支援:GitHub 的知識圖譜,結合語義搜尋、原生代碼索引和 VS Code 的語言服務。