查看原文
其他

大模型时代软件开发:吴恩达提到的Semantic Kernel是什么?

Editor's Note

Semantic Kernel 是由微软开源的开发工具包,用于驱动诸如 Microsoft 365 Copilot 和 Bing 等产品,旨在简化将大型语言模型(LLM)集成到应用程序中的过程,使用户能够利用大型语言模型根据自然语言查询和命令协调工作流程

The following article is from 阿法兔研究笔记 Author 阿法兔

欢迎大家参加上海微软Reactor举办的Semanic Kernel中文社区成立活动:)如果是开发者,也可以加我微信Alphatue,邀请你来Semantic Kernel中文社区群。

欢迎大家转发到朋友圈~~这样兔儿就更有动力发更多好内容了~

*转载本文,请附上所有参考文献链接

Semanic Kernel

*本文全文4300字
前几天,吴恩达老师在DeepLearning.AI,和微软人工智能副总裁前田约翰(John Maeda)一起探讨了关于Semanic Kernel的应用。

那么,为什么微软会推出Semanic Kernel?Semanic Kernel到底是什么?用Semantic Kernel,和不用,对业务有什么区别?为什么说它的出现,其实代表的是大模型时代软件工程的范式变化?本篇文章就是要解释这几个问题。
图片来源:Deeplearning.AI官网

先简单地了解一下概念,后面我们会详细解释:Semantic Kernel(语义内核)是微软推出的一个轻量级的开源 SDK,主要是为了帮助开发人员在人工智能插件的基础上,构建自己的 Copilot 体验,可以编排并协调人工智能Plugin。有了Semantic Kernel,开发者就可以在自己的应用程序中利用与Microsoft 365 Copilot和必应相同的人工智能协调模式,充分和目前开发技能和积累进行集成。

什么是SDK?

SDK 是 "Software Development Kit" 的缩写,翻译为中文是 "软件开发工具包"。它是一组软件工具和资源的集合,旨在帮助开发者创建、测试、部署和维护应用程序或软件。SDK 通常包括以下内容:


  • 库(Libraries):包含一组预先编写好的代码模块,可用于特定的编程任务。这些库提供了常用功能和工具,以减少开发人员需要编写的代码量,提高开发效率。

  • 文档和教程(Documentation and Tutorials):提供关于 SDK 的详细文档和教程,以帮助开发人员入门并学习如何使用 SDK 来构建应用程序。

  • 示例代码(Sample Code):包括示例应用程序和代码片段,演示了如何使用 SDK 来执行特定任务或解决问题。这有助于开发人员更好地理解 SDK 的使用方式。

  • 工具(Tools):包括用于开发、调试和测试应用程序的实用工具,如集成开发环境(IDE)插件、模拟器和调试器。


SDK 可以用于各种软件开发任务,包括移动应用程序开发、Web 应用程序开发、嵌入式系统开发、游戏开发等。它们通常由平台提供商或开发社区创建和维护,以便开发人员能够更轻松地利用特定平台或技术栈的功能和特性。

、Kernel的字面含义:什么是内核?


如果我们暂时放下Semanic Kernel这个词,去看Kernel本身的含义,Kernel这个词的含义有很多,但是通常在计算机领域常用的是操作系统内核(Operating System Kernel)中的内核 在计算机科学中,内核是操作系统的核心组件。它负责管理计算机的硬件资源,如处理器、内存、文件系统等,以便应用程序能够运行。内核通常具有特权级别,可以执行关键的系统操作(见下图)。


二、Semanic Kernel是什么?

能解决什么问题


然后,回到SK本身:

为了让开发者能够更灵活地将人工智能服务集成到他们现有的应用中,Semantic Kernel 提供了一组Connector,使集成Memory和模型变得简单,它还可以通过Plugin,为应用集成功能,而这些Plugin,可以响应触发器并执行操作。

因此, Semantic Kernel 提供了Connector和Plugin的可扩展性,我们可以使用它来协调来自 OpenAI 和 Microsoft 的Plugin,和各种不同的模型进行搭配,比如,可以使用 Semantic Kernel 来协调 ChatGPT、Bing 和 Microsoft 365 Copilot 构建的Plugin,运行OpenAI、Azure、和Hugging Face 的模型。



如果我们再解释详细一点,就要先从大语言模型的出现开始说起:

GPT-3.5出现之后,大家很快发现了它惊人的能力。具体惊人在哪?因为ChatGPT它虽然看起来是一个聊天机器人的交互模式,但是它能真正帮人类解决问题,完成具体任务,知识性非常完备,且能够理解用户指令,能够帮我们做task但是在实际操作上,GPT输出的仍然是文本内容,而不是结构化数据,无法直接和传统编程世界交互,就很难用到编程世界几十年的充分积累。


