Semantic Kernel(SK)是微软开源的企业级 LLM 应用与 Agent 编排框架,定位是把 AI 能力嵌入现有软件系统。它解决的核心问题是:直接用模型 SDK 开发 Agent 时,代码没有统一抽象,模型服务、工具调用、流程编排、安全审计都散落在各处,项目越大越难维护。SK 以 Kernel(内核,即服务与插件容器)为中心,把大模型、原生代码函数、提示词模板统一为可组合的「插件」,并提供 Agent 编排、进程框架、过滤器、遥测等生产级组件,让团队在一个明确的工程结构里构建企业级 AI 应用。 SK 有 .NET、Python、Java 三套官方 SDK,与微软生态(Azure OpenAI、Azure AI Foundry、Copilot 相关服务)深度集成;1.x 版本后 API 趋于稳定,是微软技术栈团队构建 Agent 的首选框架之一。本文按「速览 → 安装 → 上手 → 能力 → 部署 → 选型 → 场景 → 避坑」的顺序,带你从零跑通并进入生产。

岗位关联

掌握 Semantic Kernel,意味着你能在 .NET/Java/Python 企业技术栈中直接落地 Agent 编排、流程自动化与多模型接入,是微软生态 AI 工程岗位的核心技能之一。

目录
  1. 为什么需要 Semantic Kernel:直连模型 SDK 的后期成本太高
  2. 安装与环境配置:3 步就绪
  3. 快速上手:5 分钟跑通第一个 Skill
  4. 核心能力详解:5 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
  10. 参考来源
工具类型
LLM/Agent 编排框架(开源)
开发商
Microsoft
开源协议
MIT(可商用)
GitHub Stars
无
主要语言
C# / Python / Java
当前版本
1.16.x(截至训练数据,可能已有更新版本)
安装方式
pip install semantic-kernel / dotnet add package Microsoft.SemanticKernel
上手难度
★★★☆☆(中等)
适合人群
.NET/微软技术栈 AI 工程师、企业 Agent 团队
同类工具
LangChain、AutoGen、LlamaIndex、CrewAI
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Semantic Kernel:直连模型 SDK 的后期成本太高

传统 LLM 应用开发往往从直接调用 OpenAI/Azure OpenAI SDK 开始:写一个 prompt、接一次工具调用、调一次接口。这种方式的痛点在项目扩展时集中爆发——第一,模型服务被硬编码在业务代码里,换模型或接入多模型要改多处;第二,工具调用逻辑散落各处,没有统一的「能力注册表」,Agent 不知道该调用哪些函数;第三,日志、审计、敏感信息过滤完全没有抓手;第四,多步骤业务流程(如审批流、订单处理)缺少可编排、可恢复的状态机,只能靠手写胶水代码。

Semantic Kernel 的解法是把「模型服务」和「业务能力」都收编进 Kernel:所有 AI 服务作为 Service 注册,所有可被调用的能力作为 Plugin(插件)注册,提示词模板与非本机函数统一抽象为 KernelFunction。这样 Agent 只需要面对 Kernel 一个入口,函数的调用由模型根据描述自动选择;同时 Filters(过滤器)能在函数调用前后拦截流量,Process(进程框架)能把业务定义成可视化、可持久化的流程图,Telemetry 让遥测直接对接应用偏好系统(Application Insights / OpenTelemetry)。

与 LangChain 等框架相比,SK 的气质更「企业工程化」:强类型、强调依赖注入、三语言官方支持齐头并进,对存量 .NET/Java 系统的接入路径最短。它不追求编排花样最多,而是追求「在现有企业软件里可靠地跑起来」。

安装与环境配置:3 步就绪

第一步·安装 SDK。 按技术栈选择,Python 环境需 3.9+,.NET 需 6.0+。

第二步·配置模型凭据。 SK 不绑定密钥存储,推荐通过环境变量或 .env 文件注入。以 OpenAI 为例:

第三步·验证安装。 能导入并打印版本号即成功:

