Semantic Kernel 快速入门

Semantic Kernel 快速入门

Semantic Kernel 是微软推出的一款强大的 AI 开发工具,旨在简化人工智能在应用中的集成和管理。本技术博客将基于微软官方文档,为你详细解读如何使用 Semantic Kernel,并通过 C# 语言进行快速入门。

一、什么是 Semantic Kernel?

Semantic Kernel 是一款开放源代码工具,允许开发人员在应用程序中无缝集成和管理人工智能。它提供了一种统一的方式来处理各种 AI 模型,无论是大型语言模型、图像生成器还是其他类型的人工智能。

1.1 核心特性

  • 多模型支持:Semantic Kernel 支持多种 AI 模型,包括大型语言模型(LLM)、图像生成器等。
  • 统一接口:提供统一的 API 接口,简化了不同模型的调用和管理。
  • 上下文管理:支持上下文的持久化和共享,使得 AI 模型能够更好地理解和处理用户请求。
  • 扩展性:允许开发人员自定义和扩展功能,以满足特定需求。

二、安装和配置

在开始使用 Semantic Kernel 之前,需要确保已经安装了必要的依赖项并正确配置了开发环境。

2.1 安装 .NET SDK

Semantic Kernel 是基于 .NET 构建的,因此需要先安装 .NET SDK。你可以从 .NET 官方网站 下载并安装最新版本的 .NET SDK。

2.2 创建新的 .NET 项目

使用以下命令创建一个新的 .NET 控制台应用程序:

dotnet new console -o semantic-kernel-demo
cd semantic-kernel-demo

2.3 安装 Semantic Kernel

在项目目录中,使用以下命令安装 Semantic Kernel 和 OpenAI 库:

dotnet add package Microsoft.SemanticKernel
dotnet add package OpenAI

三、快速入门

以下是一个简单的示例,展示了如何使用 Semantic Kernel 调用 智谱AI 的 glm4-flash(可免费调用) 模型来回答问题。我们将通过演练步骤 1、2、3、4、6、9 和 10 来演示快速入门示例。 构建由 AI 服务提供支持且可以运行代码的简单代理所需的一切。

  • 导入依赖包
  • 添加 AI 服务
  • 企业组件
  • 生成内核
  • 添加内存(本次演示跳过)
  • 添加插件
  • 创建内核参数(本次演示跳过)
  • 创建提示(本次演示跳过)
  • 规划
  • Invoke
    在这里插入图片描述

3.1 导入依赖包

对于此示例,我们首先导入以下包:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;

3.2 添加 AI 服务

向内核生成器添加了 OpenAI 聊天完成服务。

var modelId = "glm-4-flash";
var endpoint = "https://open.bigmodel.cn/api/paas/v4";
var apiKey = "YOUR_API_KEY";
// 注:https://bigmodel.cn/dev/howuse/glm-4 访问智谱官网进行apikey创建
// 创建一个OpenAI聊天完成的内核
var builder = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(modelId, 
    new Uri(endpoint),
    apiKey);

3.3 添加企业服务

使用语义内核的主要优点之一是它支持企业级服务。 在此示例中,我们已将日志记录服务添加到内核,以帮助调试 AI 代理。

builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace));

3.4 生成内核并检索服务

添加服务后,我们生成内核并检索聊天完成服务供以后使用。

Kernel kernel = builder.Build();

// 创建检索聊天完成服务
var chatCompletionService = kernel.Services.GetRequiredService<IChatCompletionService>();

3.5 添加插件

添加服务后,我们生成内核并检索聊天完成服务供以后使用。借助插件,AI 代理可以运行代码,从外部源检索信息或执行操作。 在示例中,我们添加了一个插件,允许 AI 代理与灯泡交互。 下面,我们将演示如何创建此插件。

创建本机插件

下面可以看到,创建本机插件与创建新类一样简单。

在此示例中,我们创建了一个可以操作灯泡的插件。 虽然这是一个简单的示例,但此插件快速演示了如何支持这两者…

  • 通过向 AI 代理提供灯泡的状态来检索扩充生成(RAG)
  • 通过 允许 AI 代理打开或关闭灯泡,任务自动化 。
    在自己的代码中,可以创建与任何外部服务或 API 交互的插件,以实现类似的结果。
using System.ComponentModel;
using System.Text.Json.Serialization;
using Microsoft.SemanticKernel;

