Aufrufen von .NET-Funktionen mithilfe eines KI-Modells
In diesem Schnellstart erstellen Sie eine .NET-Konsolen-KI-Chat-App, um eine Verbindung mit einem KI-Modell herzustellen, bei dem lokale Funktionsaufrufe aktiviert sind. Die App verwendet die Microsoft.Extensions.AI-Bibliothek, sodass Sie Code mithilfe von KI-Abstraktionen und nicht mit einem bestimmten SDK schreiben können. KI-Abstraktionen ermöglichen es Ihnen, das zugrunde liegende KI-Modell mit minimalen Codeänderungen zu ändern.
Hinweis
Die Microsoft.Extensions.AI
Bibliothek befindet sich derzeit in der Vorschauphase.
Voraussetzungen
- .NET 8.0 SDK oder höher - Installieren Sie das .NET 8.0 SDK.
- Ein API-Schlüssel aus OpenAI, damit Sie dieses Beispiel ausführen können
Voraussetzungen
- .NET 8.0 SDK oder höher - .NET 8 SDK installieren.
- Ein Azure-Abonnement – Kostenlos erstellen.
- Zugriff auf Azure OpenAI Service
- Azure Developer CLI (optional) – Installieren oder Aktualisieren der Azure Developer CLI.
Hinweis
Sie können auch den Semantischen Kernel verwenden, um die Aufgaben in diesem Artikel auszuführen. Semantic Kernel ist ein schlankes Open-Source SDK, mit dem Sie KI-Agenten erstellen und die neuesten KI-Modelle in Ihre .NET Apps integrieren können.
Klonen des Beispielrepositorys
Sie können Ihre eigene App mit den Schritten in den vorherigen Abschnitten erstellen oder das GitHub-Repository klonen, das die abgeschlossenen Beispiel-Apps für alle Schnellstarts enthält. Wenn Sie Beabsichtigen, Azure OpenAI zu verwenden, ist das Beispiel-Repository auch als Azure Developer CLI-Vorlage strukturiert, die eine Azure OpenAI-Ressource für Sie bereitstellen kann.
git clone https://github.com/dotnet/ai-samples.git
Erstellen der App
Schließen Sie die folgenden Schritte ab, um eine App für eine .NET-Konsole zu erstellen, die sich mit einem KI-Modell verbindet.
Verwenden Sie in einem leeren Verzeichnis auf Ihrem Computer den Befehl
dotnet new
, um eine neue Konsolen-App zu erstellen:dotnet new console -o FunctionCallingAI
Wechseln Sie das Verzeichnis in den App-Ordner:
cd FunctionCallingAI
Installieren Sie die erforderlichen Pakete:
dotnet add package Azure.Identity dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI --prerelease dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.Extensions.AI --prerelease dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Öffnen der App im Visual Studio-Code oder dem gewünschten Editor
code .
Erstellen Sie den KI-Dienst
Das GitHub-Beispielrepository ist als Azure Developer CLI-Template (azd
) strukturiert, das azd
verwenden kann, um den Azure OpenAI-Dienst und das Modell für Sie bereitzustellen.
Navigieren Sie über ein Terminal oder eine Eingabeaufforderung zum
src\quickstarts\azure-openai
Verzeichnis des Beispielrepo.Führen Sie den
azd up
-Befehl aus, um die Azure OpenAI-Ressourcen bereitzustellen. Es kann mehrere Minuten dauern, bis Azure OpenAI Service erstellt und das Modell bereitgestellt ist.azd up
azd
konfiguriert außerdem die erforderlichen Benutzerschlüssel für die Beispiel-App, z. B. den Azure OpenAI-Endpunkt und den Modellnamen.
Konfigurieren der App
Navigieren Sie über ein Terminal oder eine Eingabeaufforderung zum Stammverzeichnis Ihres .NET-Projekts.
Führen Sie die folgenden Befehle aus, um Ihren OpenAI-API-Schlüssel als Geheimnis für die Beispiel-App zu konfigurieren:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key> dotnet user-secrets set ModelName <your-openai-model-name>
Fügen Sie den App-Code hinzu
Die App verwendet das Microsoft.Extensions.AI
Paket zum Senden und Empfangen von Anforderungen an das KI-Modell.
Fügen Sie in der Datei Program.cs den folgenden Code ein, um sich mit dem KI-Modell zu verbinden und zu authentifizieren. Die
ChatClient
ist auch für die Verwendung von Funktionsaufrufen konfiguriert, sodass das KI-Modell .NET-Funktionen in Ihrem Code aufrufen kann.using Microsoft.Extensions.Configuration; using Microsoft.Extensions.AI; using Azure.AI.OpenAI; using Azure.Identity; var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string deployment = config["AZURE_OPENAI_GPT_NAME"]; IChatClient client = new ChatClientBuilder() .UseFunctionInvocation() .Use( new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()) .AsChatClient(deployment));
Hinweis
DefaultAzureCredential sucht in Ihrem lokalen Tool nach Authentifizierungsdaten. Wenn Sie die
azd
Vorlage nicht zum Bereitstellen der Azure OpenAI-Ressource verwenden, müssen Sie dem Konto, das Sie für die Anmeldung bei Visual Studio oder der Azure CLI verwendet haben, dieAzure AI Developer
Rolle zuweisen. Weitere Informationen finden Sie unter Authentifizierung von Azure AI-Diensten mit .NET.using Microsoft.Extensions.AI; using Microsoft.Extensions.Configuration; using OpenAI; IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string? model = config["ModelName"]; string? key = config["OpenAIKey"]; IChatClient client = new ChatClientBuilder(new OpenAIClient(key).AsChatClient(model ?? "gpt-4o")) .UseFunctionInvocation() .Build(); // Add a new plugin with a local .NET function
Erstellen Sie ein neues
ChatOptions
Objekt, das eine Inlinefunktion enthält, die das KI-Modell aufrufen kann, um das aktuelle Wetter abzurufen. Die Funktionsdeklaration enthält einen Delegat zum Ausführen von Logik sowie Namen- und Beschreibungsparameter, um den Zweck der Funktion für das KI-Modell zu beschreiben.var chatOptions = new ChatOptions { Tools = [AIFunctionFactory.Create((string location, string unit) => { // Here you would call a weather API // to get the weather for the location. return "Periods of rain or drizzle, 15 C"; }, "get_current_weather", "Get the current weather in a given location")] };
Fügen Sie dem
chatHistory
Modell eine Systemaufforderung hinzu, um Dem Modell Kontext und Anweisungen bereitzustellen. Senden Sie eine Benutzeraufforderung mit einer Frage, die erfordert, dass das KI-Modell die registrierte Funktion aufruft, um die Frage ordnungsgemäß zu beantworten.// System prompt to provide context. List<ChatMessage> chatHistory = [new(ChatRole.System, """ You are a hiking enthusiast who helps people discover fun hikes in their area. You are upbeat and friendly. """)]; // Weather conversation relevant to the registered function. chatHistory.Add(new ChatMessage(ChatRole.User, "I live in Montreal and I'm looking for a moderate intensity hike. What's the current weather like?")); Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}"); ChatResponse response = await client.GetResponseAsync(chatHistory, chatOptions); Console.WriteLine($"Assistant >>> {response.Text}");
Verwenden Sie den Befehl
dotnet run
, um die App auszuführen:dotnet run
Die App druckt die Abschlussantwort des KI-Modells, die Daten enthält, die von der .NET-Funktion bereitgestellt werden. Das KI-Modell hat verstanden, dass die registrierte Funktion verfügbar war und automatisch aufgerufen wurde, um eine richtige Antwort zu generieren.
Bereinigen von Ressourcen
Wenn Sie die Beispielanwendung oder Ressourcen nicht mehr benötigen, entfernen Sie die entsprechende Bereitstellung und alle Ressourcen.
azd down