使用 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 的聊天服务。希望这篇博客能帮助您更好地理解和使用这些工具。如果您有任何问题或建议,请随时在评论区留言。

关注我的公众号一起玩转技术

相关推荐
knqiufan2 小时前
PingCraft:从需求文档到可追踪工作项的 Agent 实践之路
ai·llm·agent·pingcode
xixixi777778 小时前
2026 年 03 月 20 日 AI+通信+安全行业日报(来更新啦)
大数据·人工智能·安全·ai·大模型·通信
智算菩萨9 小时前
【Generative AI For Autonomous Driving】1 生成式AI重塑自动驾驶的技术浪潮与体系化挑战
论文阅读·人工智能·深度学习·机器学习·ai·自动驾驶
智算菩萨9 小时前
【Generative AI For Autonomous Driving】7 生成式AI驱动自动驾驶的未来图景:开放挑战、社会机遇与技术展望
论文阅读·人工智能·深度学习·机器学习·ai·自动驾驶
王菜鸟9 小时前
什么是Agent及相关框架介绍
ai·ai编程
AI英德西牛仔9 小时前
deepseek怎么导出文档
人工智能·ai·chatgpt·deepseek·ds随心转
samson_www10 小时前
千问伴我部署Dify
ai
楚国的小隐士10 小时前
“你用AI,那我也会用AI,我还要你干什么?”
ai·大模型·编程·ai编程·哲学·氛围编程·辩证唯物主义·马列主义·唯物论
香吧香11 小时前
Dify大模型应用开发平台实战:从Prompt工程到生产级AI工作流
ai
智算菩萨11 小时前
元认知AI素养:来自交互式AI展览的发现——文献精读
论文阅读·人工智能·深度学习·ai