Sider.ai
  • 聊天
  • Wisebase
  • 工具
  • 浏览器插件
  • 客户端
  • 价格
立即下载
登录

通过Sider更快学习、更深入思考、更聪明成长。

产品
应用
  • 扩展程序
  • iOS
  • Android
  • Mac OS
  • Windows
Wisebase
  • Wisebase
  • Deep Research
  • Scholar Research
  • Math Solver
  • Rec NoteNew
  • Audio To Text
  • Gamified Learning
  • Interactive Reading
  • ChatPDF
工具
  • 网站生成器New
  • AI PPTNew
  • 写作大师
  • Nano Banana Pro
  • Nano Banana Infographic
  • 图片生成
  • 意大利脑洞
  • 背景移除
  • 背景替换
  • 区域抹除
  • 文字移除
  • 局部重绘
  • 画质提升
  • 创作者
  • 文本翻译
  • 图片翻译
  • PDF翻译
Sider
  • 联系我们
  • 帮助中心
  • 下载
  • 价格
  • 教育优惠
  • 新功能
  • 博客
  • 社区
  • 合作伙伴
  • 联盟
  • 邀请
©2026 版权所有
使用条款
隐私政策
  • 首页
  • 博客
  • AI 工具
  • 如何使用 Semantic Kernel:实用指南,包含模式、提示和插件

如何使用 Semantic Kernel:实用指南,包含模式、提示和插件

更新于 2025年9月24日

9 分钟


如何使用 Semantic Kernel:一份包含模式、提示和插件的实用指南

是否曾尝试将 LLM 连接到你的应用程序,最终却得到一个脆弱的提示、辅助函数和状态的混乱集合?Semantic Kernel (SK) 的存在正是为了解决这个问题。它是由 Microsoft 提供的一个轻量级、开源的编排框架,用于构建 AI 优先的应用程序,这些应用程序融合了自然语言、工具和记忆——而不会将你的代码库变成提示意大利面条。
在本指南中,我们将以一种实用的、面向解决方案的方式,从零到生产模式地游览如何使用 Semantic Kernel。你将学习如何构建提示,插入工具,添加记忆,调用多个模型,以及部署行为一致的代理。我们将保持示例的实用性,并向你展示重要的内容。

什么是 Semantic Kernel——以及为什么要使用它?

Semantic Kernel 是一个 SDK,可以帮助你:
  • 将提示和函数(“技能”/插件)组合成管道。
  • 可互换地调用多个模型(OpenAI、Azure OpenAI、本地模型)。
  • 添加记忆,以便通过嵌入进行上下文和长期回忆。
  • 规划和编排具有可靠状态的多步骤任务。
  • 安全且确定性地集成工具(API、数据库、文件 I/O)。
可以将 SK 视为协调 LLM、你的应用程序逻辑和用户数据的 控制器。无需硬编码长提示和临时工具调用,你可以定义具有清晰输入/输出的可重用语义函数和原生函数。
常见用例:
  • 具有检索增强生成 (RAG) 的客户支持副驾驶
  • 工作流代理(总结 → 分类 → 采取行动)
  • 具有记忆和引用的文档问答
  • 创意内容和代码生成管道

快速入门:你的第一个 Semantic Kernel 应用程序

下面是一个最小的流程,展示了如何将 Semantic Kernel 与聊天模型和一个简单的提示一起使用。为了清晰起见,我们将使用 C#;你也可以在 Python 或 Java 中做同样的事情。

1) 安装包

# .NET
dotnet add package Microsoft.SemanticKernel
# 可选:连接器和规划器因版本而异

2) 配置内核和模型

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
var builder = Kernel.CreateBuilder;
// 选择你的提供商:OpenAI 或 Azure OpenAI
builder.AddOpenAIChatCompletion(
modelId: "gpt-4o-mini", // 或你喜欢的模型
apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")
);
var kernel = builder.Build;

3) 定义一个语义函数(提示)

using Microsoft.SemanticKernel.SemanticFunctions;
var prompt = @"你是一个简洁的解释器。
用 3 个要点向初学者解释 '{topic}' 的概念。";
var explainFunc = kernel.CreateFunctionFromPrompt(prompt);
var result = await explainFunc.InvokeAsync(kernel, new { ["topic"] = "vector embeddings" });
Console.WriteLine(result);
这是核心:一个内核、一个模型和一个提示,变成一个具有输入的可重用函数。

