当前位置:首页 > AI > 正文内容

探究Native Plugins:敞开大模型的技术之门

邻居的猫1个月前 (12-09)AI1085

前语

上一章节咱们了解了一下Semantic KernnelPlugins插件的概念以及学习了的 Semantic Kernel 模板插件的创立,本章节咱们来学习 Native Plugins 原生函数插件运用。

经过函数界说插件

在之前的章节中咱们介绍过在在 Semantic Kernel 中运用 Function Calling,在文中讲解了Functioncalling的概念,以及在SK中的运用。
Semantic Kernel中界说Native Plugins 函数插件,和 gpt-3.5-turbo 在 6 月 13 日 发布的 Function Calling特别的像,这是经过增加外部函数,经过调用来增强 OpenAI 模型的才能。

在 Semantic Kernel 中界说函数插件

Semantic Kernerl 中供给了许多界说Native Plugins的扩展办法来创立插件下面介绍最常用的几种:

依据类型创立插件

  • SK源码
    public static KernelPlugin ImportPluginFromType<T>(this Kernel kernel, string? pluginName = null)
    {
        KernelPlugin plugin = CreatePluginFromType<T>(kernel, pluginName);
        kernel.Plugins.Add(plugin);
        return plugin;
    }
  • 界说Native Plugins

Semantic Kernel 中界说函数插件,需求用到两个特性KernelFunctionDescription
KernelFunction特性把函数标记为一个SKNative functionDescription给函数和参数以及返回值加描绘,便利LLMs能够更好的了解。

详细运用如下

public class WeatherPlugin
{
    public static string GetWeather => "WeatherSearch";

    [KernelFunction, Description("依据城市查询气候")]
    public string WeatherSearch([Description("城市名")] string city)
    {
        return $"{city}, 25℃,气候晴朗。";
    }
}
  • Kernel增加插件
kernel.ImportPluginFromType<WeatherPlugin>();

这便是方才说的依据类型来创立SK插件

  • 调用
var getWeatherFunc = kernel.Plugins.GetFunction(nameof(WeatherPlugin), WeatherPlugin.GetWeather);
var weatherContent = await getWeatherFunc.InvokeAsync(kernel, new() { ["city"] = "北京" });
Console.WriteLine(weatherContent.ToString());
  • 输出
北京, 25℃,气候晴朗。

这是手动调用的办法当然也能够IChatCompletionService会话办法主动调用。

依据目标创立

首要用到了ImportPluginFromObject这个扩展办法

    public static KernelPlugin ImportPluginFromObject(this Kernel kernel, object target, string? pluginName = null)
    {
        KernelPlugin plugin = CreatePluginFromObject(kernel, target, pluginName);
        kernel.Plugins.Add(plugin);
        return plugin;
    }
  • 界说依据城市名获取美食的插件
public class FinefoodPlugin
{
    [KernelFunction, Description("依据城市获取美食引荐")]
    public string GetFinefoodList([Description("城市名")] string city)
    {
        return "烤鸭,卤煮,老北京炸酱面,炒肝等";
    }
}

和上一个运用 Type 注册插件是相同的操作

  • 注册并调用
    FinefoodPlugin finefoodPlugin = new();
    kernel.ImportPluginFromObject(finefoodPlugin);
    var getWeatherFunc = kernel.Plugins.GetFunction(nameof(FinefoodPlugin), "GetFinefoodList");
    var weatherContent = await getWeatherFunc.InvokeAsync(kernel, new() { ["city"] = "北京" });
    Console.WriteLine(weatherContent.ToString());
  • 输出:
烤鸭,卤煮,老北京炸酱面,炒肝等
  • 扩展
    已然 Kernel 目标供给了依据目标实例创立插件的计划,那么就能够咱们最喜欢的依靠注入获取的服务做插件的实例,这一点十分的重要,在今后项目实战中很有用。

依靠注入举例

    IServiceCollection services = new ServiceCollection();
    services.AddSingleton<FinefoodPlugin>();
    var rootProvider = services.BuildServiceProvider();
    FinefoodPlugin finefoodPlugin = rootProvider.GetRequiredService<FinefoodPlugin>();
    kernel.ImportPluginFromObject(finefoodPlugin);

依据 Kernelfunction 创立目标的实例

SK 供给了几个依据 Kernelfunction 来创立Plugins的计划,这就用到Kernel目标创立 kernel functions的扩展办法。

关于Kernel Function的创立有两种常用的办法第一种是依据Prompts来创立Semantic function也能够叫Prompts function,第二种是依据 C#的Delegate来创立Kernel Function

第一种计划之前的文章中有讲过,有爱好能够阅读一下深化学习 Semantic Kernel:创立和装备 prompts functions,这儿不过多介绍。

第二种在这儿咱们要点讲一下,依据托付来创立Kernel Function

  • 源码一览
    public static KernelFunction CreateFunctionFromMethod(
        this Kernel kernel,
        Delegate method,
        string? functionName = null,
        string? description = null,
        IEnumerable<KernelParameterMetadata>? parameters = null,
        KernelReturnParameterMetadata? returnParameter = null)
    {
        Verify.NotNull(kernel);
        Verify.NotNull(method);

        return KernelFunctionFactory.CreateFromMethod(method.Method, method.Target, functionName, description, parameters, returnParameter, kernel.LoggerFactory);
    }

