XBSTACK XBSTACK
小白 / Xiaobai

小白 / Xiaobai

开发者 · 产品构建者

持续构建 AI 工程系统、开发者工具与长期数字资产。

关于作者与 XBSTACK →
Semantic Kernel 使用 Plugins、KernelFunction 与 automatic function calling 的当前架构

Semantic Kernel 实战:Plugins、Function Calling 与 Agent 编排怎么做

Semantic Kernel 当前怎么用?本文按 Kernel、Plugins、KernelFunction、automatic function calling、依赖注入、权限与 Agent Framework 迁移边界重写,明确 Stepwise/Handlebars Planner 已移除。

发布 · 2026-01-206 分钟阅读XBSTACK 原创
#AI Agent#Semantic Kernel#Plugins#Function Calling#C##Architecture#Microsoft Agent Framework

直接答案:Semantic Kernel 现在仍然值得用于企业应用的 AI 能力封装,但主线已经不是“给 Skills 配 Planner”。当前更准确的架构是 Kernel + Plugins + function calling:把现有 C# / Python / Java 服务封装为 Plugin functions,让模型通过原生 function calling 选择函数;早期 Stepwise 和 Handlebars planners 已被弃用并从主要 SDK 包中移除。

这篇旧文最大的问题不是 SEO,而是 API 代际。它曾推荐 SequentialPlanner,并把 FunctionCallingStepwisePlannerskprompt.txtconfig.json、Semantic Function 等旧范式写成 2026 主线。现在继续这样教,会直接把读者带进过时文档。

Semantic Kernel 当前到底解决什么问题

Semantic Kernel 的价值不是“替模型再写一套 Planner”,而是把 AI service 和企业已有能力放进一个可治理 Kernel 中。

Kernel 可以集中管理:

  • 模型/AI service;
  • Plugins;
  • Dependency Injection;
  • Logging / telemetry;
  • function calling 所需要的函数 Schema;
  • 应用自己的服务依赖。

所以它特别适合这样的项目:已经有 C#/.NET 服务、数据库、HTTP Client、权限组件和领域服务,希望把其中少量能力安全暴露给模型,而不是为了 AI 再复制一套业务代码。

Plugin 是当前核心:把已有服务变成模型可调用函数

一个 Plugin 本质上是一组有明确语义说明的 functions。函数可以读取数据,也可以执行任务。

Microsoft 当前文档强调,Plugin 不只有函数本身,还需要让模型理解:

  • Plugin 名称;
  • Function 名称;
  • Function 描述;
  • 参数名称和 Schema;
  • 返回值 Schema;
  • 可能的副作用。

在 C# 中,一个 native plugin 可以直接由现有类构成:

using System.ComponentModel;
using Microsoft.SemanticKernel;

public sealed class OrderPlugin
{
    private readonly IOrderService _orders;

    public OrderPlugin(IOrderService orders)
    {
        _orders = orders;
    }

    [KernelFunction("get_order_status")]
    [Description("Read an order status. This function never changes the order.")]
    public async Task<string> GetOrderStatusAsync(
        [Description("Internal order identifier")] string orderId)
    {
        return await _orders.GetStatusAsync(orderId);
    }
}

然后把它注册进 Kernel:

var builder = Kernel.CreateBuilder();

builder.AddAzureOpenAIChatCompletion(
    deploymentName: deploymentName,
    endpoint: endpoint,
    apiKey: apiKey
);

builder.Services.AddSingleton<IOrderService, OrderService>();
builder.Plugins.AddFromType<OrderPlugin>("Orders");

Kernel kernel = builder.Build();

这里的优势是 Plugin 可以直接复用依赖注入里的业务服务,而不是让 Tool 函数自己创建数据库连接或在 Prompt 中携带凭据。

Planning 现在由 function calling 完成

Semantic Kernel 早期确实有 Planner:模型先生成计划,再由框架按计划执行函数。

但随着 OpenAI、Claude、Gemini、Mistral 等模型普遍支持原生 function calling,Semantic Kernel 的设计已经转向:把 Plugin functions 提供给模型,由模型在对话循环中选择需要调用的函数。

Microsoft 当前 planning 文档明确说明:

  • function calling 是当前主要 planning/执行方式;
  • Stepwise planner 已移除;
  • Handlebars planner 已移除;
  • Python、.NET、Java 都不再支持这些旧 planners;
  • 新 Agent 应使用 function calling。

因此下面这些内容不应该再出现在新的“推荐方案”里:

SequentialPlanner
FunctionCallingStepwisePlanner
HandlebarsPlanner

如果旧系统还依赖它们,应按 migration guide 迁移,而不是在新代码继续加深依赖。

自动 Function Calling 的正确边界

自动 function calling 能帮模型解决:

“当前用户问题应该调用哪个 Plugin function,参数是什么,调用结果后下一步是否还要调用其他函数?”

它不能自动解决:

  • 用户有没有权限;
  • 这个 Tool Call 是否被人工批准;
  • 写入是否已经执行过;
  • 网络超时后能不能安全重试;
  • 支付/发布/删除是否满足业务条件。

一个生产执行链应该是:

Model requests function
        │
        ▼
Schema validation
        │
        ▼
Authorization / policy gate
        │
        ├─ high risk ─► Human approval
        ▼
Idempotency check
        │
        ▼
Business service executes
        │
        ▼
Result returned to model

Plugin 描述得再清楚,也不能替代权限系统。

Native Code、OpenAPI、MCP:Plugin 不只来自本地类

