使用 .NET 與本機 AI 模型聊天
在本快速入門中,您將瞭解如何使用 OpenAI 或 Azure OpenAI 模型建立交談式 .NET 控制台聊天應用程式。 應用程式會使用 Microsoft.Extensions.AI
連結庫,因此您可以使用 AI 抽象概念來撰寫程式代碼,而不是特定的 SDK。 AI 抽象概念可讓您使用最少的程式代碼變更來變更基礎 AI 模型。
必要條件
- 安裝 .NET 8.0 或更高版本
- 在裝置本機安裝Ollama
- Visual Studio Code (選用)
執行本機 AI 模型
完成下列步驟,以在您的裝置上設定和執行本機 AI 模型。 許多不同的 AI 模型可在本機執行,並針對不同的工作定型,例如產生程式代碼、分析影像、產生式聊天,或建立內嵌。 在本快速入門中,您將使用一般用途 phi3:mini
模型,這是Microsoft所建立的小型但能夠產生的 AI。
開啟終端機視窗,並確認您的裝置上是否提供 Ollama:
ollama
如果 Ollama 可供使用,則會顯示可用的命令清單。
啟動 Ollama:
ollama serve
如果 Ollama 正在執行,則會顯示可用的命令清單。
phi3:mini
從 Ollama 登錄提取模型,並等候其下載:ollama pull phi3:mini
下載完成之後,請執行模型:
ollama run phi3:mini
Ollama 會啟動
phi3:mini
模型,並提供提示讓您與其互動。
建立 .NET 應用程式
完成下列步驟以建立 .NET 控制台應用程式,以連線到您的本機 phi3:mini
AI 模型:
在終端機視窗中,瀏覽至裝置上的空白目錄,並使用
dotnet new
命令建立新的應用程式:dotnet new console -o LocalAI
將 Microsoft.Extensions.AI.Ollama 套件新增至您的應用程式:
dotnet add package Microsoft.Extensions.AI.Ollama --prerelease
在您選擇的編輯器中開啟新的應用程式,例如 Visual Studio Code。
code .
與 AI 模型連線並聊天
語意核心 SDK 提供許多服務和功能,以連線到 AI 模型和管理互動。 在後續步驟中,您將建立簡單的應用程式,以連線到本機 AI 並儲存交談歷程記錄,以改善聊天體驗。
開啟Program.cs檔案,並以下列程式代碼取代檔案的內容:
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(); }
上述程式代碼會完成下列作業:
- 建立實作
IChatClient
介面的OllamaChatClient
。- 此介面提供鬆散結合的抽象概念,可讓您用來與 AI 模型聊天。
- 您稍後可以將基礎聊天用戶端實作變更為另一個模型,例如 Azure OpenAI,而不需要變更任何其他程式碼。
-
ChatHistory
建立對象來儲存使用者與 AI 模型之間的訊息。 - 從使用者擷取提示,並將它儲存在 中
ChatHistory
。 - 將聊天數據傳送至 AI 模型以產生回應。
注意
根據預設,Ollama 會在埠 11434 上執行,這就是為什麼 AI 模型端點設定為
http://localhost:11434
的原因。- 建立實作
執行應用程式,並在控制台中輸入提示以接收來自 AI 的回應,例如:
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 a 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 for desktop apps and ASP.NET Core for modern web applications), mobile applications (.NET MAUI), IoT solutions, AI/ML projects, and much more with a vast array of prebuilt 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.
AI 的響應正確,但也非常詳細。 預存的聊天記錄可讓 AI 修改其回應。 指示 AI 縮短所提供的清單:
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 (.NET MAUI), 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.
AI 的更新回應第二次要短得多。 由於可用的聊天記錄,AI 能夠評估先前的結果,並提供較短的摘要。