码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SemanticKernel:添加插件


    本文介绍了在SemanticKernel中如何使用插件。

    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();
    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)

  • 相关阅读:
    Oracle12c新特性大全 存储资源隔离+flex+diskgroup
    Android逆向工程【黑客帝国】
    搞懂fastjson 对泛型的反序列化原理
    【OpenCV】基于cv2的图像阈值化处理【超详细的注释和解释】掌握基本操作
    cas:304680-35-1/1-己基-3-甲基咪唑六氟磷酸盐/[C6MIm]PF6
    Android - Service
    软件测试月薪28K大厂面试题 (经面试官允许可以拿走试卷)
    动态规划——最长上升子序列模型
    java日志框架之Logback和Log4j2
    Vue脚手架④
  • 原文地址:https://www.cnblogs.com/mingupupu/p/18234563
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号