National-scale enterprise LMS with AI-driven knowledge management, adaptive learning paths, automated certification, and RAG-powered intelligent search across 20+ microservices.
“LMS adalah platform pembelajaran nasional milik organisasi enterprise yang menangani data pegawai, hasil ujian, dan sertifikasi kompetensi. Seluruh layanan berjalan di infrastruktur privat dengan autentikasi terpusat — tidak ada akses publik ke source code maupun live system.”
Contributed as senior full-stack engineer across the LMS ecosystem — a national-scale LMS platform serving thousands of employees with AI-powered knowledge management, automated proctoring, adaptive certification workflows, and intelligent report generation spanning 20+ interconnected microservices.
Operating under strict government air-gapped guidelines meant zero access to public cloud services (AWS/GCP/Azure), no third-party SaaS APIs, and strict validation against local SPBE cybersecurity standards.
Organisasi enterprise membutuhkan platform pembelajaran terpadu yang mampu melayani ribuan pegawai di skala nasional — dari pelatihan mandiri, ujian bersertifikasi, hingga manajemen pengetahuan berbasis AI. Sistem legacy sebelumnya terfragmentasi: LMS, pelaporan, manajemen ruangan, dan knowledge base berjalan di silo terpisah tanpa interoperabilitas.
LMS dipecah menjadi 20+ microservices: lms-api (LMS core), lms-manager (course management), lms-rooms (room booking), lms-proctoring (ujian), sertifikasi-api, lms-report, lms-reportgen (automated reporting), lms-jfkn (competency), kms-api (knowledge management), lms-ai (AI/RAG), lms-ml (machine learning), lms-mobile (Flutter), lms-dash (dashboard), lms-cop (community of practice), dan user-api. Setiap service dapat di-deploy, diskalakan, dan dikembangkan secara independen.
Service lms-ai dan kms-api mengimplementasikan Retrieval-Augmented Generation (RAG) via LangChain untuk pencarian semantik di knowledge base LMS. Dokumen pembelajaran, modul, dan peraturan di-indeks ke Elasticsearch dengan embedding vector — memungkinkan pencarian berbasis makna, bukan sekadar keyword matching. Service RAG terpisah menyediakan inferensi LLM on-premise.
Service lms-reportgen mengotomatisasi pembuatan laporan hasil pembelajaran, statistik kelulusan, dan rekomendasi learning path dalam format PDF/Excel. Menggantikan proses manual yang sebelumnya memakan waktu berhari-hari menjadi hitungan menit.
Seluruh Docker image disimpan dan didistribusikan melalui Harbor private registry on-premise — memungkinkan deployment air-gapped yang aman tanpa ketergantungan pada Docker Hub atau registry publik.
+------------------------------------------------------------------------------+
| LMS — ENTERPRISE LEARNING CENTER (20+ MICROSERVICES) |
| |
| +---------------------+ +--------------------------------------+ |
| | Browser / Mobile | -------> | API Gateway / Reverse Proxy | |
| | (Next.js / Flutter)| +---------------------------------------+ |
| +---------------------+ | |
| v |
| +-------------------------------------------------------------------+ |
| | MICROSERVICES MESH | |
| | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| | | lms-api | |lms-manager| |lms-rooms | |lms-proctoring | | |
| | | (LMS Core)| |(Courses) | |(Booking) | |(Exam/Cheating) | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| | |kms-api | |lms-ai | |lms-ml | |lms-reportgen | | |
| | |(Knowledge)| |(RAG/Lang | |(ML Models) | |(Auto Reports) | | |
| | | Base API) | | Chain) | | | | | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| | |sertifikasi| |lms-jfkn | |lms-report | |lms-dash | | |
| | | -api | |(Competency| |(Reporting) | |(Dashboard) | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| | |lms-mobile | |lms-cop | |user-api | |lms-exoffice | | |
| | |(Flutter) | |(Community)| |(Users) | |(External) | | |
| | +-----------+ +-----------+ +------------+ +-----------------+ | |
| +-------------------------------------------------------------------+ |
| | |
| +--------------------+--------------------+ |
| v v v |
| +-----------------+ +---------------------+ +-----------------+ |
| | PostgreSQL | | Elasticsearch | | RabbitMQ | |
| | (Multi-DB) | | (Search + Vector) | | (Event Bus) | |
| +-----------------+ +---------------------+ +-----------------+ |
| |
| +------------------------------------------------------------------+ |
| | Harbor Registry (Air-Gapped) | Redis Cache | Docker Swarm/K8s | |
| +------------------------------------------------------------------+ |
+------------------------------------------------------------------------------+
LMS kini menjadi platform pembelajaran terpadu nasional — menangani pelatihan, ujian, sertifikasi, dan knowledge management dalam satu ekosistem terintegrasi. AI-powered search dan automated reporting secara signifikan meningkatkan efisiensi operasional.
20+ microservices terintegrasi dalam satu ekosistem — dari LMS core, AI knowledge management, proctoring, hingga automated report generation.
RAG-powered semantic search memungkinkan pengguna menemukan materi pembelajaran relevan dalam hitungan detik — lompatan besar dari keyword search sederhana.
Automated report generation (lms-reportgen) memotong waktu pembuatan laporan dari hari ke menit — mempercepat siklus evaluasi kompetensi pegawai.
Arsitektur microservices memungkinkan scaling independen — service ujian bisa diskalakan saat peak season tanpa mempengaruhi service lainnya.
Diagram arsitektur 20+ microservices LMS, menunjukkan relasi antara LMS core, AI services, knowledge management, dan supporting services.
Dashboard admin LMS menampilkan statistik pembelajaran, progres peserta, utilisasi ruangan, dan metrik kelulusan — menjembatani gap antara operasional training dan pengambilan keputusan.
Potongan kode sanitized dari RAG pipeline service (lms-ai) — embedding dokumen → indexing Elasticsearch → retrieval → LLM generation.
# Sanitized: RAG Pipeline for KMS Knowledge Search
# lms-ai / kms-api integration
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import ElasticsearchStore
from langchain.llms import Ollama # on-premise LLM
from langchain.chains import RetrievalQA
class KMSRAGPipeline:
def __init__(self, es_url: str, index_name: str):
self.embeddings = HuggingFaceEmbeddings(
model_name="intfloat/multilingual-e5-large"
)
self.vector_store = ElasticsearchStore(
es_url=es_url,
index_name=index_name,
embedding=self.embeddings,
)
self.llm = Ollama(
model="mistral:7b",
base_url=env("OLLAMA_BASE_URL"),
)
def index_document(
self,
doc_id: str,
content: str,
metadata: dict,
) -> None:
self.vector_store.add_texts(
texts=[content],
metadatas=[{**metadata, "doc_id": doc_id}],
)
def semantic_search(
self,
query: str,
top_k: int = 5,
score_threshold: float = 0.6,
) -> list[dict]:
results = self.vector_store.similarity_search_with_score(
query,
k=top_k,
)
return [
{
"content": doc.page_content,
"metadata": doc.metadata,
"score": score,
}
for doc, score in results
if score >= score_threshold
]
def answer_with_context(
self,
question: str,
top_k: int = 3,
) -> dict:
qa_chain = RetrievalQA.from_chain_type(
llm=self.llm,
chain_type="stuff",
retriever=self.vector_store.as_retriever(
search_kwargs={"k": top_k}
),
return_source_documents=True,
)
result = qa_chain({"query": question})
return {
"answer": result["result"],
"sources": [
{
"content": doc.page_content[:300],
"metadata": doc.metadata,
}
for doc in result["source_documents"]
],
}