Proyek ini adalah contoh service RAG (Retrieval-Augmented Generation) dengan arsitektur terpisah (adapters, core, services). Aplikasi dibangun menggunakan FastAPI dan beberapa adapter LangChain untuk LLM, embedding, dan vektor-store (Qdrant).
README ini berbahasa Indonesia dan berisi langkah cepat untuk setup, environment variables, cara menjalankan, dan catatan pengembangan.
- Endpoints FastAPI untuk chat dan NL-to-SQL
- Integrasi dengan Qdrant sebagai vector store
- Adapter untuk menggunakan SentenceTransformers / HuggingFace embeddings
- Patern clean-architecture (adapters, core, services)
- Python 3.10+ (direkomendasikan 3.11)
- PostgreSQL / MySQL jika kamu ingin menyambungkan database untuk contoh SQL (sesuaikan
adapters/db) - Qdrant (remote atau lokal) jika ingin menggunakan vector store
- Clone repo dan masuk ke folder:
cd /path/to/service_chatbot- Buat virtual environment dan aktifkan (zsh):
python -m venv .venv
source .venv/bin/activate- Install dependency:
pip install -r requirements.txt- Buat file
.envdi root (contoh nilai minimal):
QDRANT_HOST=localhost
QDRANT_API_KEY=
EMBEDDING_MODEL_NAME=all-mpnet-base-v2
LLM_MODEL_NAME=gemini-2.5-flash
COLLECTION_NAME=my_documents
GEMINI_MODEL_NAME=gemini-pro
# Tambahkan credential LLM (OPENAI_API_KEY, OPENROUTER_API_KEY, dsb.) jika diperlukan- Jalankan aplikasi:
uvicorn main:app --reload --host 0.0.0.0 --port 8000Buka http://127.0.0.1:8000/docs untuk melihat Swagger/OpenAPI.
QDRANT_HOST— host QdrantQDRANT_API_KEY— API key Qdrant (opsional)EMBEDDING_MODEL_NAME— nama model embedding (mis.all-mpnet-base-v2)LLM_MODEL_NAME— model default LLMCOLLECTION_NAME— nama koleksi QdrantGEMINI_MODEL_NAME— contoh nama model GeminiOPENAI_API_KEY,OPENROUTER_API_KEY, dsb. — credential untuk provider LLM
app/adapters/— penghubung ke layanan eksternal (API, embeddings, llm, vector stores)core/— utilitas domain, mis. sanitasi SQL, eksekusi DBservices/— logika bisnis (NL2SQL, RAG, dsb.)config.py— konfigurasi yang membaca env vars
main.py— entrypoint FastAPIrequirements.txt— dependensi pip
-
Jika Pylance/VSCode menandai import
configsebagai unknown, pastikan root proyek adalah folder yang memuatmain.pydanapp/di PYTHONPATH. Alternatif yang lebih baik: gunakanfrom app import configatau buatsettings = Settings()menggunakan Pydantic diapp/config.pyuntuk autocompletion. -
Untuk menggunakan local Qdrant: jalankan
qdrantcontainer atau paket biner Qdrant lokal dan setQDRANT_HOST. -
Jika kamu ingin fitur "fast return" (hanya kembalikan data mentah tanpa reasoning), pertimbangkan menambahkan parameter
with_reasoning: bool = TruepadaNL2SQLService.execute_flow.
- Lakukan panggilan ke endpoint
/api/v1/nl2sqldari Swagger UI ataucurluntuk menguji alur. - Tambahkan logging atau print statements sementara jika butuh tracing di LLM calls.
Silakan ajukan PR untuk perbaikan, dokumentasi, atau fitur baru. Ikuti konvensi commit yang konsisten.
Jika mau, saya bisa:
- Tambahkan badge status, license, atau CONTRIBUTING.md
- Buatkan contoh
.env.exampledan skrip makefile untuk pengembangan - Menambahkan instruksi deploy Docker
Beritahu bagian mana yang ingin kamu perkuat selanjutnya.