Dela via


Semantisk kernelöversikt för .NET

I den här artikeln utforskar du semantiska kärnbegrepp och funktioner i Semantic Kernel . Semantisk kernel är ett kraftfullt och rekommenderat val för att arbeta med AI i .NET-program. I de kommande avsnitten lär du dig:

  • Så här lägger du till semantisk kernel i projektet
  • Grundläggande begrepp för semantisk kernel

Den här artikeln fungerar som en introduktionsöversikt över semantisk kernel specifikt i kontexten för .NET. Mer omfattande information och utbildning om semantisk kernel finns i följande resurser:

Lägga till semantisk kernel i ett .NET-projekt

Semantic Kernel SDK är tillgängligt som ett NuGet-paket för .NET och integreras med standardappkonfigurationer.

Microsoft.SemanticKernel Installera paketet med följande kommando:

dotnet add package Microsoft.SemanticKernel

Kommentar

Även om Microsoft.SemanticKernel ger grundläggande funktioner i semantisk kernel, kräver ytterligare funktioner att du installerar ytterligare paket. Paketet tillhandahåller till exempel Microsoft.SemanticKernel.Plugins.Memory åtkomst till minnesrelaterade funktioner. Mer information finns i dokumentationen om semantisk kernel.

Skapa och konfigurera en Kernel instans med hjälp av KernelBuilder klassen för att komma åt och arbeta med semantisk kernel. Innehåller Kernel tjänster, data och anslutningar för att samordna integreringar mellan din kod och AI-modeller.

Kernel Konfigurera i en .NET-konsolapp:

var builder = Kernel.CreateBuilder();

// Add builder configuration and services

var kernel = builder.Build();

Konfigurera kerneln i en ASP.NET Core-app:

var builder = WebApplication.CreateBuilder();
builder.Services.AddKernel();

// Add builder configuration and services

var app = builder.Build();

Förstå semantisk kernel

Semantisk kernel är en SDK med öppen källkod som integrerar och samordnar AI-modeller och tjänster som OpenAI, Azure OpenAI och Hugging Face med konventionella programmeringsspråk som C#, Python och Java.

Semantic Kernel SDK gynnar företagsutvecklare på följande sätt:

  • Effektiviserar integreringen av AI-funktioner i befintliga program för att möjliggöra en sammanhängande lösning för företagsprodukter.
  • Minimerar inlärningskurvan för att arbeta med olika AI-modeller eller tjänster genom att tillhandahålla abstraktioner som minskar komplexiteten.
  • Förbättrar tillförlitligheten genom att minska det oförutsägbara beteendet för frågor och svar från AI-modeller. Du kan finjustera frågor och planera uppgifter för att skapa en kontrollerad och förutsägbar användarupplevelse.

Semantisk kernel bygger på flera grundläggande begrepp:

  • Anslutningar: Gränssnitt med externa AI-tjänster och datakällor.
  • Plugin-program: Kapsla in funktioner som program kan använda.
  • Planner: Samordnar körningsplaner och strategier baserat på användarbeteende.
  • Minne: Abstraherar och förenklar kontexthantering för AI-appar.

Dessa byggstenar utforskas mer detaljerat i följande avsnitt.

anslutningar

Semantic Kernel SDK innehåller en uppsättning anslutningsappar som gör det möjligt för utvecklare att integrera LLM:er och andra tjänster i sina befintliga program. Dessa anslutningsappar fungerar som brygga mellan programkoden och AI-modeller eller -tjänster. Semantic Kernel hanterar många vanliga anslutningsproblem och utmaningar för dig så att du kan fokusera på att skapa egna arbetsflöden och funktioner.

Följande kodfragment skapar en Kernel och lägger till en anslutning till en Azure OpenAI-modell:

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();

Plugin-program

Semantiska kernel-plugin-program kapslar in standardspråkfunktioner för program och AI-modeller att använda. Du kan skapa egna plugin-program eller förlita dig på plugin-program som tillhandahålls av SDK:t. Dessa plugin-program effektiviserar uppgifter där AI-modeller är fördelaktiga och effektivt kombinerar dem med mer traditionella C#-metoder. Plugin-funktioner kategoriseras vanligtvis i två typer: semantiska funktioner och inbyggda funktioner.

Semantiska funktioner

Semantiska funktioner är i huvudsak AI-frågor som definieras i din kod som semantisk kernel kan anpassa och anropa efter behov. Du kan templatera dessa uppmaningar för att använda variabler, anpassad prompt och slutförandeformatering med mera.

Följande kodfragment definierar och registrerar en semantisk funktion:

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"
);

Inbyggda funktioner

Interna funktioner är C#-metoder som semantisk kernel kan anropa direkt för att manipulera eller hämta data. De utför åtgärder som passar bättre för traditionella kodinstruktioner i stället för LLM-frågor.

Följande kodfragment definierar och registrerar en intern funktion:

// 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

Planeraren är en kärnkomponent i semantisk kernel som tillhandahåller AI-orkestrering för att hantera sömlös integrering mellan AI-modeller och plugin-program. Det här lagret utformar körningsstrategier från användarbegäranden och samordnar dynamiskt plugin-program för att utföra komplexa uppgifter med AI-assisterad planering.

Överväg följande pseudokodfragment:

// 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>()}");

Föregående kod skapar en körbar, sekventiell plan för att läsa innehåll från en lokal fil och sammanfatta innehållet. Planen konfigurerar instruktioner för att läsa filen med hjälp av en intern funktion och sedan analysera den med hjälp av en AI-modell.

Minne

Semantisk kernels vektorlager ger abstraktioner över inbäddningsmodeller, vektordatabaser och andra data för att förenkla kontexthantering för AI-program. Vektorlager är agnostiska för den underliggande LLM- eller Vector-databasen, vilket ger en enhetlig utvecklarupplevelse. Du kan konfigurera minnesfunktioner för att lagra data i en mängd olika källor eller tjänster, inklusive Azure AI Search och Azure Cache for Redis.

Överväg följande kodfragment:

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"
    );
}

Föregående kod läser in en uppsättning fakta i minnet så att data är tillgängliga att använda när du interagerar med AI-modeller och orkestreringsuppgifter.