semantic kernel调用ollama接口
https://www.cnblogs.com/youring2/p/18813889
semantic kernel调用ollama接口
不积跬步无以至千里,不积小流无以成江海!--《荀子 劝学》
我是对本地大模型有执念的!因为它安全性好,数据完全被自己掌控。在前面的内容里面分享了如何使用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 | |
| { | |
| [KernelFunction("get_current_datetime")] | |
| [Description("Get current datetime and day of week")] | |
| 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提供的大模型服务。
semantic kernel调用ollama接口的更多相关文章
- 远程调用内核接口(remote call kernel)
-------------------------------------------------------------------------------- 标题: 远程调用内核接口(remote ...
- Semantic Kernel 入门系列:🛸LLM降临的时代
不论你是否关心,不可否认,AGI的时代即将到来了. 在这个突如其来的时代中,OpenAI的ChatGPT无疑处于浪潮之巅.而在ChatGPT背后,我们不能忽视的是LLM(Large Language ...
- Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能
理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...
- Semantic Kernel 入门系列:💬Semantic Function
如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...
- Semantic Kernel 入门系列:🥑Memory内存
了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...
- 微信开发,调用js-SDK接口
微信开发,调用js-SDK接口<!DOCTYPE html><html><head lang="en"> <meta charset=&q ...
- 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程
本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...
- Semantic Kernel 知多少 | 开启面向AI编程新篇章
引言 在ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对ChatGPT的强大略有耳闻.当一些人在对ChatGPT犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐的开展基于ChatGPT ...
- Semantic Kernel 入门系列:🪄LLM的魔法
ChatGPT 只是LLM 的小试牛刀,让人类能够看到的是机器智能对于语言系统的理解和掌握. 如果只是用来闲聊,而且只不过是将OpenAI的接口封装一下,那么市面上所有的ChatGPT的换皮应用都差不 ...
- Semantic Kernel 入门系列:💾Native Function
语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...
随机推荐
- 【中英】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入
[中英][吴恩达课后测验]Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入 上一篇:[课程5 - 第一周编程作业]※※※※※ [回到目录]※※※※※下一篇:[课程5 -第二周编程 ...
- Castle Defense
你需要最大化被数量最少的弓箭手保护的墙被弓箭手保护的数量.想到什么,对了,二分答案. 对 $check$ 函数进行思考. 令答案为 $m$. 如果一个点的值小于 $m$,则考虑将其变成 $m$,那么将 ...
- Astah Community安装教程及使用说明(包括括菜单命令解释、操作向导说明、快捷命令说明)
一.安装教程: 1.双击下载好的文件,允许安装(现在官网已经停刊免费的社区版了,如果想要下载社区版需要从其他地方寻找资源) 2.选择安装的语言,English,点击OK 3.next,接受协议,nex ...
- 使用ajax实现验证码
java后台的servlet: 1 @WebServlet(value = "/login.love",name = "AjaxLoginServlet") 2 ...
- 提高数据的安全性和可控性,数栈基于 Ranger 实现的 Spark SQL 权限控制实践之路
在企业级应用中,数据的安全性和隐私保护是极其重要的.Spark 作为数栈底层计算引擎之一,必须确保数据只能被授权的人员访问,避免出现数据泄露和滥用的情况.为了实现Spark SQL 对数据的精细化管理 ...
- 几分钟了解下java虚拟机--01
JDK, JRE, JVM的关系 ⚙ 解释器: 逐行转换字节码为机器码 即时编译器(JIT):将热点代码(经常执行的代码段)编译成高效的本地机器码,并缓存起来以供后续直接执行 Just-In-Time ...
- Nginx 本地代理转发请求 502 Bad Gateway
问题 在使用 yum 安装 nginx 后可能会出现配置完成后却无法访问的问题,查看 audit.log 会发现类似于以下的错误信息 原因 出现此问题的原因是 SELinux 基于最小权限原则默认拦截 ...
- UFT 执行cmd command & kill task
1. execute cmd command 2. kill task
- 4.Java SDK源码分析系列笔记-LinkedList
目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.3. add方法 3.3.1. 确保容量足够容纳新的元素 3.3.2. 把元素放入数组最后一个位置 3.4 ...
- AI应用实战课学习总结(10)用CNN做图像分类
大家好,我是Edison. 最近入坑黄佳老师的<AI应用实战课>,记录下我的学习之旅,也算是总结回顾. 今天是我们的第10站,一起了解CNN卷积神经网络 以及 通过CNN做图像分类任务的案 ...