当前位置: 首页 > news >正文

Semantic Kernel 快速入门

文章目录

  • Semantic Kernel 快速入门
    • 一、什么是 Semantic Kernel?
      • 1.1 核心特性
    • 二、安装和配置
      • 2.1 安装 .NET SDK
      • 2.2 创建新的 .NET 项目
      • 2.3 安装 Semantic Kernel
    • 三、快速入门
      • 3.1 导入依赖包
      • 3.2 添加 AI 服务
      • 3.3 添加企业服务
      • 3.4 生成内核并检索服务
      • 3.5 添加插件
        • 创建本机插件
      • 3.6 将插件添加到内核
      • 3.7 规划
      • 3.8 调用
      • 3.9 完整代码如下
    • 四、运行示例
    • 五、总结

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 lightsprivate 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 statelight.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 lightsprivate 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 statelight.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 模型。希望这些内容对你有所帮助!

相关文章:

  • 神州趣味地名-基于天地图和LeafLet的趣味地名探索
  • C++ 的 lambda 表达式
  • 自制qrcode二维码生成扫码美化
  • 第6篇:EggJS数据库操作与ORM实践
  • 组件通信-props
  • BLE协议栈的解析
  • 4.3 random模块
  • 中小企业MES系统详细设计
  • 低代码/AI是否会取代前端开发?
  • 倒排索引与数据库索引
  • 小刚说C语言刷题—1018三角形类别
  • [预备知识]5. 优化理论(一)
  • Linux 库文件详解
  • 文章六:《循环神经网络(RNN)与自然语言处理》
  • 云盘系统设计
  • EMC PowerStore存储学习之一NVMe磁盘的命名规则
  • 预订接口优化:使用本地消息表保证订单生成、库存扣减的一致性
  • 程序员转行酒店用品客户经理
  • MySQL 中的游标(Cursor)
  • [计算机科学#8]:指令与程序的奥秘
  • 政府效率部效果不佳?马斯克有意寻求支持,含糊表态部门未来
  • 燕子矶:物流网络中的闪亮节点|劳动者的书信②
  • 即日起,“应急使命·2025”演习公开征集新质救援能力
  • 中国科学院院士张泽民已任重庆医科大学校长
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 韩国下届大选执政党初选4进2结果揭晓,金文洙、韩东勋胜出