语义函数 vs. 原生函数

  • 语义函数:由提示驱动。你从模板创建它们,传递变量,并获得文本或结构化输出。
  • 原生函数:SK 向 LLM 公开以供工具使用的常规代码函数。
从你的 API 获取天气并将其公开给模型的原生函数示例:
public class WeatherPlugin
{
[KernelFunction, Description("获取城市天气")]
public async Task<string> GetWeatherAsync(
[Description("城市名称")] string city)
{
// 在这里调用你的天气 API
var temp = 22; // 占位符
return $"Weather in {city}: {temp}°C and clear";
}
}
// 注册插件
var weather = new WeatherPlugin;
kernel.Plugins.AddFromObject(weather, pluginName: "weather");
现在,你的提示可以调用 weather.GetWeatherAsync 作为工具,允许模型将响应建立在真实数据的基础上。

真正有效的提示模式

在学习如何使用 Semantic Kernel 时,最快的胜利来自于有纪律的提示模式:
  • 系统优先:使用强大的系统消息来锁定语气、角色、安全性和输出格式。
  • 变量槽:明确命名占位符(例如,{topic},{audience})并验证输入。
  • 输出合同:要求结构化格式(如 JSON);在提示中包含一个模式。
  • 少量示例:为风格和格式提供简洁的示例,而不是内容膨胀。
  • 护栏:包括约束(“如果缺少数据,请先提出澄清问题”)。
SK 中的结构化提示示例:
var prompt = @"
你是一个分类引擎。
任务:将 `message` 分类为 [Billing, Tech Support, Sales] 中的一个。
返回严格的 JSON:{ \"label\": string, \"confidence\": number }
message: {message}
";
var classify = kernel.CreateFunctionFromPrompt(prompt);
var output = await classify.InvokeAsync(kernel, new { ["message"] = "I can’t log into my account." });
Console.WriteLine(output); // {"label":"Tech Support","confidence":0.89}

添加记忆:嵌入、RAG 和上下文窗口

LLM 会忘记。记忆使它们有用。
  • 短期上下文:通过对话历史记录自动进行。
  • 长期记忆:存储用户笔记、文档或事件的嵌入,并检索相关的块以获取上下文。
  • RAG:在调用生成函数之前,查询你的向量存储并将结果注入到提示中。
示例:添加具有嵌入的文本记忆并检索上下文。
using Microsoft.SemanticKernel.Memory;
var memory = new MemoryBuilder
.WithMemoryStore(new VolatileMemoryStore) // 替换为向量数据库(Qdrant、Pinecone、Azure AI Search)
.WithTextEmbeddingGeneration(
new OpenAITextEmbeddingGeneration("text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY")))
.Build;
await memory.SaveInformationAsync(
collection: "policies", id: "refund-policy",
text: "Customers can request a refund within 30 days of purchase with proof of receipt."
);
// 稍后:检索并填充到提示中
var results = memory.SearchAsync("refund window", collection: "policies", limit: 3, minRelevanceScore: 0.7);
await foreach (var item in results)
{
Console.WriteLine($"Relevant: {item.Metadata.Text}");
}
然后将最佳匹配项作为上下文变量馈送到你的语义函数中。提示:保持块小(200-400 个 token)并进行重复数据删除。

工具使用和规划:多步骤工作流

Semantic Kernel 支持 规划器,可以将用户目标分解为多个步骤,并选择要调用的函数。当你有一个原生和语义函数的工具箱时,这非常完美。
模式:
  1. 从用户那里收集目标和约束。
  1. 起草一个计划(带有参数的函数调用序列)。
  1. 逐步执行,验证输出,并从错误中恢复。
