Skip to content

Latest commit

Β 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– Chatbot Health β€” LangChain Local AI Chatbot

A multimodal, locally-running AI chatbot powered by LangChain, Mistral-7B (GGUF), and Streamlit β€” designed for health-related conversations with persistent chat history.


πŸ“Œ Table of Contents


🧠 Overview

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.


✨ Features

  • πŸ’¬ 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

πŸ› οΈ Tech Stack

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

πŸ“ Project Structure

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

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    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                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

βœ… Prerequisites

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)

πŸš€ Installation

1. Clone Repository

git clone https://github.com/Imamabdulfatah/chatbot-health-langchain.git
cd chatbot-health-langchain

2. Buat Virtual Environment (Direkomendasikan)

# Windows
python -m venv venv
venv\Scripts\activate

# Linux / macOS
python3 -m venv venv
source venv/bin/activate

3. Install Dependensi

pip install streamlit langchain ctransformers sentence-transformers chromadb PyYAML

Catatan: File requirements.txt tersedia. Jika sudah berisi dependensi, jalankan:

pip install -r requirements.txt

4. Download Model GGUF

Unduh file model Mistral-7B dari HuggingFace:

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

5. Buat Direktori Sesi Chat

mkdir chat_sessions

βš™οΈ Configuration

Edit 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"

Tips Konfigurasi

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)

▢️ Running the App

Jalankan aplikasi dengan perintah berikut:

streamlit run app.py

Aplikasi akan terbuka otomatis di browser pada alamat:

http://localhost:8501

πŸ” How It Works

Alur Percakapan

  1. Pengguna mengetik pesan di kolom input dan menekan tombol Send
  2. Streamlit menangkap input dan meneruskannya ke LLMChain
  3. LLMChain menggabungkan input pengguna dengan template prompt dan memori percakapan (3 pesan terakhir)
  4. CTransformers menjalankan model Mistral-7B secara lokal dan menghasilkan respons
  5. Respons ditampilkan di chat container bersama riwayat percakapan
  6. Riwayat chat disimpan otomatis ke file JSON di chat_sessions/

Manajemen Sesi

  • 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

πŸ“„ File Descriptions

Entry point utama aplikasi. Bertanggung jawab untuk:

  • Menampilkan antarmuka Streamlit (input, tombol, container chat, sidebar)
  • Mengelola session_state Streamlit untuk state management
  • Mengorkestrasi alur: input β†’ LLM β†’ tampil β†’ simpan

Modul inti LangChain. Berisi:

  • create_llm() β€” Menginisialisasi model Mistral-7B via CTransformers
  • create_embeddings() β€” Membuat embedding menggunakan HuggingFace
  • create_chat_memory() β€” Memori percakapan dengan window 3 pesan
  • create_llm_chain() β€” Membuat LangChain LLMChain
  • chatChain β€” Kelas wrapper yang menggabungkan semua komponen
  • load_normal_chain() β€” Factory function untuk membuat instance chatChain

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 JSON
  • load_chat_history_json() β€” Memuat riwayat dari file JSON ke objek LangChain Message
  • get_timestamp() β€” Menghasilkan timestamp untuk nama file sesi

File konfigurasi terpusat untuk semua path dan parameter model.


πŸ› Troubleshooting

❌ Error: Model file not found

FileNotFoundError: models/mistral-7b-instruct-v0.1.Q5_K_M.gguf

Solusi: Pastikan file .gguf sudah diunduh dan ditempatkan di folder models/.


❌ Error: chat_sessions directory not found

FileNotFoundError: [Errno 2] No such file or directory: './chat_sessions'

Solusi: Buat direktori secara manual:

mkdir chat_sessions

❌ Error: ModuleNotFoundError

Solusi: Pastikan semua dependensi terinstal:

pip install streamlit langchain ctransformers sentence-transformers chromadb PyYAML

⚠️ Respons Sangat Lambat

Solusi:

  • Gunakan model Q3 (lebih ringan): ubah config.yaml β†’ model_path.large ke path Q3
  • Kurangi context_length menjadi 2048
  • Jika punya GPU NVIDIA dengan CUDA: tingkatkan gpu_layers (misal: 20)

❌ Error saat load embeddings HuggingFace

Solusi: Pastikan koneksi internet aktif saat pertama kali menjalankan (untuk mengunduh model embedding BAAI/bge-large-en-v1.5).


🀝 Contributing

Kontribusi sangat disambut! Berikut langkah-langkahnya:

  1. Fork repository ini
  2. Buat branch fitur baru: git checkout -b feature/nama-fitur
  3. Commit perubahan Anda: git commit -m "feat: tambah fitur X"
  4. Push ke branch: git push origin feature/nama-fitur
  5. Buat Pull Request ke branch main

Ide Pengembangan

  • 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

πŸ“œ License

Proyek ini berada di bawah lisensi MIT. Silakan gunakan, modifikasi, dan distribusikan secara bebas dengan menyertakan atribusi.


πŸ‘€ Author

Imam Abdul Fatah


⭐ Jika proyek ini bermanfaat, jangan lupa beri Star di GitHub! ⭐

About

chatbot kesehatan untuk mendiagnosis penyakit dan cara pengobatan dan penanganan dasar dengan model generatif AI

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages