Sprachmodell-Tool-API
Sprachmodell-Tools ermöglichen es Ihnen, die Funktionalität eines großen Sprachmodells (LLM) im Chat um domänenspezifische Fähigkeiten zu erweitern. Um eine Chat-Eingabeaufforderung eines Benutzers zu verarbeiten, können Agenten in VS Code diese Tools automatisch aufrufen, um spezialisierte Aufgaben als Teil der Konversation auszuführen.
Indem Sie ein Sprachmodell-Tool in Ihrer VS Code-Erweiterung beitragen, können Sie den agentischen Coding-Workflow erweitern und gleichzeitig eine tiefe Integration mit dem Editor bieten. Erweiterungs-Tools sind einer von drei Tool-Typen, die in VS Code verfügbar sind, neben integrierten Tools und MCP-Tools.
In dieser Erweiterungsanleitung lernen Sie, wie Sie ein Sprachmodell-Tool mit der Language Model Tools API erstellen und wie Sie Tool-Aufrufe in einer Chat-Erweiterung implementieren.
Sie können auch die Chat-Erfahrung mit spezialisierten Tools erweitern, indem Sie einen MCP-Server beitragen. Weitere Informationen zu den verschiedenen Optionen und wie Sie entscheiden, welchen Ansatz Sie verwenden möchten, finden Sie im Überblick über KI-Erweiterbarkeit.
Informationen zur Verwendung von Tools als Endbenutzer finden Sie unter Tools im Chat verwenden.
Was ist Tool-Aufruf in einem LLM?
Ein Sprachmodell-Tool ist eine Funktion, die als Teil einer Sprachmodell-Anfrage aufgerufen werden kann. Sie haben beispielsweise möglicherweise eine Funktion, die Informationen aus einer Datenbank abruft, eine Berechnung durchführt oder eine Online-API aufruft. Wenn Sie ein Tool in einer VS Code-Erweiterung beitragen, kann der Agentenmodus das Tool basierend auf dem Kontext der Konversation aufrufen.
Das LLM führt das Tool selbst niemals aus. Stattdessen generiert das LLM die Parameter, die zum Aufrufen Ihres Tools verwendet werden. Es ist wichtig, den Zweck, die Funktionalität und die Eingabeparameter des Tools klar zu beschreiben, damit das Tool im richtigen Kontext aufgerufen werden kann.
Das folgende Diagramm zeigt den Tool-Aufruf-Fluss im Agentenmodus in VS Code. Details zu den einzelnen Schritten finden Sie im Abschnitt Tool-Aufruf-Fluss.

