.NET 的語意核心概觀
在本文中,您會探討語意核心的核心概念和功能。 語意核心是強大的選項,且建議搭配 .NET 應用程式中的 AI 使用。 在以下各節,您將了解:
- 如何將語意核心新增至專案
- 語意核心的核心概念
本文專門針對語意核心 (特別是在 .NET 環境中) 進行介紹性概述。 如需語意核心更完整的資訊與訓練,請參閱下列資源:
將語意核心新增至 .NET 專案
語意核心 SDK 可作為適用於 .NET 的 NuGet 套件,並與標準應用程式組態整合。
使用下列命令安裝 Microsoft.SemanticKernel
套件:
dotnet add package Microsoft.SemanticKernel
注意
雖然 Microsoft.SemanticKernel
提供語意核心的核心功能,但您必須為其他功能安裝其他套件。 例如,Microsoft.SemanticKernel.Plugins.Memory
套件可存取記憶體相關功能。 如需其他資訊,請參閱語意核心文件。
使用 KernelBuilder
類別建立及設定 Kernel
執行個體,以存取和使用語意核心。 Kernel
包含服務、資料和連線,可協調程式碼與 AI 模型之間的整合。
在 .NET 控制台應用程式設定 Kernel
:
var builder = Kernel.CreateBuilder();
// Add builder configuration and services
var kernel = builder.Build();
在 ASP.NET Core 應用程式設定核心:
var builder = WebApplication.CreateBuilder();
builder.Services.AddKernel();
// Add builder configuration and services
var app = builder.Build();
了解語意核心
語意核心是一種開放原始碼 SDK,可整合並協調 OpenAI、Azure OpenAI 和 Hugging Face 等 AI 模型與服務,以及 C#、Python 和 JAVA 這類傳統程式設計語言。
語意核心 SDK 可透過下列方式讓企業開發人員受益:
- 簡化 AI 功能與現有應用程式整合的流程,為企業產品實現緊密整合的解決方案。
- 提供降低複雜性的抽象概念,將處理不同 AI 模型或服務的學習曲線降到最低。
- 減少 AI 模型提示和回應無法預測的行為,改善可靠性。 您可以微調提示和規劃工作,打造受控且可預測的使用者體驗。
語意核心是根據數個核心概念所建置:
- 連線:連接外部 AI 服務和資料來源。
- 外掛程式:封裝應用程式可以使用的函式。
- 規劃工具:根據使用者行為協調執行計劃和策略。
- 記憶體:抽象化並簡化 AI 應用程式的內容管理。
下列各節會詳細探討這些基石。
連線
語意核心 SDK 包含一組連接器,可讓開發人員將 LLM 和其他服務整合到現有的應用程式。 這些連接器可作為應用程式程式碼與 AI 模型或服務的橋樑。 語意核心為您處理許多常見的連線考量和難題,讓您可以專注於建置工作流程和功能。
下列程式碼片段會建立 Kernel
,並將連線新增至 Azure OpenAI 模型:
using Microsoft.SemanticKernel;
// Create kernel
var builder = Kernel.CreateBuilder();
// Add a chat completion service:
builder.Services.AddAzureOpenAIChatCompletion(
"your-resource-name",
"your-endpoint",
"your-resource-key",
"deployment-model");
var kernel = builder.Build();
外掛程式
語意核心外掛程式會封裝要取用之應用程式和 AI 模型的標準語言函式。 您可自行建立外掛程式,或採用 SDK 提供的外掛程式。 這些外掛程式簡化了工作,以高效方式將 AI 模型的優勢較傳統的 C# 方法結合。 外掛程式函式通常分為兩種類型:語意函式和原生函式。
語意函式
語意函式基本上是程式碼中定義的 AI 提示,而且語意核心可視需要自訂及呼叫該提示。 您可將這些提示範本化,以使用變數、自訂提示和完成格式設定等等。
下列程式碼片段定義並註冊語意函式:
var userInput = Console.ReadLine();
// Define semantic function inline.
string skPrompt = @"Summarize the provided unstructured text in a sentence that is easy to understand.
Text to summarize: {{$userInput}}";
// Register the function
kernel.CreateSemanticFunction(
promptTemplate: skPrompt,
functionName: "SummarizeText",
pluginName: "SemanticFunctions"
);
原生函式
原生函式屬於 C# 方法,可由語意核心直接呼叫,以操作或擷取資料。 這類函式會執行更適合傳統程式碼指令的作業,而不是 LLM 提示。
下列程式碼片段定義並註冊原生函式:
// Define native function
public class NativeFunctions {
[SKFunction, Description("Retrieve content from local file")]
public async Task<string> RetrieveLocalFile(string fileName, int maxSize = 5000)
{
string content = await File.ReadAllTextAsync(fileName);
if (content.Length <= maxSize) return content;
return content.Substring(0, maxSize);
}
}
//Import native function
string plugInName = "NativeFunction";
string functionName = "RetrieveLocalFile";
var nativeFunctions = new NativeFunctions();
kernel.ImportFunctions(nativeFunctions, plugInName);
Planner
規劃工具是語意核心的核心元件,提供 AI 協調流程,可管理 AI 模型與外掛程式之間的無縫整合。 此層會設計使用者要求的執行策略,並動態協調外掛程式,利用 AI 輔助規劃執行複雜的工作。
請考慮下列虛擬程式碼片段:
// Native function definition and kernel configuration code omitted for brevity
// Configure and create the plan
string planDefinition = "Read content from a local file and summarize the content.";
SequentialPlanner sequentialPlanner = new SequentialPlanner(kernel);
string assetsFolder = @"../../assets";
string fileName = Path.Combine(assetsFolder,"docs","06_SemanticKernel", "aci_documentation.txt");
ContextVariables contextVariables = new ContextVariables();
contextVariables.Add("fileName", fileName);
var customPlan = await sequentialPlanner.CreatePlanAsync(planDefinition);
// Execute the plan
KernelResult kernelResult = await kernel.RunAsync(contextVariables, customPlan);
Console.WriteLine($"Summarization: {kernelResult.GetValue<string>()}");
上述程式碼會建立可執行的循序計劃,從本機檔案讀取內容並摘要內容。 此計劃會設定指令,使用原生函式讀取檔案,然後使用 AI 模型進行分析。
記憶體
Semantic Kernel 的向量儲存提供內嵌模型、向量資料庫和其他資料的抽象層,以簡化 AI 應用程式的上下文管理。 向量儲存與底層 LLM 或向量資料庫無關,提供統一的開發人員體驗。 您可以設定記憶體功能,以將資料儲存在各種來源或服務中,包括 Azure AI 搜尋服務和 Azure Cache for Redis。
請考慮下列程式碼片段:
var facts = new Dictionary<string,string>();
facts.Add(
"Azure Machine Learning; https://learn.microsoft.com/en-us/azure/machine-learning/",
@"Azure Machine Learning is a cloud service for accelerating and
managing the machine learning project lifecycle. Machine learning professionals,
data scientists, and engineers can use it in their day-to-day workflows"
);
facts.Add(
"Azure SQL Service; https://learn.microsoft.com/en-us/azure/azure-sql/",
@"Azure SQL is a family of managed, secure, and intelligent products
that use the SQL Server database engine in the Azure cloud."
);
string memoryCollectionName = "SummarizedAzureDocs";
foreach (var fact in facts) {
await memoryBuilder.SaveReferenceAsync(
collection: memoryCollectionName,
description: fact.Key.Split(";")[1].Trim(),
text: fact.Value,
externalId: fact.Key.Split(";")[2].Trim(),
externalSourceName: "Azure Documentation"
);
}
上述程式碼將一組事實載入記憶體,以便與 AI 模型互動及協調工作時使用資料。