semantic kernel调用ollama接口
https://www.cnblogs.com/youring2/p/18813889
semantic kernel调用ollama接口
1.Ollama系列02:快速上手搭建私有的AI对话框和智能体—chatbox版03-162.Ollama系列03:快速上手搭建私有的AI对话框和智能体—cherryStudio版03-173.ollama系列01:轻松3步本地部署deepseek,普通电脑可用03-154.Ollama系列04:进阶篇-搭建私有的知识库和问答系统—cherryStudio版03-195.Ollama系列05:Ollama API 使用指南03-206.Ollama系列06:C#使用OllamaSharp集成Ollama服务03-257.Ollama本地部署大模型总结03-29
8.semantic kernel调用ollama接口04-08
不积跬步无以至千里,不积小流无以成江海!--《荀子 劝学》
我是对本地大模型有执念的!因为它安全性好,数据完全被自己掌控。在前面的内容里面分享了如何使用OllamaSharp访问ollama接口,今天分享如何使用Semantic Kernel来访问ollama接口。
关于Semantic Kernel

Semantic Kernel(SK) 是一款模型无关的SDK,能够帮助开发者快速构建、编排和部署AI代理及多代理系统。无论是开发简单的聊天机器人,还是构建复杂的多代理工作流,该工具都能以企业级的可靠性和灵活性提供所需支持。
地址:https://github.com/microsoft/semantic-kernel
为什么使用SK?
我们可以直接使用类似OllamaSharp这样的SDK来调用某个大模型的接口,但是如果我们即要访问Ollama里面的模型,又要访问OpenAI的接口,还要兼容DeepSeek的接口,这个时候就需要一个集成开发框架了。在.net平台,最好用且功能最全的,目前只有SK(如果还有其它框架请不吝赐教)。
使用SK
首先要添加框架引用:
| dotnet add package Microsoft.SemanticKernel |
由于我们要访问Ollama,因此还需要添加SK的Ollama连接器:
| dotnet add package Microsoft.SemanticKernel.Connectors.Ollama |
注意:为了避免编码时收到SKEXP0070、SKEXP0010这种错误,我们先在项目里面把他们屏蔽掉。
| <PropertyGroup> | |
| ...... | |
| <NoWarn>$(NoWarn);SKEXP0001,SKEXP0010,SKEXP0070</NoWarn> | |
| </PropertyGroup> | |
初始化SK
| var endpoint = new Uri("http://localhost:11434"); | |
| var ollama = new OllamaApiClient(endpoint); | |
| // Create a kernel builder | |
| var builder = Kernel.CreateBuilder().AddOllamaChatCompletion(ollama); | |
| // Build the kernel | |
| Kernel kernel = builder.Build(); |
添加和使用插件
我们可以把sk里面的插件理解成function calling里面的function,本质上都是大预言模型里面的tools节点
| kernel.Plugins.AddFromType<DateTimePlugin>("DateTimePlugin"); | |
| var executionSettings = new OllamaPromptExecutionSettings() | |
| { | |
| FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(), | |
| }; |
代码说明:
- 添加插件,插件定义见下文
- 设置插件的执行方式,我们采用自动选择和执行插件
Plugin的定义
| internal class DateTimePlugin | |
| { | |
| [ | |
| [ | |
| public Task<string> GetCurrentDateTime() | |
| { | |
| return Task.FromResult(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ddd")); | |
| } | |
| } |
创建对话
| var chatService = kernel.GetRequiredService<IChatCompletionService>(); | |
| Console.WriteLine(); | |
| Console.WriteLine($"Chat with {ollama.SelectedModel}"); | |
| 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(); | |
| chatHistory.AddUserMessage(message); | |
| Console.Write(">>Assistant: "); | |
| var reply = await chatService.GetChatMessageContentAsync(chatHistory, | |
| executionSettings: executionSettings, | |
| kernel: kernel); | |
| Console.WriteLine(reply); | |
| // Add the message from the agent to the chat history | |
| chatHistory.AddMessage(reply.Role, reply.Content ?? string.Empty); | |
| } | |
代码说明:
- 首先在这段代码中创建一个
chatService,用来和大模型进行对话 systemPrompt是我们预设的大模型系统级别指令,通过systemPrompt可以更好的控制大模型的输出chatHistory用来存储会话历史- 在
while循环中进行对话,同时将user和assistant的对话内容临时存储在chatHistory中
总结
以上就是今天分享的全部内容,主要介绍如何使用semantic kernel,并通过sk来访问ollama提供的大模型服务。

浙公网安备 33010602011771号