Panduan Konfigurasi Bot
Panduan ini menjelaskan 5 sistem pengaturan yang mengontrol perilaku chatbot HUPH. Dengan memahami sistem ini, kamu bisa mengatur akurasi, kepribadian, dan keputusan bot tanpa perlu coding.
Gambaran Umum: Bagaimana Bot Memproses Pesan
Setiap kali user WhatsApp mengirim pesan, bot memprosesnya melalui beberapa tahap. Setiap tahap dikontrol oleh sistem pengaturan yang berbeda.
User kirim pesan WhatsApp
│
▼
┌─────────────────────────────────┐
│ 1. KLASIFIKASI INTENT │ ← diatur di halaman Intents
│ "Apa yang user inginkan?" │
│ Hasil: mau_daftar, │
│ tanya_beasiswa, umum... │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
│ 2. CEK ATURAN ESKALASI │ ← diatur di halaman Escalation Rules
│ "Perlu dialihkan ke manusia?" │
│ Cek: sentimen, skor lead, │
│ jumlah pesan │
│ Hasil: eskalasi / notifikasi │
│ / lanjut dengan bot │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
│ 3. PENCOCOKAN FAQ │ ← diatur di halaman FAQ
│ "Ada jawaban siap pakai?" │
│ Pencarian kemiripan semantik │
│ Cocok → jawab instan (~0.4s) │
│ Tidak cocok → lanjut ke AI │
└──────────────┬──────────────────┘
│ (tidak ada FAQ cocok)
▼
┌─────────────────────────────────┐
│ 4. AI BUAT JAWABAN │
│ Cari di Knowledge Base │ ← Dokumen + Web Sources
│ + AI generate jawaban │
│ Dipandu oleh: │
│ - Guidance Rules │ ← diatur di halaman Guidance Rules
│ - Persona chatbot │ ← diatur di halaman Chatbot Config
│ (~5 detik) │
└──────────────┬──────────────────┘
│
▼
Bot kirim jawaban
Intinya:
- Langkah 1-2 menentukan BAGAIMANA pesan diproses (routing)
- Langkah 3 mencoba jawab CEPAT dari FAQ
- Langkah 4 jawab menggunakan AI jika FAQ tidak cocok
1. Chatbot Config — Kepribadian & Kriteria Scoring
Halaman: Bot Config → Chatbot
Sistem ini mengatur siapa bot ini dan bagaimana menilai lead.
Pengaturan Persona
Persona menentukan identitas bot — ini mempengaruhi gaya bahasa di SEMUA jawaban.
| Pengaturan | Fungsi | Contoh |
|---|---|---|
| Nama bot | Cara bot memperkenalkan diri | "HalloUPH" |
| Tone | Gaya bahasa formal atau santai | "Santai, ramah, pakai 'kamu'" |
| Bahasa | Bahasa default jawaban | "Bahasa Indonesia" |
Kriteria Lead Scoring
Lead scoring menentukan seberapa "panas" seorang calon mahasiswa. Ini mempengaruhi prioritas follow-up dan notifikasi ke counselor.
| Label | Skor | Ciri-ciri | Yang Terjadi |
|---|---|---|---|
| HOT | 80-100 | Siap daftar, sudah tanya detail program, sudah kasih data pribadi | Counselor langsung dihubungi, follow-up otomatis dilewati |
| WARM | 40-79 | Tertarik tapi masih eksplorasi, tanya beberapa program, bandingkan dengan universitas lain | Dapat 3x follow-up, konten berisi nilai tambah |
| COLD | 0-39 | Hanya browsing, pertanyaan umum, belum sebut program tertentu | Dapat max 2x follow-up, lalu berhenti |
Teks kriteria ini bisa diedit di halaman Chatbot Config. AI membaca teks ini saat menilai setiap lead di pesan ke-3, 5, 7, lalu setiap 5 pesan.
Keyword Sentimen
Kata-kata yang membantu bot mendeteksi emosi user:
| Sentimen | Contoh Kata |
|---|---|
| Kecewa/frustasi | "kecewa", "lambat", "susah", "ribet", "ga jelas" |
| Positif | "terima kasih", "bagus", "mantap", "helpful" |
| Mendesak | "segera", "deadline", "buru-buru", "kapan terakhir" |
Keyword ini digunakan oleh Escalation Rules. Misalnya, aturan bisa berisi: "Jika sentimen = frustasi DAN skor lead > 80, eskalasi ke counselor."
2. Intents — Memahami Maksud Pesan User
Halaman: Bot Config → Intents
Sistem ini mengatur bagaimana bot mengklasifikasi apa yang user inginkan.
Cara Kerja Klasifikasi
Setiap pesan masuk melewati 4 tingkat klasifikasi:
| Tingkat | Cara | Kecepatan | Kapan Dipakai |
|---|---|---|---|
| Tingkat 1: Aturan | Pencocokan kata kunci | Instan | Kata kunci persis (misal "mau daftar") |
| Tingkat 2: Cache | Lookup klasifikasi sebelumnya | Instan | Pesan mirip pernah diklasifikasi |
| Tingkat 3: AI | AI tentukan klasifikasi | ~0.5 detik | Tidak ada aturan atau cache cocok |
| Tingkat 4: Default | Masuk ke unknown |
Instan | AI tidak bisa tentukan → ke FAQ/KB |
Daftar Intent
| Intent | Artinya | Yang Bot Lakukan |
|---|---|---|
want_register |
User mau mendaftar | Tampilkan langkah pendaftaran, minta nama/email/telp |
want_visit_campus |
User mau kunjungi kampus | Tampilkan jadwal Open Day, minta data kontak |
ask_scholarship |
Tanya tentang beasiswa | Arahkan ke info beasiswa dari Knowledge Base |
ask_program_specific |
Tanya tentang program tertentu | Arahkan ke info program dari Knowledge Base |
share_personal_info |
User memberikan nama/email/telp | Ekstrak dan simpan ke data lead |
request_human |
Mau bicara dengan orang | Langsung eskalasi ke counselor |
complaint |
Menyampaikan keluhan | Eskalasi dengan prioritas tinggi |
payment_confirmation |
Konfirmasi sudah bayar | Eskalasi ke admin keuangan |
document_upload_help |
Butuh bantuan upload dokumen | Eskalasi ke admin |
transfer_student |
Mahasiswa pindahan | Eskalasi ke spesialis |
unknown |
Pertanyaan umum | Ke FAQ → Knowledge Base → AI jawab |
Apa yang Bisa Dilakukan di Halaman Intents
- Toggle on/off — nonaktifkan intent yang sering salah klasifikasi
- Edit contoh — tambah atau hapus contoh kalimat untuk melatih classifier
- AI Suggest — AI buatkan variasi contoh kalimat otomatis
- Export/Import CSV — edit massal lewat spreadsheet
- Lihat log klasifikasi — lihat pesan terbaru dan bagaimana diklasifikasi
Tips
- Kalau user sering salah klasifikasi, tambah contoh kalimat untuk intent yang benar
- Gunakan AI Suggest untuk generate variasi yang mungkin tidak terpikirkan
- Log klasifikasi menunjukkan skor confidence — skor rendah berarti bot menebak
unknownitu BUKAN masalah — artinya pesan masuk ke pipeline AI lengkap untuk jawaban yang lebih baik
3. FAQ — Jawaban Cepat
Halaman: Knowledge → FAQ
Sistem ini mengatur pasangan pertanyaan-jawaban yang sudah disiapkan untuk respon instan.
Cara Kerja FAQ
FAQ adalah jalur cepat. Kalau user bertanya sesuatu yang mirip dengan FAQ, bot langsung jawab tanpa perlu proses AI yang lebih lama.
User: "Berapa biaya kuliah Informatika?"
│
▼
Sistem cek FAQ (kemiripan semantik)
│
├─ Skor > 0.7 → FAQ cocok → jawab instan (~0.4 detik)
│
└─ Skor < 0.7 → tidak cocok → proses AI lengkap (~5 detik)
Statistik Saat Ini
- 101 FAQ item aktif
- Threshold: 0.7 skor kemiripan
- Kecepatan: ~0.4 detik untuk FAQ vs ~5 detik untuk AI lengkap
FAQ vs Knowledge Base
| FAQ | Knowledge Base (Dokumen + Web Sources) | |
|---|---|---|
| Kecepatan | ~0.4 detik | ~5 detik |
| Akurasi | Tepat (jawaban ditulis manusia) | Dibuat AI (bisa bervariasi) |
| Cakupan | Hanya pertanyaan yang cocok | Topik apapun yang ada di KB |
| Kapan pakai | Pertanyaan umum yang berulang | Pertanyaan kompleks dan bervariasi |
Apa yang Bisa Dilakukan di Halaman FAQ
- Tambah FAQ — tulis pertanyaan dan jawabannya
- Toggle on/off — nonaktifkan sementara tanpa menghapus
- Edit — ubah pertanyaan atau jawaban
- Hapus — hapus permanen
- Perubahan otomatis sync ke sistem dalam 5 detik
Tips
- Mulai dari 20 pertanyaan paling sering ditanyakan — ini memberikan dampak terbesar
- Tulis pertanyaan sesuai cara user bertanya, bukan formal (misal "Berapa biaya kuliah?" bukan "Berapakah biaya perkuliahan?")
- Buat jawaban singkat — pesan WhatsApp harus pendek dan mudah dibaca
- Kalau FAQ tidak pernah cocok, coba ubah kata-kata pertanyaannya sesuai cara user sebenarnya bertanya
FAQ Score Threshold — Advanced slider (Phase 2)
Location: Chatbot Config → Advanced → FAQ Score Threshold
This slider controls the minimum similarity score required before the FAQ fast-path fires. Default is 0.7 (battle-tested against the live 101-FAQ corpus).
- Raise (e.g. 0.8) → FAQ becomes more selective; more questions fall through to the full-AI path. Useful if the Bot Health judge widget shows rejects caused by loose FAQ matches.
- Lower (e.g. 0.6) → FAQ becomes more permissive; more questions take the fast path. Useful if full-AI volume is high but the content is already covered in FAQ.
Current state: the slider is locked until FEATURE_FAQ_THRESHOLD=true is set on the API server. We unlock it after the 1-week Phase 1 observation window (earliest 2026-05-01) proves the knob is worth tuning. Without judge data, threshold changes are guesswork.
What happens on save: the HUPH backend calls Dify's /v1/apps/annotation-reply/enable with the new threshold, which triggers an async re-index (~seconds for the 35 live annotations). User chats start using the new threshold as soon as re-index completes.
If Dify rejects: the backend does NOT persist the new value to app_config — it returns 502 so the admin sees the error and retries. That ordering prevents the split-brain where UI shows "0.8" while Dify still serves "0.7".
Rare edge — Dify accepts but local DB write fails: the current order is Dify-first, local-second. If Dify applied the new threshold but the subsequent UPSERT to app_config fails (e.g. Postgres connection drops in that exact window), Dify has the new value while app_config still shows the old one. The UI will read the stale "0.7" while the live bot actually uses "0.8". Recovery: save the slider again with the correct value (idempotent on Dify). Statistically very rare; documenting so the operator knows what happened if it does.
What the slider does NOT change: embedding_provider_name and embedding_model_name (shown read-only below the slider). Changing those requires a full re-index of every annotation — not a daily knob; handle via manual SQL + scripts/migrate-faq-threshold-config.sql only when truly needed.
4. Escalation Rules — Kapan Melibatkan Manusia
Halaman: Bot Config → Escalation Rules
Sistem ini mengatur aturan otomatis yang menentukan kapan bot harus menyerahkan percakapan ke counselor manusia.
Cara Kerja Aturan Eskalasi
Setelah setiap pesan, bot mengevaluasi SEMUA aturan eskalasi yang aktif. Setiap aturan punya kondisi (logika AND — semua harus terpenuhi) dan aksi.
Pesan masuk → Bot klasifikasi intent + deteksi sentimen + cek skor lead
│
▼
Untuk setiap aturan aktif:
Kondisi 1 cocok? DAN Kondisi 2 cocok? DAN ...
│
├─ Semua cocok → jalankan aksi (eskalasi / notifikasi / tag)
│
└─ Ada yang tidak cocok → lewati, cek aturan berikutnya
Field Kondisi
| Field | Apa yang Diukur | Contoh Nilai |
|---|---|---|
sentiment |
Emosi user | frustrated, positive, neutral, urgent |
lead_score |
Seberapa "panas" lead (0-100) | 0, 40, 80, 95 |
funnel_stage |
Posisi di proses admisi | inquiry, prospect, registered, admitted |
message_count |
Total pesan dalam percakapan | 1, 5, 10, 20 |
intent |
Apa yang user inginkan | want_register, complaint, request_human |
user_role |
Siapa yang mengirim pesan | prospective_student, parent, teacher |
Operator
| Operator | Arti | Contoh |
|---|---|---|
eq |
Sama dengan | sentiment eq "frustrated" |
ne |
Tidak sama dengan | intent ne "unknown" |
gt / gte |
Lebih besar dari / atau sama | lead_score gte 80 |
lt / lte |
Lebih kecil dari / atau sama | message_count lt 3 |
in |
Salah satu dari (daftar) | funnel_stage in ["inquiry", "prospect"] |
contains |
Teks mengandung | intent contains "register" |
Jenis Aksi
| Aksi | Yang Terjadi | Bot Lanjut? |
|---|---|---|
| Escalate | Status percakapan → "escalated", counselor diberitahu, bot berhenti merespons | Tidak — counselor mengambil alih |
| Notify | Notifikasi dikirim ke counselor/admin, tapi bot tetap merespons | Ya — bot tetap jalan |
| Tag | Label ditambahkan ke metadata percakapan untuk tracking | Ya — tidak ada perubahan terlihat |
Contoh Aturan
| Nama Aturan | Kondisi | Aksi | Mengapa |
|---|---|---|---|
| Lead panas kecewa | sentimen = frustrated DAN skor_lead >= 80 | Eskalasi (prioritas: tinggi) | Lead bernilai tinggi sedang kecewa — perlu sentuhan manusia SEKARANG |
| Alert lead panas | skor_lead >= 80 | Notifikasi admin | Beri tahu counselor tentang lead panas, tapi bot bisa terus bicara |
| User terjebak | jumlah_pesan > 15 | Eskalasi (prioritas: sedang) | User sudah chat terlalu lama — kemungkinan bingung |
| Orang tua bertanya | user_role = parent | Tag "parent" | Lacak percakapan orang tua secara terpisah |
Eskalasi Otomatis vs Manual
| Berdasarkan Intent | Berdasarkan Aturan | |
|---|---|---|
| Pemicu | User bilang "mau bicara orang" | Sistem mendeteksi kombinasi sinyal |
| Siapa yang memutuskan | User meminta langsung | Bot memutuskan otomatis |
| Contoh | Intent request_human → eskalasi |
sentimen=frustrated + skor>80 → eskalasi |
| Kapan berguna | User tahu mereka butuh bantuan | User mungkin tidak tahu, tapi sinyal menunjukkan butuh bantuan |
Keduanya bisa memicu eskalasi. Intent-based bersifat eksplisit (user minta), rules-based bersifat implisit (sistem deteksi).
5. Guidance Rules — Pedoman Pengetahuan Bot
Halaman: Bot Config → Guidance Rules
Sistem ini mengatur pengetahuan faktual dan aturan perilaku yang diinjeksi ke prompt sistem AI.
Cara Kerja Guidance Rules
Berbeda dengan FAQ (yang merupakan jawaban UNTUK user), guidance rules adalah instruksi UNTUK bot. Rules ini diinjeksi ke system prompt, sehingga AI membacanya sebelum membuat setiap jawaban.
User bertanya
│
▼
AI menerima:
System prompt:
"Kamu adalah HalloUPH..." ← dari Chatbot Config
"Aturan yang harus diikuti:
- Biaya formulir: 50rb/750rb/400rb ← dari Guidance Rules
- JANGAN sebut Rp 500rb ← dari Guidance Rules
- Jawab semua pertanyaan satu-satu" ← dari Guidance Rules
│
▼
AI buat jawaban mengikuti aturan ini
Aturan yang Saat Ini Aktif
| Kategori | Aturan | Mengapa Ada |
|---|---|---|
| admission | "8 tahap pendaftaran: Prospect → Inquiry → Registered → Form Purchased → Submitted → Admitted → Committed → Matriculated" | Bot harus tahu urutan tahap yang benar |
| admission | "Biaya formulir: Keperawatan Rp 50.000, Kedokteran Rp 750.000, program lain Rp 400.000 — JANGAN PERNAH sebut Rp 500.000" | Mencegah bot menyebut harga yang SALAH. Website lama pernah menampilkan Rp 500.000. |
| admission | "Tes masuk hanya wajib untuk: Kedokteran, Keperawatan, Homeschool, Paket C. Lainnya: Direct Admission (tanpa tes)" | Kesalahpahaman umum — banyak user mengira semua program harus tes masuk |
| general | "Jika user kirim beberapa pertanyaan dalam satu pesan, JAWAB SEMUA pertanyaan satu per satu" | Tanpa aturan ini, AI cenderung hanya menjawab pertanyaan pertama |
| payment | "Metode pembayaran: BCA e-Payment kode 720015, BCA VA kode 75109, Mandiri ATM kode 10028" | Kode pembayaran harus tepat — bot tidak boleh menebak |
| payment | "Jenis beasiswa: Prestasi Akademik (3 semester SPP), Bantuan Keuangan (D3/S1 Farmasi), Olahraga" | Info beasiswa yang akurat |
Kapan Harus Menambah Guidance Rule
Tambahkan rule ketika:
- Bot memberikan informasi salah berulang kali — misal harga salah, deadline salah, prosedur salah
- Ada kesalahpahaman umum — misal "semua jurusan harus tes masuk" (salah)
- Kamu ingin memaksakan perilaku tertentu — misal "jawab semua pertanyaan, jangan skip"
- Data kritis yang harus tepat — misal kode pembayaran, nomor rekening bank
Panduan Memilih: FAQ atau Guidance Rule?
| Situasi | Pakai FAQ | Pakai Guidance Rule |
|---|---|---|
| User tanya "Berapa biaya formulir?" | ✅ Tulis jawaban sebagai FAQ | |
| Bot terus menyebut harga yang salah | ✅ Tambah rule: "JANGAN sebut Rp 500rb" | |
| User tanya jenis beasiswa | ✅ Daftar beasiswa di FAQ | |
| Bot hanya jawab 1 dari 3 pertanyaan | ✅ Tambah rule: "Jawab SEMUA pertanyaan" | |
| Pertanyaan umum tentang lokasi kampus | ✅ FAQ dengan alamat | |
| Bot harus selalu arahkan ke one.uph.edu | ✅ Tambah rule: "Selalu arahkan ke one.uph.edu" |
Aturan sederhana:
- FAQ = "Apa yang dijawab" — jawaban spesifik untuk user
- Guidance Rule = "Bagaimana menjawab" — aturan perilaku untuk bot, atau "Apa yang TIDAK boleh dikatakan" — guardrail
Sistem Prioritas
Setiap rule punya nomor prioritas (lebih tinggi = lebih penting). Saat ini:
- 95: Aturan perilaku umum (mempengaruhi semua jawaban)
- 90: Koreksi fakta kritis (harga salah, dll.)
- 85: Pengetahuan proses/prosedur
- 80: Data referensi (kode pembayaran, jenis beasiswa)
Tabel Ringkasan
| Sistem | Halaman | Mengontrol | User Lihat? | Seberapa Sering Diubah |
|---|---|---|---|---|
| Chatbot Config | Bot Config → Chatbot | Identitas bot, kriteria scoring, keyword sentimen | Tidak langsung (mempengaruhi gaya bahasa) | Jarang (diatur sekali) |
| Intents | Bot Config → Intents | Aturan klasifikasi pesan dan contoh kalimat | Tidak (routing internal) | Bulanan (tuning akurasi) |
| FAQ | Knowledge → FAQ | Pasangan pertanyaan-jawaban cepat | Ya (dikirim ke user) | Mingguan (tambah FAQ baru) |
| Escalation Rules | Bot Config → Escalation Rules | Kapan bot menyerahkan ke manusia | Tidak (logika internal) | Bulanan (tuning threshold) |
| Guidance Rules | Bot Config → Guidance Rules | Pengetahuan faktual dan guardrail perilaku AI | Tidak langsung (mempengaruhi akurasi) | Sesuai kebutuhan (saat bot buat kesalahan) |
Alur Kerja yang Direkomendasikan untuk Tuning Bot
Tuning bot adalah proses iteratif. Bot semakin baik seiring waktu saat kamu menambah FAQ, guidance rules, dan contoh intent.
Langkah-langkah:
- Pantau percakapan — lihat inbox percakapan, cari jawaban yang salah
- Cek klasifikasi intent — kalau intent yang terdeteksi salah, tambah contoh kalimat di halaman Intents
- Tambah FAQ — kalau user terus menanyakan pertanyaan yang sama, buat FAQ untuk jawaban instan
- Tambah Guidance Rule — kalau bot memberikan fakta yang salah, tambah aturan guardrail
- Sesuaikan Escalation Rules — kalau terlalu banyak/sedikit eskalasi, ubah threshold skor
- Review kriteria scoring — kalau lead dinilai salah, perbaiki deskripsi HOT/WARM/COLD di Chatbot Config
Contoh Skenario:
"Bot menjawab biaya formulir Rp 500.000 padahal seharusnya Rp 400.000"
- Cek FAQ → ada FAQ dengan harga benar? Kalau belum, tambahkan
- Cek Guidance Rules → tambahkan: "JANGAN sebut Rp 500.000, harga yang benar adalah Rp 400.000"
- Cek Knowledge Base → apakah ada dokumen lama dengan harga salah? Hapus atau update
"User yang sangat tertarik tidak mendapat perhatian counselor"
- Cek scoring criteria → apakah definisi HOT sudah tepat?
- Cek Escalation Rules → tambahkan rule: "Jika skor >= 80, kirim notifikasi ke counselor"
- Cek log → apakah skor lead memang rendah padahal seharusnya tinggi?
"Bot hanya menjawab 1 dari 3 pertanyaan yang dikirim bersamaan"
- Cek Guidance Rules → tambahkan: "Jika user kirim beberapa pertanyaan, JAWAB SEMUA satu per satu"
- Tidak perlu ubah FAQ atau Intent — ini masalah perilaku AI
2026-04 additions: Bilingual + Quality Gate
Two additional capabilities active in the live chatflow (v3-observe)
documented here so admins understand behavior they may observe. Main
control lives in Dify chatflow YAML, not in admin pages like the 5
systems above.
6. Bilingual ID + EN (Phase A.6)
Chatflow has dual-LLM per-path: each bot path (FAQ, Registration,
Multi-Q, Complaint, Off-topic) has two LLM nodes — one with native
Bahasa Indonesia prompt, one native English. A language router picks
one based on user_language forwarded from the API.
When BILINGUAL_ENABLED=false (default): 100% traffic routes to
Bahasa LLM → behavior identical to pre-April 2026. When
BILINGUAL_ENABLED=percent:N: N% of conversations get language
detection + routing.
What admin can do:
- Fill question_en + answer_en on FAQ page to make
FAQs bilingual
- Request developer flip BILINGUAL_ENABLED when UPH is ready
(see docs/ops/bilingual/rollout-runbook.md)
Editing ID/EN LLM prompts requires developer (YAML chatflow).
7. Quality Gate Observe Mode (Phase A.5)
Every bot answer is judged by an LLM (Claude Haiku) on whether facts in the answer are grounded in retrieved context. Currently observe-only — judge logs decisions to Langfuse but doesn't block.
Judge decisions: - pass — answer grounded in KB - reject — claims appear ungrounded (doesn't block for now)
What admin can do:
- Monitor reject patterns in Langfuse (port 3300) → identify:
- Questions bot invents answers for → add KB/FAQ
- Topics where bot over-extrapolates → add guidance rule
- Request developer flip to block mode when UPH is ready
(see docs/ops/phase-a5-observe-2026-04-23.md)
For quantitative measurement of bot answer quality, use Answer evaluation with golden questions.
Monitoring Judge Decisions (Analytics → Bot Health)
The Analytics V2 → Bot Health tab now shows a Quality Gate — Judge Decisions panel at the top. This panel surfaces the performance of the Claude Haiku judge that evaluates every bot answer in the Dify chatflow.
What it shows
- Pass rate — percentage of bot answers rated "pass" by the judge (green = good, rose = needs review)
- Rejects by path — reject count per answer type: FAQ, Registration, Multi-Q, Complaint, Off-Topic
- Judged total — how many bot answers have been evaluated in the selected time window
- Recent rejects (table) — last 20 rejects with time, path, user question excerpt, and the judge's reason for rejecting
How to read it
- Pass rate > 90% — bot is consistent, no action needed. Move on to other metrics (intent confidence, default rate).
- Pass rate 70-90% — review recent rejects, look for patterns:
- Specific topics always reject → update FAQ or KB for that topic
- Specific programs being hallucinated → add a guidance rule or fix KB sourcing
- Specific language (ID vs EN) struggling → review bilingual KB coverage
- Pass rate < 70% — escalate to the engineering team. Likely causes:
- KB outdated — new info (fees, schedules) not yet updated
- Model drift — Claude Haiku behaving differently than before
- Judge prompt too strict — needs corpus recalibration
Time range
The panel follows the range selector at the top of the tab (Today / 7d / 30d): - Today = last 24 hours - 7d = 168 hours (1 week) - 30d = 720 hours (1 month)
Important
Quality Gate currently runs in observe mode — the router always forwards the answer to the user even if the judge rejects. Block mode (auto-escalate on reject) will be enabled after: 1. Enough data accumulated (≥50 conversations/month) 2. Corpus audit complete (verify judge labels are accurate) 3. Admin UI for per-conversation decision override is available 4. Sign-off from the UPH stakeholder team
In observe mode, reject data is a signal for KB/FAQ improvement, not automatic escalation.