Chatten mit einem lokalen KI-Modell mithilfe von .NET
In dieser Schnellstartanleitung erfahren Sie, wie Sie eine .NET-Konsolenchat-App für Konversationen mit einem OpenAI- oder Azure OpenAI-Modell erstellen. Die App verwendet die Microsoft.Extensions.AI-Bibliothek, sodass Sie Code mithilfe von KI-Abstraktionen anstelle eines bestimmten SDKs schreiben können. KI-Abstraktionen ermöglichen Ihnen, das zugrunde liegende KI-Modell mit minimalen Codeänderungen zu modifizieren.
Voraussetzungen
- Installation von .NET 8.0 oder höher
- Lokale Installation von Ollama auf Ihrem Gerät
- Visual Studio Code (optional)
Ausführen des lokalen KI-Modells
Führen Sie die folgenden Schritte aus, um ein lokales KI-Modell auf Ihrem Gerät zu konfigurieren und auszuführen. Viele verschiedene KI-Modelle sind für die lokale Ausführung verfügbar und wurden für verschiedene Aufgaben trainiert, z. B. für das Generieren von Code, das Analysieren von Bildern, für generative Chats oder für das Erstellen von Einbettungen. Für diese Schnellstartanleitung verwenden Sie das universelle phi3:mini
-Modell. Dabei handelt es sich um eine kleine, aber fähige generative KI, die von Microsoft erstellt wurde.
Öffnen Sie ein Terminalfenster, und überprüfen Sie, ob Ollama auf Ihrem Gerät verfügbar ist:
ollama
Wenn Ollama verfügbar ist, wird eine Liste der verfügbaren Befehle angezeigt.
Ollama starten:
ollama serve
Wenn Ollama ausgeführt wird, wird eine Liste der verfügbaren Befehle angezeigt.
Pullen Sie das
phi3:mini
-Modell aus der Registrierung von Ollama, und warten Sie, bis es heruntergeladen wurde:ollama pull phi3:mini
Führen Sie nach Abschluss des Downloads das Modell aus:
ollama run phi3:mini
Ollama startet das
phi3:mini
-Modell und stellt eine Eingabeaufforderung für die Interaktion bereit.
Erstellen der .NET App
Führen Sie die folgenden Schritte aus, um eine .NET-Konsolen-App zu erstellen, die eine Verbindung mit Ihrem lokalen phi3:mini
-KI-Modell herstellt:
Navigieren Sie in einem Terminalfenster zu einem leeren Verzeichnis auf Ihrem Gerät, und erstellen Sie eine neue App mit dem Befehl
dotnet new
:dotnet new console -o LocalAI
Fügen Sie die Microsoft.Extensions.AI.Ollama-Pakete zu Ihrer App hinzu:
dotnet add package Microsoft.Extensions.AI.Ollama --prerelease
Öffnen Sie die neue App im gewünschten Editor, z. B. in Visual Studio Code.
code .
Herstellen einer Verbindung und Chatten mit dem KI-Modell
Das Semantic Kernel SDK bietet viele Dienste und Features, um eine Verbindung mit KI-Modellen herzustellen und Interaktionen zu verwalten. In den folgenden Schritten erstellen Sie eine einfache App, die eine Verbindung mit der lokalen KI herstellt und den Unterhaltungsverlauf speichert, um die Chaterfahrung zu verbessern.
Öffnen Sie die Datei Program.cs, und ersetzen Sie den Inhalt der Datei durch den folgenden Code:
using Microsoft.Extensions.AI; IChatClient chatClient = new OllamaChatClient(new Uri("http://localhost:11434/"), "phi3:mini"); // Start the conversation with context for the AI model List<ChatMessage> chatHistory = new(); while (true) { // Get user prompt and add to chat history Console.WriteLine("Your prompt:"); var userPrompt = Console.ReadLine(); chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt)); // Stream the AI response and add to chat history Console.WriteLine("AI Response:"); var response = ""; await foreach (var item in chatClient.CompleteStreamingAsync(chatHistory)) { Console.Write(item.Text); response += item.Text; } chatHistory.Add(new ChatMessage(ChatRole.Assistant, response)); Console.WriteLine(); }
Der obige Code leistet Folgendes:
- Erstellt eine
OllamaChatClient
, die die SchnittstelleIChatClient
implementiert.- Diese Schnittstelle bietet eine lose gekoppelte Abstraktion, mit der Sie mit KI-Modellen chatten können.
- Sie können die zugrunde liegende Chat-Client-Implementierung später zu einem anderen Modell ändern, z. B. Azure OpenAI, ohne weiteren Code zu ändern.
- Erstellt ein
ChatHistory
-Objekt, um die Nachrichten zwischen dem Benutzer und dem KI-Modell zu speichern. - Ruft einen Prompt des Benutzers ab und speichert sie in
ChatHistory
. - Sendet die Chatdaten an das KI-Modell, um eine Antwort zu generieren.
Hinweis
Ollama wird standardmäßig an Port 11434 ausgeführt. Daher ist der KI-Modellendpunkt auf
http://localhost:11434
festgelegt.- Erstellt eine
Führen Sie die App aus, und geben Sie einen Prompt in die Konsole ein, um eine Antwort von der KI zu erhalten, z. B.:
Your prompt: Tell me three facts about .NET. AI response: 1. **Cross-Platform Development:** One of the significant strengths of .NET, particularly its newer iterations (.NET Core and .NET 5+), is cross-platform support. It allows developers to build applications that run on Windows, Linux, macOS, and various other operating systems seamlessly, enhancing flexibility and reducing barriers for a wider range of users. 2. **Rich Ecosystem and Library Support:** .NET has a rich ecosystem, comprising an extensive collection of libraries (such as those provided by the official NuGet Package Manager), tools, and services. This allows developers to work on web applications (.NET for desktop apps and ASP.NET Core for modern web applications), mobile applications (.NET MAUI), IoT solutions, AI/ML projects, and much more with a vast array of prebuilt components available at their disposal. 3. **Type Safety:** .NET operates under the Common Language Infrastructure (CLI) model and employs managed code for executing applications. This approach inherently offers strong type safety checks which help in preventing many runtime errors that are common in languages like C/C++. It also enables features such as garbage collection, thus relieving developers from manual memory management. These characteristics enhance the reliability of .NET-developed software and improve productivity by catching issues early during development.
Die Antwort der KI ist genau, aber auch ausführlich. Der gespeicherte Chatverlauf ermöglicht es der KI, ihre Antwort zu ändern. Weisen Sie die KI an, die bereitgestellte Liste zu kürzen:
Your prompt: Shorten the length of each item in the previous response. AI Response: **Cross-platform Capabilities:** .NET allows building for various operating systems through platforms like .NET Core, promoting accessibility (Windows, Linux, macOS). **Extensive Ecosystem:** Offers a vast library selection via NuGet and tools for web (.NET Framework), mobile development (.NET MAUI), IoT, AI, providing rich capabilities to developers. **Type Safety & Reliability:** .NET's CLI model enforces strong typing and automatic garbage collection, mitigating runtime errors, thus enhancing application stability.
Die aktualisierte Antwort der KI ist beim zweiten Mal viel kürzer. Aufgrund des verfügbaren Chatverlaufs konnte die KI das vorherige Ergebnis bewerten und kürzere Zusammenfassungen bereitstellen.