SemanticKernel:添加插件

semantickernel · 浏览次数 : 0

小编点评

本文介绍了Semantic Kernel,这是一个将大型语言模型(LLMs)与C#、Python和Java等编程语言集成的SDK。通过在LLMs中添加插件,可以扩展模型的功能、提高灵活性和实用性。 1. Semantic Kernel是一个插件化的平台,它允许开发者通过定义插件将大型语言模型与各种编程语言结合在一起。插件是通过几行代码链接在一起的,使得在大语言模型基础上进行功能扩展变得更加容易。 2. 为大型语言模型添加插件的目的是为了使其功能更加丰富和灵活。例如,当问及当前日期时,模型可能无法提供准确的信息,而插件可以将其与外部时间源连接,从而提供正确答案。 3. 在Semantic Kernel中,插件分为提示词插件和本地函数插件。本示例使用本地函数插件,通过创建一个TimeInformation类,实现了获取当前UTC时间的功能。 4. 插件通过使用`[KernelFunction]`属性和`[Description]`特性来标识插件。在构建器中添加插件,例如:`builder.Plugins.AddFromType();`。 5. 文章给出了一个示例,展示了如何通过插件获取当前UTC时间,并在提示中使用该信息。示例包括使用模板化提示调用插件以及自动调用插件的方式。 通过插件化的方式,Semantic Kernel使大型语言模型更具灵活性和实用性,同时保持了对原始模型的封装和保护。

正文

SemanticKernel介绍

Semantic Kernel是一个SDK,它将OpenAI、Azure OpenAI和Hugging Face等大型语言模型(LLMs)与C#、Python和Java等传统编程语言集成在一起。Semantic Kernel通过允许您定义插件来实现这一点,这些插件可以通过几行代码链接在一起。

image-20240606090229088

为什么需要添加插件?

大语言模型虽然具有强大的自然语言理解和生成能力,但它们通常是基于预训练的模型,其功能受限于训练时所接触的数据和任务。为大语言模型添加插件是为了扩展其功能、提高其灵活性和实用性。比如你问一个大语言模型今天是几号?它无法提供实时信息甚至会出现幻觉,这时候插件就派上用场了。

Semantic Kernel can orchestrate AI plugins from any provider

实践

插件分为提示词插件与本地函数插件,本次示例用的是本地函数。创建一个TimeInformation类:

 public class TimeInformation
 {
     [KernelFunction]
     [Description("Retrieves the current time in UTC.")]
     public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R");

 }

[KernelFunction]SemanticKernel中的一个特性,表示指定导入为插件的类中的方法应作为 Microsoft.SemanticKernel.KernelFunction 包含在生成的 Microsoft.SemanticKernel.KernelPlugin 中。 [Description]特性用于为类、方法、属性等添加描述信息。

在kernel中加入这个插件:

builder.Plugins.AddFromType<TimeInformation>();
var kernel = builder.Build();

现在来试试效果:

// Example 1. Invoke the kernel with a prompt that asks the AI for information it cannot provide and may hallucinate
Text += "问:还有多少天到7月1号?\r\n";
Text += "答:" + await kernel.InvokePromptAsync("还有多少天到7月1号?") + "\r\n";

// Example 2. Invoke the kernel with a templated prompt that invokes a plugin and display the result       
Text += "问:还有多少天到7月1号?\r\n";
Text += "答:" + await kernel.InvokePromptAsync("现在时间是 {{TimeInformation.GetCurrentUtcTime}},还有多少天到7月1号?") + "\r\n";

// Example 3. Invoke the kernel with a prompt and allow the AI to automatically invoke functions
OpenAIPromptExecutionSettings settings = new() { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions };       
Text += "问:还有多少天到7月1号?\r\n";
Text += "答:" + await kernel.InvokePromptAsync("还有多少天到7月1号,请解释一下你的思考?", new(settings)) + "\r\n";

效果如下所示:

image-20240606092641539

第一个回答没有使用插件,大语言模型出现幻觉了。

第二个回答通过使用模板化的提示来调用插件,回答正确。

第三个回答通过自动调用插件,回答正确。