bash8 行
# Pythonpip install semantic-kernel # .NETdotnet add package Microsoft.SemanticKernel # Java(Maven 坐标)# com.microsoft.semantic-kernel:semantic-kernel-core
bash5 行
# .envOPENAI_API_KEY=sk-xxxx# 若走 Azure OpenAI,则配置# AZURE_OPENAI_API_KEY=azure-xxxx# AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
bash1 行
python -c "import semantic_kernel; print(semantic_kernel.__version__)"

快速上手:5 分钟跑通第一个 Skill

最小可用流程的核心思路是三步——「建 Kernel、注册模型、调函数」。在代码里依次完成:

1. 创建 Kernel 实例(统一的依赖入口);

2. 通过 Kernel.add_service 注册一个聊天补全服务(OpenAI 或 Azure OpenAI 连接器);

3. 用 Kernel.add_function 定义一个提示函数(prompt template,模板支持 {{$input}} 参数),并用 await kernel.invoke 调用。

运行后输出一句对 Semantic Kernel 的解释,说明管道跑通了。进阶技巧:将 OpenAIChatCompletion 换成 AzureChatCompletion(需填 endpoint、api_key、deployment_name),即可无缝迁移到 Azure OpenAI;后续给 Kernel 注册自定义的 @kernel_function 原生函数,即拥有工具调用能力。

python30 行
import asyncioimport osfrom semantic_kernel import Kernelfrom semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion async def main():    kernel = Kernel()     # 1. 注册模型服务    kernel.add_service(        OpenAIChatCompletion(            service_id="chat",            ai_model_id="gpt-4o-mini",            api_key=os.getenv("OPENAI_API_KEY"),        )    )     # 2. 定义提示函数    func = kernel.add_function(        plugin_name="demo_plugin",        function_name="ask",        prompt="请用一句话解释:{{$input}}",    )     # 3. 调用    result = await kernel.invoke(func, input="什么是 Semantic Kernel?")    print(result) if __name__ == "__main__":    asyncio.run(main())

核心能力详解:5 大支柱

支柱一·Kernel 与依赖注入。 Kernel 是所有服务的注册中心,承载 AI 服务(ChatCompletionService)、插件集合、过滤器与日志。在 .NET 中,SK 原生对接 IServiceCollection,可把 Kernel 注册为单例或作用域服务;Python/Java 亦有对应的内核构建器。合理设计 Kernel 生命周期,是生产应用稳定性的基础。

支柱二·插件系统(Plugins)。 插件是一组相关函数的集合。函数分两类:原生函数(Native Function)由代码实现,标注 @kernel_function 装饰器后自动暴露给模型;提示函数(Prompt Function)由提示词模板 + 参数化输入定义。二者的命名规范是 PluginName_FunctionName,模型通过函数名和描述决定是否调用,因此「给函数写清楚描述」直接影响 Agent 的调用准确率。

支柱三·Agent 编排(Agent Framework)。 1.x 提供 ChatCompletionAgent(单 Agent 助手)、AgentGroupChat(多 Agent 群聊协作)以及 OpenAI Assistant 集成。多个 Agent 可以在一个会话里协同:一个负责检索、一个负责总结、一个负责审核,托管与路由由 SK 处理。该模块部分 API 处于实验性阶段,引入前需评估稳定性。

支柱四·Process 进程框架。 面向确定性业务流的编排层:用 ProcessBuilder 把流程定义为「步骤 + 事件」图,每一步可持久化状态,支持暂停、恢复与分布式执行。适合订单审批、工单流转、数据处理管线等既要 AI 决策又必须可审计、可回溯的场景。

支柱五·Filters 与遥测。 Filters 是 1.x 的生产级关键组件:可在函数调用前/后、提示词渲染后等时机注入钩子,做鉴权、敏感信息脱敏、调用日志、限流与降级。遥测层内置 ActivitySource,通过 OpenTelemetry 或 Application Insights 直接采集 token 消耗与调用延迟,无需埋点改造。

