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

HelloKitty 2023-09-20 18:00

扫一扫 在手机阅读、分享本文

1452

本文由 阿法兔研究笔记 撰写/授权提供,转载请注明原出处。

文章来源于:阿法兔研究笔记

作者:阿法兔

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

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

1.jpg

图片来源: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)中的内核 在计算机科学中,内核是操作系统的核心组件。它负责管理计算机的硬件资源,如处理器、内存、文件系统等,以便应用程序能够运行。内核通常具有特权级别,可以执行关键的系统操作(见下图)。

1.png

Semanic Kernel 是什么?能解决什么问题

然后,回到 SK 本身:

2.png

为了让开发者能够更灵活地将人工智能服务集成到他们现有的应用中,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 的模型。

3.jpg

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

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

为什么?

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

但我们也同样发现,从零自己训练一个大模型实在是成本太高了,如下:

4.png

图片来源:推特

“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 翻译为人能听懂的大白话,由此便可轻松的实现自然语言的人机交互。

5.jpg

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

6.png

①首先,用户提出问题-转化成一个 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 的调用如下图所示:

7.jpg

图片来自:公众号大魏分享

在 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/

微信图片_20230911094302.png

微信图片_20230104175528.jpg

扫一扫 在手机阅读、分享本文

扫码关注公众号

获取更多技术资讯

客服微信
享受1V1专属服务
免费领取技术福利
发送名片申请入群
与CTO聊合作
(备注姓名、公司及职位)
热门文章