Cara Menggunakan Semantic Kernel: Panduan Praktis dengan Pola, Prompt, dan Plugin
Pernah mencoba menghubungkan LLM ke aplikasi Anda dan berakhir dengan kekusutan prompt, fungsi pembantu, dan status yang rapuh? Semantic Kernel (SK) hadir untuk memperbaiki masalah ini. Ini adalah kerangka kerja orkestrasi sumber terbuka yang ringan dari Microsoft untuk membangun aplikasi berbasis AI yang memadukan bahasa alami, alat, dan memori—tanpa mengubah basis kode Anda menjadi 'prompt spaghetti bowl'.
Dalam panduan ini, kita akan melakukan tur praktis dan berorientasi solusi tentang cara menggunakan Semantic Kernel dari nol hingga pola produksi. Anda akan mempelajari cara menyusun prompt, memasang alat, menambahkan memori, memanggil beberapa model, dan menyebarkan agen yang bertindak secara konsisten. Kami akan menjaga contoh tetap mendasar dan menunjukkan kepada Anda apa yang penting.
Apa Itu Semantic Kernel—dan Mengapa Menggunakannya?
Semantic Kernel adalah SDK yang membantu Anda:
- Menyusun prompt dan fungsi ("skills"/plugin) ke dalam pipelines.
- Memanggil beberapa model (OpenAI, Azure OpenAI, model lokal) secara bergantian.
- Menambahkan memori untuk konteks dan ingatan jangka panjang melalui embeddings.
- Merencanakan dan mengatur tugas multi-langkah dengan status yang andal.
- Mengintegrasikan alat (API, database, file I/O) dengan aman dan deterministik.
Anggap SK sebagai controller yang mengoordinasikan LLM, logika aplikasi Anda, dan data pengguna. Alih-alih membuat kode keras untuk prompt panjang dan panggilan alat ad hoc, Anda menentukan fungsi semantik dan fungsi asli yang dapat digunakan kembali dengan input/output yang jelas.
Kasus penggunaan umum:
- Copilot dukungan pelanggan dengan pembuatan augmented retrieval (RAG)
- Agen alur kerja (merangkum → mengklasifikasikan → mengambil tindakan)
- Tanya Jawab Dokumen dengan memori dan kutipan
- Pipeline pembuatan konten dan kode kreatif
Mulai Cepat: Aplikasi Semantic Kernel Pertama Anda
Di bawah ini adalah alur minimal untuk menunjukkan cara menggunakan Semantic Kernel dengan model obrolan dan prompt sederhana. Kami akan menggunakan C# untuk kejelasan; Anda dapat melakukan hal yang sama di Python atau Java.
1) Instal paket
# .NET
dotnet add package Microsoft.SemanticKernel
# Opsional: konektor dan perencana bervariasi menurut versi
2) Konfigurasikan kernel dan model
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
var builder = Kernel.CreateBuilder;
// Pilih penyedia Anda: OpenAI atau Azure OpenAI
builder.AddOpenAIChatCompletion(
modelId: "gpt-4o-mini", // atau model pilihan Anda
apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")
);
var kernel = builder.Build;
3) Definisikan fungsi semantik (prompt)
using Microsoft.SemanticKernel.SemanticFunctions;
var prompt = @"Anda adalah seorang penjelas yang ringkas.
Jelaskan konsep '{topic}' dalam 3 poin untuk seorang pemula.";
var explainFunc = kernel.CreateFunctionFromPrompt(prompt);
var result = await explainFunc.InvokeAsync(kernel, new { ["topic"] = "vector embeddings" });
Console.WriteLine(result);
Inilah intinya: sebuah kernel, sebuah model, dan sebuah prompt yang diubah menjadi fungsi yang dapat digunakan kembali dengan input.
Fungsi Semantik vs. Fungsi Native
- Fungsi semantik: Didukung oleh prompt. Anda membuatnya dari templat, meneruskan variabel, dan mendapatkan teks atau output terstruktur.
- Fungsi native: Fungsi kode reguler yang diekspos SK ke LLM untuk penggunaan alat.
Contoh fungsi native yang mengambil cuaca dari API Anda dan mengeksposnya ke model:
public class WeatherPlugin
{
[KernelFunction, Description("Get weather for a city")]
public async Task<string> GetWeatherAsync(
[Description("City name")] string city)
{
// Call your weather API here
var temp = 22; // placeholder
return $"Weather in {city}: {temp}°C and clear";
}
}
// Register plugin
var weather = new WeatherPlugin;
kernel.Plugins.AddFromObject(weather, pluginName: "weather");
Sekarang prompt Anda dapat memanggil weather.GetWeatherAsync sebagai alat, memungkinkan model untuk mendasarkan respons pada data nyata.
Pola Prompt Yang Benar-Benar Berfungsi
Saat mempelajari cara menggunakan Semantic Kernel, kemenangan tercepat datang dari pola prompt yang disiplin:
- System-first: Gunakan pesan sistem yang kuat untuk mengunci nada, persona, keamanan, dan format output.
- Slot variabel: Beri nama placeholder dengan jelas (misalnya,
{topic}, {audience}) dan validasi input.
- Kontrak output: Minta format terstruktur seperti JSON; sertakan skema dalam prompt.
- Few-shot: Berikan contoh ringkas untuk gaya dan format, bukan konten yang berlebihan.
- Guardrails: Sertakan batasan (“Jika data hilang, ajukan pertanyaan klarifikasi terlebih dahulu”).
Contoh prompt terstruktur di dalam SK:
var prompt = @"
Anda adalah mesin klasifikasi.
Tugas: Klasifikasikan `message` ke salah satu dari [Billing, Tech Support, Sales].
Kembalikan JSON yang ketat: { \"label\": string, \"confidence\": number }
message: {message}
";
var classify = kernel.CreateFunctionFromPrompt(prompt);
var output = await classify.InvokeAsync(kernel, new { ["message"] = "I can’t log into my account." });
Console.WriteLine(output); // {"label":"Tech Support","confidence":0.89}
Menambahkan Memori: Embeddings, RAG, dan Jendela Konteks
LLM mudah lupa. Memori membuatnya berguna.
- Konteks jangka pendek: Otomatis melalui riwayat percakapan.
- Memori jangka panjang: Simpan embeddings catatan, dokumen, atau peristiwa pengguna dan ambil potongan yang relevan untuk konteks.
- RAG: Sebelum memanggil fungsi pembuatan, kueri penyimpanan vektor Anda dan masukkan hasil ke dalam prompt.
Contoh: tambahkan memori teks dengan embeddings dan ambil konteks.
using Microsoft.SemanticKernel.Memory;
var memory = new MemoryBuilder
.WithMemoryStore(new VolatileMemoryStore) // tukar dengan DB vektor (Qdrant, Pinecone, Azure AI Search)
.WithTextEmbeddingGeneration(
new OpenAITextEmbeddingGeneration("text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY")))
.Build;
await memory.SaveInformationAsync(
collection: "policies", id: "refund-policy",
text: "Customers can request a refund within 30 days of purchase with proof of receipt."
);
// Later: retrieve and stuff into prompt
var results = memory.SearchAsync("refund window", collection: "policies", limit: 3, minRelevanceScore: 0.7);
await foreach (var item in results)
{
Console.WriteLine($"Relevant: {item.Metadata.Text}");
}
Kemudian masukkan kecocokan teratas ke dalam fungsi semantik Anda sebagai variabel konteks. Tip: jaga agar potongan tetap kecil (200–400 token) dan hilangkan duplikasi.
Penggunaan Alat dan Perencanaan: Alur Kerja Multi-Langkah
Semantic Kernel mendukung perencana yang dapat memecah tujuan pengguna menjadi langkah-langkah dan memilih fungsi mana yang akan dipanggil. Ini sangat cocok ketika Anda memiliki kotak peralatan fungsi native dan semantik.
Pola:
- Kumpulkan tujuan dan batasan dari pengguna.
- Rancang rencana (urutan panggilan fungsi dengan argumen).
- Jalankan langkah demi langkah, verifikasi output, dan pulihkan dari kesalahan.
Contoh pseudocode:
// 1) Definisikan plugin (semantik + native) seperti sebelumnya
// 2) Gunakan perencana (API surface mungkin bervariasi menurut versi)
var goal = "Summarize the attached policy, classify risk, and email a report";
// Assume we have plugins: files, summarize, classify, email
// Planner will assemble a plan: files.Load → summarize.Run → classify.Run → email.Send
// Execute plan sequentially, validate JSON outputs between steps
Praktik terbaik:
- Buat langkah-langkah menjadi idempotent dan dapat diuji.
- Tetapkan skema output eksplisit antar langkah.
- Gunakan percobaan ulang/backoff pada alat jaringan.
- Catat input/output untuk observabilitas (tetapi bersihkan PII).
Strategi Multi-Model: Pilih Model yang Tepat untuk Pekerjaan Itu
Menggunakan Semantic Kernel, Anda dapat mengarahkan tugas ke model yang berbeda:
- Draf cepat → model kecil dan murah
- Langkah-langkah berat penalaran → model yang lebih besar
- Embeddings → model embedding khusus
- Kode → model yang dioptimalkan untuk kode
Dalam praktiknya:
var kernel = Kernel.CreateBuilder
.AddOpenAIChatCompletion("gpt-4o-mini", apiKey)
.Build;
var fastKernel = Kernel.CreateBuilder
.AddOpenAIChatCompletion("gpt-4o-mini", apiKey) // speed-optimized
.Build;
// Arahkan prompt yang lebih sederhana ke fastKernel; tugas kompleks ke kernel
Atau, konfigurasikan beberapa layanan di kernel yang sama dan pilih per fungsi.
Dari Prototipe ke Produksi: Guardrails dan Pengujian
Saat Anda mempelajari cara menggunakan Semantic Kernel di aplikasi nyata, keandalan penting:
- Output schema-first: Gunakan skema JSON dan gerbang
TryParse.
- Determinisme saat dibutuhkan: Atur suhu rendah dan batasi output.
- Filter keamanan: Tambahkan filter konten dan prompt red-team.
- Caching: Cache hasil RAG dan generasi stabil.
- Observabilitas: Catat templat prompt, variabel, latensi, penggunaan token.
- Uji unit: Prompt uji golden dengan perbandingan snapshot.
Contoh: validasi output JSON.
record Classification(string label, double confidence);
bool TryParseClassification(string text, out Classification cls)
{
try { cls = System.Text.Json.JsonSerializer.Deserialize<Classification>(text)!; return true; }
catch { cls = default!; return false; }
}
Pola Dunia Nyata Yang Dapat Anda Gunakan Kembali
- Chatbot RAG:
retrieve(context) → answer(question, context) dengan kutipan.
- Alur kerja persetujuan: klasifikasikan → hasilkan draf → tinjauan manusia → kirim.
- Operasi konten: garis besar → draf → periksa fakta → sesuaikan nada → publikasikan.
- Agen dengan alat: calendar.lookup, docs.search, email.send; dengan perencanaan dan memori.
Tip: Enkapsulasi setiap langkah sebagai fungsi (semantik atau native) dan susun menjadi pipeline.
Contoh: Tanya Jawab Dokumen dengan Kutipan
Mari kita hubungkan pipeline Tanya Jawab sederhana yang mengutip sumber menggunakan RAG.
// 1) Masukkan dokumen ke dalam memori
await memory.SaveInformationAsync("handbook", "vacation-policy",
"Employees accrue 1.5 days of PTO per month and can carry over 5 days.");
// 2) Ambil konteks untuk pertanyaan
var top = memory.SearchAsync("carry over PTO", "handbook", limit: 3, minRelevanceScore: 0.75);
var contexts = new List<string>;
await foreach (var r in top) contexts.Add(r.Metadata.Text);
// 3) Bertanya dengan konteks dan meminta kutipan
var qaPrompt = @"
Anda menjawab строго dari konteks yang disediakan. Jika hilang, katakan Anda tidak tahu.
Sertakan kutipan inline seperti [source i] menggunakan indeks item konteks yang dimulai dari 1.
Context:
1) {{ctx1}}
2) {{ctx2}}
Question: {{q}}
";
var qa = kernel.CreateFunctionFromPrompt(qaPrompt);
var variables = new KernelArguments
{
["ctx1"] = contexts.ElementAtOrDefault(0) ?? "",
["ctx2"] = contexts.ElementAtOrDefault(1) ?? "",
["q"] = "How many PTO days can I carry over?"
};
var answer = await qa.InvokeAsync(kernel, variables);
Console.WriteLine(answer);
Kesalahan Umum (dan Cara Menghindarinya)
- Prompt raksasa tunggal: Pecah menjadi fungsi; hanya berikan konteks yang Anda butuhkan.
- Tidak ada kontrak output: Selalu definisikan skema untuk langkah-langkah yang dapat dibaca mesin.
- RAG tanpa kebersihan: Potong dengan baik, hilangkan duplikasi, dan urutkan berdasarkan relevansi dan kebaruan.
- Penyebaran alat: Jaga agar antarmuka plugin tetap kecil dan terdokumentasi.
- Tidak ada human-in-the-loop: Tambahkan persetujuan untuk tindakan berisiko tinggi.
Cara Menggunakan Semantic Kernel dengan Frontend
- Aplikasi web: Host orkestrasi SK Anda di lapisan API; streaming token ke UI.
- UI Obrolan: Pertahankan status percakapan di sisi server; pangkas dan rangkum.
- Otentikasi: Panggilan yang aman dari peniruan—jangan pernah biarkan model mencetak token. Batasi panggilan alat melalui backend Anda.
Daftar Periksa Penyebaran
- Variabel lingkungan untuk kunci dan titik akhir
- Pembatasan laju dan percobaan ulang untuk panggilan model/alat
- Kontrol sumber templat prompt
- Cadangan penyimpanan vektor dan penanganan PII
- Dasbor observabilitas (latensi, biaya, kesalahan)
- Pengujian A/B untuk prompt dan perutean
Pemecahan Masalah Gaya FAQ
- “Model berhalusinasi bahkan dengan RAG.” Perketat instruksi: "Jawab hanya dari konteks" dan sertakan contoh penolakan. Tingkatkan spesifisitas pengambilan dan kurangi suhu.
- “JSON terus rusak.” Tambahkan contoh mini JSON yang valid dan larang komentar. Validasi pasca dan parafrase ulang jika gagal.
- “Latensi tinggi.” Ambil lebih sedikit potongan yang lebih relevan; alihkan langkah-langkah sederhana ke model yang lebih kecil; sejajarkan langkah-langkah independen.
- “Biaya melonjak.” Cache, kompres konteks, dan arahkan tugas mudah ke model yang lebih murah.
Perlu Dicatat: Bangun Lebih Cepat dengan Sider.AI
Jika Anda membuat prototipe prompt, menguji alur alat, atau membandingkan respons di berbagai model, pendamping seperti Sider.ai dapat mempercepat iterasi. Anda dapat membuat draf prompt, menjalankan perbandingan A/B, dan menangkap cuplikan yang dapat digunakan kembali sebelum memindahkannya ke templat Semantic Kernel—bagus untuk mempertajam instruksi dan skema output. Langkah Selanjutnya: Ubah Ini Menjadi Agen yang Bekerja
- Mulai dengan satu tugas yang jelas (misalnya, mengklasifikasikan email dukungan).
- Definisikan fungsi semantik/native dengan input/output yang ketat.
- Tambahkan memori hanya jika itu secara terukur meningkatkan jawaban.
- Instrumenkan semuanya; uji dengan sampel dunia nyata.
- Ulangi prompt menggunakan sandbox, lalu kodifikasi di SK.
Poin-poin penting:
- Semantic Kernel membantu Anda menyusun prompt, alat, dan memori ke dalam alur kerja yang andal.
- Gunakan skema output, perencana, dan perutean multi-model untuk ketahanan dan pengendalian biaya.
- RAG ditambah guardrails mengalahkan prompt raksasa setiap saat.
Setelah Anda menguasai cara menggunakan Semantic Kernel dengan pola-pola ini, Anda akan mengirimkan fitur AI yang bukan hanya demo yang mengesankan—tetapi sistem yang dapat diandalkan.
FAQ
Q1:Untuk apa Semantic Kernel digunakan dalam aplikasi AI?
Semantic Kernel adalah SDK orkestrasi untuk membangun alur kerja AI yang menggabungkan prompt LLM, alat (fungsi native), dan memori. Ini membantu Anda menyusun tugas, menambahkan RAG, dan memanggil beberapa model dengan andal.
Q2:Bagaimana cara menggunakan Semantic Kernel untuk RAG dengan dokumen saya?
Masukkan dokumen Anda ke dalam penyimpanan vektor melalui API memori SK, lalu ambil potongan yang paling relevan per kueri dan masukkan ke dalam prompt Anda. Ini meningkatkan akurasi dan mengurangi halusinasi.
Q3:Bisakah Semantic Kernel memanggil API dan layanan eksternal?
Ya. Bungkus API sebagai fungsi native dalam plugin dan daftarkan dengan kernel sehingga model dapat menggunakannya sebagai alat. Jaga agar antarmuka tetap kecil dan tegakkan validasi input/output.
Q4:Model mana yang berfungsi dengan Semantic Kernel?
Semantic Kernel mendukung OpenAI, Azure OpenAI, dan konektor lainnya. Anda dapat mengarahkan tugas ke model yang berbeda—misalnya, model yang lebih kecil untuk draf dan model yang lebih besar untuk langkah-langkah yang membutuhkan penalaran intensif.
Q5:Bagaimana cara membuat output Semantic Kernel konsisten (misalnya, JSON)?
Gunakan prompt terstruktur yang menuntut JSON yang ketat dan sertakan contoh atau skema minimal. Atur suhu rendah, validasi output setelah panggilan, dan coba lagi atau perbaiki saat penguraian gagal.