生产部署与监控:从上线到运维

部署方式一·容器化 + DI 生命周期管理。 SK 应用通常打包为 Docker 镜像部署到 AKS / Azure Container Apps / 自建 K8s。.NET 团队应把 Kernel 注册为作用域服务(Scoped),避免单例 Kernel 长时间持有模型连接导致的内存问题;若用 Python,则需关注 asyncio 事件循环与 Kernel 实例的绑定关系,避免多线程共享同一实例。

部署方式二·模型服务路由与成本控制。 生产环境一般同时接入多个模型(便宜的快模型做分类、强模型做复杂推理)。在 Kernel 中注册多个 ChatCompletionService 时,必须为每个服务设置唯一的 service_id,调用时显式指定,否则框架会按顺序随机路由。成本侧可通过 Filters 记录每次调用的 token 数,结合用量阈值触发告警或降级。

可观测性。 将 SK 的遥测导出到 Application Insights 或 Prometheus + Grafana:关注三个指标——调用成功率、P95 延迟、每次 Agent 任务的 token 消耗。Filters 中统一打印 Prompt 摘要与函数调用链,能在出问题时快速复现 Agent 的决策路径。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>坑1:实验性 API 直接上生产——1.x 中 Agent 与 Process 部分 API 标注 experimental,上线前必须锁定版本并核对 API 稳定性说明,否则升级会破坏行为。</li><li>坑2:API Key 硬编码——SK 默认不校验密钥来源,建议统一从环境变量/托管身份(Azure Managed Identity)读取,并在 Filter 中拦截含密钥的日志输出。</li><li>坑3:多服务未指定 service_id——注册多个 AI 服务但不写明 service_id 时,调用可能路由到错误模型,导致格式或成本失控。</li><li>坑4:函数名与描述随意——插件函数命名冲突会覆盖注册;函数描述太模糊会让模型选择错误工具,必须遵循 PluginName_FunctionName 规则并写好描述。</li><li>坑5:忽略 Kernel 生命周期——将 Kernel 注册为单例却持有短作用域的 HttpClient 或数据库上下文,会造成连接池耗尽,需按 DI 规范选择作用域。</li></ul>

维度Semantic KernelLangChainAutoGenLlamaIndex
定位企业级 Agent 编排框架LLM 应用开发框架多 Agent 对话协作框架数据连接与 RAG 框架
编排范式Kernel 中心化 + 插件 + Process 流程链式/图式(LangGraph)多 Agent 对话式编排查询管道(Query Pipeline)
类型约束强类型,三语言齐头并进动态类型为主,重点支持 Python类型宽松,实验性 API 多类型宽松,数据对象为核心
学习曲线中等,.NET 工程师上手快低到中等,社区资料丰富中等偏高,需理解多 Agent 模式较低,聚焦数据与索引
生态集成微软体系(Azure/Office/Dynamics)第三方集成极多、泛生态微软与开源社区双轨数据源与向量库覆盖广
生产部署Filters/遥测/DI 完备,企业级社区模板多,生产级需自行组装多数能力处于研究到生产过渡RAG 检索性能强,编排较弱
LicenseMITMITMIT + 部分附加条款MIT
适合谁微软技术栈企业、强工程约束团队Python 快速原型、生态丰富度优先多 Agent 研究、复杂对话协作RAG 场景、数据密集型应用

选型建议:若团队以 .NET/Java 为主或重合规审计,首选 Semantic Kernel;若纯 Python 生态且追求第三方集成广度,LangChain 更灵活;若核心诉求是把知识库做深做透,LlamaIndex 的检索链路更成熟;若方向是开放性的多 Agent 探索实验,AutoGen 值得关注。

版本迭代

Semantic Kernel 从 2023 年初的公开预览走到 1.x,主线是「概念收敛」与「生产化」——先是把 Skills/Planner 重构为 Kernel/Plugins/Functions,随后从流程编排延伸到 Agent 与 Process 框架,最后补齐 Filters 与遥测。整体演进方向是从「能跑」到「能上生产」。(截至训练数据,可能已有更新版本)

