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

探索Semantic Kernel:开启AI编程新篇章(入门篇)

文章目录

    • 一、引言
    • 二、什么是Semantic Kernel?
    • 三、为什么选择Semantic Kernel?
    • 四、Semantic Kernel的核心特性
      • 4.1企业级
      • 4.2 自动化业务流程
      • 4.3 模块化和可扩展性
    • 五、Semantic Kernel入门
      • 5.1 安装SDK
      • 5.2 编写控制台应用
        • 1. 配置
        • 2.实例
        • 3.示例一:进行一次问答
        • 4.示例二:使用模板
        • 5.示例三:流式输出
        • 6.示例四:模型请求参数配置
        • 7.示例五:格式化输出
      • 5.3 完整代码
    • 六、结论

一、引言

在人工智能的浪潮中,微软开源的Semantic Kernel(SK)作为一颗璀璨的明珠,为开发者提供了一个强大的工具,以一种全新的方式与AI模型交互。无论是信息检索、数据分析还是构建AI应用,SK都能助你一臂之力。本文将带你走进Semantic Kernel的世界,从安装到实践,一步步揭开它的神秘面纱。

二、什么是Semantic Kernel?

Semantic Kernel是一个轻量级的AI应用开发框架,它允许开发者将大型语言模型(LLM)如OpenAI、Azure OpenAI和Hugging Face等服务与传统编程语言如C#和Python相结合。通过SK,你可以构建智能应用程序,让它们能够理解和处理复杂的语义信息。
在这里插入图片描述

三、为什么选择Semantic Kernel?

  • 易用性:SK提供了一个简洁的API,使得与AI模型的交互变得简单直观。
  • 灵活性:通过插件系统,SK可以轻松扩展,支持各种自定义功能。
  • 高效性:SK优化了与AI模型的交互,提高了应用程序的性能。
  • 开源:SK是一个开源项目,拥有活跃的社区支持。

四、Semantic Kernel的核心特性

4.1企业级

Semantic Kernel因其灵活性、模块化和可观测性而被微软和其他财富500强公司广泛采用。它提供了增强的安全性,确保您可以负责任地大规模交付AI解决方案。

4.2 自动化业务流程

Semantic Kernel能够将提示词与现有API结合,自动执行业务操作。通过向AI模型描述现有代码,模型将调用这些代码以响应请求。当请求发出时,模型会调用一个函数,Semantic Kernel作为中间件,将模型的请求转换为函数调用,并将结果传回模型。

4.3 模块化和可扩展性

通过将现有代码作为插件添加,Semantic Kernel允许您灵活地通过一系列现成的连接器集成AI服务。它使用OpenAPI规范,使得公司内的其他开发者可以共享任何扩展。

五、Semantic Kernel入门

要开始使用SK,首先需要安装它。以下是在C#环境中安装SK的步骤:

5.1 安装SDK

通过NuGet安装Semantic Kernel包:

dotnet add package Microsoft.SemanticKernel

5.2 编写控制台应用

1. 配置

引入命名空间&忽略编译器警告

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

//忽略编译器警告
#pragma warning disable SKEXP0010

如下图:接口提示api是实验性的,将来可能会发生变化。,故需要增加忽略编译器警告的代码,否则无法调用。
在这里插入图片描述

2.实例

创建Semantic Kernel实例

//使用的模型
string model = "gpt-4o-mini";
//使用的openai代理地址,这里也可以使用国产模型和地址。只要是openai格式即可
string endpointKey = "https://xie.openai.com/v1";

//openai 密钥
string apiKey = "sk-";

//创建Semantic Kernel实例
Kernel kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(
        modelId: model,
        endpoint: new Uri(endpointKey),
        apiKey: apiKey)
    .Build();
3.示例一:进行一次问答
// 示例1:使用提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例1 - 进行一次问答】--------------------");
Console.WriteLine(await kernel.InvokePromptAsync("天空是什么颜色?"));
Console.WriteLine();
4.示例二:使用模板

//示例2 使用模板化的提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例2 - 模板】--------------------");
KernelArguments arguments = new() { { "topic", "海" } };
Console.WriteLine(await kernel.InvokePromptAsync("{{$topic}}是什么颜色啊?", arguments));
Console.WriteLine();

在这里插入图片描述

5.示例三:流式输出

Console.WriteLine("------------------【示例3 - 流式输出】--------------------");
// 示例3:使用模板化提示调用内核(kernel),并将结果进行流式输出
await foreach (var update in kernel.InvokePromptStreamingAsync("{{$topic}}是什么颜色? 提供详细的解释。", arguments))
{
    Console.Write(update);
}
Console.WriteLine();

Console.WriteLine("------------------【示例4 - 模型参数配置】--------------------");

在这里插入图片描述

