Chatbot FAQ berbasis TF-IDF + Cosine Similarity untuk mencocokkan pertanyaan user dengan database FAQ. Tersedia dalam dua versi: CLI dan Web (Flask) dengan tampilan bergaya terminal.
- Pencocokan pertanyaan menggunakan NLP klasik (TF-IDF + cosine similarity), tanpa perlu API/LLM eksternal
- Threshold confidence score — kalau pertanyaan tidak cukup mirip dengan FAQ manapun, bot akan bilang tidak tahu (bukan asal jawab)
- Database FAQ dalam format JSON, gampang ditambah/diedit
- Versi CLI untuk quick testing
- Versi web dengan UI bertema terminal (Flask + vanilla JS, tanpa framework frontend)
faq-chatbot/
├── faq_data.json # Database pertanyaan & jawaban
├── matcher.py # Engine TF-IDF matching
├── faq_bot.py # Entry point versi CLI
├── app.py # Entry point versi web (Flask)
├── templates/
│ └── index.html # UI chat bertema terminal
└── requirements.txt
-
Clone repo dan masuk ke folder project:
git clone https://github.com/Kanzacky/ChatBotFAQSimple.git cd ChatBotFAQSimple -
Buat virtual environment (disarankan, terutama di Arch Linux):
python3 -m venv venv source venv/bin/activate -
Install dependencies:
pip install -r requirements.txt
-
Jalankan versi CLI:
python faq_bot.py
Atau versi web:
python app.py
Lalu buka
http://127.0.0.1:5000di browser.
- Semua pertanyaan di
faq_data.jsondiubah jadi vektor TF-IDF saat aplikasi start. - Pertanyaan user dibersihkan (lowercase, hapus tanda baca) lalu diubah jadi vektor dengan vectorizer yang sama.
- Dihitung cosine similarity antara vektor pertanyaan user dengan semua vektor FAQ.
- FAQ dengan skor similarity tertinggi dipilih sebagai jawaban — asalkan skornya di atas
threshold(default0.3). Kalau di bawah threshold, bot akan menampilkan pesan fallback.
Tinggal tambahkan entry baru di faq_data.json:
{
"question": "Pertanyaan baru di sini?",
"answer": "Jawaban untuk pertanyaan tersebut."
}Tidak perlu training ulang model — TF-IDF akan otomatis fit ulang setiap aplikasi dijalankan.
- Ganti TF-IDF dengan sentence embeddings (misal
sentence-transformers) untuk pencocokan semantik yang lebih akurat - Tambah fitur logging pertanyaan yang tidak terjawab, untuk mengetahui FAQ apa yang perlu ditambahkan
- Deploy versi web ke Render/Railway biar bisa diakses publik
- Tambah dukungan multi-turn conversation (bukan cuma single-turn Q&A)
- Python 3
- scikit-learn (TF-IDF Vectorizer, cosine similarity)
- Flask (web server)
- Vanilla HTML/CSS/JS (tanpa framework frontend)
Feel free to fork & modify.