版本时间变化提升
v0.x 预览系列2023-03公开预览引入 Kernel、Skills(早期插件概念)与 Planner
v1.02023-12首个正式版(GA)统一 Kernel/Plugins/Functions 命名体系;.NET、Python、Java 三语言 API 基线稳定
v1.52024-06模板与连接器升级新增 Handlebars 提示词模板支持;扩展 OpenAI、Hugging Face、Ollama 等连接器
v1.102024-10Agent 编排能力增强ChatCompletionAgent、AgentGroupChat 等实验性组件逐步成熟
v1.162025-02生产特性完善Filters 机制完善、遥测与 DI 生命周期优化、多模型路由能力提升
基准v1.0v1.10v1.16
API 兼容性(回退测试)——保持 1.x 兼容SK 官方承诺 1.x 范围内保持 API 向后兼容
模型能力评测(MMLU 等)———框架而非模型,官方不发布此类评测数据
结论

作为开发框架,SK 不以模型智商作为评测指标,版本差异体现在工程能力——v1.0 打稳基础,v1.5 丰富模板与连接器,v1.10 补齐 Agent 编排,v1.16 完善生产要素。选型时建议锁定 1.x 最新稳定版,优先使用非 experimental 的 API;需要多 Agent 群聊等新能力时,再单独评估实验性 API 的承接方案。

AI 应用场景

企业业务流程自动化:工单智能处理管线

阶段:Agent 编排与确定性流程编排

解决的问题:传统工单系统靠人工分类、转发、回复,跨部门流转慢且标准不一。基于 SK 的 Process 框架,将「工单分类 → 知识检索 → 拟稿 → 人工审核」定义为持久化流程,AI 负责前三步,人只做最终确认。

具体案例:某 IT 服务台用 SK + Azure OpenAI 构建工单助手,接入企业知识库插件:模型自动分类工单并生成回复草稿,处理时长从分钟级降至秒级,人工只需审核少量复杂工单,审核工作量的下降直接转化为人力释放。

企业知识问答助手:多 Agent 协作的 RAG 应用

阶段:RAG 管道与多 Agent 协作

解决的问题:大型企业内部文档分散、检索不精准,单一模型无法同时处理「查资料 + 做总结 + 核对出处」。SK 中多个 Agent 分工协作:检索 Agent 负责查向量库,总结 Agent 负责组织答案,审核 Agent 负责比对引用来源。

具体案例:在合规性要求高的场景(如法律、医疗),通过 AgentGroupChat 让审核 Agent 在回复前强制校验引用来源,未通过则打回重写,显著降低大模型幻觉带来的风险,团队将误引用率控制在可接受范围。

Copilot 式应用内助手:把 AI 嵌入存量业务系统

阶段:AI 应用集成与工具调用

解决的问题:业务系统(如 CRM、ERP)需要内嵌 AI 助手,但历史代码改造风险大。SK 原生支持在现有 .NET/Java 服务中嵌入 Kernel,将内部业务 API 包装为插件函数,AI 助手通过函数调用完成查询与操作,不需要重写系统。

具体案例:在销售管理系统中注册「查客户」「查订单」「查库存」三个原生插件,Copilot 助手即可用自然语言完成数据查询与简单分析,页面/接口零改动,接入成本以周为单位。

常见误区

误区Semantic Kernel 是微软出品的,所以只能用 C#/.NET,我们用 Python 或用 Java 就没法用。

正解SK 从 1.0 起就官方提供三套并行 SDK:.NET、Python、Java,都走同一套 Kernel/Plugins/Functions 抽象,API 风格与概念保持一致。微软官方文档与示例库对三语言均有覆盖。Python 团队完全可以正规使用 SK,Java 团队也可用它接入现有微服务。

为何常见:因为 SK 常与 Azure/.NET 生态捆绑宣传,且早期预览版以 C# 为主,导致「仅限 C#」的印象先入为主。