伪代码示例:
// 1) 像以前一样定义插件(语义 + 原生)
// 2) 使用规划器(API 界面可能因版本而异)
var goal = "总结附加的策略,对风险进行分类,并通过电子邮件发送报告";
// 假设我们有插件:files, summarize, classify, email
// 规划器将组装一个计划:files.Load → summarize.Run → classify.Run → email.Send
// 顺序执行计划,验证步骤之间的 JSON 输出
最佳实践:
  • 使步骤具有幂等性和可测试性。
  • 在步骤之间设置显式的输出模式。
  • 在联网工具上使用重试/退避。
  • 记录输入/输出以进行可观察性(但要清理 PII)。

多模型策略:为工作选择合适的模型

使用 Semantic Kernel,你可以将任务路由到不同的模型:
  • 快速草稿 → 小型、廉价的模型
  • 推理繁重的步骤 → 更大的模型
  • 嵌入 → 专门的嵌入模型
  • 代码 → 代码优化的模型
在实践中:
var kernel = Kernel.CreateBuilder
.AddOpenAIChatCompletion("gpt-4o-mini", apiKey)
.Build;
var fastKernel = Kernel.CreateBuilder
.AddOpenAIChatCompletion("gpt-4o-mini", apiKey) // 速度优化
.Build;
// 将更简单的提示路由到 fastKernel;将复杂的任务路由到 kernel
或者,在同一个内核中配置多个服务,并按函数选择。

从原型到生产:护栏和测试

当你学习如何在实际应用程序中使用 Semantic Kernel 时,可靠性很重要:
  • 模式优先输出:使用 JSON 模式和 TryParse 门。
  • 在需要时确定性:设置低温度并约束输出。
  • 安全过滤器:添加内容过滤器和红队提示。
  • 缓存:缓存 RAG 结果和稳定的生成。
  • 可观察性:记录提示模板、变量、延迟、token 使用情况。
  • 单元测试:使用快照比较的黄金测试提示。
示例:验证 JSON 输出。
record Classification(string label, double confidence);
bool TryParseClassification(string text, out Classification cls)
{
try { cls = System.Text.Json.JsonSerializer.Deserialize<Classification>(text)!; return true; }
catch { cls = default!; return false; }
}

你可以重用的真实世界模式

  • RAG 聊天机器人:retrieve(context) → answer(question, context) 带有引用。
  • 审批工作流:classify → generate draft → human review → send。
  • 内容运营:outline → draft → fact-check → tone adjust → publish。
  • 带有工具的代理:calendar.lookup, docs.search, email.send;带有规划和记忆。
提示:将每个步骤封装为一个函数(语义或原生)并将它们组合成管道。

示例:带有引用的文档问答

让我们连接一个使用 RAG 引用来源的简单问答管道。
// 1) 将文档提取到内存中
await memory.SaveInformationAsync("handbook", "vacation-policy",
"Employees accrue 1.5 days of PTO per month and can carry over 5 days.");
// 2) 检索问题的上下文
var top = memory.SearchAsync("carry over PTO", "handbook", limit: 3, minRelevanceScore: 0.75);
var contexts = new List<string>;
await foreach (var r in top) contexts.Add(r.Metadata.Text);
// 3) 询问上下文并请求引用
var qaPrompt = @"
你严格从提供的上下文中回答。如果缺少,请说你不知道。
包括像 [source i] 这样的内联引用,使用从 1 开始的上下文项目索引。
Context:
1) {{ctx1}}
2) {{ctx2}}
Question: {{q}}
";
var qa = kernel.CreateFunctionFromPrompt(qaPrompt);
var variables = new KernelArguments
{
["ctx1"] = contexts.ElementAtOrDefault(0) ?? "",
["ctx2"] = contexts.ElementAtOrDefault(1) ?? "",
["q"] = "How many PTO days can I carry over?"
};
var answer = await qa.InvokeAsync(kernel, variables);
Console.WriteLine(answer);

常见陷阱(以及如何避免它们)

  • 单个巨大的提示:分解为函数;仅传递你需要的上下文。
  • 没有输出合同:始终为机器可读的步骤定义模式。
  • 没有卫生的 RAG:良好地分块,删除重复数据,并按相关性和新近度排序。
  • 工具蔓延:保持插件接口小且有文档记录。
  • 没有人为参与:为高风险操作添加批准。