public class LightsPlugin
{
   // Mock data for the lights
   private readonly List<LightModel> lights = new()
   {
      new LightModel { Id = 1, Name = "Table Lamp", IsOn = false },
      new LightModel { Id = 2, Name = "Porch light", IsOn = false },
      new LightModel { Id = 3, Name = "Chandelier", IsOn = true }
   };

   [KernelFunction("get_lights")]
   [Description("Gets a list of lights and their current state")]
   public async Task<List<LightModel>> GetLightsAsync()
   {
      return lights;
   }

   [KernelFunction("change_state")]
   [Description("Changes the state of the light")]
   public async Task<LightModel?> ChangeStateAsync(int id, bool isOn)
   {
      var light = lights.FirstOrDefault(light => light.Id == id);

      if (light == null)
      {
         return null;
      }

      // Update the light with the new state
      light.IsOn = isOn;

      return light;
   }
}

public class LightModel
{
   [JsonPropertyName("id")]
   public int Id { get; set; }

   [JsonPropertyName("name")]
   public string Name { get; set; }

   [JsonPropertyName("is_on")]
   public bool? IsOn { get; set; }
}

3.6 将插件添加到内核

创建插件后,可以将其添加到内核,以便 AI 代理可以访问它。 在本示例中,我们已将 LightsPlugin 类添加到内核。

// 将插件添加到内核
kernel.Plugins.AddFromType<LightsPlugin>("Lights");

3.7 规划

语义内核利用 函数调用(大多数 LLM能力)来提供 规划。 使用函数调用,LLM 可以请求(或调用)特定函数以满足用户的请求。 然后,语义内核将请求封送至代码库中的相应函数,并将结果返回给 LLM,以便 AI 代理可以生成最终响应。

若要启用自动函数调用,首先需要创建适当的执行设置,以便语义内核知道在 AI 代理请求函数时自动调用内核中的函数。

OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};

3.8 调用

最后,通过使用插件调用 AI 代理。 示例代码演示如何生成非流式处理响应,但也可以使用该方法生成流式处理响应GetStreamingChatMessageContentAsync。

3.9 完整代码如下


 /// <summary>
 /// 快速入门
 /// </summary>
 public class QuickStart
 {
     /// <summary>
     // 执行完成服务
     /// </summary>
     public async Task Start()
     {

         var modelConfig = Global.CurModelContext("glm-4-flash");
         // 1. 填充OpenAI格式LLM调用参数值
         var modelId = modelConfig.Model;
         var endpoint = modelConfig.EndpointKey;
         var apiKey = modelConfig.ApiKey;

         // 2. 创建一个OpenAI聊天完成的内核
         var builder = Kernel.CreateBuilder()
             .AddOpenAIChatCompletion(modelId, 
             new Uri(endpoint),
             apiKey);

         // 3.添加企业组件
         builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace));

         // 4.构建内核
         Kernel kernel = builder.Build();
         var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

         // 5.添加一个插件(LightsPlugin类定义如下)
         kernel.Plugins.AddFromType<LightsPlugin>("Lights");

         // 6.开启规划
         OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
         {
             FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
         };

         // 7.创建一个历史记录存储对话
         var history = new ChatHistory();

         // 8.发起一次多轮对话聊天服务
         string? userInput;
         do
         {
             // 9.收集用户输入
             Console.Write("User > ");
             userInput = Console.ReadLine();

             // 10.添加用户输入
             history.AddUserMessage(userInput);

             // 11.获得AI的响应
             var result = await chatCompletionService
                 .GetChatMessageContentAsync(
                 history,
                 executionSettings: openAIPromptExecutionSettings,
                 kernel: kernel);

             // 12.输出结果
             Console.WriteLine("Assistant > " + result);

             // 13.将消息添加到聊天记录
             history.AddMessage(result.Role, result.Content ?? string.Empty);
         } while (userInput is not null);
     }

 }

 /// <summary>
 /// 定义灯泡插件
 /// </summary>
 public class LightsPlugin
 {
     // Mock data for the lights
     private readonly List<LightModel> lights = new()
{
   new LightModel { Id = 1, Name = "Table Lamp", IsOn = false },
   new LightModel { Id = 2, Name = "Porch light", IsOn = false },
   new LightModel { Id = 3, Name = "Chandelier", IsOn = true }
};

     [KernelFunction("get_lights")]
     [Description("Gets a list of lights and their current state")]
     public async Task<List<LightModel>> GetLightsAsync()
     {
         return lights;
     }

     [KernelFunction("change_state")]
     [Description("Changes the state of the light")]
     public async Task<LightModel?> ChangeStateAsync(int id, bool isOn)
     {
         var light = lights.FirstOrDefault(light => light.Id == id);

         if (light == null)
         {
             return null;
         }

         // Update the light with the new state
         light.IsOn = isOn;

         return light;
     }
 }
 /// <summary>
 /// 定义灯泡模型
 /// </summary>
 public class LightModel
 {
     [JsonPropertyName("id")]
     public int Id { get; set; }

     [JsonPropertyName("name")]
     public string Name { get; set; }

     [JsonPropertyName("is_on")]
     public bool? IsOn { get; set; }
 }

