Condividi tramite


Chat con un modello di intelligenza artificiale locale con .NET

Questa guida introduttiva illustra come creare un'app di chat console .NET conversazionale usando un modello OpenAI o Azure OpenAI. L'app usa la libreria di Microsoft.Extensions.AI in modo da poter scrivere codice usando astrazioni di intelligenza artificiale anziché un SDK specifico. Le astrazioni di intelligenza artificiale consentono di modificare il modello di intelligenza artificiale sottostante con modifiche minime al codice.

Prerequisiti

Eseguire il modello di intelligenza artificiale locale

Completare i passaggi seguenti per configurare ed eseguire un modello di intelligenza artificiale locale nel dispositivo. Molti modelli di intelligenza artificiale diversi sono disponibili per l'esecuzione in locale e vengono sottoposti a training per diverse attività, ad esempio la generazione di codice, l'analisi di immagini, la chat generativa o la creazione di incorporamenti. Per questa guida introduttiva si userà il modello per utilizzo phi3:mini generico, che è un'intelligenza artificiale piccola ma in grado di generarsi creata da Microsoft.

  1. Aprire una finestra del terminale e verificare che Ollama sia disponibile nel dispositivo:

    ollama
    

    Se Ollama è disponibile, viene visualizzato un elenco di comandi disponibili.

  2. Avviare Ollama:

    ollama serve
    

    Se Ollama è in esecuzione, viene visualizzato un elenco di comandi disponibili.

  3. Eseguire il pull del phi3:mini modello dal Registro di sistema Ollama e attendere il download:

    ollama pull phi3:mini
    
  4. Al termine del download, eseguire il modello:

    ollama run phi3:mini
    

    Ollama avvia il phi3:mini modello e fornisce una richiesta di interazione con essa.

Creare l'app .NET

Completare i passaggi seguenti per creare un'app console .NET che si connetterà al modello di intelligenza artificiale locale phi3:mini :

  1. In una finestra del terminale passare a una directory vuota nel dispositivo e creare una nuova app con il dotnet new comando :

    dotnet new console -o LocalAI
    
  2. Aggiungere i pacchetti di Microsoft.Extensions.AI.Ollama all'app:

    dotnet add package Microsoft.Extensions.AI.Ollama --prerelease
    
  3. Aprire la nuova app nell'editor preferito, ad esempio Visual Studio Code.

    code .
    

Connettersi e chattare con il modello di intelligenza artificiale

Semantic Kernel SDK offre molti servizi e funzionalità per connettersi ai modelli di intelligenza artificiale e gestire le interazioni. Nei passaggi successivi si creerà una semplice app che si connette all'intelligenza artificiale locale e archivia la cronologia delle conversazioni per migliorare l'esperienza di chat.

  1. Aprire il file Program.cs e sostituire il contenuto del file con il codice seguente:

    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();
    }
    

    Il codice precedente esegue le operazioni seguenti:

    • Crea un OllamaChatClient che implementa l'interfaccia IChatClient.
      • Questa interfaccia fornisce un'astrazione ad accoppiamento libero che è possibile usare per chattare con i modelli di intelligenza artificiale.
      • In seguito è possibile modificare l'implementazione del client di chat sottostante in un altro modello, ad esempio Azure OpenAI, senza modificare altro codice.
    • Crea un ChatHistory oggetto per archiviare i messaggi tra l'utente e il modello di intelligenza artificiale.
    • Recupera un prompt dall'utente e lo archivia in ChatHistory.
    • Invia i dati della chat al modello di intelligenza artificiale per generare una risposta.

    Nota

    Ollama viene eseguito sulla porta 11434 per impostazione predefinita, motivo per cui l'endpoint del modello di intelligenza artificiale è impostato su http://localhost:11434.

  2. Eseguire l'app e immettere un prompt nella console per ricevere una risposta dall'intelligenza artificiale, ad esempio quanto segue:

    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 an incredibly 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 Framework for desktop apps and ASP.NET Core 
    for modern web applications), mobile applications (.NET MAUI or Xamarin.Forms),
    IoT solutions, AI/ML projects, and much more with a vast array of pre-built
    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.
    
  3. La risposta dell'intelligenza artificiale è accurata, ma anche dettagliata. La cronologia delle chat archiviate consente all'intelligenza artificiale di modificare la risposta. Indicare all'intelligenza artificiale di abbreviare l'elenco fornito:

    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 (Maui/Xamarin.Forms), 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.
    

    La risposta aggiornata dall'intelligenza artificiale è molto più breve la seconda volta. A causa della cronologia di chat disponibile, l'intelligenza artificiale è stata in grado di valutare il risultato precedente e fornire riepiloghi più brevi.

Passaggi successivi