6.示例四:模型请求参数配置
Console.WriteLine("------------------【示例4 - 模型参数配置】--------------------");
// 示例4:调用内核使用一个模板化的提示和模型参数设置
//注:MaxTokens 和Temperature 是模型参数
arguments = new(new OpenAIPromptExecutionSettings { MaxTokens = 500, Temperature = 0.5 }) { { "topic", "小狗" } };
Console.WriteLine(await kernel.InvokePromptAsync("给我讲个关于{{$topic}}的故事", arguments));
Console.WriteLine();

在这里插入图片描述

7.示例五:格式化输出
Console.WriteLine("------------------【示例5 - 格式化输出】--------------------");
arguments = new(new OpenAIPromptExecutionSettings { ResponseFormat = "json_object" }) { { "topic", "巧克力" } };
Console.WriteLine(await kernel.InvokePromptAsync("创建一个JSON格式的{{$topic}}蛋糕配方", arguments));

在这里插入图片描述

5.3 完整代码

#region 一、入门

安装nuget包:Microsoft.SemanticKernel
//#pragma warning disable SKEXP0010

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

string model = "gpt-4o-mini", endpointKey = "https://xie.openai.com/v1",
apiKey = "sk-";

// Create a kernel with OpenAI chat completion
Kernel kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(
        modelId: model,
        endpoint: new Uri(endpointKey),
        apiKey: apiKey)
    .Build();

// 示例1:使用提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例1 - 进行一次问答】--------------------");
Console.WriteLine(await kernel.InvokePromptAsync("天空是什么颜色?"));
Console.WriteLine();

示例2 使用模板化的提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例2 - 模板】--------------------");
KernelArguments arguments = new() { { "topic", "海" } };
Console.WriteLine(await kernel.InvokePromptAsync("{{$topic}}是什么颜色啊?", arguments));
Console.WriteLine();

Console.WriteLine("------------------【示例3 - 流式输出】--------------------");

// 示例3:使用模板化提示调用内核(kernel),并将结果进行流式输出
await foreach (var update in kernel.InvokePromptStreamingAsync("{{$topic}}是什么颜色? 提供详细的解释。", arguments))
{
    Console.Write(update);
}
Console.WriteLine();

Console.WriteLine("------------------【示例4 - 模型参数配置】--------------------");
 示例4:调用内核使用一个模板化的提示和模型参数设置
arguments = new(new OpenAIPromptExecutionSettings { MaxTokens = 500, Temperature = 0.5 }) { { "topic", "小狗" } };
Console.WriteLine(await kernel.InvokePromptAsync("给我讲个关于{{$topic}}的故事", arguments));
Console.WriteLine();

Console.WriteLine("------------------【示例5 - 格式化输出】--------------------");
//示例5:调用内核使用一个模板化的提示和模型参数设置,并将结果以JSON格式返回
arguments = new(new OpenAIPromptExecutionSettings { ResponseFormat = "json_object" }) { { "topic", "巧克力" } };
Console.WriteLine(await kernel.InvokePromptAsync("创建一个JSON格式的{{$topic}}蛋糕配方", arguments));


#endregion

Console.ReadKey();

六、结论

Semantic Kernel为开发者提供了一个强大的工具,用于构建下一代AI应用程序。无论您是希望自动化业务流程,还是想要将最新的AI模型集成到您的应用程序中,Semantic Kernel都能满足您的需求。

通过遵循本入门指南,您将能够快速开始使用Semantic Kernel,并探索其强大的功能,为您的AI项目带来无限可能。

参考资料:
微软文档:https://learn.microsoft.com/en-us/semantic-kernel/overview/

Github:https://github.com/microsoft/semantic-kernel


http://www.kler.cn/news/342293.html

相关文章:

  • java连接mysql查询数据(基础版,无框架)
  • 【idea】切换多个仓库到一个分支
  • django中wsgi.py 和 manage.py有什么区别
  • 汽车3d动效的作用!云渲染实现3d动效
  • GC1277和灿瑞的OCH477优势分析 可以用于电脑散热风扇,视频监控和图像处理的图像信号处理器中
  • LlamaIndex 结构化数据库交互指南增强(text2sql)
  • 自动化测试 | 窗口截图
  • 如何设计一个低成本数据归档及查询的架构
  • Cursor AI编辑器:开发效率提升利器
  • Unity网络开发 - C#开源网络通信库PESocket的使用
  • crossover和虚拟机哪个好用?Mac电脑玩游戏用哪个软件?
  • 前端面试题(十三)
  • js中的事件冒泡是什么?
  • JavaScript全局函数研究_手写模仿实现_01:eval、isFinite、isNaN、parseFloat、parseInt
  • el-date-picker设置只有某些日期可选
  • 【算法】DP系列之 斐波那契数列模型
  • python实现3D立柱图demo
  • python全栈开发《42.列表的copy函数(深浅拷贝区别)》
  • Java第二阶段---13抽象类和接口---第二节 接口
  • 《网络基础之 HTTP 协议:深入理解请求与响应结构》