Compartilhar via


Conversar com um modelo de IA local usando o .NET

Neste guia rápido, você aprenderá como criar um aplicativo de chat de console conversacional .NET usando um modelo OpenAI ou Azure OpenAI. O aplicativo usa a biblioteca de Microsoft.Extensions.AI para que você possa escrever código usando abstrações de IA em vez de um SDK específico. As abstrações de IA permitem que você altere o modelo de IA subjacente com alterações mínimas de código.

Pré-requisitos

Executar o modelo de IA local

Conclua as etapas a seguir para configurar e executar um modelo de IA local em seu dispositivo. Muitos modelos de IA diferentes estão disponíveis para execução local e são treinados para tarefas diferentes, como gerar código, analisar imagens, chat gerativo ou criar inserções. Para este início rápido, você usará o modelo phi3:mini da finalidade geral, que é uma IA generativa pequena, mas capaz, criada pela Microsoft.

  1. Abra uma janela do terminal e verifique se o Ollama está disponível em seu dispositivo:

    ollama
    

    Se o Ollama estiver disponível, ele exibirá uma lista de comandos disponíveis.

  2. Inicie o Ollama:

    ollama serve
    

    Se o Ollama estiver em execução, ele exibirá uma lista de comandos disponíveis.

  3. Efetue pull do modelo phi3:mini do Registro Ollama e aguarde até que ele seja baixado:

    ollama pull phi3:mini
    
  4. Após a conclusão do download, execute o modelo:

    ollama run phi3:mini
    

    O Ollama inicia o modelo phi3:mini e fornece um prompt para você interagir com ele.

Criar o aplicativo .NET

Conclua as seguintes etapas para criar um aplicativo de console do .NET que se conectará ao modelo de IA phi3:mini local:

  1. Em uma janela de terminal, navegue até um diretório vazio em seu dispositivo e crie um novo aplicativo com o comando dotnet new:

    dotnet new console -o LocalAI
    
  2. Adicione os pacotes Microsoft.Extensions.AI.Ollama ao seu aplicativo:

    dotnet add package Microsoft.Extensions.AI.Ollama --prerelease
    
  3. Abra o novo aplicativo em seu editor de escolha, como o Visual Studio Code.

    code .
    

Conectar-se e conversar com o modelo de IA

O SDK do Kernel Semântico fornece muitos serviços e recursos para se conectar a modelos de IA e gerenciar interações. Nas etapas a seguir, você criará um aplicativo simples que se conectará à IA local e armazenará o histórico de conversas para melhorar a experiência de chat.

  1. Abra o arquivo Program.cs e substitua o conteúdo do arquivo pelo seguinte código:

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

    O código anterior realiza o seguinte:

    • Cria um OllamaChatClient que implementa a interface IChatClient.
      • Essa interface fornece uma abstração fracamente acoplada que você pode usar para conversar com modelos de IA.
      • Posteriormente, você pode alterar a implementação do cliente de chat subjacente para outro modelo, como o Azure OpenAI, sem alterar nenhum outro código.
    • Cria um objeto ChatHistory para armazenar as mensagens entre o usuário e o modelo de IA.
    • Recupera um prompt do usuário e o armazena no ChatHistory.
    • Envia os dados de chat para o modelo de IA para gerar uma resposta.

    Observação

    O Ollama é executado na porta 11434 por padrão, e é por isso que o ponto de extremidade do modelo de IA é definido como http://localhost:11434.

  2. Execute o aplicativo e insira um prompt no console para receber uma resposta da IA, como o seguinte:

    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. A resposta da IA é precisa, mas também detalhada. O histórico de chat armazenado permite que a IA modifique sua resposta. Instrua a IA a reduzir a lista fornecida por ela:

    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.
    

    A resposta atualizada da IA é muito menor na segunda vez. Devido ao histórico de chat disponível, a IA conseguiu avaliar o resultado anterior e fornecer resumos mais curtos.

Próximas etapas