四、运行示例

  1. YOUR_API_KEY 替换为你实际的 API 密钥。
  2. 在项目目录中运行以下命令:
QuickStart quickStart = new QuickStart();
await quickStart.Start();

如下:可使用原生模型能力和调用对应灯泡插件
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

五、总结

Semantic Kernel 是一款强大的工具,它简化了 AI 在应用中的集成和管理。通过本指南,你已经了解了如何安装和配置 Semantic Kernel,以及如何使用它来调用 AI 模型。希望这些内容对你有所帮助!

<think>好的,我需要回答用户关于Semantic Kernel的问题,特别是关于它的GitHub仓库和作为微软开源框架的信息。首先,我得回忆一下Semantic Kernel的基本概念,确保信息准确。Semantic Kernel是微软开发的一个开源框架,用于集成AI模型,比如大型语言模型(LLMs),到应用程序中。它支持多种编程语言,可能包括C#和Python,但需要确认。 接下来,用户提到了GitHub,所以必须提供正确的仓库链接。我需要查找微软官方的Semantic Kernel仓库,确保链接正确无误。通常微软的开源项目会放在GitHub的microsoft组织下,所以可能链接是github.com/microsoft/semantic-kernel。需要验证这一点。 然后,用户想了解它作为开源框架的特点。应该包括主要功能,比如插件架构、规划能力、与AI服务的集成,以及支持的模型类型,比如OpenAI、Azure OpenAI、Hugging Face等。还要提到支持的编程语言,例如C#、Python、Java,但需要确认最新的支持情况,可能Java还在测试阶段。 另外,用户可能对应用场景感兴趣,比如智能助手、自动化流程、数据增强等。需要举几个例子说明其用途。还要确保引用相关资源,如官方文档和GitHub仓库,并在回答末尾添加引用标识。 最后,生成相关问题时要考虑用户可能的后续疑问,比如与LangChain的区别、使用场景、核心功能、支持的模型,以及如何开始使用。确保问题相关且有帮助,引导用户进一步探索。 在回答过程中,需要遵循用户提供的格式要求,使用正确的LaTeX语法,虽然当前内容可能不需要数学公式,但需保持警惕。同时,用中文回答,结构清晰,分点说明,保持自然流畅。检查是否有任何错误或过时信息,比如框架的最新版本或新增功能,确保回答的准确性和可靠性。</think>### Semantic Kernel 简介 Semantic Kernel(SK)是微软推出的开源框架,旨在帮助开发者将大型语言模型(LLMs)等AI能力集成到应用程序中。它提供了一套工具和接口,支持灵活的任务规划、上下文管理以及与外部服务的交互。 ### GitHub 与开源信息 - **GitHub仓库**:官方仓库为 [microsoft/semantic-kernel](https://github.com/microsoft/semantic-kernel),包含代码、文档和示例[^1]。 - **框架特点**: 1. **插件架构**:支持扩展功能模块(如API、数据库),并通过自然语言调用。 2. **规划能力**:将复杂任务分解为可执行的子任务,例如自动生成代码或数据分析步骤。 3. **多模型支持**:兼容OpenAI、Azure OpenAI、Hugging Face等模型。 4. **多语言支持**:支持C#、Python、Java(实验阶段)等语言。 ### 应用场景 - **智能助手**:集成LLMs实现对话式交互(如客服机器人)。 - **自动化流程**:自动生成代码、文档或执行数据清洗。 - **知识增强**:结合外部数据源(如企业数据库)提升模型输出的准确性[^2]。 ### 示例代码(Python) ```python import semantic_kernel as sk from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion kernel = sk.Kernel() kernel.add_chat_service("chat", OpenAIChatCompletion("gpt-3.5-turbo", "API_KEY")) skill = kernel.import_semantic_skill_from_directory("skills", "SummarizeSkill") summary = kernel.run(skill["Summarize"], input_text="长文本内容...") print(summary) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值