参考

1、microsoft/semantic-kernel: Integrate cutting-edge LLM technology quickly and easily into your apps (github.com)

2、Understanding AI plugins in Semantic Kernel and beyond | Microsoft Learn

3、semantic-kernel/dotnet/samples/GettingStarted/Step2_Add_Plugins.cs at main · microsoft/semantic-kernel (github.com)

与SemanticKernel:添加插件相似的内容:

SemanticKernel:添加插件

SemanticKernel介绍 Semantic Kernel是一个SDK,它将OpenAI、Azure OpenAI和Hugging Face等大型语言模型(LLMs)与C#、Python和Java等传统编程语言集成在一起。Semantic Kernel通过允许您定义插件来实现这一点,这些插件可

如何让其他模型也能在SemanticKernel中调用本地函数

在SemanticKernel的入门例子中: // Import packages using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.ChatCompletion; using Microsoft.SemanticKerne

动手学Avalonia:基于SemanticKernel与硅基流动构建AI聊天与翻译工具

Avalonia是什么? Avalonia是一个跨平台的UI框架,专为.NET开发打造,提供灵活的样式系统,支持Windows、macOS、Linux、iOS、Android及WebAssembly等多种平台。它已成熟并适合生产环境,被Schneider Electric、Unity、JetBrai

使用Microsoft.SemanticKernel基于本地运行的Ollama大语言模型实现Agent调用函数

大语言模型的发展日新月异,记得在去年这个时候,函数调用还是gpt-4的专属。到今年本地运行的大模型无论是推理能力还是文本的输出质量都已经非常接近gpt-4了。而在去年gpt-4尚未发布函数调用时,智能体框架的开发者们依赖构建精巧的提示词实现了gpt-3.5的函数调用。目前在本机运行的大模型,基于这一

使用SemanticKernel 进行智能应用开发(2023-10更新)

以OpenAI 的ChatGPT 所掀起的GenAI 快速创新浪潮,其中连接LLM 和 应用之间的桥梁的两大开源项目:LangChain[1]和Semantic Kernel[2] ,在半年前写过一篇文章 LangChain vs Semantic Kernel [3],这半年以来Semantic

探索Semantic Kernel内置插件:深入了解HttpPlugin的应用

前言 上一章我们熟悉了Semantic Kernel中的内置插件和对ConversationSummaryPlugin插件进行了实战,本章我们讲解一下另一个常用的内置插件HttpPlugin的应用。 上一章对ConversationSummaryPlugin总结进行了调整之后,顺便给Semantic

探索Semantic Kernel内置插件:深入了解ConversationSummaryPlugin的应用

前言 经过前几章的学习我们已经熟悉了Semantic Kernel 插件的概念,以及基于Prompts构造的Semantic Plugins和基于本地方法构建的Native Plugins。本章我们来讲解一下在Semantic Kernel 中内置的一些插件,让我们避免重复造轮子。 内置插件 Sem

Semantic Kernel入门系列:通过依赖注入管理对象和插件

前言 本章讲一下在Semantic Kernel中使用DependencyInject(依赖注入),在之前的章节我们都是通过手动创建Kernel对象来完成框架的初始化工作,今天我们用依赖注入的方式来实现。 实战 定义Native Plugins 我们用官网的LightPlugins插件来演示依赖注入

探索Semantic Plugins:开启大模型的技能之门

前言 在之前的章节中我们或多或少的已经接触到了 Semantic Kernel 的 Plugins,本章我们讲详细介绍如何使用插件。 Semantic Kernel 的一大特点是拥有强大的插件,通过结合自定义/预定义的插件解决智能业务的问题。让传统的代码和智能插件一起工作灵活地接入到应用场景简化传统

.NET 6+Semantic Kernel快速接入OpenAI接口

Semantic Kernel 与 LangChain 类似,但 Semantic Kernel 是为应用开发开发人员创建的SDK项目,它支持.NET, Python 以及 Java,但是对.NET支持最成熟(微软自家孩子嘛),可以让你的应用很轻易的集成AI大语言模型。今天我们快速地使用Semant...