在之前的文章介绍过,一切创立Kernelfunction基本上都是运用KernelFunctionFactoryfunction工厂创立的,其实插件的创立也是相同经过KernelPluginFactory插件plugin工厂创立的。

创立一个依据城市名获取玩耍地址的插件

  • 创立 Kernel Function
    var kernelfunction = kernel.CreateFunctionFromMethod((string city) => { return $"{city} 好玩的当地有八达岭长城,故宫,恭王府等"; },
        functionName: "GetTourismClassic", description: "获取城市的经典",
         [
            new KernelParameterMetadata(name:"city") {
             Description="城市名"
    }]);
  • 注册插件并调用
    kernel.ImportPluginFromFunctions("TourismClassicPlugin", [kernelfunction]);
    var getTourismClassic = kernel.Plugins.GetFunction("TourismClassicPlugin", "GetTourismClassic");
    var weatherContent = await getTourismClassic.InvokeAsync(kernel, new() { ["city"] = "北京" });
    Console.WriteLine(weatherContent.ToString());
  • 输出
北京 好玩的当地有八达岭长城,故宫,恭王府等

扩展

上面介绍的都是在Sk中创立Native Plugins常用的办法,还有一些用法,比方

  • ImportPluginFromApiManifestAsync OpenAPI 功用相关
  • ImportPluginFromOpenAIAsync 经过 OpenAI 的 ChatGPT 格局为 OpenAI 插件创立一个插件
  • CreatePluginFromOpenApiAsync 从 OpenAPI v3 端点创立插件
  • ImportPluginFromGrpcFile 从 gRPC 文档导入
  • 其他

最终

本章咱们学习了在 Semantic Kernel 中运用 Native Plugins 原生函数插件的办法,包含经过函数界说插件和依据目标创立插件的过程。咱们探讨了不同的创立插件的办法,以及怎么注册插件并进行调用。经过这些办法,咱们能够扩展 Semantic Kernel 的功用,增强模型的才能。

参考文献

  • 敞开大模型的技术之门 - Plugins

示例代码

本文源代码

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=390

标签: dotNetAI
分享给朋友:

“探究Native Plugins:敞开大模型的技术之门” 的相关文章

从简单线性回归到多元线性回归

从简单线性回归到多元线性回归

从简单线性回归到多元线性回归 目录...

机器学习训练数据集,机器学习训练数据集的重要性

机器学习训练数据集,机器学习训练数据集的重要性

机器学习训练数据集的质量和数量对模型的性能有很大影响。高质量的数据集可以提供足够的信息,帮助模型学习到有用的模式。而大量的数据集可以提供更多的样本来训练模型,从而提高模型的泛化能力。在选择机器学习训练数据集时,需要考虑以下几个因素:1. 数据集的大小:数据集的大小应该足够大,以便模型能够学习到有用的...

吴恩达机器学习实战,从入门到精通

吴恩达机器学习实战,从入门到精通

1. 吴恩达机器学习课程资源: 知乎专栏:介绍了吴恩达教授的机器学习课程资源,包括详细的笔记文档、中英双语字幕视频、课后作业解决方案以及对应的代码示例。这些资源已经制作成百度云镜像,确保高速稳定下载。 GitHub项目:一个开源项目,包含吴恩达机器学习课程的个人笔记和用Python复现的...

ai运动综合体,AI赋能运动综合体,打造智慧健康生活新范式

ai运动综合体,AI赋能运动综合体,打造智慧健康生活新范式

1. 智能网球系统: 室内网球场配备了橙狮体育自研的Smartshot智能AI网球系统,通过AI视觉识别技术,实时捕捉和分析用户的网球运动轨迹,为用户提供准确、清晰、即时的视频和数据反馈。2. 智能体测系统: 光彻智能体育公司利用智能感知、多传感器融合、云边端协同和大数据分析等技术,开发...

百度AI,引领中国AI发展,构建智能未来

百度AI,引领中国AI发展,构建智能未来

1. 文心一言: 功能:文心一言是百度的智能伙伴和AI助手,可以陪你聊天、回答问题、画图识图,提供灵感、撰写文案、阅读文档、智能翻译等,帮助用户高效完成工作和学习任务。2. 百度AI助手: 功能:百度AI助手提供全面的人工智能服务和支持,帮助用户高效完成各种任务,适用于在线客服、电话客服...

什么是机器学习方法,什么是机器学习方法?

什么是机器学习方法,什么是机器学习方法?

机器学习方法是指通过计算机算法,使计算机能够从数据中学习并做出决策或预测的技术。这些方法可以自动地从数据中提取知识,并根据这些知识做出预测或决策,而不需要人类进行显式的编程。机器学习方法通常可以分为以下几类:4. 强化学习(Reinforcement Learning):通过让计算机在与环境交互的过...