使用 SemanticKernel 连接本地大模型 Ollama
介绍如何使用 Microsoft.SemanticKernel 连接本地大模型 Ollama,实现一个简单的 AI 问答系统。我们将从创建一个 .NET 项目开始,安装必要的 NuGet 包,并配置与本地 Ollama 服务器的连接,最后实现 AI 问答的功能。
什么是 SemanticKernel 和 Ollama?
-
SemanticKernel 是微软提供的一个框架,旨在使开发者能够快速集成不同的 AI 模型(如 GPT 系列、大语言模型等),并且提供丰富的插件机制,便于扩展功能。
-
Ollama 是一个本地运行的大语言模型,能够执行 NLP 任务,支持通过 API 进行交互。
本地大模型 Ollama 安装
首先,你需要确保已经在本地安装并启动了 Ollama 服务。你可以访问 Ollama 官方网站 获取最新的安装包并按照文档启动。
Ollama 服务器默认会在 http://localhost:11434
端口上运行。
步骤一:创建 .NET 控制台应用程序
首先,我们需要创建一个新的 .NET 控制台应用程序。
dotnet new console -n MyOllamaAIApp
cd MyOllamaAIApp
步骤二:安装必要的 NuGet 包
在项目中添加以下 NuGet 包:
-
Microsoft.SemanticKernel:包含与 AI 模型的集成。
-
Microsoft.SemanticKernel.Connectors.Ollama:用于连接和使用 Ollama 模型。
运行以下命令安装这些包:
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --prerelease
--prerelease
选项确保安装预发布版本的包。
步骤三:修改 .csproj 文件以忽略警告
在某些情况下,SemanticKernel
的一些功能可能会触发警告。为了避免编译时的干扰,我们可以在 .csproj
文件中加入以下配置来忽略这些警告:
<NoWarn>$(NoWarn);SKEXP0001,SKEXP0010,SKEXP0070</NoWarn>
步骤四:编写代码连接到本地 Ollama 服务
在创建好项目并安装好所需的 NuGet 包之后,接下来我们将编写代码以连接到本地 Ollama 服务,并实现 AI 问答功能。
1. 创建并配置 Kernel
首先,我们需要配置 SemanticKernel
,通过它来集成 Ollama 服务,并与模型进行交互。
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.Ollama;
using OllamaSharp;Console.WriteLine("Hello, World!");// 设置 Ollama API 客户端的端点
var endpoint = new Uri("http://localhost:11434");// 在 AddOllamaChatCompletion 中传递模型 ID 和端点
var builder = Kernel.CreateBuilder().AddOllamaChatCompletion(modelId: "qwen2.5:14b", endpoint: endpoint);// 构建 Kernel
Kernel kernel = builder.Build();// 设置执行设置
var executionSettings = new OllamaPromptExecutionSettings()
{FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
};Console.WriteLine("ExecutionSettings: " + executionSettings);// 获取聊天服务
var chatService = kernel.GetRequiredService<IChatCompletionService>();Console.WriteLine();
Console.WriteLine($"Chat with qwen2.5:14b");var systemPrompt = "You are a helpful assistant that knows about AI.";
var chatHistory = new ChatHistory(systemPrompt);
Console.WriteLine($">>System: {systemPrompt}");while (true)
{Console.Write(">>User: ");var message = Console.ReadLine();if (message?.ToLower() == "exit"){Console.WriteLine("Exiting... Goodbye!");break;}chatHistory.AddUserMessage(message);Console.Write(">>Assistant: ");var reply = await chatService.GetChatMessageContentAsync(chatHistory,executionSettings: executionSettings,kernel: kernel);Console.WriteLine(reply);// 将助手的回复添加到聊天历史chatHistory.AddMessage(reply.Role, reply.Content ?? string.Empty);
}
代码解析:
-
设置 Ollama API 客户端:
-
我们创建了一个
Uri
对象,指向本地的 Ollama 端点 (http://localhost:11434
)。 -
使用
AddOllamaChatCompletion
将指定的模型 ID 和 API 端点添加到 Semantic Kernel 中。 -
模型 ID 为
qwen2.5:14b
,你可以根据需要更换为其他模型 ID。
-
-
创建 Kernel:
-
Kernel
是整个工作流的核心,负责管理 AI 模型和插件。 -
我们构建了一个
Kernel
实例,并通过chatService
访问聊天服务。
-
-
聊天功能:
-
系统初始化时设置了一个简单的提示,告知模型它是一个有用的 AI 助手。
-
用户输入消息时,程序将通过
chatService.GetChatMessageContentAsync
调用 Ollama 模型并获取响应。 -
每次用户输入和模型输出后,聊天历史会被更新,确保对话上下文被保持。
-
-
退出机制:
-
输入
exit
时,程序会停止运行。
-
步骤五:运行应用程序
完成代码编写后,可以通过以下命令来构建和运行你的应用程序:
dotnet build
dotnet run
输出示例:
Hello, World!
ExecutionSettings: OllamaPromptExecutionSettings { FunctionChoiceBehavior = Auto }
Chat with qwen2.5:14b
>>System: You are a helpful assistant that knows about AI.
>>User: What's the capital of France?
>>Assistant: The capital of France is Paris.
>>User: exit
Exiting... Goodbye!
总结
通过本教程,你已经学习了如何使用 SemanticKernel
和 Microsoft.SemanticKernel.Connectors.Ollama
来连接本地的 Ollama 大模型并实现一个简单的 AI 问答系统。整个过程涵盖了:
-
创建和配置 .NET 项目。
-
安装所需的 NuGet 包。
-
配置
SemanticKernel
并连接本地 Ollama 模型。 -
编写代码与 AI 模型进行交互,并实现聊天功能。
你可以根据自己的需求扩展和优化代码,比如添加更多插件,处理复杂的对话上下文,或集成其他外部服务。