Semantic Kernel
微软开源的多语言 SDK,用于构建与编排 AI 智能体及多智能体系统。
- Star 数
- ★ 29k
- 最近更新
- 今天
- License
- MIT
- 主语言
- C#
- FA 评分
- 51/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台OpenAI API
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- 企业开发团队在现有 .NET 或 Python 后端中加入能调用内部业务函数的对话助手
- 不适合
- 希望长期投入维护的团队:官方已宣布以 Microsoft Agent Framework 作为继任者,需要评估迁移成本
- 只想开箱即用、不愿写代码的最终用户
- 源码审查
- 51/100 · 缺口较多
这个 Agent 能做什么,适合哪些场景?
Semantic Kernel 是微软以 MIT 许可证开源的模型无关 SDK,帮助开发者在自己的应用中集成大模型能力并构建 AI 智能体。它提供 Python、.NET 与 Java 三个版本,核心抽象包括 Kernel、ChatCompletionAgent、插件(kernel_function / KernelFunction)以及多智能体编排。开发者可以为智能体挂载原生函数、提示模板、OpenAPI 规范或 MCP 服务,并接入 Azure AI Search、Elasticsearch、Chroma 等向量库做记忆检索。它同时支持文本、视觉与音频输入,也能通过 Ollama、LMStudio 或 ONNX 在本地运行。需要注意的是,README 已声明 Semantic Kernel 由 Microsoft Agent Framework 接棒,后者已发布 1.0 正式版,官方提供了迁移指南。
开发者先通过 Kernel.CreateBuilder() 或直接实例化 ChatCompletionAgent 构建智能体,并配置 AzureChatCompletion、OpenAIChatCompletion 等连接器选择底层模型。智能体可加载插件:用 @kernel_function 装饰的 Python 方法或被 [KernelFunction] 标注的 .NET 方法会把本地能力暴露给模型,模型据此决定调用哪个函数,PromptExecutionSettings 中的 FunctionChoiceBehavior.Auto() 负责自动选择。多智能体场景下,可以把 BillingAgent、RefundAgent 等专用智能体作为插件挂到 TriageAgent 上,由后者评估用户请求并转交处理。运行结果通过 agent.get_response() 或 InvokeAsync() 返回 ChatMessageContent,并借助 ChatHistoryAgentThread 保持多轮上下文。整个流程以库的形式嵌入调用方进程,模型调用经由配置的云端或本地端点发出。
- 企业开发团队在现有 .NET 或 Python 后端中加入能调用内部业务函数的对话助手
- 需要把用户请求按主题分派给不同专职智能体(如计费、退款)的客服系统
- 希望用向量数据库(Azure AI Search、Elasticsearch、Chroma)为智能体增加记忆与知识检索的应用
- 需要同时支持文本、图像、语音输入的多模态应用开发
- 出于合规要求需要用 Ollama、LMStudio 或 ONNX 在本地部署模型的团队
- 已在用 Semantic Kernel 并计划按官方迁移指南过渡到 Microsoft Agent Framework 的团队
如何安装或部署这个 Agent?
先设置模型服务的环境变量。Azure OpenAI:
export AZURE_OPENAI_API_KEY=AAA....或直接使用 OpenAI:
export OPENAI_API_KEY=sk-...Python 安装(要求 Python 3.10+):
pip install semantic-kernel.NET 安装(要求 .NET 10.0+):
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Agents.CoreJava 需参照 semantic-kernel-java 仓库中的 BUILD.md 构建,要求 JDK 17+。支持 Windows、macOS 与 Linux。
如何使用这个 Agent?
用 Python 创建一个最小可运行的对话智能体:
import asyncio
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
async def main():
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="SK-Assistant",
instructions="You are a helpful assistant.",
)
response = await agent.get_response(messages="Write a haiku about Semantic Kernel.")
print(response.content)
asyncio.run(main())为智能体添加插件并启用自动函数调用,可将插件作为参数传入:
from semantic_kernel.functions import kernel_function, KernelArguments
from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings
class MenuPlugin:
@kernel_function(description="Provides a list of specials from the menu.")
def get_specials(self) -> str:
return "Special Soup: Clam Chowder"
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="SK-Assistant",
instructions="You are a helpful assistant.",
plugins=[MenuPlugin()],
arguments=KernelArguments(OpenAIChatPromptExecutionSettings()),
)出错时先检查 API 密钥环境变量是否正确、Azure OpenAI 部署或 OpenAI 模型是否有访问权限。
这个 Agent 有哪些优点和局限?
- 模型无关:内置 OpenAI、Azure OpenAI、Hugging Face、NVidia 等连接器,并可通过 Ollama、LMStudio、ONNX 本地运行
- 插件体系成熟:支持原生代码函数、提示模板、OpenAPI 规范与 MCP 多种扩展方式
- 多智能体编排是一等能力,可将专用智能体直接作为插件挂载到调度智能体上
- 提供 Python、.NET、Java 多语言 SDK,并有独立的 C# 与 Python API 参考文档
- MIT 许可证,可用于商业项目
- 官方已声明 Microsoft Agent Framework 为其继任者,长期投入存在迁移成本
- 接入云模型需自备 Azure OpenAI 或 OpenAI 密钥并按用量付费
- 三个语言 SDK 的 API 存在差异,示例与文档需分别查阅
- 多智能体与插件自动调用会增加模型调用次数,进而影响延迟与成本
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Semantic Kernel 当前 | 51 · 缺口较多 | 代码库 / SDK免费 + 模型费 | ★ 29k | 今天 | C# | OpenAI API |
| MassGen 多智能体协作系统 | 51 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 1.1k | 4 个月前 | Python | Codex · Claude Code · OpenAI API · Claude API |
| Polter 多终端智能体监督器 | 80 · 表现良好 | 桌面应用免费 + 模型费 | ★ 20 | 今天 | Zig | Claude Code |
| Spring AI Alibaba | 53 · 缺口较多 | 开发框架免费 + 模型费 | ★ 11k | 13 天前 | Java | — |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
信任维度证据有限。least_privilege 得 2:CI 工作流中 GitHub App 令牌按 permission profile 细分(issues/pull-requests/team-check 等),测试显示未知 profile 在签名前被拒绝,体现最小权限设计;但这是仓库自身 CI 的权限,而非 Agent 产品运行时对用户数据的权限控制。user_confirmation 得 1:README 示例中插件(如 MenuPlugin)被自动调用(FunctionChoiceBehavior.Auto),未见对工具调用的确认机制说明。data_flow_transparency 得 1:README 仅说明连接 OpenAI/Azure 等,未描述数据流向、日志或遥测。sensitive_data_handling 得 1:仅提示用环境变量存放 API key,无脱敏、存储或保留策略说明。dependency_security 得 1:无依赖清单或漏洞扫描证据,SECURITY.md 仅提供漏洞上报渠道。external_effects 得 1:插件可执行本地代码与外部 API 调用,但无副作用边界说明。rollback 得 1:无回滚或撤销机制描述。source_attribution 得 2:MIT 许可证与 Microsoft 版权声明清晰,SECURITY.md 与行为准则齐全。
self_consistency 得 2:README 的 Python/.NET 示例结构一致,ADR 文档对 API 变更做了权衡分析。dependency_availability 得 2:给出 PyPI/NuGet 包名与安装命令,Java 指向独立仓库构建说明。failure_messages 得 2:README 故障排查列出认证错误与模型可用性问题,CI 测试显示对 403/404、空签名、空令牌等错误有明确报错;但产品运行时错误处理细节未在证据中展开。
audience_and_scenarios 得 2:面向开发者,覆盖单 Agent、多 Agent、插件、向量库、多模态等场景。capability_boundaries 得 2:README 明确系统要求(Python 3.10+、.NET 10+、JDK 17+)与支持模型/本地部署选项。trigger_precision 得 1:Agent 触发依赖 LLM 函数选择,未见对触发条件的精确控制说明。environment_fit 得 2:支持 Windows/macOS/Linux 与 Ollama/LMStudio/ONNX 本地部署。
information_architecture 得 2:README 结构清晰,含安装、快速开始、故障排查、社区、许可证。install_notes 得 2:给出 pip/dotnet 安装与环境变量设置,Java 指向外部构建文档。naming_stability 得 1:README 顶部声明项目已由 Microsoft Agent Framework 接替,存在迁移与命名演进风险,API 稳定性承诺指向后继项目。examples_and_faq 得 2:提供多语言示例与 FAQS.md(夜间构建获取)。known_limitations 得 1:仅提及认证与模型可用性两类问题,未系统列出限制。license 得 3:LICENSE 文件为完整 MIT 文本,版权归属明确。versioning_changelog 得 1:无 CHANGELOG,仅徽章显示包版本,FAQ 提及 nightly 版本格式。maintenance_responsibility 得 2:Microsoft 官方组织维护,SECURITY.md 与贡献指南明确,但项目处于向 MAF 迁移的过渡期。
output_usability 得 2:示例可直接复制运行,含预期输出。marginal_value 得 2:作为模型无关的 Agent 编排 SDK 提供插件、多 Agent、向量库等集成价值。cost_benefit 得 1:未提供令牌消耗、延迟或成本相关说明,ADR 仅讨论 token usage 数据结构而非成本控制。
claim_traceability 得 1:README 的“企业级可靠性”等主张缺少仓库内可核验依据,多为指向外部文档的链接。cross_source_corroboration 得 1:README、ADR、FAQ、SECURITY 之间主题相关但未相互印证具体主张。fact_inference_separation 得 1:README 将营销性描述与事实性说明混排,未区分已验证与推断内容。
- README 声明项目已由 Microsoft Agent Framework 接替,长期维护与 API 稳定性可能转移至后继项目,采用前应评估迁移成本。
- 示例中插件被自动调用(FunctionChoiceBehavior.Auto),未见工具调用确认或权限边界说明,接入敏感操作时需自行加确认层。
- 未提供依赖清单或漏洞扫描证据,SECURITY.md 仅为漏洞上报渠道,需自行审计依赖。
- 无成本、令牌消耗或延迟说明,生产使用前应自行评估成本。
- 本评估为静态源码审阅,置信度低,未执行任何代码或测试。