Freigeben über


Erstellen eines minimalen KI-Assistenten mit .NET

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

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:

  1. 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 AIAssistant
    
  2. Fügen Sie der App das OpenAI--Paket hinzu:

    dotnet add package OpenAI
    
  3. Öffnen Sie die neue App in Ihrem Gewünschten Editor, z. B. Visual Studio Code.

    code .
    
  1. 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 AIAssistant
    
  2. Fügen Sie das Azure.AI.OpenAI Paket zu Ihrer App hinzu:

    dotnet add package Azure.AI.OpenAI
    
  3. Öffnen Sie die neue App in Ihrem Gewünschten Editor, z. B. Visual Studio Code.

    code .
    

Erstellen des KI-Assistenten-Clients

  1. Öffnen Sie die Program.cs Datei, 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();
    
  2. Erstellen Sie ein Speicherbeispieldokument, und laden Sie es in den OpenAIFileClient hoch:

    // 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);
    
  3. 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]),
                }
            }
        },
    };
    
  4. Erstellen Sie die Assistant und 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
        });
    
  5. 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:

    Ein Diagramm, das die vom KI-Modell generierte Visualisierung anzeigt.

Nächste Schritte