A multimodal, locally-running AI chatbot powered by LangChain, Mistral-7B (GGUF), and Streamlit β designed for health-related conversations with persistent chat history.
- Overview
- Features
- Tech Stack
- Project Structure
- Architecture
- Prerequisites
- Installation
- Configuration
- Running the App
- How It Works
- File Descriptions
- Troubleshooting
- Contributing
- License
Chatbot Health LangChain adalah aplikasi chatbot berbasis AI yang berjalan sepenuhnya secara lokal (tanpa koneksi ke API eksternal seperti OpenAI). Aplikasi ini menggunakan model bahasa besar (LLM) Mistral-7B dalam format GGUF melalui library CTransformers, dipadukan dengan framework LangChain untuk manajemen percakapan dan memori, serta Streamlit sebagai antarmuka pengguna berbasis web.
Proyek ini dirancang untuk melayani percakapan di bidang kesehatan, di mana pengguna dapat mengajukan pertanyaan dan mendapatkan jawaban dari AI secara real-time, dengan riwayat percakapan yang tersimpan secara persisten.
- π¬ Percakapan Natural β Tanya jawab bebas dengan AI berbasis LLM lokal
- π§ Memori Percakapan β Mengingat 3 pesan terakhir dalam konteks (ConversationBufferWindowMemory)
- πΎ Riwayat Sesi Tersimpan β Sesi chat disimpan sebagai file JSON dan dapat dilanjutkan kapan saja
- ποΈ Manajemen Sesi β Pilih dan lanjutkan sesi lama atau mulai sesi baru dari sidebar
- π Privasi Penuh β Model berjalan 100% lokal, tidak ada data yang dikirim ke cloud
- β‘ Berbasis Streamlit β Antarmuka web yang ringan dan mudah digunakan
- π₯ Fokus Kesehatan β Prompt dirancang untuk percakapan yang relevan dengan topik kesehatan
| Teknologi | Versi / Keterangan |
|---|---|
| Python | 3.9+ |
| Streamlit | UI Framework berbasis web |
| LangChain | Orkestrasi LLM & Memory |
| CTransformers | Menjalankan model GGUF secara lokal |
| Mistral-7B Instruct | Model LLM utama (format .gguf) |
| HuggingFace Embeddings | BAAI/bge-large-en-v1.5 (untuk embedding) |
| ChromaDB | Vector store (siap digunakan untuk RAG) |
| YAML | File konfigurasi |
| JSON | Format penyimpanan riwayat chat |
chatbot-health-langchain/
β
βββ app.py # Entry point β antarmuka Streamlit utama
βββ llm_chains.py # Inisialisasi LLM, memory, dan chain LangChain
βββ prompt_templates.py # Template prompt untuk model AI
βββ utils.py # Fungsi utilitas (simpan/muat riwayat, timestamp)
βββ config.yaml # Konfigurasi model, path, dan parameter
βββ requirements.txt # Daftar dependensi Python
βββ doc.txt # Catatan singkat cara menjalankan aplikasi
β
βββ models/ # (Buat manual) Tempat menyimpan file model GGUF
β βββ mistral-7b-instruct-v0.1.Q3_K_M.gguf # Model kecil (lebih ringan)
β βββ mistral-7b-instruct-v0.1.Q5_K_M.gguf # Model besar (lebih akurat)
β
βββ chat_sessions/ # (Auto-created) Direktori penyimpanan sesi chat JSON
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Streamlit UI (app.py) β
β ββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ β
β β Text Input β β Chat Container β β Sidebar β β
β β (Send) β β (Messages) β β (Session Mgmt) β β
β ββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ β
ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LangChain Chain (llm_chains.py) β
β β
β βββββββββββββββββββββββ ββββββββββββββββββββββββββββ β
β β PromptTemplate β β ConversationBufferWindow β β
β β (Mistral Instruct) β β Memory (k=3 messages) β β
β βββββββββββββββββββββββ ββββββββββββββββββββββββββββ β
β β β β
β ββββββββββββ¬ββββββββββββ β
β βΌ β
β ββββββββββββββββ β
β β LLMChain β β
β ββββββββββββββββ β
ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CTransformers (Local Inference) β
β Mistral-7B Instruct GGUF β runs on CPU/GPU β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Chat History (utils.py + chat_sessions/) β
β Saved as JSON, loaded per session β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Sebelum memulai, pastikan sistem Anda memenuhi persyaratan berikut:
- Python versi 3.9 atau lebih baru
- pip (Python package manager)
- RAM minimal 8 GB (direkomendasikan 16 GB untuk model Q5)
- CPU modern (model berjalan secara CPU-only secara default; GPU opsional)
- File model Mistral-7B GGUF (unduh secara terpisah β lihat bagian Installation)
git clone https://github.com/Imamabdulfatah/chatbot-health-langchain.git
cd chatbot-health-langchain# Windows
python -m venv venv
venv\Scripts\activate
# Linux / macOS
python3 -m venv venv
source venv/bin/activatepip install streamlit langchain ctransformers sentence-transformers chromadb PyYAMLCatatan: File
requirements.txttersedia. Jika sudah berisi dependensi, jalankan:pip install -r requirements.txt
Unduh file model Mistral-7B dari HuggingFace:
- Model Ringan (Q3):
mistral-7b-instruct-v0.1.Q3_K_M.gguf - Model Akurat (Q5):
mistral-7b-instruct-v0.1.Q5_K_M.gguf
Tempatkan file model di dalam folder models/:
chatbot-health-langchain/
βββ models/
βββ mistral-7b-instruct-v0.1.Q3_K_M.gguf
βββ mistral-7b-instruct-v0.1.Q5_K_M.gguf
mkdir chat_sessionsEdit file config.yaml untuk menyesuaikan pengaturan:
# Path ke file model GGUF
model_path:
small: "./models/mistral-7b-instruct-v0.1.Q3_K_M.gguf" # Model lebih ringan
large: "models/mistral-7b-instruct-v0.1.Q5_K_M.gguf" # Model lebih akurat
# Tipe model
model_type: "mistral"
# Path embeddings (dari HuggingFace Hub atau lokal)
embeddings_path: "BAAI/bge-large-en-v1.5"
# Parameter model
model_config:
max_new_tokens: 512 # Panjang maksimal respons AI
temperature: 0 # 0 = deterministik, 1 = kreatif
context_length: 4096 # Panjang konteks maksimal
gpu_layers: 0 # Jumlah layer di GPU (0 = CPU only)
# Direktori penyimpanan riwayat chat
chat_history_path: "./chat_sessions"| Parameter | Nilai | Keterangan |
|---|---|---|
temperature |
0 |
Output deterministik (cocok untuk info medis) |
temperature |
0.7 |
Output lebih variatif dan kreatif |
max_new_tokens |
512 |
Respons standar |
max_new_tokens |
1024 |
Respons lebih panjang dan detail |
gpu_layers |
0 |
CPU only |
gpu_layers |
35 |
Sebagian besar layer di GPU (butuh CUDA) |
Jalankan aplikasi dengan perintah berikut:
streamlit run app.pyAplikasi akan terbuka otomatis di browser pada alamat:
http://localhost:8501
- Pengguna mengetik pesan di kolom input dan menekan tombol Send
- Streamlit menangkap input dan meneruskannya ke
LLMChain - LLMChain menggabungkan input pengguna dengan template prompt dan memori percakapan (3 pesan terakhir)
- CTransformers menjalankan model Mistral-7B secara lokal dan menghasilkan respons
- Respons ditampilkan di chat container bersama riwayat percakapan
- Riwayat chat disimpan otomatis ke file JSON di
chat_sessions/
- Setiap sesi baru menghasilkan file JSON baru dengan nama timestamp
- Sidebar memungkinkan pengguna memilih dan melanjutkan sesi lama
- Sesi dapat beralih kapan saja tanpa kehilangan riwayat
Entry point utama aplikasi. Bertanggung jawab untuk:
- Menampilkan antarmuka Streamlit (input, tombol, container chat, sidebar)
- Mengelola
session_stateStreamlit untuk state management - Mengorkestrasi alur: input β LLM β tampil β simpan
Modul inti LangChain. Berisi:
create_llm()β Menginisialisasi model Mistral-7B via CTransformerscreate_embeddings()β Membuat embedding menggunakan HuggingFacecreate_chat_memory()β Memori percakapan dengan window 3 pesancreate_llm_chain()β Membuat LangChainLLMChainchatChainβ Kelas wrapper yang menggabungkan semua komponenload_normal_chain()β Factory function untuk membuat instancechatChain
Berisi template prompt untuk model Mistral Instruct:
<s>[INST] You are an AI chatbot having a conversation with a human.
Previous conversation: {history}
Human: {human_input}
AI: [/INST]
Fungsi utilitas pendukung:
save_chat_history_json()β Menyimpan riwayat chat ke file JSONload_chat_history_json()β Memuat riwayat dari file JSON ke objek LangChain Messageget_timestamp()β Menghasilkan timestamp untuk nama file sesi
File konfigurasi terpusat untuk semua path dan parameter model.
FileNotFoundError: models/mistral-7b-instruct-v0.1.Q5_K_M.gguf
Solusi: Pastikan file .gguf sudah diunduh dan ditempatkan di folder models/.
FileNotFoundError: [Errno 2] No such file or directory: './chat_sessions'
Solusi: Buat direktori secara manual:
mkdir chat_sessionsSolusi: Pastikan semua dependensi terinstal:
pip install streamlit langchain ctransformers sentence-transformers chromadb PyYAMLSolusi:
- Gunakan model Q3 (lebih ringan): ubah
config.yamlβmodel_path.largeke path Q3 - Kurangi
context_lengthmenjadi2048 - Jika punya GPU NVIDIA dengan CUDA: tingkatkan
gpu_layers(misal:20)
Solusi: Pastikan koneksi internet aktif saat pertama kali menjalankan (untuk mengunduh model embedding BAAI/bge-large-en-v1.5).
Kontribusi sangat disambut! Berikut langkah-langkahnya:
- Fork repository ini
- Buat branch fitur baru:
git checkout -b feature/nama-fitur - Commit perubahan Anda:
git commit -m "feat: tambah fitur X" - Push ke branch:
git push origin feature/nama-fitur - Buat Pull Request ke branch
main
- Tambahkan dukungan RAG (Retrieval-Augmented Generation) dengan dokumen kesehatan
- Integrasi ChromaDB untuk knowledge base medis
- Tambahkan mode streaming respons token per token
- Dukungan multimodal (gambar/dokumen)
- Export riwayat chat ke PDF
- Autentikasi pengguna
Proyek ini berada di bawah lisensi MIT. Silakan gunakan, modifikasi, dan distribusikan secara bebas dengan menyertakan atribusi.
Imam Abdul Fatah
- GitHub: @Imamabdulfatah
- Repository: chatbot-health-langchain
β Jika proyek ini bermanfaat, jangan lupa beri Star di GitHub! β