为什么?


举个例子,如果我们问GPT模型,给我把灯关掉,这个时候GPT会输出一套语言文本的叙述告诉你应该如何关灯。但其实我们是想要下一个指令真正把灯关掉,但是,大语言模型本身不具备关灯的能力,如果想要关灯,要借助的是物联网和电路控制的能力。


但我们也同样发现,从零自己训练一个大模型实在是成本太高了,如下:
图片来源:推特
“OpenAI 在 GPT-4 的训练中使用了大约 2.15e25 的 FLOPS,利用了约 25,000 个 A100 GPU,进行了 90 到 100 天的训练,利用率(MFU)大致在 32% 至 36% 之间。这种极低的利用率部分是由于大量的故障导致需要重新启动检查点。


如果OpenAI 在云端每个 A100 GPU 的成本大约为每小时 1 美元,那么仅此次训练的成本将达到约 6300 万美元。(而如今,如果使用约 8192 个 H100 GPU 进行预训练,用时将缩短至约 55 天左右,成本为 2150 万美元,每个 H100 GPU 的计费标准为每小时 2 美元。)"


那么,如果我们想在软件应用开发过程中,不想自己重头训练一个大模型(成本太高,还有重复造轮子的情况),只是想要借助大模型的能力进行开发,应该如何操作?


这就是Semantic Kernel发挥能力的地方了,想用大模型的力量,帮我们把灯直接关掉,也就是——打通大模型和物联网编程之间的链接,那么,只要在Semantic Kernel中添加一个关灯技能,再告诉LLM这个关灯技能是存在的,这样,人工智能就可以通过这个技能,实现关灯能力。

再举个例子,我们平时使用GPT输出的都是纯文本,GPT并没有告诉我们,这段文本的主谓宾定状补是什么,所以如果我们想从GPT给出的答案中,只获取谓语的时候,仍然是没有办法的,这个时候,Semantic Kernel就可以解决这个问题。


比如说我们问GPT:我怎么才能发动汽车?GPT的回答会输出很多铺垫语,但一定有一个“打火”。所以Semantic Kernel,可以把这个动宾短语提取出来,然后作为应用的人,比如说常见的“广告推流场景”,商家就可以根据打火这个动词,给用户推一个加油站广告。

也就是说,借助Semantic Kernel的力量,通过合适的提示词(Prompt),就可以调动LLM,将自然语言中的关健信息和其中的隐含信息提取出来,这其中最常见的就是分类和标记。

除此之外,还可以进行非结构化数据的格式整理。基于以上,就可以将自然语言作为输入参数,通过LLM将自然语言转化为代码可理解的结构化参数,例如json、xml等,直接传递给程序,进行处理,包括格式上的调整和纠错。


有了SK,LLM就能够直接将用户的需求输入转化为特定的代码语言,进行领域抽象,就可以直接通过自然语言给机器下达指令,甚至不需要额外的训练。


代码语言的执行结果,反过来通过LLM翻译为人能听懂的大白话,由此便可轻松的实现自然语言的人机交互。

根据官方文档的图片,如果我们把SK的流程再拆解一下:

①首先,用户提出问题-转化成一个Ask对象

②然后 kernel对Ask的对象进行了编排

③由planner将这些东西分解成steps

而每个step则都包含

  •  skill(能力行为)
  • memory(上下文记忆)
  •  connectors(AI连接器)

④最后形成一条流水线pipeline,最终execute 出result ,用户get到。


三、面向业务的Semantic-kernel



那么,如果面向业务,用举个更具体一点的例子


用Semantic Kernel,和不用Semantic Kernel,对业务有什么区别?


SK就像是App和OpenAI之间的中间件,解除了App到OpenAI的Hard Core问题,如果说的再具体点:


如果没有SK, 应用对OpenAI的调用如下图所示:
图片来自:公众号大魏分享
在web app的代码中写上Azure OpenAI的key、endpoint、模型、温度、max_token等超参、需要构造输入和输出方法。


如果业务人员的提示词(prompt)是“想写一个年度工作总结,总结要围绕2022年某区域销售额环比增长展开”。如果按照上面的配置方法,这个提示词prompt只能被传入一个OpenAI模型。实际上,很可能prompt前半句适合text模型、后半句适合codex模型(Codex 是 OpenAI 公司推出的 GPT-3的多个派生模型之一。它是基于GPT语言模型,使用代码数据进行 Fine-Tune而训练出的专门用于代码生成/文档生成的模型)。


