Memahami kernel
Kernel adalah komponen pusat Kernel Semantik. Paling sederhana, kernel adalah kontainer Injeksi Dependensi yang mengelola semua layanan dan plugin yang diperlukan untuk menjalankan aplikasi AI Anda. Jika Anda menyediakan semua layanan dan plugin Anda ke kernel, mereka kemudian akan digunakan dengan mulus oleh AI sesuai kebutuhan.
Karena kernel memiliki semua layanan dan plugin yang diperlukan untuk menjalankan kode asli dan layanan AI, itu digunakan oleh hampir setiap komponen dalam Semantic Kernel SDK untuk memberi daya pada agen Anda. Ini berarti bahwa jika Anda menjalankan perintah atau kode apa pun di Kernel Semantik, kernel akan selalu tersedia untuk mengambil layanan dan plugin yang diperlukan.
Ini sangat kuat, karena itu berarti Anda sebagai pengembang memiliki satu tempat di mana Anda dapat mengonfigurasi, dan yang paling penting memantau, agen AI Anda. Ambil contoh, saat Anda memanggil perintah dari kernel. Ketika Anda melakukannya, kernel akan ...
- Pilih layanan AI terbaik untuk menjalankan perintah.
- Buat prompt menggunakan templat prompt yang disediakan.
- Kirim perintah ke layanan AI.
- Menerima dan mengurai respons.
- Dan akhirnya kembalikan respons dari LLM ke aplikasi Anda.
Sepanjang seluruh proses ini, Anda dapat membuat peristiwa dan middleware yang dipicu pada masing-masing langkah ini. Ini berarti Anda dapat melakukan tindakan seperti pengelogan, memberikan pembaruan status kepada pengguna, dan AI yang paling penting bertanggung jawab. Semua dari satu tempat.
Sebelum membangun kernel, Anda harus terlebih dahulu memahami dua jenis komponen yang ada:
Komponen | Deskripsi | |
---|---|---|
1 | Layanan | Ini terdiri dari layanan AI (misalnya, penyelesaian obrolan) dan layanan lain (misalnya, pencatatan log dan klien HTTP) yang diperlukan untuk menjalankan aplikasi Anda. Ini dimodelkan setelah pola Penyedia Layanan di .NET sehingga kami dapat mendukung penyerapan dependensi di semua bahasa. |
2 | Plugin | Ini adalah komponen yang digunakan oleh layanan AI Anda dan templat perintah untuk melakukan pekerjaan. Layanan AI, misalnya, dapat menggunakan plugin untuk mengambil data dari database atau memanggil API eksternal untuk melakukan tindakan. |
Untuk mulai membuat kernel, impor paket yang diperlukan di bagian atas file Anda:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Plugins.Core;
Selanjutnya, Anda dapat menambahkan layanan dan plugin. Di bawah ini adalah contoh bagaimana Anda dapat menambahkan penyelesaian obrolan Azure OpenAI, pencatat, dan plugin waktu.
// Create a kernel with a logger and Azure OpenAI chat completion service
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);
builder.Services.AddLogging(c => c.AddDebug().SetMinimumLevel(LogLevel.Trace));
builder.Plugins.AddFromType<TimePlugin>();
Kernel kernel = builder.Build();
Impor paket yang diperlukan:
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.core_plugins.time_plugin import TimePlugin
Selanjutnya, Anda dapat membuat kernel.
# Initialize the kernel
kernel = Kernel()
Terakhir, Anda dapat menambahkan layanan dan plugin yang diperlukan. Di bawah ini adalah contoh bagaimana Anda dapat menambahkan penyelesaian obrolan Azure OpenAI, pencatat, dan plugin waktu.
# Add the Azure OpenAI chat completion service
kernel.add_service(AzureChatCompletion(model_id, endpoint, api_key))
# Add a plugin
kernel.add_plugin(
TimePlugin(),
plugin_name="TimePlugin",
)
Kernel dapat dibangun menggunakan Kernel.builder()
. Dalam hal ini Anda dapat menambahkan layanan dan plugin AI yang diperlukan.
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, chatCompletionService)
.withPlugin(lightPlugin)
.build();
Di C#, Anda dapat menggunakan Injeksi Dependensi untuk membuat kernel. Ini dilakukan dengan membuat ServiceCollection
dan menambahkan layanan dan plugin ke dalamnya. Di bawah ini adalah contoh bagaimana Anda dapat membuat kernel menggunakan Injeksi Dependensi.
Tip
Kami menyarankan agar Anda membuat kernel sebagai layanan sementara sehingga dibuang setelah setiap penggunaan karena koleksi plugin dapat diubah. Kernel sangat ringan (karena hanya kontainer untuk layanan dan plugin), jadi membuat kernel baru untuk setiap penggunaan bukanlah masalah performa.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
// Add the OpenAI chat completion service as a singleton
builder.Services.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional; for OpenAI deployment
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
// Create singletons of your plugins
builder.Services.AddSingleton(() => new LightsPlugin());
builder.Services.AddSingleton(() => new SpeakerPlugin());
// Create the plugin collection (using the KernelPluginFactory to create plugins from objects)
builder.Services.AddSingleton<KernelPluginCollection>((serviceProvider) =>
[
KernelPluginFactory.CreateFromObject(serviceProvider.GetRequiredService<LightsPlugin>()),
KernelPluginFactory.CreateFromObject(serviceProvider.GetRequiredService<SpeakerPlugin>())
]
);
// Finally, create the Kernel service with the service provider and plugin collection
builder.Services.AddTransient((serviceProvider)=> {
KernelPluginCollection pluginCollection = serviceProvider.GetRequiredService<KernelPluginCollection>();
return new Kernel(serviceProvider, pluginCollection);
});
Tip
Untuk sampel selengkapnya tentang cara menggunakan injeksi dependensi di C#, lihat sampel konsep.
Sekarang setelah Anda memahami kernel, Anda dapat mempelajari tentang semua berbagai layanan AI yang dapat Anda tambahkan ke dalamnya.