使用 SemanticKernel 對接 Ollma
前面的 2 篇文章已經介紹了 ollama 的基本情況。我們也已經能在本地跟 LLM 進行聊天了。但是如何使用代碼跟 LLM 進行交互呢?如果是 C# 選手那自然是使用 SK (SemanticKernel) 了。在這篇博客中,我們將探討如何使用 Microsoft 的 SemanticKernel 框架對接 Ollama 的聊天服務。我們將通過一個簡單的 C# 控制臺應用程序來展示如何實現這一點。
前提條件
在本地安裝 ollama 服務,并且安裝至少一個模型,這次我們的模型是 llama3.1:8b。具體如何安裝就不贅述了,請參考以往文章:
安裝 SK 及 ollama connector
首先在本地創建一個 Console 項目,然后安裝以下包:
dotnet add package Microsoft.SemanticKernel --version 1.21.1
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --version 1.21.1-alpha
注意:ollama connector 還是 alpha 版本,請勿用于生產
修改 Program 文件
添加命名空間
首先,我們需要引入一些必要的命名空間:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.Ollama;
配置 Ollama 服務
接下來,我們需要配置 Ollama 服務的端點和模型 ID ,并添加 Ollama 的聊天服務:
var endpoint = new Uri("http://localhost:11434");
var modelId = "llama3.1:8b";
var builder = Kernel.CreateBuilder();
#pragma warning disable SKEXP0070
builder.Services.AddScoped<IChatCompletionService>(_ => new OllamaChatCompletionService(modelId, endpoint));
注意:OllamaChatCompletionService 為實驗性質所以我們需求手工關閉 SKEXP0070 的警告
獲取聊天服務
var chatService = kernel.GetRequiredService<IChatCompletionService>();
var history = new ChatHistory();
history.AddSystemMessage("This is a llama3 assistant ...");
聊天循環
最后,我們實現一個簡單的聊天循環,讀取用戶輸入并獲取 Ollama 的回復:
while (true)
{
Console.Write("You:");
var input = Console.ReadLine();
if (string.IsNullOrWhiteSpace(input))
{
break;
}
history.AddUserMessage(input);
var contents = await chatService.GetChatMessageContentsAsync(history);
foreach (var chatMessageContent in contents)
{
var content = chatMessageContent.Content;
Console.WriteLine($"Ollama: {content}");
history.AddMessage(chatMessageContent.Role, content ?? "");
}
}
試一下
讓我們運行項目在 Console 中跟 ollama 進行對話吧。

總結
通過這篇博客,我們展示了如何使用 Microsoft 的 SemanticKernel 框架對接 Ollama 的聊天服務。希望這篇博客能幫助您更好地理解和使用這些工具。如果您有任何問題或建議,請隨時在評論區留言。
關注我的公眾號一起玩轉技術

QQ群:1022985150 VX:kklldog 一起探討學習.NET技術
作者:Agile.Zhou(kklldog)
出處:http://www.rzrgm.cn/kklldog/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

浙公網安備 33010602011771號