首页 > 其他分享 >Kernel Memory 入门系列:Semantic Kernel 插件

Kernel Memory 入门系列:Semantic Kernel 插件

时间:2023-12-30 09:04:25浏览次数:39  
标签:Kernel 插件 Semantic Memory memory var

Kernel Memory 入门系列:Semantic Kernel 插件

Kernel Memory 本身提供了完整的RAG能力,这部分能力如果通过Semantic Kernel Memory的话,也是可以实现的,但是整体的管理成本会比较高。
因此通过Kernel Memory 构建知识库管理,然后通过插件的方式,将Kernel Memory接入到Semantic Kernel 中,这样就可以有效的提升整体的使用效率。

初始化插件

首先需要在Semantic Kernel 的项目中添加对应的Kernel Memory的Semantic Kernel Plugin包。

dotnet add package Microsoft.KernelMemory.SemanticKernelPlugin

然后就取出构建KernelMemory,构建的步骤和之前的方式一样,也可以使用Kernel Memory Service的 WebClient.

var memory = new KernelMemoryBuilder()
               //...
                 .Build<MemoryServerless>();
// OR

var memory = new MemoryWebClient("http://127.0.0.1:9001"); 

完成构建之后就可以Semantic Kernel 中导入插件了。

var memoryPlugin = kernel.ImportPluginFromObject(new MemoryPlugin(memory), "memory");

如果直接使用Kernel Memory Service的话,也可以通过快捷方式直接构建。

var memoryPlugin = kernel.ImportPluginFromObject(new MemoryPlugin("http://127.0.0.1:9001"), "memory");

如果有使用其中的ApiKey参数的话,也可以参考其中的参数说明进行配置。

另外还可以指定默认的 Index 和文档的 tags。

new MemoryPlugin(memory,
        defaultIndex: "default",
        defaultRetrievalTags: 
            new TagCollection()
            {
                {"user", "xbotter"}
            }
        );

插件的功能

MemoryPlugin 本身提供了近乎完整的Kernel Memory的功能,包括:

  • Save
  • SaveFile
  • SaveWebPage
  • Search
  • Ask
  • Delete
  • WaitForDocumentReadiness

也就意味着如果在Semantic Kernel 中,通过插件功能的编排,可以实现动态的知识库管理。

当然也可以通过 plugin 直接调用其中的方法例如:

    var context = new KernelArguments
    {
        [MemoryPlugin.FilePathParam] = DocFilename,
        [MemoryPlugin.DocumentIdParam] = "NASA001"
    };
    await memoryPlugin["SaveFile"].InvokeAsync(kernel, context);

插件的使用

导入到Semantic Kernel 中的插件可以通过在提示词函数中直接使用,最常见的就是在提示词中使用Ask方法和Search方法。

var skPrompt = """
                Question to Kernel Memory: {{$input}}

                Kernel Memory Answer: {{memory.ask $input}}

                If the answer is empty say 'I don't know' otherwise reply with a preview of the answer, truncated to 15 words.
               """;

var askFunction = kernel.CreateFunctionFromPrompt(skPrompt);

和直接使用 MemoryClient 一样,调用 memory.ask 方法可以直接获取 Kernel Memory的回答,构成提示词的一部分。

如果只是需要检索相关的文档的话,可以使用Search方法。

var skPrompt = """
                Facts:
                {{memory.search $input}}
                ======
                Given only the facts above, provide a comprehensive/detailed answer.
                You don't know where the knowledge comes from, just answer.
                If you don't have sufficient information, reply with 'I don't know'.
                Question: {{$input}}
                Answer: 
                """;
var searchFunction = kernel.CreateFunctionFromPrompt(skPrompt);

这里其实就相当于是使用 PromptFunction 替换了 KernelMemory中的Ask方法。

另外其中的一些参数都可以通过KernelArguments进行配置,例如:

var args = new KernelArguments
{
    [MemoryPlugin.IndexParam ] = "default",
    [MemoryPlugin.LimitParam] = "10",
    [MemoryPlugin.MinRelevanceParam] = "0"
};

最后就是Kernel Function 的调用了:

var question = "any question";
var answer = await askFunction.InvokeAsync(kernel, question);

 // or 

args["input"] = question;
var result = await kernel.InvokeAsync(searchFunction,args);

参考

2024,新年快乐

标签:Kernel,插件,Semantic,Memory,memory,var
From: https://www.cnblogs.com/xbotter/p/kernel_memory_semantic_kernel_plugin.html

相关文章

  • 去除X-FRAME-OPTIONS响应头的Chrome插件
    为了创建一个Chrome插件来移除document请求中的X-Frame-Options,你可以按照以下步骤进行操作:创建一个新的文件夹作为插件项目的根目录。在根目录下创建一个名为manifest.json的文件,并添加必要的清单信息,例如:{"manifest_version":2,"name":"RemoveX-Frame-Options......
  • 堪比Postman!这款IDEA插件真好用!
    Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:ApipostHelper,写完代码就可以调试接口并一键生成接口文档!而且还可以根据已有的方法帮助您快速生成url和params。更重要的是他完全免费!Apipost......
  • VsCode(Visual Studio Code) 安装插件教程
    VsCode(VisualStudioCode)安装插件教程编辑1、打开VsCode编辑桌面上、最近安装程序上找找吧在桌面上双击,打开2、打开的效果图编辑3、点击左侧最后的插件图标编辑4、打开后如下图所示编辑5、在输入框中输入Go编辑6、同样在安装插件页面也可以卸载、安装其它版本和禁用操作编辑你有......
  • 堪比Postman!这款IDEA插件真好用!
    Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:ApipostHelper,写完代码就可以调试接口并一键生成接口文档!而且还可以根据已有的方法帮助您快速生成url和params。更重要的是他完全免费!Apipos......
  • 在 PyCharm 中编写 Vue 项目,你可以按照以下步骤进行: 1. **安装 Vue.js 插件**:在 PyCh
    在PyCharm中编写Vue项目,你可以按照以下步骤进行:1.**安装Vue.js插件**:在PyCharm中,选择`File->Settings…->Plugins`,搜索Vue并点击安装,安装后重启PyCharm¹²。2.**设置JavaScript**:支持Vue语法,选择`File->Settings…->Languages&Frameworks->JavaSc......
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-8】 - 配置管理-Mvc【Plugin-Limit 接
    前言:继上篇:Taurus.NetCore微服务开源框架:Admin插件【4-7】-配置管理-Mvc【Plugin-Metric接口调用次数统计】本篇继续介绍下一个内容:1、系统配置节点:Mvc- Plugin-Limit接口访问限制、IP限制、Ack限制:配置界面如下:限制目前提供以下三个类别的限制:1、Rate访......
  • Maven插件系列之spring-boot-maven-plugin
    SpringBoot的Maven插件(SpringBootMavenplugin)能够以Maven的方式为应用提供SpringBoot的支持,即为SpringBoot应用提供了执行Maven操作的可能。SpringBootMavenplugin能够将SpringBoot应用打包为可执行的jar或war文件,然后以通常的方式运行SpringBoot应用。SpringBootMave......
  • flutter IOS 原生交互同一个插件多个方法调用
    由于代码比价简单直接上代码ios/Runner/AppDelegate.swiftimportUIKitimportFlutter@UIApplicationMain@objcclassAppDelegate:FlutterAppDelegate{overridefuncapplication(_application:UIApplication,didFinishLaunchingWithOptionslaunchOption......
  • Sublime Text Html CSS JS 代码整理美化插件
    原文地址:SublimeTextHtmlCSSJS代码整理美化插件使用代码编辑编辑器的好处就是有很多功能可以用,特别是一个就是代码整理优化。在编写代码时,我们经常会遇到代码混乱、缩进不正确或格式不统一等问题。这些问题可能会导致代码难以阅读、维护和调试,降低开发效率。那么我这里说一......
  • vue插件
    介绍​插件(Plugins)是一种能为Vue添加全局功能的工具代码。下面是如何安装一个插件的示例import{createApp}from'vue'constapp=createApp({})app.use(myPlugin,{/*可选的选项*/})一个插件可以是一个拥有install()方法的对象,也可以直接是一个安装函......