误区LangChain 和 Semantic Kernel 都是 LLM 编排框架,谁火用谁,结果一样。

正解两者抽象与生态差异明显。SK 围绕 Kernel 做统一依赖管理,强类型、强 DI、三语言同步,与微软企业栈整合最深;LangChain 以 Python 社区为中心,第三方集成数量和社区内容量更大,但「框架厚度」不深。SK 的价值在工程秩序与生产能力(Filters、遥测、Process),LangChain 的优势在生态广度与原型速度。

为何常见:二者主页示例都展示「调模型、调工具」,表层相似;只有真正做生产部署才会体会到抽象层的差异。

误区Kernel 就是把 OpenAI SDK 包了一层,方便切换模型而已,没什么技术含量。

正解Kernel 远不止封装调用:它是整个 SK 应用的依赖容器,管理 AI 服务注册、插件发现、函数调用路由、过滤器管线、日志与遥测。所有工具调用、函数执行、流程状态都经 Kernel 中转,因此才有横切能力(安全审计、限流、监控)的落点。

为何常见:最小示例里 Kernel 只做「加服务 + 调用」,看起来确实像网关;但 Filter/Plugin 的组合能力只有在复杂场景才体现。

误区SK 有 Planner,给它一个目标,它自己就能拆解步骤、调用函数、搞定所有事。

正解Planner(或函数调用机制)依赖两个前提:一是工具函数的描述足够清晰,二是模型能正确理解目标。任务越复杂,自动拆解的错误率越高。对强确定性流程,SK 官方更推荐 Process 框架显式定义步骤图;Planner 适合开放探索但必须兜底校验与人工确认。

为何常见:框架演示时常展示「一句目标自动多步执行」的效果,让人误以为这是可靠的生产行为,忽略了成功概率与兜底设计。

误区SK 是微软的,只能接 OpenAI 或 Azure OpenAI,用开源模型/国内模型不行。

正解SK 的模型接入通过连接器(Connector)抽象,官方已提供 OpenAI、Azure OpenAI、Hugging Face、Ollama、Google Gemini、Mistral 等十余种连接器,社区也在补充更多模型接入。只要实现对应的 ChatCompletion 接口,任何模型都能注册进 Kernel。

为何常见:官方示例几乎全用 OpenAI/Azure OpenAI,给人「官方绑定」的错觉;实际连接器是开放的插件式设计。

面试题

Q1. Semantic Kernel 官方支持的主要开发语言是?

单选题 · easy

  • A.C#、Python、Java← 正确答案
  • B.C#、PHP、Swift
  • C.Python、Go、Rust
  • D.Java、JavaScript、Ruby

答案:A。SK 自 1.0 起官方同步维护 .NET、Python、Java 三套 SDK,统一 Kernel/Plugins/Functions 概念。B、C、D 中出现的 PHP、Go、Rust、JavaScript、Ruby 均非 SK 官方主要支持语言。

Q2. 在 Semantic Kernel 中,Kernel 对象可以注册哪些内容?

多选题 · mid

  • A.AI 服务(ChatCompletionService)← 正确答案
  • B.插件集合(Plugins)← 正确答案
  • C.操作系统内核参数
  • D.过滤器(Filters)← 正确答案

答案:ABD。Kernel 是 SK 的依赖容器,承载 AI 服务、插件与过滤器,用于统一管理模型调用和工具函数。操作系统内核参数与 SK 的 Kernel 无关,属于干扰项。

Q3. 在 Python 中安装 Semantic Kernel 的标准命令是?

单选题 · easy

  • A.pip install semantic-kernel← 正确答案
  • B.pip install sk
  • C.pip install ms-semantic
  • D.pip install kernel-ai

答案:A。PyPI 官方包名为 semantic-kernel,pip install semantic-kernel 是标准安装命令。sk、ms-semantic、kernel-ai 均非 SK 官方包名,安装会得到无关或错误的包。

Q4. Semantic Kernel 的开源协议是?