Semantic Kernel 当前文档给出的主要 Plugin 来源包括:

  1. Native code:最适合复用现有服务和 Dependency Injection;
  2. OpenAPI:适合已有 HTTP API 或跨团队能力;
  3. MCP Server:适合把标准化 MCP 能力引入 Kernel。

这也是 Semantic Kernel 和 MCP 不应该被写成“二选一框架”的原因:MCP 可以是 Plugin 来源/互操作边界,Semantic Kernel 则负责应用内部的 Kernel、服务和函数调用编排。

Plugin Schema 比“Prompt 写得聪明”更重要

如果两个函数都写成:

search_data
query_data

而描述都只是“查询数据”,模型很难稳定选择。

生产 Plugin 应明确:

  • 什么时候使用;
  • 什么时候禁止使用;
  • 是否只读;
  • 参数约束;
  • 输出是否完整;
  • 是否可能产生副作用;
  • 错误类型是否可重试。

函数越高风险,描述和 Schema 越要具体,同时还要有代码层 policy gate。

Dependency Injection 是 Semantic Kernel 的真正企业优势之一

Kernel 本身可以作为服务与 Plugin 的组合入口。对于 .NET 项目,这意味着:

  • Plugin 复用 HttpClientFactory
  • Plugin 注入 Repository / Domain Service;
  • 统一日志、Telemetry 与 CancellationToken;
  • 不把 API Key 直接暴露给模型;
  • 测试时替换 mock service。

这种工程边界比“自动生成一条 Planner 路径”更值得长期维护。

Semantic Kernel 与 Microsoft Agent Framework 怎么选

Microsoft 已经提供从 Semantic Kernel 到 Microsoft Agent Framework 的官方迁移指南。Agent Framework 更集中于新的 Agent / Workflow API 和跨 Provider 的统一开发体验。

但这并不意味着 Semantic Kernel Plugin 架构立即失效。已有 SK 项目可以先问:

  • 当前只是调用 Plugin,还是已经需要复杂 Agent/Workflow?
  • 是否需要 Agent Framework 的统一会话、Workflow、handoff 或 HITL 模型?
  • 迁移能否减少维护成本?
  • 已有 Kernel Plugin 是否可以作为稳定业务能力继续复用?

如果现有应用只是“模型 + 企业 Plugins + function calling”,没有必要为了新 SDK 名称立即重写。

旧文章里哪些概念现在必须降级为历史背景

旧概念当前处理
Skill统一使用 Plugin / Function 语义理解新代码
Semantic Function / Native Function 二分当前重点放在 Plugin functions 与 KernelFunction
SequentialPlanner已不应作为新项目推荐
FunctionCallingStepwisePlanner已不应作为新项目推荐
Handlebars Planner已移除
skprompt.txt + config.json 作为 Plugin 主线不应再代表现代 native plugin 教程

FAQ

Semantic Kernel 还是 LangChain?

没有统一赢家。已有 .NET 企业服务、依赖注入和 Microsoft 平台资产时,Semantic Kernel 的 Plugin 模型非常自然;Python Agent 项目希望使用 LangChain v1 Middleware 与 LangGraph runtime 时,LangChain 更直接。应该按语言、运行时、状态与业务权限选择,而不是按 GitHub 热度。

可以用 Ollama / 本地模型吗?

具体支持应按当前 Semantic Kernel connector 与 Provider 文档核对。不要像旧文那样承诺“实现一个 ITextCompletion 就能 100% 隐私”,因为实际数据边界还涉及 telemetry、Plugin 外部 API、日志和应用部署方式。

继续阅读

专题入口 / AI Agent Hub

从单个 Agent 问题继续进入完整生产体系

AI Agent 专题统一组织架构、记忆、工具调用、评测、安全、部署和多智能体协作,让每篇文章都回到明确的主题主页面。

继续阅读

返回专题 →
Google ADK 恢复问题实测:state_delta 丢失与 2.7.0 A2A HITL 回归Google ADK state_delta 不生效怎么办?实测 2.6.2 的 state-only resume 状态丢失,并对比 2.6.1 与 2.7.0 的 A2A HITL 消息转换回归。OpenAI Responses API 中断流后,为什么报 No tool call found for function call output?OpenAI Responses API 流式返回 function_call 后,如果客户端提前关闭 Stream,call_id 可能没有写入 Conversation,下一轮提交 function_call_output 就会报 400。本文结合官方 Issue 和本地状态机实验,给出判断、恢复、幂等与生产修复方案。AI Agent 数据分析实战教程:构建自动化金融研报与决策系统AI Agent 数据分析实战教程:详细讲解 AI 智能体在数据分析中的工程应用,包括自动分析流程、工具调用、安全沙箱和实际案例,揭示如何利用智能体实现可审计的数据分析闭环。AI Agent Memory System 实战:记忆分层、用户隔离、遗忘机制与长期状态管理AI Agent Memory System 实战:系统拆解 AI Agent Memory System 的生产级设计方法,覆盖短期状态、长期记忆、用户画像、业务记忆、Checkpoint、RAG 区别、权限隔离、记忆更新、遗忘机制、审计日志与评估指标,帮助开发者构建可控的智能体记忆系统。

AI 工程周报

只发真正改变工程判断的变化、故障、实验和新资产。

评论与补充证据

参与讨论

问题、验证与勘误

登录后可发表评论。所有新评论先进入审核;审核期间仅评论者本人和管理员可见,通过后才公开。

登录评论 审核后公开
正在加载评论区…