日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Kernel Memory 入门系列:Semantic Kernel 插件

發(fā)布時間:2023/12/31 windows 38 coder
生活随笔 收集整理的這篇文章主要介紹了 Kernel Memory 入门系列:Semantic Kernel 插件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Kernel Memory 入門系列:Semantic Kernel 插件

Kernel Memory 本身提供了完整的RAG能力,這部分能力如果通過Semantic Kernel Memory的話,也是可以實現(xiàn)的,但是整體的管理成本會比較高。
因此通過Kernel Memory 構(gòu)建知識庫管理,然后通過插件的方式,將Kernel Memory接入到Semantic Kernel 中,這樣就可以有效的提升整體的使用效率。

初始化插件

首先需要在Semantic Kernel 的項目中添加對應(yīng)的Kernel Memory的Semantic Kernel Plugin包。

dotnet add package Microsoft.KernelMemory.SemanticKernelPlugin

然后就取出構(gòu)建KernelMemory,構(gòu)建的步驟和之前的方式一樣,也可以使用Kernel Memory Service的 WebClient.

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

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

完成構(gòu)建之后就可以Semantic Kernel 中導(dǎo)入插件了。

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

如果直接使用Kernel Memory Service的話,也可以通過快捷方式直接構(gòu)建。

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

如果有使用其中的ApiKey參數(shù)的話,也可以參考其中的參數(shù)說明進行配置。

另外還可以指定默認的 Index 和文檔的 tags。

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

插件的功能

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

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

也就意味著如果在Semantic Kernel 中,通過插件功能的編排,可以實現(xiàn)動態(tài)的知識庫管理。

當然也可以通過 plugin 直接調(diào)用其中的方法例如:

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

插件的使用

導(dǎo)入到Semantic Kernel 中的插件可以通過在提示詞函數(shù)中直接使用,最常見的就是在提示詞中使用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 一樣,調(diào)用 memory.ask 方法可以直接獲取 Kernel Memory的回答,構(gòu)成提示詞的一部分。

如果只是需要檢索相關(guān)的文檔的話,可以使用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方法。

另外其中的一些參數(shù)都可以通過KernelArguments進行配置,例如:

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

最后就是Kernel Function 的調(diào)用了:

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

 // or 

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

參考

  • SemanticKernelPlugin

2024,新年快樂

總結(jié)

以上是生活随笔為你收集整理的Kernel Memory 入门系列:Semantic Kernel 插件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。