Skip to content

Asisten

Ikhtisar

Layanan Asisten menggerakkan chatbot cerdas yang menangani pertanyaan pengunjung di seluruh platform Sutomo. Layanan ini memproses pertanyaan bahasa alami dalam berbagai bahasa, mencocokkannya dengan intensi yang diketahui, dan mengembalikan jawaban yang relevan.

Sistem menggunakan pipeline pencocokan hybrid: klasifikasi ML (Rubix ML) → pencocokan database eksak → skoring kemiripan fuzzy. Ini memastikan kecepatan dan akurasi sambil terus belajar dari interaksi pengguna nyata.

Mengapa Ini Ada

  • Menyediakan layanan swadaya instan untuk pertanyaan umum pengunjung (jam sekolah, pendaftaran, biaya, dll.)
  • Mendukung pertanyaan multi-bahasa (Indonesia, Inggris, dan lainnya melalui Google Translate)
  • Terus meningkat melalui pengumpulan data pelatihan otomatis
  • Mengurangi beban kerja admin dengan menangani pertanyaan berulang

Arsitektur

Method

Chatbot (Orkestrator)

MethodDeskripsi
handleUserMessage(dialog, message)Titik masuk utama — menerjemahkan, menormalisasi, mencocokkan intensi, mengembalikan balasan
getOrCreateDialog(fingerprint, user)Mendapatkan atau membuat sesi dialog
ensureGreeting(dialog, greeting)Menyisipkan pesan sapaan jika dialog kosong
resetDialog(dialog)Menghapus semua pesan dalam dialog
getDefaultLanguage()Membaca bahasa bawaan asisten dari pengaturan
isLlmEnabled()Memeriksa apakah fitur LLM diaktifkan

DialogManager

MethodDeskripsi
getOrCreateFingerprint()Mendapatkan atau menghasilkan sidik jari pengunjung persisten
getOrCreateDialog(fingerprint, user)Menemukan dialog yang ada atau membuat yang baru
getMessages(dialog)Mendapatkan semua pesan dalam format chat
ensureGreeting(dialog, greeting)Menambahkan sapaan jika interaksi pertama
resetDialog(dialog)Menghapus semua pesan dan mengatur ulang status

Normalizer

MethodDeskripsi
normalizeQuestion(question)Statis — huruf kecil, hapus tanda baca, gabung spasi
tokenize(text, language)Memisahkan, stemming, menghapus stopword, menormalisasi sinonim
stemToken(token, language)Penghapusan imbuhan Bahasa Indonesia
isStopword(token, language)Memeriksa terhadap daftar stopword ID/EN
normalizeSynonym(token, language)Memetakan sinonim ke bentuk kanonikal

MlClassifier (Rubix ML)

MethodDeskripsi
train()Melatih Softmax Classifier pada pertanyaan + log pelatihan terkonfirmasi
predict(normalizedQuestion)Memprediksi intensi dengan skor keyakinan
isTrained()Memeriksa apakah file model ada
getTrainingSampleCount()Menghitung jumlah sampel pelatihan yang tersedia

SimilarityScorer

MethodDeskripsi
scoreSimilarity(a, b, language)Skor komposit menggabungkan Jaccard, Overlap, Levenshtein, dan Trigram Cosine
jaccardSimilarity(a, b)Irisan himpunan token dibagi gabungan
overlapSimilarity(a, b)Dua kali irisan dibagi ukuran total himpunan
levenshteinSimilarity(a, b)Jarak edit tingkat karakter
trigramCosineSimilarity(a, b)Kemiripan cosine N-gram (3 karakter)

Translator

MethodDeskripsi
translateIntoDefaultLanguage(message, defaultLang)Mendeteksi bahasa sumber dan menerjemahkan ke bahasa bawaan
translateFromDefaultLanguage(text, defaultLang, targetLang)Menerjemahkan balasan kembali ke bahasa pengguna
looksEnglish(text)Pemeriksaan heuristik apakah teks berbahasa Inggris
guessSourceLanguageFromScript(text)Mendeteksi aksara CJK, Arab, Sirilik
simpleDictionaryTranslateEnToId(text)Terjemahan EN→ID berbasis kamus cadangan

Pipeline Pencocokan

Cara Menggunakan

php
use App\Services\Assistant\Chatbot;

$fingerprint = $chatbot->getOrCreateFingerprint();
$dialog = $chatbot->getOrCreateDialog($fingerprint, $request->user());
$chatbot->ensureGreeting($dialog, 'Hello!');
[$reply, $intentCode, $matchInfo] = $chatbot->handleUserMessage($dialog, $request->input('message'));

Pelatihan

php
$classifier = app(MlClassifier::class);
$classifier->train();

Berkas Penting

app/Services/Assistant/Chatbot.php
app/Services/Assistant/DialogManager.php
app/Services/Assistant/Normalizer.php
app/Services/Assistant/MlClassifier.php
app/Services/Assistant/SimilarityScorer.php
app/Services/Assistant/Translator.php
app/Models/Assistant/BotDialog/BotDialog.php
app/Models/Assistant/BotDialogMessage/BotDialogMessage.php
app/Models/Assistant/ChatbotIntent/ChatbotIntent.php
app/Models/Assistant/ChatbotQuestion/ChatbotQuestion.php
app/Models/Assistant/ChatbotAnswer/ChatbotAnswer.php
app/Models/Assistant/TrainingLog/TrainingLog.php