Megosztás a következőn keresztül:


Szemantikus kernel – áttekintés a .NET-hez

Ebben a cikkben megismerheti a Szemantikus Kernel alapfogalmait és képességeit. A Szemantikus Kernel hatékony és ajánlott választás a .NET-alkalmazásokban használt AI-vel való munkához. Az alábbi szakaszokban a következő ismereteket ismerheti meg:

  • Szemantikai kernel hozzáadása a projekthez
  • Szemantikus kernel alapfogalmak

Ez a cikk bevezető áttekintést nyújt a szemantikus kernelről, különösen a .NET kontextusában. A Szemantikus Kernelre vonatkozó átfogóbb információkért és képzésért tekintse meg a következő forrásokat:

Szemantikus kernel hozzáadása .NET-projekthez

A Szemantic Kernel SDK NuGet-csomagként érhető el a .NET-hez, és integrálható a standard alkalmazáskonfigurációkkal.

Telepítse a Microsoft.SemanticKernel csomagot a következő paranccsal:

dotnet add package Microsoft.SemanticKernel

Feljegyzés

Bár Microsoft.SemanticKernel a Szemantic Kernel alapvető funkcióit biztosítja, további képességekre van szükség, hogy további csomagokat telepítsen. A csomag például hozzáférést biztosít a Microsoft.SemanticKernel.Plugins.Memory memóriával kapcsolatos funkciókhoz. További információt a Szemantic Kernel dokumentációjában talál.

Hozzon létre és konfiguráljon egy példányt Kernel az osztály használatával a KernelBuilder Szemantic Kernel eléréséhez és használatához. A Kernel kód és az AI-modellek közötti integrációk vezényléséhez szükséges szolgáltatásokat, adatokat és kapcsolatokat tárolja.

Konfigurálja a Kernel .NET-konzolalkalmazást:

var builder = Kernel.CreateBuilder();

// Add builder configuration and services

var kernel = builder.Build();

Konfigurálja a kernelt egy ASP.NET Core-alkalmazásban:

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

// Add builder configuration and services

var app = builder.Build();

Szemantikus kernel ismertetése

A Szemantic Kernel egy nyílt forráskódú SDK, amely integrálja és vezényli az AI-modelleket és -szolgáltatásokat, például az OpenAI-t, az Azure OpenAI-t és a Face-t olyan hagyományos programozási nyelvekkel, mint a C#, a Python és a Java.

A Szemantic Kernel SDK a következő módokon nyújt előnyöket a vállalati fejlesztőknek:

  • Egyszerűsíti az AI-képességek integrálását a meglévő alkalmazásokba, hogy egységes megoldást biztosíthasson a nagyvállalati termékekhez.
  • Minimalizálja a különböző AI-modellekkel vagy szolgáltatásokkal végzett munka tanulási görbéit azáltal, hogy olyan absztrakciókat biztosít, amelyek csökkentik az összetettség mértékét.
  • Növeli a megbízhatóságot azáltal, hogy csökkenti az AI-modellektől érkező kérések és válaszok kiszámíthatatlan viselkedését. A parancssorok finomhangolása és a feladatok megtervezhetők egy szabályozott és kiszámítható felhasználói élmény létrehozásához.

A szemantikus kernel több alapvető fogalom köré épül:

  • Kapcsolatok: Interfész külső AI-szolgáltatásokkal és adatforrásokkal.
  • Beépülő modulok: Az alkalmazások által használható függvények beágyazása.
  • Planner: A végrehajtási tervek és stratégiák vezénylése a felhasználói viselkedés alapján.
  • Memória: Absztrakciók és leegyszerűsíti a környezetkezelést az AI-alkalmazásokhoz.

Ezeket az építőelemeket részletesebben a következő szakaszokban ismerheti meg.

Kapcsolatok

A Szemantic Kernel SDK olyan összekötőket tartalmaz, amelyek lehetővé teszik a fejlesztők számára, hogy integrálják az LLM-eket és más szolgáltatásokat a meglévő alkalmazásaikba. Ezek az összekötők hidat képeznek az alkalmazáskód és az AI-modellek vagy -szolgáltatások között. A Szemantic Kernel számos gyakori kapcsolati problémát és kihívást kezel, így saját munkafolyamatok és funkciók létrehozására összpontosíthat.

A következő kódrészlet létrehoz és Kernel hozzáad egy kapcsolatot egy Azure OpenAI-modellhez:

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

Beépülő modulok

A szemantikus kernel beépülő modulok szabványos nyelvi függvényeket foglalnak össze az alkalmazásokhoz és az AI-modellekhez. Létrehozhat saját beépülő modulokat, vagy támaszkodhat az SDK által biztosított beépülő modulokra. Ezek a beépülő modulok leegyszerűsítik azokat a feladatokat, amelyekben az AI-modellek előnyösek, és hatékonyan kombinálják őket hagyományosabb C#-módszerekkel. A beépülő modulfüggvények általában kétféle kategóriába sorolhatók: szemantikai függvények és natív függvények.

Szemantikai függvények

A szemantikai függvények lényegében a kódban definiált AI-kérések, amelyeket a Szemantic Kernel igény szerint testre szabhat és meghívhat. Ezeket a kéréseket a változók, az egyéni kérések és a befejezési formázás használatára is alkalmazhatja, és így tovább.

A következő kódrészlet definiál és regisztrál egy szemantikai függvényt:

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

Natív függvények

A natív függvények olyan C# metódusok, amelyeket a Szemantic Kernel közvetlenül hívhat meg az adatok manipulálására vagy lekérésére. LlM-kérések helyett olyan műveleteket hajtanak végre, amelyek jobban megfelelnek a hagyományos kódutasításoknak.

A következő kódrészlet definiálja és regisztrálja a natív függvényeket:

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

A planner a Szemantic Kernel alapvető összetevője, amely AI-vezénylést biztosít az AI-modellek és beépülő modulok közötti zökkenőmentes integráció kezeléséhez. Ez a réteg végrehajtási stratégiákat dolgoz ki a felhasználói kérésekből, és dinamikusan vezényeli a beépülő modulokat az AI által támogatott tervezéssel végzett összetett feladatok végrehajtásához.

Fontolja meg a következő pszeudokód-kódrészletet:

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

Az előző kód létrehoz egy végrehajtható, szekvenciális tervet, amely egy helyi fájlból olvas be tartalmat, és összegzi a tartalmat. A terv utasításokat állít be a fájl natív függvény használatával való olvasásához, majd AI-modellel való elemzéséhez.

Memory (Memória)

A Szemantic Kernel Vektortárolói absztrakciókat biztosítanak a modellek, vektoradatbázisok és egyéb adatok beágyazása során, hogy egyszerűbbé tegye az AI-alkalmazások környezetkezelését. A vektortárolók agnosztikusak a mögöttes LLM- vagy Vector-adatbázis számára, egységes fejlesztői élményt biztosítva. A memóriafunkciók számos különböző forrásban vagy szolgáltatásban tárolhatók, például az Azure AI Searchben és az Azure Cache for Redisben.

Vegye figyelembe a következő kódrészletet:

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

Az előző kód egy ténykészletet tölt be a memóriába, így az adatok felhasználhatók az AI-modellek használata és a feladatok vezénylése során.