Lewati ke isi

FAQ Management — Fast Answers via Dify Annotation

Purpose

This page explains how to manage HUPH's FAQ (Frequently Asked Questions) — questions that come up often with curated baseline answers. FAQs respond instantly (~300 ms) without calling an LLM, so users get much faster replies for common questions. Intended for counselors and marketing staff curating chatbot content.

Prerequisites

  • Logged in as counselor/marketing/admin
  • Understand the difference between FAQ (exact-match curated) and Knowledge Base (semantic search) — explained below

FAQ vs Knowledge Base

Aspect FAQ Knowledge Base
Matching Exact / fuzzy match on question Semantic search with embeddings
Speed ~300 ms (no LLM call) ~6 seconds (full LLM pipeline)
Who edits Counselor/marketing (manual curation) Crawler + doc upload
Data source faq_local table → auto-sync to Dify Annotation Milvus vector DB (via Dify)
Best for Common repeated questions (fees, schedule, location) Specific questions that need reasoning

If the question is frequent and the answer is consistent — make it a FAQ. If the question varies and needs contextual reasoning — let the KB handle it.

Steps

1. Open FAQ Management

Click Knowledge base → FAQ in the sidebar (URL: /knowledge/faq). You will see the existing FAQ list (101 FAQ items saat ini aktif).

Text Only
 ┌──────────────────────────────────────────────┐
 │  FAQ Management                  [+ Add]     │
 │                                              │
 │  [x] How much is medical school 2026?        │
 │      IDR ... per semester + form ...         │
 │      [edit]  [toggle on/off]  [delete]       │
 │                                              │
 │  [x] Application schedule?                   │
 │      Wave 1 Oct–Dec, Wave 2 Jan–Mar ...      │
 │      [edit]  [toggle on/off]  [delete]       │
 │                                              │
 │  [ ] Merit scholarship (disabled)            │
 │      ...                                     │
 └──────────────────────────────────────────────┘

The left checkbox indicates active status — unchecked (disabled) FAQs are not used by Dify Annotation.

2. Add a new FAQ from scratch

Click + Add, fill in:

  • Question — the canonical form (e.g. "How much is medical school tuition?")
  • Alternative questions (optional) — wording variations that should match the same answer
  • Answer — full reply, simple markdown allowed

Click Save. FAQ otomatis sync ke Dify Annotation dalam 5 detik (debounced auto-sync).

Annotation Reply

FAQ menggunakan Dify Annotation Reply dengan threshold 0.7 (skor kemiripan semantik). Pertanyaan dengan skor di atas 0.7 langsung dijawab dari FAQ tanpa perlu AI. Semakin banyak FAQ yang berkualitas, semakin cepat dan akurat respon bot.

3. Promote a FAQ from a correction

When you've already given a correction in the Inbox (clicked 👎 → typed the correct answer), you can promote that correction to a permanent FAQ. From the correction panel click Promote to FAQ — the question is taken from the original user message, the answer from your correction. Review once, edit if needed, Save.

4. Toggle on/off

Sometimes a FAQ needs to be temporarily disabled (outdated fee, closed intake window). Instead of deleting, click the toggle off checkbox. The FAQ stays in the database but won't be used by the chatbot. Re-enable it any time.

5. Edit an existing FAQ

Click edit on the FAQ row. Change the question/answer, Save. Dify sync is automatic.

6. Check Dify sync

After add/edit/toggle, syncing to Dify usually takes ~2–5 seconds. Sync status is shown in the right column (green ✓ = synced, yellow ⚠ = pending, red ✗ = failed).

Example scenarios

User asks about the application form fee per program. Previously Aria answered via KB with ~6-second latency. The counselor creates a new FAQ with question "application form fee" and answer showing a price table per program. After sync, every time a user asks about the form fee → Dify Annotation answers in ~300 ms.

Toggle off an expired scholarship FAQ. The Wave 1 scholarship promo has closed. The counselor toggles off the "Wave 1 2026 scholarship" FAQ, creates a new one for Wave 2. The old entry stays in the database for reference but is no longer used.

Troubleshooting

FAQ doesn't match despite similar wording. Symptom: the user asks "what's the price of medical school" but Aria answers via the full LLM instead of the FAQ. Cause: Dify Annotation matching is fairly strict; wording variants can miss. Fix: add Alternative questions to the relevant FAQ ("tuition price", "school fee", "tuition fee" etc.). Edit → Save → retry.

FAQ doesn't sync to Dify — status ⚠ or ✗. Symptom: a new FAQ shows sync stuck. Cause: Dify API down, network issue, or API key expired. Fix: try re-edit + save (force re-sync). If still failing, contact dev team to check the Dify stack health (Dify can OOM under tight memory limits — bumped as of April 2026 but may recur).

Duplicate FAQ with similar questions. Symptom: two entries for "medical school tuition" with different answers. Cause: two counselors creating at once without coordination. Fix: review together, delete the wrong one, ensure the correct one is saved and toggled on.

