Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Schnellstartanleitung erfahren Sie, wie Sie mithilfe der OpenAI- oder Azure OpenAI SDK-Bibliotheken einen minimalen KI-Assistenten erstellen. KI-Assistenten bieten agentische Funktionen, mit denen Benutzer Aufgaben mithilfe von KI-Tools und -Modellen erledigen können. In den folgenden Abschnitten erfahren Sie Folgendes:
- Kernkomponenten und Konzepte von KI-Assistenten
- So erstellen Sie einen Assistenten mit dem Azure OpenAI SDK
- Möglichkeiten zur Verbesserung und Anpassung der Funktionen eines Assistenten
Voraussetzungen
- Installieren Sie .NET 8.0 oder höher
- Visual Studio Code (wahlweise)
- Visual Studio (optional)
- Zugriffstaste für ein OpenAI-Modell
- Installieren Sie .NET 8.0 oder höher
- Visual Studio Code (wahlweise)
- Visual Studio (optional)
- Zugriff auf eine Azure OpenAI-Instanz über Azure Identity oder einen Zugriffsschlüssel
Kernkomponenten von KI-Assistenten
KI-Assistenten basieren auf Unterhaltungsthreads mit einem Benutzer. Der Benutzer sendet Aufforderungen an den Assistenten in einem Unterhaltungsthread, der den Assistenten anfordert, Aufgaben mithilfe der verfügbaren Tools auszuführen. Assistenten können Daten verarbeiten und analysieren, Entscheidungen treffen und mit Benutzern oder anderen Systemen interagieren, um bestimmte Ziele zu erreichen. Die meisten Assistenten enthalten die folgenden Komponenten:
| Komponente | Beschreibung |
|---|---|
| Assistent | Der Kern-KI-Client und die Logik, die Azure OpenAI-Modelle nutzt, Gesprächsverläufe verwaltet und konfigurierte Tools verwendet. |
| Faden | Eine Unterhaltungssitzung zwischen einem Assistenten und einem Benutzer. Threads speichern Nachrichten und kürzen automatisch Inhalte, um sie in den Kontext eines Modells zu integrieren. |
| Meldung | Eine Nachricht, die von einem Assistenten oder einem Benutzer erstellt wurde. Nachrichten können Text, Bilder und andere Dateien enthalten. Nachrichten werden als Liste im Thread gespeichert. |
| Ausführen | Aktivierung eines Assistenten, der basierend auf dem Inhalt des Threads mit der Ausführung beginnen soll. Der Assistent verwendet seine Konfiguration und die Nachrichten des Threads, um Aufgaben durch Aufrufen von Modellen und Tools auszuführen. Als Teil einer Ausführung fügt der Assistent Nachrichten an den Thread an. |
| Ausführen von Schritten | Eine detaillierte Liste der Schritte, die der Assistent als Teil eines Ablaufs durchgeführt hat. Ein Assistent kann Tools aufrufen oder während der Ausführung Nachrichten erstellen. Wenn Sie die Ausführungsschritte untersuchen, können Sie verstehen, wie der Assistent zu seinen endgültigen Ergebnissen gelangt. |
Assistenten können auch so konfiguriert werden, dass mehrere Tools parallel zum Ausführen von Aufgaben verwendet werden, einschließlich der folgenden:
- Codedolmetscher-Tool: Schreibt Und führt Code in einer Sandkastenausführungsumgebung aus.
- Funktionsaufruf: Führt lokale benutzerdefinierte Funktionen aus, die Sie in Ihrem Code definieren.
- Dateisuche-Fähigkeiten: Erweitert den Assistenten mit Wissen von außerhalb seines Modells.
Indem Sie diese Kernkomponenten und ihre Interaktion verstehen, können Sie leistungsstarke KI-Assistenten erstellen und anpassen, um Ihre spezifischen Anforderungen zu erfüllen.
Erstellen der .NET-App
Führen Sie die folgenden Schritte aus, um eine .NET-Konsolen-App zu erstellen und das paket hinzuzufügen, das für die Arbeit mit Assistenten erforderlich ist:
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 AIAssistantFügen Sie der App das OpenAI--Paket hinzu:
dotnet add package OpenAIÖffnen Sie die neue App in Ihrem Gewünschten Editor, z. B. Visual Studio Code.
code .
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 AIAssistantFügen Sie das Azure.AI.OpenAI Paket zu Ihrer App hinzu:
dotnet add package Azure.AI.OpenAIÖffnen Sie die neue App in Ihrem Gewünschten Editor, z. B. Visual Studio Code.
code .
Erstellen des KI-Assistenten-Clients
Öffnen Sie die
Program.csDatei, und ersetzen Sie den Inhalt der Datei durch den folgenden Code, um die erforderlichen Clients zu erstellen:using OpenAI; using OpenAI.Assistants; using OpenAI.Files; using Azure.AI.OpenAI; using Azure.Identity; // Create the OpenAI client OpenAIClient openAIClient = new("your-apy-key"); // For Azure OpenAI, use the following client instead: AzureOpenAIClient azureAIClient = new( new Uri("your-azure-openai-endpoint"), new DefaultAzureCredential()); #pragma warning disable OPENAI001 AssistantClient assistantClient = openAIClient.GetAssistantClient(); OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient();Erstellen Sie ein Speicherbeispieldokument, und laden Sie es in den
OpenAIFileClienthoch:// Create an in-memory document to upload to the file client using Stream document = BinaryData.FromBytes(""" { "description": "This document contains the sale history data for Contoso products.", "sales": [ { "month": "January", "by_product": { "113043": 15, "113045": 12, "113049": 2 } }, { "month": "February", "by_product": { "113045": 22 } }, { "month": "March", "by_product": { "113045": 16, "113055": 5 } } ] } """u8.ToArray()).ToStream(); // Upload the document to the file client OpenAIFile salesFile = fileClient.UploadFile( document, "monthly_sales.json", FileUploadPurpose.Assistants);Aktivieren Sie die Funktionen für die Dateisuche und den Code-Interpreter über die
AssistantCreationOptions:// Configure the assistant options AssistantCreationOptions assistantOptions = new() { Name = "Example: Contoso sales RAG", Instructions = "You are an assistant that looks up sales data and helps visualize the information based" + " on user queries. When asked to generate a graph, chart, or other visualization, use" + " the code interpreter tool to do so.", Tools = { new FileSearchToolDefinition(), // Enable the assistant to search and access files new CodeInterpreterToolDefinition(), // Enable the assistant to run code for data analysis }, ToolResources = new() { FileSearch = new() { NewVectorStores = { new VectorStoreCreationHelper([salesFile.Id]), } } }, };Erstellen Sie die
Assistantund einen Thread, um Interaktionen zwischen dem Benutzer und dem Assistenten zu verwalten:// Create the assistant Assistant assistant = assistantClient.CreateAssistant("gpt-4o", assistantOptions); // Configure and create the conversation thread ThreadCreationOptions threadOptions = new() { InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." } }; ThreadRun threadRun = assistantClient.CreateThreadAndRun(assistant.Id, threadOptions); // Sent the prompt and monitor progress until the thread run is complete do { Thread.Sleep(TimeSpan.FromSeconds(1)); threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id); } while (!threadRun.Status.IsTerminal); // Get the messages from the thread run var messages = assistantClient.GetMessagesAsync( threadRun.ThreadId, new MessageCollectionOptions() { Order = MessageCollectionOrder.Ascending });Drucken Sie die Nachrichten, und speichern Sie das generierte Bild aus der Unterhaltung mit dem Assistenten:
// Process the messages from the assistant await foreach (ThreadMessage message in messages) { // Print out the messages from the assistant Console.Write($"[{message.Role.ToString().ToUpper()}]: "); foreach (MessageContent contentItem in message.Content) { if (!string.IsNullOrEmpty(contentItem.Text)) { Console.WriteLine($"{contentItem.Text}"); if (contentItem.TextAnnotations.Count > 0) { Console.WriteLine(); } // Include annotations, if any foreach (TextAnnotation annotation in contentItem.TextAnnotations) { if (!string.IsNullOrEmpty(annotation.InputFileId)) { Console.WriteLine($"* File citation, file ID: {annotation.InputFileId}"); } if (!string.IsNullOrEmpty(annotation.OutputFileId)) { Console.WriteLine($"* File output, new file ID: {annotation.OutputFileId}"); } } } // Save the generated image file if (!string.IsNullOrEmpty(contentItem.ImageFileId)) { OpenAIFile imageInfo = fileClient.GetFile(contentItem.ImageFileId); BinaryData imageBytes = fileClient.DownloadFile(contentItem.ImageFileId); using FileStream stream = File.OpenWrite($"{imageInfo.Filename}.png"); imageBytes.ToStream().CopyTo(stream); Console.WriteLine($"<image: {imageInfo.Filename}.png>"); } } Console.WriteLine(); }Suchen und öffnen Sie das gespeicherte Bild im App-Verzeichnis
bin, das wie folgt aussehen sollte: