Overzicht van Semantische kernel voor .NET
In dit artikel verkent u de kernconcepten en mogelijkheden van Semantische Kernel . Semantische kernel is een krachtige en aanbevolen keuze voor het werken met AI in .NET-toepassingen. In de volgende secties leert u het volgende:
- Semantische kernel toevoegen aan uw project
- Kernconcepten van Semantische kernel
Dit artikel fungeert als een inleidende overzicht van Semantische kernel, specifiek in de context van .NET. Zie de volgende bronnen voor uitgebreidere informatie en training over Semantische kernel:
Semantische kernel toevoegen aan een .NET-project
De Semantic Kernel SDK is beschikbaar als een NuGet-pakket voor .NET en kan worden geïntegreerd met standaard-app-configuraties.
Installeer het Microsoft.SemanticKernel
pakket met behulp van de volgende opdracht:
dotnet add package Microsoft.SemanticKernel
Notitie
Hoewel Microsoft.SemanticKernel
het kernfuncties van Semantische kernel biedt, moet u aanvullende pakketten installeren. Het pakket biedt bijvoorbeeld Microsoft.SemanticKernel.Plugins.Memory
toegang tot geheugengerelateerde functies. Zie de Semantische kerneldocumentatie voor meer informatie.
Maak en configureer een Kernel
exemplaar met behulp van de KernelBuilder
klasse om toegang te krijgen tot en te werken met Semantische kernel. De Kernel
services, gegevens en verbindingen voor het organiseren van integraties tussen uw code en AI-modellen.
Configureer de Kernel
app in een .NET-console-app:
var builder = Kernel.CreateBuilder();
// Add builder configuration and services
var kernel = builder.Build();
Configureer de kernel in een ASP.NET Core-app:
var builder = WebApplication.CreateBuilder();
builder.Services.AddKernel();
// Add builder configuration and services
var app = builder.Build();
Semantische kernel begrijpen
Semantische kernel is een opensource-SDK die AI-modellen en -services zoals OpenAI, Azure OpenAI en Hugging Face integreert en organiseert met conventionele programmeertalen zoals C#, Python en Java.
De Semantic Kernel SDK biedt zakelijke ontwikkelaars de volgende voordelen:
- Stroomlijnt de integratie van AI-mogelijkheden in bestaande toepassingen om een samenhangende oplossing voor bedrijfsproducten mogelijk te maken.
- Minimaliseert de leercurve van het werken met verschillende AI-modellen of -services door abstracties te bieden die de complexiteit verminderen.
- Verbetert de betrouwbaarheid door het onvoorspelbare gedrag van prompts en antwoorden van AI-modellen te verminderen. U kunt prompts verfijnen en taken plannen om een gecontroleerde en voorspelbare gebruikerservaring te maken.
Semantische kernel is gebouwd rond verschillende kernconcepten:
- Verbindingen: Interface met externe AI-services en gegevensbronnen.
- Invoegtoepassingen: functies inkapselen die toepassingen kunnen gebruiken.
- Planner: Organiseert uitvoeringsplannen en -strategieën op basis van gebruikersgedrag.
- Geheugen: Abstracts en vereenvoudigt contextbeheer voor AI-apps.
Deze bouwstenen worden in de volgende secties uitgebreider besproken.
Connecties
De Semantic Kernel SDK bevat een set connectors waarmee ontwikkelaars LLM's en andere services kunnen integreren in hun bestaande toepassingen. Deze connectors fungeren als de brug tussen de toepassingscode en de AI-modellen of -services. Semantische kernel verwerkt veel veelvoorkomende verbindingsproblemen en uitdagingen voor u, zodat u zich kunt richten op het bouwen van uw eigen werkstromen en functies.
Met het volgende codefragment maakt u een Kernel
en voegt u een verbinding toe met een Azure OpenAI-model:
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();
Invoegtoepassingen
Semantische Kernel-invoegtoepassingen bevatten standaardtaalfuncties voor toepassingen en AI-modellen die kunnen worden gebruikt. U kunt uw eigen invoegtoepassingen maken of gebruikmaken van invoegtoepassingen die door de SDK worden geleverd. Deze invoegtoepassingen stroomlijnen taken waarbij AI-modellen voordelig en efficiënt zijn gecombineerd met meer traditionele C#-methoden. Invoegtoepassingsfuncties worden over het algemeen onderverdeeld in twee typen: semantische functies en systeemeigen functies.
Semantische functies
Semantische functies zijn in wezen AI-prompts die zijn gedefinieerd in uw code die Semantische kernel indien nodig kan aanpassen en aanroepen. U kunt deze prompts templatiseren voor het gebruik van variabelen, aangepaste prompt- en voltooiingsopmaak en meer.
Het volgende codefragment definieert en registreert een semantische functie:
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"
);
Systeemeigen functies
Systeemeigen functies zijn C#-methoden die Semantische kernel rechtstreeks kunnen aanroepen om gegevens te bewerken of op te halen. Ze voeren bewerkingen uit die beter geschikt zijn voor traditionele code-instructies in plaats van LLM-prompts.
Het volgende codefragment definieert en registreert een systeemeigen functie:
// 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
De planner is een kernonderdeel van Semantic Kernel dat AI-indeling biedt voor het beheren van naadloze integratie tussen AI-modellen en invoegtoepassingen. Deze laag ontwerpt uitvoeringsstrategieën van gebruikersaanvragen en organiseert invoegtoepassingen dynamisch om complexe taken uit te voeren met ai-ondersteunde planning.
Bekijk het volgende pseudocodefragment:
// 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>()}");
Met de voorgaande code wordt een uitvoerbaar, opeenvolgend plan gemaakt om inhoud uit een lokaal bestand te lezen en de inhoud samen te vatten. Het plan stelt instructies in om het bestand te lezen met behulp van een systeemeigen functie en het vervolgens te analyseren met behulp van een AI-model.
Geheugen
Semantische kernel vectorarchieven bieden abstracties over het insluiten van modellen, vectordatabases en andere gegevens om contextbeheer voor AI-toepassingen te vereenvoudigen. Vectorarchieven zijn agnostisch voor de onderliggende LLM- of Vector-database, met een uniforme ontwikkelaarservaring. U kunt geheugenfuncties configureren voor het opslaan van gegevens in verschillende bronnen of services, waaronder Azure AI Search en Azure Cache voor Redis.
Bekijk het volgende codefragment:
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"
);
}
Met de voorgaande code wordt een set feiten in het geheugen geladen, zodat de gegevens beschikbaar zijn om te gebruiken bij interactie met AI-modellen en het organiseren van taken.