第7章-Semantic-Kernel插件介绍
Semantic Kernel(SK)通过插件机制将传统函数与大语言模型(LLM)整合,实现函数调用功能(Function Calling)。本文将带你了解插件的作用、如何定义和注册插件函数,以及如何通过 AI 自动调用它们。
🔍 什么是插件(Plugin)?
插件是 Semantic Kernel 中的重要组成部分,允许你将多个相关的函数打包为一个模块,供 AI 调用。
✅ 本质:SK 会将函数的元数据描述注册给 LLM,模型再根据用户指令自动选择并执行对应函数。
🧱 如何创建一个插件函数?
每个插件函数必须通过特定的 C# 特性标记,SK 才能识别并让 LLM 调用。
using Microsoft.SemanticKernel;
public class TaskManagementPlugin
{
[KernelFunction("complete_task")]
[Description("根据任务 ID 完成任务。")]
[return: Description("返回更新后的任务,若找不到则为 null。")]
public TaskModel? CompleteTask(int id)
{
// 任务处理逻辑
}
}
✅ 要点说明:
[KernelFunction("函数名")]
声明该函数为可被调用的内核函数
[Description("说明")]
提供自然语言函数说明,供 LLM 理解使用
[return: Description("说明")]
描述返回值含义,辅助模型理解输出
📦 如何注册并调用插件函数?
var kernel = new KernelBuilder().Build();
kernel.Plugins.AddFromType<TaskManagementPlugin>("TaskManagement");
var arguments = new KernelArguments { ["id"] = 1 };
var updatedTask = await kernel.InvokeAsync("TaskManagement", "complete_task", arguments);
通过 Kernel
实例手动调用插件函数,适用于业务代码中主动触发。
🤖 AI 自动调用插件函数(Function Calling)
Semantic Kernel 支持自动由 AI 调用插件函数,只需配置 FunctionChoiceBehavior.Auto()
:
var settings = new OpenAIPromptExecutionSettings
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};
添加用户消息:
var history = new ChatHistory();
history.AddUserMessage("请列出所有的紧急任务");
通过 chatCompletionService
启动对话并自动触发函数调用:
var result = await chatCompletionService.GetChatMessageContentAsync(
history,
executionSettings: settings,
kernel: kernel);
若插件包含如下函数:
[KernelFunction("get_critical_tasks")]
[Description("获取所有标记为 '紧急' 的任务列表")]
[return: Description("紧急任务列表")]
public List<TaskModel> GetCriticalTasks()
{
// ...
}
模型将自动调用该函数并将返回结果转化为自然语言。
✅ 插件开发建议
使用清晰且具有描述性的函数名
避免缩写,便于 LLM 理解
函数参数尽量少,使用基本类型
降低 token 消耗,提高解析效率
使用 [Description]
补充说明
提高函数被正确调用的可能性
插件聚焦单一业务领域
保持结构清晰、便于维护
📌 小结
插件机制是 Semantic Kernel 实现 Function Calling 的核心。
函数通过
[KernelFunction]
等特性暴露给 AI 使用。自动调用模式让用户输入更自然,体验更佳。
良好的命名与结构设计是构建智能代理的基础。
借助插件机制,你可以为 AI 添加处理业务逻辑、操作数据库、调用外部服务等能力,构建真正“可执行”的智能体!
Last updated