Bagikan melalui


Gambaran umum Kernel Semantik untuk .NET

Dalam artikel ini, Anda menjelajahi konsep dan kemampuan inti Semantic Kernel . Semantic Kernel adalah pilihan yang kuat dan direkomendasikan untuk bekerja dengan AI dalam aplikasi .NET. Di bagian depan, Anda mempelajari:

  • Cara menambahkan kernel semantik ke proyek Anda
  • Konsep inti Kernel Semantik

Artikel ini berfungsi sebagai gambaran umum pengantar Semantic Kernel khususnya dalam konteks .NET. Untuk informasi dan pelatihan yang lebih komprehensif tentang Semantic Kernel, lihat sumber daya berikut:

Menambahkan Semantic Kernel ke proyek .NET

Semantic Kernel SDK tersedia sebagai paket NuGet untuk .NET dan terintegrasi dengan konfigurasi aplikasi standar.

Microsoft.SemanticKernel Instal paket menggunakan perintah berikut:

dotnet add package Microsoft.SemanticKernel

Catatan

Meskipun Microsoft.SemanticKernel menyediakan fitur inti Semantic Kernel, kemampuan tambahan mengharuskan Anda menginstal paket tambahan. Misalnya, Microsoft.SemanticKernel.Plugins.Memory paket menyediakan untuk mengakses fitur terkait memori. Untuk informasi selengkapnya, lihat dokumentasi Kernel Semantik.

Membuat dan mengonfigurasi Kernel instans menggunakan KernelBuilder kelas untuk mengakses dan bekerja dengan Semantic Kernel. Layanan Kernel penahanan, data, dan koneksi untuk mengatur integrasi antara model kode dan AI Anda.

Konfigurasikan Kernel di aplikasi konsol .NET:

var builder = Kernel.CreateBuilder();

// Add builder configuration and services

var kernel = builder.Build();

Konfigurasikan Kernel di aplikasi ASP.NET Core:

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

// Add builder configuration and services

var app = builder.Build();

Memahami Kernel Semantik

Semantic Kernel adalah SDK sumber terbuka yang mengintegrasikan dan mengatur model dan layanan AI seperti OpenAI, Azure OpenAI, dan Hugging Face dengan bahasa pemrograman konvensional seperti C#, Python, dan Java.

Semantic Kernel SDK menguntungkan pengembang perusahaan dengan cara berikut:

  • Menyederhanakan integrasi kemampuan AI ke dalam aplikasi yang ada untuk mengaktifkan solusi kohesif untuk produk perusahaan.
  • Meminimalkan kurva pembelajaran bekerja dengan model atau layanan AI yang berbeda dengan memberikan abstraksi yang mengurangi kompleksitas.
  • Meningkatkan keandalan dengan mengurangi perilaku permintaan dan respons yang tidak dapat diprediksi dari model AI. Anda dapat menyempurnakan perintah dan merencanakan tugas untuk membuat pengalaman pengguna yang terkontrol dan dapat diprediksi.

Semantic Kernel dibangun di sekitar beberapa konsep inti:

  • Koneksi: Antarmuka dengan layanan AI eksternal dan sumber data.
  • Plugin: Merangkum fungsi yang dapat digunakan aplikasi.
  • Perencana: Mengatur rencana dan strategi eksekusi berdasarkan perilaku pengguna.
  • Memori: Abstrak dan menyederhanakan manajemen konteks untuk aplikasi AI.

Blok penyusun ini dieksplorasi secara lebih rinci di bagian berikut.

Koneksi

Semantic Kernel SDK mencakup sekumpulan konektor yang memungkinkan pengembang untuk mengintegrasikan LLM dan layanan lain ke dalam aplikasi yang ada. Konektor ini berfungsi sebagai jembatan antara kode aplikasi dan model atau layanan AI. Semantic Kernel menangani banyak masalah dan tantangan koneksi umum untuk Anda sehingga Anda dapat fokus membangun alur kerja dan fitur Anda sendiri.

Cuplikan kode berikut membuat Kernel dan menambahkan koneksi ke model 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();

Plugin

Plugin Kernel semantik merangkum fungsi bahasa standar untuk aplikasi dan model AI untuk digunakan. Anda dapat membuat plugin Anda sendiri atau mengandalkan plugin yang disediakan oleh SDK. Plugin ini menyederhanakan tugas di mana model AI menguntungkan dan secara efisien menggabungkannya dengan metode C# yang lebih tradisional. Fungsi plugin umumnya dikategorikan ke dalam dua jenis: fungsi semantik dan fungsi asli.

Fungsi semantik

Fungsi semantik pada dasarnya adalah perintah AI yang ditentukan dalam kode Anda bahwa Semantic Kernel dapat menyesuaikan dan memanggil sesuai kebutuhan. Anda dapat membuat templat permintaan ini untuk menggunakan variabel, pemformatan prompt dan penyelesaian kustom, dan banyak lagi.

Cuplikan kode berikut menentukan dan mendaftarkan fungsi semantik:

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

Fungsi asli

Fungsi asli adalah metode C# yang dapat dipanggil Kernel Semantik secara langsung untuk memanipulasi atau mengambil data. Mereka melakukan operasi yang lebih cocok untuk instruksi kode tradisional alih-alih permintaan LLM.

Cuplikan kode berikut menentukan dan mendaftarkan fungsi asli:

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

Perencana adalah komponen inti dari Semantic Kernel yang menyediakan orkestrasi AI untuk mengelola integrasi yang mulus antara model AI dan plugin. Lapisan ini merancang strategi eksekusi dari permintaan pengguna dan secara dinamis mengatur Plugin untuk melakukan tugas kompleks dengan perencanaan yang dibantu AI.

Pertimbangkan cuplikan pseudo-code berikut:

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

Kode sebelumnya membuat rencana yang dapat dieksekusi dan berurutan untuk membaca konten dari file lokal dan meringkas konten. Rencana menyiapkan instruksi untuk membaca file menggunakan fungsi asli lalu menganalisisnya menggunakan model AI.

Memori

Penyimpanan Vektor Kernel Semantik menyediakan abstraksi atas model penyematan, database vektor, dan data lainnya untuk menyederhanakan manajemen konteks untuk aplikasi AI. Penyimpanan vektor bersifat agnostik untuk database LLM atau Vektor yang mendasar, menawarkan pengalaman pengembang yang seragam. Anda dapat mengonfigurasi fitur memori untuk menyimpan data di berbagai sumber atau layanan, termasuk Azure AI Search dan Azure Cache for Redis.

Perhatikan cuplikan kode berikut:

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

Kode sebelumnya memuat serangkaian fakta ke dalam memori sehingga data tersedia untuk digunakan saat berinteraksi dengan model AI dan mengatur tugas.