Semantic Kernel的企业级AI集成:插件系统与规划器的协同工作机制

发布时间:2026/7/24 18:06:04

Semantic Kernel的企业级AI集成:插件系统与规划器的协同工作机制 Semantic Kernel的企业级AI集成插件系统与规划器的协同工作机制微软的Semantic KernelSK是一个将LLM能力集成到企业应用中的轻量级SDK。其核心设计——插件系统Plugin System和规划器Planner——分别解决了如何让LLM安全调用企业服务和如何自动编排多步骤AI工作流两个关键问题。本文从架构层面分析SK的插件注册与依赖注入机制、规划器的Function Calling触发流程并通过一个跨系统的工单自动处理场景展示两者在实际企业环境中的协同工作模式。一、插件系统的依赖注入架构Semantic Kernel的插件系统建立在.NET依赖注入容器之上。每个插件是一个实现了特定接口的类其公开方法通过[KernelFunction]特性标注方法的参数通过[Description]特性向LLM暴露语义描述。插件注册的关键机制是自动函数描述生成SK在运行时通过反射读取每个[KernelFunction]方法的签名、参数类型和[Description]特性将其转换为LLM可理解的JSON Schema格式OpenAPI Function Calling规范。这使得LLM能够理解每个插件方法的功能、输入参数和返回值从而在适当的时机自主决定调用哪个方法。这一设计与传统的RPC/REST API集成有本质区别传统的API集成需要开发者预先编写调用逻辑如果用户想查订单就调用getOrder接口而SK将调用决策权部分交给LLM语义内核会基于用户意图自动选择最匹配的插件方法。二、规划器的工作机制规划器Planner是SK中负责将用户意图分解为多步骤执行计划的组件。其核心流程为意图分析→计划生成→步骤执行→中间结果传递→异常回退规划器与简单的Function Calling链的区别在于它不是线性地调用一个工具后结束而是能够生成包含条件分支、循环和错误恢复的多步骤计划。例如帮我汇总过去一周所有P1级别的工单发送给运维主管这一请求需要分解为查询工单→筛选P1→汇总统计→查找运维主管邮箱→发送邮件五个步骤。// Semantic Kernel 插件定义与规划器使用的示例C# // 展示企业场景中多个插件的协作模式 using Microsoft.SemanticKernel; public class TicketPlugin { private readonly ITicketRepository _repository; public TicketPlugin(ITicketRepository repository) { _repository repository; } [KernelFunction(query_tickets)] [Description(查询工单列表。支持按优先级、状态和时间范围过滤。)] [return: Description(符合条件的工单列表JSON 数组格式)] public async Taskstring QueryTicketsAsync( [Description(优先级过滤可选值P0/P1/P2/P3逗号分隔)] string priority, [Description(开始日期格式 yyyy-MM-dd)] string startDate, [Description(结束日期格式 yyyy-MM-dd)] string endDate ) { var tickets await _repository.QueryAsync( priority: priority, start: DateTime.Parse(startDate), end: DateTime.Parse(endDate) ); return JsonSerializer.Serialize(tickets); } [KernelFunction(summarize_tickets)] [Description(对工单列表进行汇总统计返回各优先级的数量和平均处理时长。)] [return: Description(工单汇总统计结果的 Markdown 格式文本)] public string SummarizeTickets( [Description(工单列表的 JSON 数组字符串)] string ticketsJson ) { var tickets JsonSerializer.DeserializeListTicket(ticketsJson); var summary tickets .GroupBy(t t.Priority) .Select(g new { Priority g.Key, Count g.Count(), AvgHours g.Average(t (t.ResolvedAt - t.CreatedAt).TotalHours) }); return MarkdownGenerator.GenerateTable(summary); } }三、跨系统协同场景的完整实现以智能工单处理为场景系统需要在三个企业的独立服务Jira工单系统、企业通讯录、邮件服务之间进行编排。SK的插件系统将每个服务封装为独立插件规划器负责跨插件的工作流编排。# Semantic Kernel Python SDK 的规划器配置示例 import semantic_kernel as sk from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion from semantic_kernel.planners import SequentialPlanner async def build_ticket_workflow(): 构建工单处理的 SK 工作流。 展示多插件工单、通讯录、邮件的协作模式。 # 初始化内核配置 LLM 后端 kernel sk.Kernel() kernel.add_service( OpenAIChatCompletion( service_idgpt-4o, ai_model_idgpt-4o, api_key..., # 实际使用环境变量或密钥管理服务 ) ) # 注册三个企业服务插件 # 每个插件封装了对应服务的认证和 API 调用逻辑 kernel.import_plugin_from_object( TicketPlugin(repository), plugin_nameticket ) kernel.import_plugin_from_object( ContactsPlugin(ldap_client), plugin_namecontacts ) kernel.import_plugin_from_object( EmailPlugin(smtp_client), plugin_nameemail ) # 配置规划器允许最多 10 个步骤避免无限循环 planner SequentialPlanner( kernel, configsk.SequentialPlannerConfig( max_steps10, # 允许 LLM 在计划执行中根据中间结果调整后续步骤 allow_missing_functionsFalse ) ) # 用户自然语言输入触发规划 user_request ( 汇总上周所有 P1 及以上级别的工单 统计平均处理时长 将报告发送给运维主管 zhangweicompany.com ) plan await planner.create_plan(user_request) print(f生成的计划包含 {len(plan.steps)} 个步骤) for i, step in enumerate(plan.steps): print(f Step {i1}: {step.plugin_name}.{step.function_name}) # 执行计划 result await plan.invoke(kernel) return result四、企业部署中的安全边界设计将LLM接入企业内部系统时安全边界是首要考量。SK提供了多层防护机制调用权限白名单并非所有插件方法都对LLM可见。可以通过KernelFunction的可见性控制和插件的选择性导入确保敏感的数据库写入、文件删除等操作不会暴露给LLM。人工审批网关对于高风险操作如发送邮件、修改配置可以插入一个人工审批步骤。SK的规划器支持HITLHuman-in-the-Loop步骤——规划到某一步时暂停执行将操作摘要和参数发送给审批人审批通过后继续执行。参数约束验证在插件方法的实现中进行严格的参数校验确保LLM生成的参数值在安全范围内如邮件收件人必须在企业域内、日期范围不超过90天等。五、总结Semantic Kernel通过插件系统和规划器的协同为企业级AI集成提供了一套实用的架构方案。插件系统利用.NET依赖注入和反射机制将企业服务封装为LLM可理解的功能接口规划器通过自动生成的执行计划编排跨服务的多步骤工作流。安全边界的多层设计权限白名单、人工审批网关、参数约束验证确保LLM在企业环境中的可控性。这一架构代表了AI应用工程化的一个重要方向不是让LLM替代企业系统而是让它成为企业系统之间的智能编排层。

相关新闻