Lesen Sie mehr über Funktionsaufrufe in der OpenAI-Dokumentation.
Warum ein Sprachmodell-Tool in Ihrer Erweiterung implementieren?
Die Implementierung eines Sprachmodell-Tools in Ihrer Erweiterung bietet mehrere Vorteile
- Erweitern Sie den Agentenmodus mit spezialisierten, domänenspezifischen Tools, die automatisch als Teil der Antwort auf eine Benutzereingabeaufforderung aufgerufen werden. Ermöglichen Sie beispielsweise das Scaffolding und die Abfrage von Datenbanken, um dem LLM dynamisch relevante Kontexte bereitzustellen.
- Integrieren Sie sich tief in VS Code, indem Sie das breite Spektrum an Erweiterungs-APIs nutzen. Verwenden Sie beispielsweise die Debugger-APIs, um den aktuellen Debugging-Kontext abzurufen und ihn als Teil der Funktionalität des Tools zu verwenden.
- Verteilen und stellen Sie Tools über den Visual Studio Marketplace bereit und bieten Sie den Benutzern eine zuverlässige und nahtlose Erfahrung. Benutzer benötigen keinen separaten Installations- und Updateprozess für Ihr Tool.
Sie könnten die Implementierung eines Sprachmodell-Tools mit einem MCP-Server in den folgenden Szenarien in Betracht ziehen
- Sie haben bereits eine MCP-Server-Implementierung und möchten diese auch in VS Code verwenden.
- Sie möchten dasselbe Tool über verschiedene Entwicklungsumgebungen und Plattformen hinweg wiederverwenden.
- Ihr Tool wird remote als Dienst gehostet.
- Sie benötigen keinen Zugriff auf VS Code APIs.
Erfahren Sie mehr über die Unterschiede zwischen Tool-Typen.
Erstellen Sie ein Sprachmodell-Tool
Die Implementierung eines Sprachmodell-Tools besteht aus zwei Hauptteilen
- Definieren Sie die Konfiguration des Tools in der
package.json-Datei Ihrer Erweiterung. - Implementieren Sie das Tool in Ihrem Erweiterungscode unter Verwendung der Sprachmodell-API-Referenz
Sie können mit einem grundlegenden Beispielprojekt beginnen.
1. Statische Konfiguration in package.json
Der erste Schritt zur Definition eines Sprachmodell-Tools in Ihrer Erweiterung besteht darin, es in der package.json-Datei Ihrer Erweiterung zu definieren. Diese Konfiguration umfasst den Tool-Namen, die Beschreibung, das Eingabeschema und andere Metadaten
-
Fügen Sie einen Eintrag für Ihr Tool im Abschnitt
contributes.languageModelToolsderpackage.json-Datei Ihrer Erweiterung hinzu. -
Geben Sie dem Tool einen eindeutigen Namen
Eigenschaft Beschreibung nameDer eindeutige Name des Tools, der zur Referenzierung des Tools im Erweiterungs-Implementierungscode verwendet wird. Formatieren Sie den Namen im Format {verb}_{noun}. Weitere Informationen finden Sie unter Namensrichtlinien.displayNameDer benutzerfreundliche Name des Tools, der zur Anzeige in der Benutzeroberfläche verwendet wird. -
Wenn das Tool mit Agenten verwendet werden kann oder mit
#in einer Chat-Eingabeaufforderung referenziert werden kann, fügen Sie die folgenden Eigenschaften hinzuBenutzer können das Tool in der Chat-Ansicht aktivieren oder deaktivieren, ähnlich wie dies bei Model Context Protocol (MCP) Tools geschieht.
Eigenschaft Beschreibung canBeReferencedInPromptSetzen Sie auf true, wenn das Tool mit Agenten verwendet oder im Chat referenziert werden kann.toolReferenceNameDer Name, mit dem Benutzer das Tool über #in einer Chat-Eingabeaufforderung referenzieren können.iconDas Symbol, das für das Tool in der Benutzeroberfläche angezeigt werden soll. userDescriptionBenutzerfreundliche Beschreibung des Tools, die zur Anzeige in der Benutzeroberfläche verwendet wird. -
Fügen Sie eine detaillierte Beschreibung in
modelDescriptionhinzu. Diese Informationen werden vom LLM verwendet, um zu bestimmen, in welchem Kontext Ihr Tool verwendet werden soll.- Was genau macht das Tool?
- Welche Art von Informationen liefert es?
- Wann sollte es verwendet werden und wann nicht?
- Beschreiben Sie wichtige Einschränkungen oder Beschränkungen des Tools.
-
Wenn das Tool Eingabeparameter annimmt, fügen Sie eine Eigenschaft
inputSchemahinzu, die die Eingabeparameter des Tools beschreibt.Dieses JSON-Schema beschreibt ein Objekt mit den Eigenschaften, die das Tool als Eingabe nimmt, und ob diese erforderlich sind. Dateipfade müssen absolute Pfade sein.
Beschreiben Sie, was jeder Parameter tut und wie er sich auf die Funktionalität des Tools bezieht.
-
Fügen Sie eine
when-Klausel hinzu, um zu steuern, wann das Tool verfügbar ist.Der
languageModelTools-Beitragspunkt ermöglicht es Ihnen, einzuschränken, wann ein Tool für den Agentenmodus verfügbar ist oder in einer Eingabeaufforderung referenziert werden kann, indem Sie eine when-Klausel verwenden. Ein Tool, das die Debug-Aufruflisteninformationen abruft, sollte beispielsweise nur verfügbar sein, wenn der Benutzer debuggt."contributes": { "languageModelTools": [ { "name": "chat-tools-sample_tabCount", ... "when": "debugState == 'running'" } ] }
Beispiel-Tool-Definition
Das folgende Beispiel zeigt, wie ein Tool definiert wird, das die Anzahl der aktiven Tabs in einer Tab-Gruppe zählt.
"contributes": {
"languageModelTools": [
{
"name": "chat-tools-sample_tabCount",
"tags": [
"editors",
"chat-tools-sample"
],
"toolReferenceName": "tabCount",
"displayName": "Tab Count",
"modelDescription": "The number of active tabs in a tab group in VS Code.",
"userDescription": "Count the number of active tabs in a tab group.",
"canBeReferencedInPrompt": true,
"icon": "$(files)",
"inputSchema": {
"type": "object",
"properties": {
"tabGroup": {
"type": "number",
"description": "The index of the tab group to check. This is optional- if not specified, the active tab group will be checked.",
"default": 0
}
}
}
}
]
}
2. Tool-Implementierung
Implementieren Sie das Sprachmodell-Tool mit der Sprachmodell-API. Dies umfasst die folgenden Schritte
-
Bei der Aktivierung der Erweiterung registrieren Sie das Tool mit
vscode.lm.registerTool.Geben Sie den Namen des Tools an, wie Sie ihn in der Eigenschaft
nameinpackage.jsonangegeben haben.Wenn das Tool privat für Ihre Erweiterung sein soll, überspringen Sie den Tool-Registrierungsschritt.
export function registerChatTools(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.lm.registerTool('chat-tools-sample_tabCount', new TabCountTool()) ); } -
Erstellen Sie eine Klasse, die die Schnittstelle
vscode.LanguageModelTool<>implementiert. -
Fügen Sie Tool-Bestätigungsnachrichten in der Methode
prepareInvocationhinzu.Ein generisches Bestätigungsdialogfeld wird immer für Tools von Erweiterungen angezeigt, aber das Tool kann die Bestätigungsnachricht anpassen. Geben Sie dem Benutzer genügend Kontext, um zu verstehen, was das Tool tut. Die Nachricht kann ein
MarkdownStringmit einem Codeblock sein.Das folgende Beispiel zeigt, wie eine Bestätigungsnachricht für das Tab-Zähl-Tool bereitgestellt wird.
async prepareInvocation( options: vscode.LanguageModelToolInvocationPrepareOptions<ITabCountParameters>, _token: vscode.CancellationToken ) { const confirmationMessages = { title: 'Count the number of open tabs', message: new vscode.MarkdownString( `Count the number of open tabs?` + (options.input.tabGroup !== undefined ? ` in tab group ${options.input.tabGroup}` : '') ), }; return { invocationMessage: 'Counting the number of tabs', confirmationMessages, }; }Wenn
prepareInvocationundefinedzurückgibt, wird die generische Bestätigungsnachricht angezeigt. Beachten Sie, dass der Benutzer auch "Immer zulassen" für ein bestimmtes Tool auswählen kann. -
Definieren Sie eine Schnittstelle, die die Eingabeparameter des Tools beschreibt.
Die Schnittstelle wird in der Methode
invokeder Klassevscode.LanguageModelToolverwendet. Die Eingabeparameter werden gegen das JSON-Schema validiert, das Sie ininputSchemainpackage.jsondefiniert haben.Das folgende Beispiel zeigt die Schnittstelle für das Tab-Zähl-Tool.
export interface ITabCountParameters { tabGroup?: number; } -
Implementieren Sie die Methode
invoke. Diese Methode wird aufgerufen, wenn das Sprachmodell-Tool beim Verarbeiten einer Chat-Eingabeaufforderung aufgerufen wird.Die Methode
invokeempfängt die Eingabeparameter des Tools im Parameteroptions. Die Parameter werden gegen das JSON-Schema validiert, das ininputSchemainpackage.jsondefiniert ist.Wenn ein Fehler auftritt, werfen Sie einen Fehler mit einer Nachricht, die für das LLM sinnvoll ist. Optional können Sie Anweisungen dazu geben, was das LLM als Nächstes tun soll, z. B. einen erneuten Versuch mit anderen Parametern oder eine andere Aktion.
Das folgende Beispiel zeigt die Implementierung des Tab-Zähl-Tools. Das Ergebnis des Tools ist eine Instanz vom Typ
vscode.LanguageModelToolResult.async invoke( options: vscode.LanguageModelToolInvocationOptions<ITabCountParameters>, _token: vscode.CancellationToken ) { const params = options.input; if (typeof params.tabGroup === 'number') { const group = vscode.window.tabGroups.all[Math.max(params.tabGroup - 1, 0)]; const nth = params.tabGroup === 1 ? '1st' : params.tabGroup === 2 ? '2nd' : params.tabGroup === 3 ? '3rd' : `${params.tabGroup}th`; return new vscode.LanguageModelToolResult([new vscode.LanguageModelTextPart(`There are ${group.tabs.length} tabs open in the ${nth} tab group.`)]); } else { const group = vscode.window.tabGroups.activeTabGroup; return new vscode.LanguageModelToolResult([new vscode.LanguageModelTextPart(`There are ${group.tabs.length} tabs open.`)]); } }
Zeigen Sie den vollständigen Quellcode für die Implementierung eines Sprachmodell-Tools im VS Code Extension Samples Repository an.
Tool-Aufruf-Fluss
Wenn ein Benutzer eine Chat-Eingabeaufforderung sendet, geschehen die folgenden Schritte
-
Copilot bestimmt die Liste der verfügbaren Tools basierend auf der Konfiguration des Benutzers.
Die Liste der Tools besteht aus integrierten Tools, von Erweiterungen registrierten Tools und Tools von MCP-Servern. Sie können über Erweiterungen oder MCP-Server zum Agentenmodus beitragen (in der Grafik grün dargestellt).
-
Copilot sendet die Anfrage an das LLM und stellt ihm die Eingabeaufforderung, den Chat-Kontext und die Liste der zu berücksichtigenden Tool-Definitionen zur Verfügung.
Das LLM generiert eine Antwort, die eine oder mehrere Anfragen zum Aufrufen eines Tools enthalten kann.
-
Bei Bedarf ruft Copilot das vorgeschlagene(n) Tool/Tools mit den vom LLM bereitgestellten Parameterwerten auf.
Eine Tool-Antwort kann zu weiteren Anfragen nach Tool-Aufrufen führen.
-
Wenn Fehler oder nachfolgende Tool-Anfragen auftreten, durchläuft Copilot den Tool-Aufruf-Fluss, bis alle Tool-Anfragen gelöst sind.
-
Copilot gibt die endgültige Antwort an den Benutzer zurück, die Antworten von mehreren Tools enthalten kann.
Richtlinien und Konventionen
-
Benennung: Schreiben Sie klare und aussagekräftige Namen für Tools und Parameter.
-
Tool-Name: sollte eindeutig sein und seine Absicht klar beschreiben. Strukturieren Sie den Tool-Namen im Format
{verb}_{noun}. Zum Beispielget_weather,get_azure_deploymentoderget_terminal_output. -
Parametername: sollte den Zweck des Parameters beschreiben. Strukturieren Sie den Parameternamen im Format
{noun}. Zum Beispieldestination_location,tickeroderfile_name.
-
-
Beschreibungen: Schreiben Sie detaillierte Beschreibungen für Tools und Parameter.
- Beschreiben Sie, was das Tool tut und wann es verwendet werden sollte und wann nicht. Zum Beispiel: "Dieses Tool ruft das Wetter für einen bestimmten Ort ab."
- Beschreiben Sie, was jeder Parameter tut und wie er sich auf die Funktionalität des Tools bezieht. Zum Beispiel: "Der Parameter
destination_locationgibt den Ort an, für den das Wetter abgerufen werden soll. Er sollte ein gültiger Ortsname oder Koordinaten sein." - Beschreiben Sie wichtige Einschränkungen oder Beschränkungen des Tools. Zum Beispiel: "Dieses Tool ruft Wetterdaten nur für Orte in den Vereinigten Staaten ab. Es funktioniert möglicherweise nicht für andere Regionen."
-
Benutzerbestätigung: Stellen Sie eine Bestätigungsnachricht für den Tool-Aufruf bereit. Ein generisches Bestätigungsdialogfeld wird immer für Tools von Erweiterungen angezeigt, aber das Tool kann die Bestätigungsnachricht anpassen. Geben Sie dem Benutzer genügend Kontext, um zu verstehen, was das Tool tut.
-
Fehlerbehandlung: Wenn ein Fehler auftritt, werfen Sie einen Fehler mit einer Nachricht, die für das LLM sinnvoll ist. Optional können Sie Anweisungen dazu geben, was das LLM als Nächstes tun soll, z. B. einen erneuten Versuch mit anderen Parametern oder eine andere Aktion.
Weitere Best Practices für die Erstellung von Tools finden Sie in der OpenAI-Dokumentation und Anthropic-Dokumentation.