Sdílet prostřednictvím


Přehled sémantických jader pro .NET

V tomto článku prozkoumáte základní koncepty a možnosti sémantického jádra . Sémantické jádro je výkonná a doporučená volba pro práci s AI v aplikacích .NET. V dalších částech se dozvíte:

  • Přidání sémantického jádra do projektu
  • Základní koncepty sémantických jader

Tento článek slouží jako úvodní přehled sémantického jádra konkrétně v kontextu .NET. Podrobnější informace a školení o sémantickém jádru najdete v následujících zdrojích informací:

Přidání sémantického jádra do projektu .NET

Sada SDK sémantického jádra je k dispozici jako balíček NuGet pro .NET a integruje se se standardními konfiguracemi aplikací.

Microsoft.SemanticKernel Nainstalujte balíček pomocí následujícího příkazu:

dotnet add package Microsoft.SemanticKernel

Poznámka:

I když Microsoft.SemanticKernel poskytuje základní funkce sémantického jádra, další funkce vyžadují, abyste nainstalovali další balíčky. Balíček například Microsoft.SemanticKernel.Plugins.Memory poskytuje přístup k funkcím souvisejícím s pamětí. Další informace najdete v dokumentaci k sémantickému jádru.

Vytvořte a nakonfigurujte Kernel instanci pomocí KernelBuilder třídy pro přístup k sémantickému jádru a práci s jeho pomocí. Obsahuje Kernel služby, data a připojení k orchestraci integrací mezi vaším kódem a modely AI.

Konfigurace konzolové Kernel aplikace .NET:

var builder = Kernel.CreateBuilder();

// Add builder configuration and services

var kernel = builder.Build();

Konfigurace jádra v aplikaci ASP.NET Core:

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

// Add builder configuration and services

var app = builder.Build();

Principy sémantického jádra

Sémantické jádro je opensourcová sada SDK, která integruje a orchestruje modely a služby AI, jako jsou OpenAI, Azure OpenAI a Hugging Face s konvenčními programovacími jazyky, jako jsou C#, Python a Java.

Sémantická sada SDK jádra přináší podnikovým vývojářům následující výhody:

  • Zjednodušuje integraci funkcí AI do stávajících aplikací, aby bylo možné využívat soudržné řešení pro podnikové produkty.
  • Minimalizuje křivku učení práce s různými modely nebo službami umělé inteligence tím, že poskytuje abstrakce, které snižují složitost.
  • Zlepšuje spolehlivost snížením nepředvídatelného chování výzev a odpovědí z modelů AI. Můžete vyladit výzvy a plánovat úkoly, abyste vytvořili řízené a předvídatelné uživatelské prostředí.

Sémantické jádro je postavené na několika základních konceptech:

  • Připojení: Rozhraní s externími službami AI a zdroji dat.
  • Moduly plug-in: Zapouzdření funkcí, které můžou aplikace používat.
  • Planner: Orchestruje plány spouštění a strategie na základě chování uživatelů.
  • Paměť: Abstrahuje a zjednodušuje správu kontextu pro aplikace AI.

Tyto stavební bloky jsou podrobněji prozkoumány v následujících částech.

Propojení

Sada sémantických jader SDK obsahuje sadu konektorů, které vývojářům umožňují integrovat LLM a další služby do svých stávajících aplikací. Tyto konektory slouží jako most mezi kódem aplikace a modely nebo službami AI. Sémantické jádro řeší řadu běžných problémů a problémů s připojením, abyste se mohli soustředit na vytváření vlastních pracovních postupů a funkcí.

Následující fragment kódu vytvoří Kernel a přidá připojení k modelu 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();

Moduly plug-in

Sémantické moduly plug-in jádra zapouzdřují standardní jazykové funkce pro aplikace a modely AI, které se mají využívat. Můžete vytvořit vlastní moduly plug-in nebo se spolehnout na moduly plug-in poskytované sadou SDK. Tyto moduly plug-in zjednodušují úlohy, ve kterých jsou modely AI výhodné a efektivně je kombinují s tradičními metodami jazyka C#. Funkce modulu plug-in jsou obecně rozdělené do dvou typů: sémantické funkce a nativní funkce.

Sémantické funkce

Sémantické funkce jsou v podstatě výzvy AI definované v kódu, které sémantické jádro může přizpůsobit a volat podle potřeby. Tyto výzvy můžete naformátovat tak, aby používaly proměnné, vlastní formátování výzvy a dokončování a další.

Následující fragment kódu definuje a zaregistruje sémantickou funkci:

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

Nativní funkce

Nativní funkce jsou metody jazyka C#, které sémantické jádro může volat přímo za účelem manipulace s daty nebo načtení dat. Provádějí operace, které jsou vhodnější pro tradiční instrukce kódu místo výzev LLM.

Následující fragment kódu definuje a zaregistruje nativní funkci:

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

Planner je základní součástí sémantického jádra, které poskytuje orchestraci AI pro správu bezproblémové integrace mezi modely AI a moduly plug-in. Tato vrstva navrhuje strategie provádění od uživatelských požadavků a dynamicky orchestruje moduly plug-in k provádění složitých úloh s plánováním s asistencí umělé inteligence.

Vezměte v úvahu následující pseudokódový fragment kódu:

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

Předchozí kód vytvoří spustitelný, sekvenční plán pro čtení obsahu z místního souboru a sumarizaci obsahu. Plán nastaví pokyny ke čtení souboru pomocí nativní funkce a pak ho analyzuje pomocí modelu AI.

Memory (Paměť)

Sémantické úložiště vektorů jádra poskytují abstrakce nad vloženým modelem, vektorovými databázemi a dalšími daty, aby se zjednodušila správa kontextu pro aplikace AI. Úložiště vektorů jsou nezávislá na podkladové databázi LLM nebo Vector, která nabízí jednotné vývojářské prostředí. Funkce paměti můžete nakonfigurovat tak, aby ukládaly data do různých zdrojů nebo služeb, včetně Azure AI Search a Azure Cache for Redis.

Vezměte v úvahu následující fragment kódu:

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

Předchozí kód načte sadu faktů do paměti, aby byla data k dispozici při interakci s modely AI a orchestraci úloh.