【Semantic Kernel】1、入门

发布时间 2023-07-06 15:20:18作者: .Neterr

Semantic Kernel 是一种轻量级应用开发框架,用于快速开发融合 LLM AI的现代应用。

名词解释

LLM:大语言模型
Prompt:

理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢?

首先我们需要把LLM AI的能力和原生代码的能力区分开来,在SK中LLM的能力称为 semantic function ,代码的能力称为 native function,两者平等的称之为function(功能),一组功能构成一个技能(skill)。 SK的基本能力均是由skill构成。

有了一堆skill之后并不能直接执行,需要有一个配置和管理的单元,就像是MVC 需要ASP.NET框架一样,Skill也需要有一个Kernel进行组织管理。

Kernel 除了组织管理Skill,还兼顾了基础服务的配置,例如OpenAI/Azure OpenAI的授权信息,默认的LLM模型选择等等。另外当涉及到上下文的管理,技能参数的传递时,Kernel也能发挥重要的作用。

准备阶段

安装SK的nuget包

dotnet add package Microsoft.SemanticKernel --prerelease

创建kernel

using Microsoft.SemanticKernel;
var myKernel = Kernel.Builder.Build();

配置基础模型,基础模型目前有四个:

  • TextCompletion,最常用的GPT-3的模型,常用于文本生成
  • ChatCompetion,GPT3.5模型,也就是所谓的ChatGPT的模型,基本就用于聊天功能
  • EmbeddingGeneration,嵌入模型,这个将用于Memory的生成和搜索,在后期能力扩展时将会有极大的用途
  • ImageGeneration,图形模型,也就是DALL-E模型,用于图片的生成

由于Azure OpenAI提供了和Open AI相同的能力,所以以上的模型配置可以选择OpenAI的接口,也可以选择Azure OpenAI的接口,根据自己有哪个选哪个的原则使用。
当然以上模型也提供了基本的接口定义,如果有自己的LLM AI接口的话,也可以自行实现相关接口,然后使用。

// 1. ServiceId 用于指定当前模型的配置,相同的模型不能有重复的ServiceId配置
// 2. modelId 指定ChatCompetion所使用的LLM 模型
// 3. apikey OpenAI 接口调用需要使用的APIkey
var myKernel = Kernel.Builder
.WithOpenAIChatCompletionService("gpt-3.5-turbo", "key", serviceId: "serviceId")
.Build();

Semantic Function

参考:
Semantic Kernel 入门系列 :https://www.cnblogs.com/xbotter/p/semantic_kernel_introduction.html
prompt学习:https://learningprompt.wiki/docs/chatgpt-learning-path
Semantic Kernel 知多少-英语培训案例:https://www.cnblogs.com/sheng-jie/p/17294842.html