况且对于业务人员,我们又不太可能开放选择OpenAI模型,即使用相同的模型,每半句话适合的OpenAI超参也未必相同。


这时候,Semantic Kernel的价值就来了Prompt是一个ASK,SK的planner会对它进行分析,看实现这个ASK的目标需要多少skills(写总结、写代码就是不同的skill)。而不同的skill,可以有自己的prompt engineering,有自己的对应的OpenAI模型、有自己的超参。

也就是说,直接调用OpenAI,不用Semantic Kernel,和调用Semantic Kernel的区别在于:

  • 直接调用Openai,用户应用需要自己构造和管理输入输出的格式,以及与大模型AI交互的逻辑。这可能会比较复杂和耗费时间,也可能会浪费token或者得到不相关的结果,这主要体现在超参设置的不合理。
  • 调用Semantic Kernel,用户的应用可以利用SDK提供的抽象和机制,来简化和优化与LLM AI的交互。Semantic Kernel可以帮助用户的应用实现目标导向的问题解决,利用规划、资源、步骤和管道等概念来组织和执行用户的请求。

简单来说,Semantic Kernel是一个桥梁,可以让应用更容易地利用大模型的人工智能的能力,而不需要自己处理很多细节。使用Semantic Kernel,用户的应用可以利用SDK提供的模板、链式、规划等功能,来简化和优化与LLM AI的交互,Semantic Kernel还可以帮助用户的应用管理上下文和令牌,以及调用外部API等。

除此之外,使用SK还有以下几点好处:
  • SK可以让用户应用更容易地实现目标导向的问题解决,而不需要自己设计复杂的逻辑和流程。
  • SK可以让用户的应用更灵活地利用LLM AI的能力,可以根据不同的场景和需求选择不同的技能、内存和连接器。
  • SK可以让用户的应用更高效地利用LLM AI的资源,可以通过嵌入式内存来突破令牌限制,也可以通过planner来优化调用次数和结果质量。
  • SK可以让用户的应用更容易地与其他系统集成,可以通过连接器来调用外部API或者访问自己的数据源。

SK嵌入式内存就是基于嵌入向量的一种内存模型。它可以让SK更好地利用LLM AI的能力,同时也可以让用户应用更容易地访问和管理自己的数据。它和先调用嵌入向量再调用openai的区别是:

  • 使用SK,不需要自己调用嵌入向量,SK会自动生成和管理嵌入式内存 。
  • 使用SK,可以更方便地查询和检索嵌入式内存中的数据,SK可以提供语义过滤、相关函数、排除函数等功能。
  • 使用SK,可以更灵活地将嵌入式内存与LLM AI结合,SK会提供规划、资源、步骤和管道等概念,来组织和执行请求 。

Semantic Kernel本身包含一些core skills,这些skills可以在任何时候被kernel调用,它们提供了一些标准的功能,比如处理时间、文本、文件、http请求和planner。Semantic Kernel还可以让用户自己管理一些Semantic skills,这些skills可以放在选择的任何目录中。Semantic Kernel还可以让使用LLM的prompt来创建一些dynamic skills,这些skills可以根据不同的场景和用户需求来动态地进行生成、修改。


四、大语言模型时代的编程



Semantic Kernel代表的,其实是编程范式上的变化,为什么这么说?


这更像是一个全新的云计算的时代,软件开发者就像是无需关心机房如何运维一样,未来接入LLM的软件开发,也无需关心模型如何训练,仅需通过简单的API调用,就可以发挥AI的力量,一切语义理解都会更加便捷,一切人机交互都会重新塑造。

这不仅仅改变了我们构建软件的方法,也改变了我们理解软件的方式。
就像是图形视窗改变了计算机的交互,浏览器的发明改变了互联网的交互,如今的LLM的推广必然也会改变人与机器的交互。


*本文感谢微软MVP社区、感谢ChaosAI,感谢Dakai、宵伯特、David Wei、张善友老师

参考资料:
1.https://www.cnblogs.com/xbotter/p/semantic_kernel_introduction_llm.html
2.Semantic Kernel 入门系列:LLM的魔法-博客园-宵伯特
3.https://github.com/microsoft/semantic-kernel
4.参考文献:公众号-大魏分享-一文说清semantic-kernel在GPT中的作用
5.Semantic Kernel documentation | Microsoft Learn
6.https://learn.microsoft.com/en-us/semantic-kernel/



【阅读更多】
继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存