如何将 Semantic Kernel 与前端一起使用

  • Web 应用程序:在 API 层中托管你的 SK 编排;将 token 流式传输到 UI。
  • 聊天 UI:维护服务器端对话状态;修剪和总结。
  • 身份验证:模拟安全调用——永远不要让模型生成 token。通过你的后端控制工具调用。

部署清单

  • 用于密钥和端点的环境变量
  • 模型/工具调用的速率限制和重试
  • 提示模板源代码控制
  • 向量存储备份和 PII 处理
  • 可观察性仪表板(延迟、成本、错误)
  • 提示和路由的 A/B 测试

FAQ 式故障排除

  • “即使使用 RAG,模型也会产生幻觉。” 收紧说明:“仅从上下文中回答”并包含拒绝示例。提高检索特异性并降低温度。
  • “JSON 一直在崩溃。” 添加一个有效的 JSON 迷你示例并禁止评论。失败后进行后验证和释义。
  • “延迟很高。” 检索更少、更相关的块;将简单步骤切换到更小的模型;并行化独立步骤。
  • “成本正在飙升。” 缓存、压缩上下文,并将简单的任务路由到更便宜的模型。

值得注意的是:使用 Sider.AI 更快地构建

如果你正在原型设计提示、测试工具流程或比较跨模型的响应,像 Sider.ai 这样的伴侣可以加速迭代。你可以在将提示移动到 Semantic Kernel 模板之前,起草提示、运行 A/B 比较并捕获可重用的代码片段——非常适合锐化指令和输出模式。

后续步骤:将其变成一个工作代理

  • 从一个明确的任务开始(例如,对支持电子邮件进行分类)。
  • 使用严格的输入/输出定义语义/原生函数。
  • 仅在记忆可以衡量地改善答案时才添加记忆。
  • 检测一切;使用真实世界的样本进行测试。
  • 使用沙箱迭代提示,然后在 SK 中进行编纂。
主要收获:
  • Semantic Kernel 帮助你将提示、工具和记忆组合成可靠的工作流。
  • 使用输出模式、规划器和多模型路由来实现鲁棒性和成本控制。
  • RAG 加上护栏胜过每次巨大的提示。
一旦你掌握了如何使用 Semantic Kernel 与这些模式,你将交付的 AI 功能不仅仅是令人印象深刻的演示——而是可靠的系统。

FAQ

Q1:Semantic Kernel 在 AI 应用程序中用于什么? Semantic Kernel 是一个用于构建 AI 工作流程的编排 SDK,它结合了 LLM 提示、工具(原生函数)和记忆。它可以帮助你构建任务、添加 RAG 并可靠地调用多个模型。
Q2:如何使用 Semantic Kernel 将 RAG 与我的文档一起使用? 通过 SK 的内存 API 将你的文档提取到向量存储中,然后检索每个查询最相关的块并将它们注入到你的提示中。这提高了准确性并减少了幻觉。
Q3:Semantic Kernel 可以调用外部 API 和服务吗? 可以。将 API 包装为插件中的原生函数,并将它们注册到内核,以便模型可以将它们用作工具。保持接口小并强制执行输入/输出验证。
Q4:哪些模型与 Semantic Kernel 一起使用? Semantic Kernel 支持 OpenAI、Azure OpenAI 和其他连接器。你可以将任务路由到不同的模型——例如,较小的模型用于草稿,较大的模型用于推理密集型步骤。
Q5:如何使 Semantic Kernel 输出一致(例如,JSON)? 使用要求严格 JSON 的结构化提示,并包含一个最小的示例或模式。设置低温度,在调用后验证输出,并在解析失败时重试或修复。

最近文章
如何掌握 ChatPDF:快速洞察密集文档

如何掌握 ChatPDF:快速洞察密集文档

快速、精准文档的最佳X自动翻译替代方案

快速、精准文档的最佳X自动翻译替代方案

三星AI翻译在伊朗无法使用?实用解决方法

三星AI翻译在伊朗无法使用?实用解决方法

波斯语翻译工具:实现更快更准确工作的实用指南

波斯语翻译工具:实现更快更准确工作的实用指南

深度、有引用研究的最佳Grok替代方案

深度、有引用研究的最佳Grok替代方案

你真正会用的AI图像生成器15大功能

你真正会用的AI图像生成器15大功能