文章目录
- 一、引言
- 二、什么是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