当前位置: 首页 > news >正文

使用 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);
}
代码解析:
  1. 设置 Ollama API 客户端

    • 我们创建了一个 Uri 对象,指向本地的 Ollama 端点 (http://localhost:11434)。

    • 使用 AddOllamaChatCompletion 将指定的模型 ID 和 API 端点添加到 Semantic Kernel 中。

    • 模型 ID 为 qwen2.5:14b,你可以根据需要更换为其他模型 ID。

  2. 创建 Kernel

    • Kernel 是整个工作流的核心,负责管理 AI 模型和插件。

    • 我们构建了一个 Kernel 实例,并通过 chatService 访问聊天服务。

  3. 聊天功能

    • 系统初始化时设置了一个简单的提示,告知模型它是一个有用的 AI 助手。

    • 用户输入消息时,程序将通过 chatService.GetChatMessageContentAsync 调用 Ollama 模型并获取响应。

    • 每次用户输入和模型输出后,聊天历史会被更新,确保对话上下文被保持。

  4. 退出机制

    • 输入 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!

总结

通过本教程,你已经学习了如何使用 SemanticKernelMicrosoft.SemanticKernel.Connectors.Ollama 来连接本地的 Ollama 大模型并实现一个简单的 AI 问答系统。整个过程涵盖了:

  1. 创建和配置 .NET 项目。

  2. 安装所需的 NuGet 包。

  3. 配置 SemanticKernel 并连接本地 Ollama 模型。

  4. 编写代码与 AI 模型进行交互,并实现聊天功能。

你可以根据自己的需求扩展和优化代码,比如添加更多插件,处理复杂的对话上下文,或集成其他外部服务。

http://www.lryc.cn/news/625897.html

相关文章:

  • 11.Ansible自动化之-内容集管理
  • 快手Klear-Reasoner登顶8B模型榜首,GPPO算法双效强化稳定性与探索能力!
  • 图像增强——灰度变换增强(线性,对数,指数)、空间滤波增强、频域增强、主成分/彩色合成增强(原理解释和代码示例)
  • FPGA 在情绪识别领域的护理应用(一)
  • Spring Boot应用实现图片资源服务
  • 电商数据分析可视化预测系统
  • gitlab、jenkins等应用集成ldap
  • Wireshark获取数据传输的码元速率
  • 【iOS】内存管理
  • implement libtime on Windows
  • 软件系统运维常见问题
  • STM32之beep、多文件、延迟、按键以及呼吸灯
  • 【数据结构】用堆解决TOPK问题
  • 服务器数据恢复—硬盘坏道离线导致raid崩溃的StorNext文件系统数据恢复案例
  • 深度学习-167-MCP技术之工具函数的设计及注册到MCP服务器的两种方式
  • 应用控制技术、内容审计技术、AAA服务器技术
  • Commons-io
  • Syntax Error: Error: PostCSS received undefined instead of CSS string
  • CSS封装大屏自定义组件(标签线)
  • 2025年6月中国电子学会青少年软件编程(图形化)等级考试试卷(一级)答案 + 解析
  • LangChain —多模态 / 多源上下文管理
  • 云原生俱乐部-mysql知识点归纳(3)
  • 【论文阅读】SIMBA: single-cell embedding along with features(1)
  • 《Dual Prompt Personalized Federated Learning in Foundation Models》——论文阅读
  • 自然语言处理(NLP)技术的发展历史
  • 【QT入门到晋级】进程间通信(IPC)-socket(包含性能优化案例)
  • Python爬虫实战:研究ICP-Checker,构建ICP 备案信息自动查询系统
  • GIS在海洋大数据的应用
  • 数据结构:深入解析常见数据结构及其特性
  • 3 创建wordpress网站