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(),
  };

代码说明:

  1. 添加插件,插件定义见下文
  2. 设置插件的执行方式,我们采用自动选择和执行插件

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);
  }
   

代码说明:

  1. 首先在这段代码中创建一个chatService,用来和大模型进行对话
  2. systemPrompt是我们预设的大模型系统级别指令,通过systemPrompt可以更好的控制大模型的输出
  3. chatHistory用来存储会话历史
  4. while循环中进行对话,同时将user和assistant的对话内容临时存储在chatHistory

总结

以上就是今天分享的全部内容,主要介绍如何使用semantic kernel,并通过sk来访问ollama提供的大模型服务。

semantic kernel调用ollama接口的更多相关文章

  1. 远程调用内核接口(remote call kernel)

    -------------------------------------------------------------------------------- 标题: 远程调用内核接口(remote ...

  2. Semantic Kernel 入门系列:🛸LLM降临的时代

    不论你是否关心,不可否认,AGI的时代即将到来了. 在这个突如其来的时代中,OpenAI的ChatGPT无疑处于浪潮之巅.而在ChatGPT背后,我们不能忽视的是LLM(Large Language ...

  3. Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能

    理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...

  4. Semantic Kernel 入门系列:💬Semantic Function

    如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...

  5. Semantic Kernel 入门系列:🥑Memory内存

    了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...

  6. 微信开发,调用js-SDK接口

    微信开发,调用js-SDK接口<!DOCTYPE html><html><head lang="en"> <meta charset=&q ...

  7. 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程

    本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...

  8. Semantic Kernel 知多少 | 开启面向AI编程新篇章

    引言 在ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对ChatGPT的强大略有耳闻.当一些人在对ChatGPT犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐的开展基于ChatGPT ...

  9. Semantic Kernel 入门系列:🪄LLM的魔法

    ChatGPT 只是LLM 的小试牛刀,让人类能够看到的是机器智能对于语言系统的理解和掌握. 如果只是用来闲聊,而且只不过是将OpenAI的接口封装一下,那么市面上所有的ChatGPT的换皮应用都差不 ...

  10. Semantic Kernel 入门系列:💾Native Function

    语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...

随机推荐

  1. 【中英】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入

    [中英][吴恩达课后测验]Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入 上一篇:[课程5 - 第一周编程作业]※※※※※ [回到目录]※※※※※下一篇:[课程5 -第二周编程 ...

  2. Castle Defense

    你需要最大化被数量最少的弓箭手保护的墙被弓箭手保护的数量.想到什么,对了,二分答案. 对 $check$ 函数进行思考. 令答案为 $m$. 如果一个点的值小于 $m$,则考虑将其变成 $m$,那么将 ...

  3. Astah Community安装教程及使用说明(包括括菜单命令解释、操作向导说明、快捷命令说明)

    一.安装教程: 1.双击下载好的文件,允许安装(现在官网已经停刊免费的社区版了,如果想要下载社区版需要从其他地方寻找资源) 2.选择安装的语言,English,点击OK 3.next,接受协议,nex ...

  4. 使用ajax实现验证码

    java后台的servlet: 1 @WebServlet(value = "/login.love",name = "AjaxLoginServlet") 2 ...

  5. 提高数据的安全性和可控性,数栈基于 Ranger 实现的 Spark SQL 权限控制实践之路

    在企业级应用中,数据的安全性和隐私保护是极其重要的.Spark 作为数栈底层计算引擎之一,必须确保数据只能被授权的人员访问,避免出现数据泄露和滥用的情况.为了实现Spark SQL 对数据的精细化管理 ...

  6. 几分钟了解下java虚拟机--01

    JDK, JRE, JVM的关系 ⚙ 解释器: 逐行转换字节码为机器码 即时编译器(JIT):将热点代码(经常执行的代码段)编译成高效的本地机器码,并缓存起来以供后续直接执行 Just-In-Time ...

  7. Nginx 本地代理转发请求 502 Bad Gateway

    问题 在使用 yum 安装 nginx 后可能会出现配置完成后却无法访问的问题,查看 audit.log 会发现类似于以下的错误信息 原因 出现此问题的原因是 SELinux 基于最小权限原则默认拦截 ...

  8. UFT 执行cmd command & kill task

    1. execute cmd command 2. kill task

  9. 4.Java SDK源码分析系列笔记-LinkedList

    目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.3. add方法 3.3.1. 确保容量足够容纳新的元素 3.3.2. 把元素放入数组最后一个位置 3.4 ...

  10. AI应用实战课学习总结(10)用CNN做图像分类

    大家好,我是Edison. 最近入坑黄佳老师的<AI应用实战课>,记录下我的学习之旅,也算是总结回顾. 今天是我们的第10站,一起了解CNN卷积神经网络 以及 通过CNN做图像分类任务的案 ...