Sistem Informasi Arsip Digital dan Visitasi Akreditasi (Ardiva) yang dilengkapi dengan Retrieval Augmented Generation (RAG)
Sistem Informasi ini dibangun menggunakan
- Hono.js sebagai Backend
- Langchain.js sebagai Agentic AI
- Milvus sebagai VectorDB
- MySQL sebagai Database
- Prisma sebagai ORM
- RabbitMQ sebagai Message Broker
- MarkItDown sebagai Document Converter
- React.js sebagai Front End
- Tanstack Routes dan Tanstack Query sebagai Pendukung
cp ragdiva-backend/.env.docker .env.bak
nano ragdiva-backend/.env.dockerInstalasi Docker : https://docs.docker.com/engine/install/
docker compose up -dProyek RAGDiva dibagi menjadi beberapa modul/service yang masing-masing berjalan sebagai container terpisah dan diatur oleh docker-compose.yaml di root.
Ragdiva/
├── docker-compose.yaml # Orkestrasi seluruh service
├── readme.md
├── images/ # Aset screenshot dokumentasi
│
├── ragdiva-backend/ # Service: REST API & AI Agent
│ ├── Dockerfile
│ ├── package.json
│ ├── tsconfig.json
│ ├── prisma.config.ts
│ ├── prisma/
│ │ ├── schema.prisma # Definisi skema database MySQL
│ │ └── migrations/ # Riwayat migrasi database
│ ├── files/ # Penyimpanan file yang diupload
│ └── src/
│ ├── index.ts # Entry point aplikasi Hono.js
│ ├── setup-admin.ts # Script inisialisasi akun admin
│ ├── routes/ # Definisi endpoint HTTP (router)
│ ├── handlers/ # Handler tiap endpoint (controller)
│ ├── services/ # Business logic & orkestrasi
│ ├── repositories/ # Query ke database via Prisma
│ ├── middleware/ # Auth, validasi request, dsb.
│ ├── schema/ # Validasi input (Zod schema)
│ ├── types/ # TypeScript type & interface
│ ├── utils/ # Helper & fungsi utilitas
│ ├── tools/ # Tool yang digunakan oleh AI agent
│ └── lib/ # Modul infrastruktur & integrasi
│ ├── agent/ # LangChain.js AI agent & chain
│ ├── broadcast/ # Server-Sent Events (SSE)
│ ├── database/ # Koneksi Prisma client
│ ├── embedding/ # Model embedding teks
│ ├── milvus/ # Koneksi & operasi Vector DB
│ ├── rabbitmq/ # Publisher & consumer pesan
│ ├── semaphore/ # Kontrol konkurensi proses
│ └── text-splitter/ # Pemotongan teks untuk indexing
│
├── ragdiva-frontend/ # Service: Antarmuka Pengguna
│ ├── Dockerfile
│ ├── vite.config.ts
│ ├── index.html # Entry point HTML
│ └── src/
│ ├── main.tsx # Entry point React
│ ├── index.css # Global stylesheet
│ ├── routes/ # Definisi rute TanStack Router
│ ├── pages/ # Komponen halaman
│ ├── features/ # Fitur mandiri (chat, arsip, dsb.)
│ ├── components/ # Komponen UI yang dapat digunakan ulang
│ ├── hooks/ # Custom React hooks
│ ├── context/ # React context providers
│ ├── providers/ # Provider wrapper (auth, query, dsb.)
│ ├── middleware/ # Middleware navigasi/autentikasi
│ ├── lib/ # Utilitas & konfigurasi library
│ └── types/ # TypeScript type definitions
│
├── ragdiva-document-converter/ # Service: Konversi Dokumen (Python)
│ ├── Dockerfile
│ ├── main.py # Entry point worker
│ ├── requirements.txt
│ └── app/
│ ├── config.py # Konfigurasi dari environment
│ ├── converter.py # Logika konversi via MarkItDown
│ └── worker.py # Consumer RabbitMQ & proses konversi
│
└── ragdiva-reverse-proxy/ # Service: Reverse Proxy
├── Dockerfile
└── nginx.conf # Konfigurasi routing Nginx
Ditulis dalam TypeScript dengan runtime Node.js menggunakan framework Hono.js yang ringan dan berkinerja tinggi.
| Sumber Daya | Keterangan |
|---|---|
src/index.ts |
Entry point — mendaftarkan middleware global, routes, dan memulai server |
src/routes/ |
Mendefinisikan grup endpoint HTTP; setiap file mewakili satu domain fitur |
src/handlers/ |
Menerima request HTTP, memanggil service, mengembalikan response |
src/services/ |
Mengandung logika bisnis utama; mengorkestrasikan repository dan library |
src/repositories/ |
Lapisan akses data; semua query ke MySQL dilakukan melalui Prisma ORM |
src/middleware/ |
Autentikasi JWT, validasi request, dan penanganan error global |
src/schema/ |
Validasi payload request menggunakan Zod |
src/tools/ |
Fungsi-fungsi yang dapat dipanggil oleh AI agent (tool calling) |
src/lib/agent/ |
Konfigurasi LangChain.js — agent, chain, dan memory |
src/lib/milvus/ |
Wrapper koneksi dan operasi CRUD ke Milvus Vector DB |
src/lib/rabbitmq/ |
Publisher dan consumer pesan untuk antrian pemrosesan dokumen |
src/lib/embedding/ |
Modul untuk menghasilkan vektor embedding dari teks dokumen |
src/lib/broadcast/ |
Implementasi Server-Sent Events untuk streaming respons AI |
prisma/schema.prisma |
Mendefinisikan model data (User, File, Kriteria, dsb.) untuk MySQL |
Ditulis dalam TypeScript dengan React.js dan di-bundle menggunakan Vite.
| Sumber Daya | Keterangan |
|---|---|
src/main.tsx |
Entry point React; mendaftarkan router dan provider global |
src/routes/ |
Definisi rute aplikasi menggunakan TanStack Router |
src/pages/ |
Komponen tingkat halaman yang di-render oleh router |
src/features/ |
Fitur mandiri (mis. chat/, file-manager/) dengan komponen dan logika sendiri |
src/components/ |
Komponen UI generik yang dipakai ulang lintas fitur |
src/hooks/ |
Custom hooks untuk logika yang dapat dipakai ulang (mis. useAuth) |
src/providers/ |
Wrapper global: TanStack Query, session, tema, dsb. |
src/middleware/ |
Penjaga rute (route guard) berbasis status autentikasi |
src/lib/ |
Konfigurasi klien HTTP (fetch/axios), helper format, dsb. |
Ditulis dalam Python 3, berjalan sebagai worker yang mendengarkan antrian RabbitMQ.
| Sumber Daya | Keterangan |
|---|---|
main.py |
Entry point; menginisialisasi koneksi dan menjalankan worker loop |
app/config.py |
Membaca variabel environment (URL RabbitMQ, Milvus, dsb.) |
app/converter.py |
Menggunakan library MarkItDown untuk mengkonversi file ke Markdown |
app/worker.py |
Consumer RabbitMQ; menerima pesan, menjalankan konversi, menyimpan hasil ke Milvus |
Konfigurasi Nginx yang bertindak sebagai pintu masuk tunggal (single entry point) ke seluruh layanan.
| Sumber Daya | Keterangan |
|---|---|
nginx.conf |
Mendefinisikan routing: /api/* diteruskan ke backend, / diteruskan ke frontend |