FAQ Governance — Source Grounding & Cross-Contamination Rules

Aturan baku 2026-04-25 (setelah audit FAQ + uji coba Dify):

1. Setiap FAQ wajib punya source URL resmi

Tidak boleh halusinasi. Setiap FAQ harus di-back oleh URL Tier 1 (uph.edu, one.uph.edu, usm.uph.edu, apply.uph.edu) atau Tier 2 (kompas.com, danacita.co.id, residences.uph.edu) ketika UPH tidak mempublikasikan fakta tersebut. Form Add FAQ di /knowledge/faq sudah memvalidasi URL + memberi badge tier.

2. Topic-noun rule

Setiap pertanyaan FAQ harus mengandung topic noun spesifik — bukan sekadar "UPH" atau kata generic.

❌ Generic (akan cross-contaminate) ✅ Topic-noun spesifik
Apa itu UPH? Apa itu Universitas Pelita Harapan (UPH)?
Info session itu apa? Apa itu Info Session UPH dan apa keuntungannya?
Biaya kuliah berapa? Berapa total biaya kuliah Fakultas Kedokteran UPH sampai lulus?
Bisa daftar ga? Saya lulusan Paket C, apa syarat daftar UPH?

Alasan: Dify Annotation match by similarity score (threshold 0.7). Pertanyaan generic bisa hijack queries yang seharusnya match FAQ lain. Contoh real: "Apa itu UPH?" pernah salah-match ke FAQ "Info session UPH itu apa?" karena keyword overlap.

3. Workflow review 3-status

Setiap FAQ punya review_status:

  • needs_review (default) — FAQ baru ditambahkan / belum dikonfirmasi admin / pernah di-edit setelah verified
  • verified — admin sudah konfirmasi answer match dengan source_url. Wajib punya source_url terisi.
  • outdated — admin tahu source content sudah berubah, tapi FAQ belum di-update

Edit pertanyaan/jawaban → otomatis reset ke needs_review (content berubah, perlu re-verify).

4. Trigger untuk tambah FAQ baru (pre-GTM)

1 observed misfire di conversation log = trigger. Bukan N misfire — pada volume saat ini (5 conv/30d) N tidak akan pernah tercapai sebelum GTM.

Engineer (bukan operator) yang scan log misfire → ambil sumber resmi UPH → tambah FAQ → curl test → done. Operator hanya verify content kalau ada perubahan biaya/jadwal.

5. Authority tier hierarchy

  • Tier 1 (write-authoritative): uph.edu, one.uph.edu, usm.uph.edu, apply.uph.edu. Selalu menang. Konflik = Tier 1 wins.
  • Tier 2 (read-supplementary): kompas.com (cross-cited tuition), danacita.co.id (financing partner), residences.uph.edu (asrama sub-domain). Boleh untuk fakta yang Tier 1 tidak publish. TIDAK PERNAH override Tier 1.
  • Tier ∅ (silence): kalau bot harus jawab tapi tidak ada Tier 1/2 backing → partial answer dengan disclaimer "perlu konfirmasi tim admisi" + escalate. JANGAN fabrikasi.

6. FAQ vs KB-crawl — kapan duplikat OK

Pertanyaan yang sering muncul: konten yang saya tambah ke FAQ seringkali sudah ada di KB-crawl (uph.edu/about, uph.edu/program, dll). Apakah ini redundant?

Jawaban: Sebagian iya. FAQ Annotation dan KB-crawl memang dapat overlap secara konten. Tapi mereka memainkan peran berbeda:

Approach Speed Use case
FAQ Annotation ~250ms (fast-path) Single fact, dominant question form, content stabil per intake, atau bot mis-generate dari KB
KB-crawl retrieval ~7s Broad context, multi-aspect, content sering update via re-crawl

Kapan tambah FAQ walau konten ada di KB-crawl:

  1. Pertanyaan sering ditanya (high frequency) — fast-path 30x lebih cepat ($0 vs $0.012 per query)
  2. Konten safety-critical (jangan misleading prospect, mis. biaya spesifik) — FAQ deterministic vs LLM probabilistic
  3. Bot terbukti mis-generate dari KB-crawl untuk pertanyaan ini (lihat eval results)

Kapan cukup andalkan KB-crawl saja:

  1. Konten broad/multi-aspect — LLM lebih baik narasi daripada FAQ static
  2. Konten stabil dan jarang ditanya
  3. Bot konsisten benar untuk variasi pertanyaan saat eval

Rule of thumb: 1 misfire di production atau eval = trigger tambah FAQ. 0 misfire + low frequency = cukup KB-crawl.

7. Quarterly review cycle

Jadwal review FAQ:

  • Januari — sebelum intake semester ganjil
  • Juli — sebelum intake semester genap

Filter /knowledge/faq?review=needs_review di admin UI → verifikasi setiap FAQ → mark verified atau outdated.

See also