Bate-papo com um modelo de IA local usando .NET e Kernel Semântico
Os modelos locais de IA fornecem opções poderosas e flexíveis para a criação de soluções de IA. Neste guia de início rápido, você explorará como configurar e se conectar a um modelo de IA local usando o .NET e o SDK do Kernel Semântico. Neste exemplo, você executará o modelo de IA local usando o Ollama.
Pré-requisitos
- Instalar o .NET 8.0 ou superior
- Instale o Ollama localmente no seu dispositivo
- Código do Visual Studio (opcional)
Execute o modelo de IA local
Conclua as etapas a seguir para configurar e executar um modelo de IA local em seu dispositivo. Muitos modelos diferentes de IA estão disponíveis para serem executados localmente e são treinados para diferentes tarefas, como gerar código, analisar imagens, conversar generativamente ou criar incorporações. Para este início rápido, você usará o modelo de propósito phi3:mini
geral, que é uma IA generativa pequena, mas capaz, criada pela Microsoft.
Abra uma janela do terminal e verifique se o Ollama está disponível no seu dispositivo:
ollama
Se o Ollama estiver em execução, ele exibirá uma lista de comandos disponíveis.
Puxe o
phi3:mini
modelo do registro Ollama e aguarde o download:ollama pull phi3:mini
Após a conclusão do download, execute o modelo:
ollama run phi3:mini
Ollama inicia o
phi3:mini
modelo e fornece um prompt para você interagir com ele.
Criar o aplicativo .NET
Conclua as seguintes etapas para criar um aplicativo de console .NET que se conectará ao seu modelo de IA local phi3:mini
:
Em uma janela de terminal, navegue até um diretório vazio no seu dispositivo e crie um novo aplicativo com o
dotnet new
comando:dotnet new console
Adicione o SDK do Kernel Semântico e os pacotes do Semantic Kernel Ollama Connector ao seu aplicativo:
dotnet add package Microsoft.SemanticKernel dotnet add package Microsoft.SemanticKernel.Connectors.Ollama
Abra o novo aplicativo no editor de sua escolha, como o Visual Studio Code.
code .
Conecte-se e converse 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 seguintes, você criará um aplicativo simples que se conecta à IA local e armazena o histórico de conversas para melhorar a experiência de bate-papo.
Abra o arquivo Program.cs e substitua o conteúdo do arquivo com o seguinte código:
using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.ChatCompletion; // Create a kernel with OpenAI chat completion // Warning due to the experimental state of some Semantic Kernel SDK features. #pragma warning disable SKEXP0070 Kernel kernel = Kernel.CreateBuilder() .AddOllamaChatCompletion( modelId: "phi3:mini", endpoint: new Uri("http://localhost:11434")) .Build(); var aiChatService = kernel.GetRequiredService<IChatCompletionService>(); var chatHistory = new ChatHistory(); while (true) { // Get user prompt and add to chat history Console.WriteLine("Your prompt:"); var userPrompt = Console.ReadLine(); chatHistory.Add(new ChatMessageContent(AuthorRole.User, userPrompt)); // Stream the AI response and add to chat history Console.WriteLine("AI Response:"); var response = ""; await foreach(var item in aiChatService.GetStreamingChatMessageContentsAsync(chatHistory)) { Console.Write(item.Content); response += item.Content; } chatHistory.Add(new ChatMessageContent(AuthorRole.Assistant, response)); Console.WriteLine(); }
O código anterior realiza as seguintes tarefas:
- Cria um
Kernel
objeto e o usa para recuperar um serviço de conclusão de chat. - Cria um
ChatHistory
objeto para armazenar as mensagens entre o usuário e o modelo de IA. - Recupera um prompt do usuário e o armazena
ChatHistory
no . - Envia os dados do chat para o modelo de IA para gerar uma resposta.
Nota
O Ollama é executado na porta 11434 por padrão, e é por isso que o ponto de extremidade do modelo de IA está definido como
http://localhost:11434
.- Cria um
Execute o aplicativo e insira um prompt no console para receber uma resposta da IA, como a 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.
A resposta da IA é precisa, mas também detalhada. O histórico de bate-papo armazenado permite que a IA modifique sua resposta. Instrua a IA a encurtar a lista fornecida:
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 mais curta na segunda vez. Devido ao histórico de bate-papo disponível, a IA foi capaz de avaliar o resultado anterior e fornecer resumos mais curtos.