Proyek ini adalah sebuah API cerdas yang mampu menerjemahkan pertanyaan dalam bahasa natural (Indonesia) menjadi query SQL yang aman, mengeksekusinya ke database, dan memberikan jawaban analisis dalam format yang mudah dimengerti. Sistem ini dibangun menggunakan arsitektur Retrieval-Augmented Generation (RAG) dengan model bahasa dari Google Gemini.
Fitur utamanya meliputi:
- Klasifikasi Pertanyaan: Secara otomatis menolak pertanyaan di luar konteks data perusahaan.
- Generasi SQL Kontekstual: Mampu memahami percakapan lanjutan (misalnya, kata "tersebut", "itu").
- Validasi Keamanan: Memastikan hanya query
SELECTyang aman yang dieksekusi ke database. - Analisis Hasil: Memberikan ringkasan jawaban dalam bahasa manusia, bukan hanya data mentah.
Aplikasi ini menggunakan alur kerja multi-langkah (multi-step chain) untuk memproses setiap permintaan:
Pertanyaan Pengguna → 1. Router Chain → 2. NL-to-SQL Chain → 3. SQL Validator → 4. SQL Executor → 5. Analysis Chain → Jawaban Final
- Backend: FastAPI
- Server: Uvicorn
- AI / LLM:
- Generator: Google Gemini (via
langchain-google-genai) - Embedding:
BAAI/bge-base-en-v1.5(vialangchain-huggingface) - Orkestrasi: LangChain
- Generator: Google Gemini (via
- Database:
- Utama: MySQL (dihubungkan dengan
SQLAlchemy&PyMySQL) - Vector DB: ChromaDB
- Utama: MySQL (dihubungkan dengan
- Validasi & Utilitas:
sqlparse,pandas,python-dotenv - Rate Limiting:
slowapi
Berikut adalah langkah-langkah untuk menjalankan proyek ini di lingkungan lokal.
git clone https://github.com/username-anda/nama-repo.git
cd nama-repo# Buat venv
python -m venv .venv
# Aktifkan di macOS/Linux
source .venv/bin/activate
# Aktifkan di Windows
.\.venv\Scripts\activateSalin file .env.example menjadi .env dan isi dengan kredensial Anda.
cp .env.example .envIsi dari file .env harus terlihat seperti ini:
# Kredensial Google AI
GOOGLE_API_KEY="AIz...YourSecretKey"
# Kredensial Database MySQL Anda
DB_HOST="127.0.0.1"
DB_USER="root"
DB_PASSWORD="password_anda"
DB_NAME="db_ebudgeting"
DB_PORT="3306"Pastikan file requirements.txt Anda sudah lengkap, lalu jalankan:
pip install -r requirements.txtPastikan file data/schema_description.yml Anda sudah ada dan berisi metadata skema database. Jalankan script ingest untuk membuat database vektor.
python scripts/ingest_schema.pyProses ini akan membuat folder chroma_db/ di proyek Anda.
uvicorn src.main:app --reloadServer akan berjalan di http://127.0.0.1:8000.
Setelah server berjalan, Anda bisa mengakses dokumentasi API interaktif untuk melakukan pengujian melalui browser di:
http://127.0.0.1:8000/docs
{
"question": "tampilkan 3 unit dengan sisa anggaran terkecil di tahun 2024",
"conversation_id": "sesi-unik-123"
}{
"question": "dari ketiga unit tersebut, mana yang pagu anggarannya paling besar?",
"conversation_id": "sesi-unik-123"
}