微软开源AI框架SemanticKernel解析
微软开源AI框架SemanticKernel解析
Semantic Kernel 是由微软(Microsoft)开发的一个开源框架,旨在将大型语言模型(LLMs)与传统编程语言(如 C#、Python 和 Java)无缝集成。它提供了一套轻量级的 SDK,使开发者能够轻松地将自然语言处理能力嵌入到应用程序中,同时支持插件(Plugins)、记忆(Memory)、规划(Planner)等高级功能。
核心特性
-
自然语言函数(Semantic Functions)
允许开发者使用自然语言提示(prompt)定义函数,无需编写复杂的代码逻辑。例如:# Python 示例 kernel.create_semantic_function("将以下文本总结为一句话:{{$input}}") -
原生函数(Native Functions)
用传统编程语言编写的函数,可与语义函数混合调用,实现复杂业务逻辑。 -
插件系统(Plugins)
支持将一组相关函数打包成插件,便于复用和共享。官方和社区提供了多种插件,如:- 文件操作
- 网络搜索(Bing)
- 时间/日期工具
- 向量数据库集成(如 Azure Cognitive Search、Qdrant)
-
记忆(Memory)
支持长期记忆和短期记忆机制,可将对话历史或外部知识向量化并存储,用于上下文增强。 -
自动规划(Planner)
基于目标自动生成执行计划,动态组合可用函数以完成复杂任务(如“订机票并发送日历邀请”)。 -
多语言支持
官方支持 C#、Python,社区正在推进 Java、TypeScript 等版本。 -
与主流 LLM 兼容
支持 OpenAI、Azure OpenAI、Hugging Face、Ollama、Google Gemini、Anthropic Claude 等。
快速开始(Python 示例)
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
# 初始化内核
kernel = sk.Kernel()
# 添加 OpenAI 服务
kernel.add_chat_service(
"chat-gpt",
OpenAIChatCompletion("gpt-3.5-turbo", api_key="YOUR_API_KEY")
)
# 创建语义函数
summarize = kernel.create_semantic_function("将以下内容总结为一句话:{{$input}}")
# 调用
result = summarize("今天天气很好,阳光明媚,适合外出散步。")
print(result) # 输出:今天阳光明媚,适合外出散步。
应用场景
- 智能客服机器人
- 文档自动摘要/生成
- 个人助理(日程管理、邮件撰写)
- 企业知识库问答系统
- 自动化工作流(结合 RPA)
资源链接
- GitHub 仓库:https://github.com/microsoft/semantic-kernel
- 官方文档:https://learn.microsoft.com/en-us/semantic-kernel/
- 示例项目:https://github.com/microsoft/semantic-kernel/tree/main/samples
2.SemanticKernel c# 应用举例
当然!以下是一个使用 Semantic Kernel(C#) 的典型应用示例,展示如何在 .NET 应用中集成大语言模型(如 OpenAI 或 Azure OpenAI),并通过 语义函数(Semantic Function) 和 原生函数(Native Function) 实现智能功能。
🧩 场景:自动生成邮件草稿
用户输入一个简单意图(例如“给张经理发一封会议确认邮件”),程序自动:
- 生成专业邮件正文;
- 获取当前日期;
- 返回完整邮件草稿。
✅ 步骤 1:安装 NuGet 包
在你的 C# 项目中,通过 NuGet 安装 Semantic Kernel:
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
如果使用 Azure OpenAI,可改用
Microsoft.SemanticKernel.Connectors.AzureOpenAI
✅ 步骤 2:编写 C# 代码
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
// 1. 初始化 Kernel
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "gpt-3.5-turbo", // 或 gpt-4
apiKey: "YOUR_OPENAI_API_KEY" // 替换为你的 API Key
)
.Build();
// 2. 注册一个原生函数:获取当前日期
kernel.ImportPluginFromType<TimePlugin>();
// 3. 定义语义函数(通过内联提示)
string emailPrompt = """
你是一位专业的行政助理。
今天是:{{TimePlugin.GetCurrentDate}}。
请根据以下用户请求,撰写一封正式的中文电子邮件,包含主题和正文。
用户请求:{{$input}}
邮件格式:
主题:...
正文:...
""";
var emailFunction = kernel.CreateFunctionFromPrompt(emailPrompt);
// 4. 调用函数
string userInput = "给张经理发一封会议确认邮件,时间是明天下午3点,地点在3楼会议室。";
var result = await kernel.InvokeAsync(emailFunction, new() { ["input"] = userInput });
// 5. 输出结果
Console.WriteLine(result.GetValue<string>());
✅ 步骤 3:定义原生插件(TimePlugin)
public class TimePlugin
{
[KernelFunction]
public string GetCurrentDate()
{
return DateTime.Now.ToString("yyyy年MM月dd日");
}
}
注意:
[KernelFunction]是 Semantic Kernel 1.0+ 的新特性(基于源生成器),无需反射,性能更好。
🖨️ 示例输出
主题:会议确认通知
正文:
尊敬的张经理:
您好!
谨此确认,我们将于明天(2026年01月16日)下午3点在3楼会议室举行会议。请您准时出席。
如有任何问题,请随时与我联系。
此致
敬礼!
🔌 扩展能力
- 持久化记忆:集成
Qdrant、Azure AI Search实现知识库问答。 - 自动规划:使用
KernelPlanner自动组合多个函数完成复杂任务。 - 流式响应:支持
StreamingKernelFunction实现实时输出。 - 多模态:结合 DALL·E 插件生成图像(需额外配置)。
📚 官方资源(C#)
- GitHub 示例:https://github.com/microsoft/semantic-kernel/tree/main/dotnet/samples
- C# 文档:https://learn.microsoft.com/en-us/semantic-kernel/quick-start/csharp/
- 插件开发指南:https://learn.microsoft.com/en-us/semantic-kernel/agents/plugins/
更多推荐


所有评论(0)