单选题 · easy

  • A.MIT← 正确答案
  • B.Apache 2.0
  • C.GPL 3.0
  • D.MPL 2.0

答案:A。SK 采用 MIT 协议,允许商用、修改与再分发,限制极少。Apache 2.0、GPL 3.0、MPL 2.0 都是其他项目常见协议,不是 SK 的 License。

Q5. 在 .NET 项目中引入 Semantic Kernel 的正确命令是?

单选题 · mid

  • A.dotnet add package Microsoft.SemanticKernel← 正确答案
  • B.dotnet add package SemanticKernel.Core
  • C.dotnet add package MS.SK.Runtime
  • D.dotnet add package Azure.AI.Kernel

答案:A。NuGet 官方包名为 Microsoft.SemanticKernel,元包直接引入核心能力。SemanticKernel.Core、MS.SK.Runtime、Azure.AI.Kernel 都不是官方包名,无法正确安装。

Q6. 使用命令提示词 "请解释:{{$input}}" 注册的函数属于哪种类型?

单选题 · easy

  • A.提示函数(Prompt Function)← 正确答案
  • B.原生函数(Native Function)
  • C.自动函数(Auto Function)
  • D.外部回调函数(Callback Function)

答案:A。用提示词模板定义、通过模板语法接收输入的函数是提示函数。原生函数是用代码实现并用 @kernel_function 标注的函数;SK 中没有「自动函数」「外部回调函数」的官方类型。

Q7. 原生函数(Native Function)与提示函数(Prompt Function)的核心区别是?

单选题 · mid

  • A.原生函数用代码实现并标注特性,提示函数用提示词模板定义,二者均注册为插件函数← 正确答案
  • B.原生函数只能被 C# 调用,提示函数只能被 Python 调用
  • C.原生函数不支持参数,提示函数支持参数
  • D.提示函数不需要模型参与,原生函数需要模型参与

答案:A。两类函数都通过 Kernel 注册并由模型按描述选择调用。原生函数是代码逻辑(强类型、可复用),提示函数是模板文本(灵活、易调整)。B、C、D 对两者能力的描述均与官方定义不符。

Q8. 在 Kernel 中注册多个 AI 服务时,正确的做法包括?

多选题 · mid

  • A.为每个服务设置唯一的 service_id← 正确答案
  • B.调用时显式指定要使用的服务← 正确答案
  • C.不设置 service_id,让框架随机路由
  • D.只保留一个服务并删除其他注册

答案:AB。多服务注册时必须用唯一 service_id 区分,并在调用时显式指定,否则框架按默认顺序选择可能路由错误模型。随机路由(C)在多模型生产环境会造成不可控;删除其他服务(D)会失去多模型路由的能力。

Q9. 关于 Semantic Kernel 的 Process 框架,下列说法正确的是?

单选题 · hard

  • A.用 ProcessBuilder 定义步骤与事件图,支持状态持久化与恢复← 正确答案
  • B.只能用于单机内存中的简单流程
  • C.是替代 LLM 的确定性规则引擎
  • D.只能与 Azure Durable Functions 配合使用

答案:A。Process 框架以「步骤 + 事件」构建流程图,步骤状态可持久化,支持分布式执行与恢复,适合审批流转等确定性业务流程。它不替代 LLM,也不绑定 Durable Functions,本地及容器环境均可运行。

Q10. 下列哪些属于 SK 1.x 的生产级特性?

多选题 · hard

  • A.Filters 在函数调用前后拦截流量以做审计与限流← 正确答案
  • B.内置 ActivitySource 通过 OpenTelemetry 导出遥测← 正确答案
  • C.自动将全部业务代码改写为异步流
  • D.通过依赖注入管理 Kernel 与服务的生命周期← 正确答案

答案:ABD。Filters、遥测、DI 生命周期管理是 SK 面向生产环境提供的关键能力。C 是错误干扰项:SK 不自动改写业务代码,异步化是开发者通过 async/await 自己完成的。

参考来源