首页 新闻 会员 周边 捐助

Semantic Kernel: AddFromPromptDirectory 与 ImportPluginFromPromptDirectory 的区别

0
悬赏园豆:30 [已解决问题] 解决于 2024-02-24 21:16

在 Semantic Kernel 中 IKernelBuilder.Plugins 有个方法 AddFromPromptDirectoryKernel有个扩展方法 ImportPluginFromPromptDirectory,请问它们的区别是什么?

var builder = Kernel.CreateBuilder();
builder.AddOpenAIChatCompletion("gpt-3.5-turbo", apiKey);
builder.Plugins.AddFromPromptDirectory("Plugins/DevOps");
var kernel = builder.Build();
kernel.ImportPluginFromPromptDirectory("Plugins/DevOps");
dudu的主页 dudu | 高人七级 | 园豆:30734
提问于:2024-02-24 11:10
< >
分享
最佳答案
0

通过 Semantic Kernel 的源码找到了答案,这两个方法最终都调用了 CreatePluginFromPromptDirectory

AddFromPromptDirectory 将通过 CreatePluginFromPromptDirectory 创建的 KernelPlugin 注册到了依赖注入容器:

public static IKernelBuilderPlugins AddFromPromptDirectory(
    this IKernelBuilderPlugins plugins,
    string pluginDirectory,
    string? pluginName = null,
    IPromptTemplateFactory? promptTemplateFactory = null)
{
    Verify.NotNull(plugins);
    plugins.Services.AddSingleton<KernelPlugin>(services =>
        CreatePluginFromPromptDirectory(pluginDirectory, pluginName, promptTemplateFactory, services));
    return plugins;
}

ImportPluginFromPromptDirectory 将通过 CreatePluginFromPromptDirectory 创建的 KernelPlugin 添加到了当前 Kernel 实例的 KernelPluginCollection 中:

public static KernelPlugin ImportPluginFromPromptDirectory(
    this Kernel kernel,
    string pluginDirectory,
    string? pluginName = null,
    IPromptTemplateFactory? promptTemplateFactory = null)
{
    KernelPlugin plugin = CreatePluginFromPromptDirectory(kernel, pluginDirectory, pluginName, promptTemplateFactory);
    kernel.Plugins.Add(plugin);
    return plugin;
}

所以它们的区别是:

  • AddFromPromptDirectory 将 plugin 实例注册到 KernelBuilder,之后这个 KernelBuilder 创建的所有 Kernel 实例都会包含这个 plugin 实例
  • ImportPluginFromPromptDirectory 只是在当前 Kernel 实例中添加 plugin
dudu | 高人七级 |园豆:30734 | 2024-02-24 21:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册