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 投影片New
  • AI 論文寫作
  • Nano Banana Pro
  • Nano Banana Infographic
  • AI 圖像生成器
  • 意大利腦洞
  • 背景移除器
  • 背景更換器
  • 照片橡皮擦
  • 文字移除器
  • 修補
  • 圖像升級器
  • 創建
  • AI 翻譯器
  • 圖像翻譯器
  • 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("Get weather for a city")]
public async Task<string> GetWeatherAsync(
[Description("City name")] string city)
{
// Call your weather API here
var temp = 22; // placeholder
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` 分類為 [帳單、技術支援、銷售] 之一。
傳回嚴格的 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 = "Summarize the attached policy, classify risk, and email a report";
// 假設我們有外掛程式: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 = @"
You answer strictly from the provided context. If missing, say you don't know.
Include inline citations like [source i] using the index of context items starting at 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 這樣的配套工具可以加快迭代速度。您可以在將提示草稿、執行 A/B 比較和捕獲可重複使用的程式碼片段,然後再將它們移動到 Semantic Kernel 範本中——非常適合銳化指示和輸出架構。

後續步驟:將其轉變為工作代理

  • 從一項明確的任務開始(例如,分類支援電子郵件)。
  • 定義具有嚴格輸入/輸出的語義/原生函數。
  • 僅在記憶可以顯著改善答案時才添加記憶。
  • 檢測所有內容;使用真實世界的樣本進行測試。
  • 使用沙箱迭代提示,然後在 SK 中編碼。
主要要點:
  • Semantic Kernel 幫助您將提示、工具和記憶組合成可靠的工作流程。
  • 使用輸出架構、規劃器和多模型路由來實現穩健性和成本控制。
  • RAG 加上護欄每次都勝過巨大的提示。
一旦您掌握了如何使用 Semantic Kernel 以及這些模式,您將交付的不僅僅是令人印象深刻的演示,而是可靠的系統。

常見問題

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 大功能