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

一、引言

在人工智能的浪潮中,微软开源的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值