TECHNICAL TEST · AI ENGINEER INTERN

Multimodal RAG & Layout-Aware Text Extraction Solusi end-to-end atas dokumen Laporan Keuangan Bank Mandiri 2025 dan slide presentasi — FastAPI · LangGraph · ChromaDB · Gemini VLM · RapidOCR

6/6soal evaluasi — halaman sumber benar
6/6substansi jawaban lengkap
±5,5 dtkingestion 9 halaman (multimodal)
5/5slide → HTML (QA posisi maks 0,96%)

🏆 A. Multimodal Retrieval Augmented Generation (RAG) — Hasil Evaluasi 6 Pertanyaan Resmi

#Pertanyaan (ringkas)SumberHalamanSubstansi
1Peran Unit Pelindungan Nasabah (POJK 22/2023)Hal 7✓✓
2Penagihan boleh jam 21.00?Hal 7✓✓
3Pertumbuhan kredit tambang & konstruksiHal 4✓✓
4Komposisi DPK 2024 & 2025 (chart)Hal 6✓✓
5Alur penanganan pengaduan (infografis)Hal 8✓✓
6Saluran pengaduan (gambar daftar)Hal 9✓✓

Klik untuk melihat jawaban lengkap yang dihasilkan sistem:

1. Apa saja peran Unit Pelindungan Nasabah menurut peraturan POJK No. 22 Tahun 2023? 📄 Hal 7
Berdasarkan ketentuan POJK No. 22 Tahun 2023, Unit Pelindungan Nasabah memiliki tanggung jawab dan peran sebagai berikut: 1. Mensosialisasikan prinsip Pelindungan Nasabah kepada seluruh Pegawai Bank. 2. Mengoordinasikan perencanaan dan pelaksanaan kepatuhan Bank terhadap ketentuan Pelindungan Nasabah. 3. Mengoordinasikan pemantauan dan evaluasi pelaksanaan kepatuhan Bank terhadap ketentuan Pelindungan Nasabah. 4. Melaporkan implementasi serta memberikan rekomendasi perbaikan dan pengembangan kepada Direksi terkait Pelindungan Nasabah. 5. Mengoordinasikan penyusunan dan penyampaian laporan terkait Pelindungan Nasabah. 6. Menerima, menangani, dan menyelesaikan pengaduan yang disampaikan oleh nasabah. 7. Menyusun materi penanganan pengaduan yang akan dicantumkan dalam laporan tahunan, laman (*website*), dan/atau media lain yang dikelola secara resmi oleh Bank. 8. Menjadi penghubung penanganan pengaduan yang disampaikan nasabah kepada Otoritas Jasa Keuangan (OJK) dan/atau otoritas lainnya. 9. Menjalankan kegiatan untuk meningkatkan Literasi dan Inklusi Keuangan.
2. Jika Bank Mandiri menggunakan jasa Perusahaan Jasa Penagihan untuk menagih debitur, apakah penagihan boleh dilakukan pada jam 21.00? 📄 Hal 7
Tidak boleh. Berdasarkan aturan yang berlaku, penagihan hanya dapat dilakukan pada pukul 08.00 sampai dengan pukul 20.00 waktu wilayah domisili debitur. Oleh karena itu, penagihan pada pukul 21.00 dilarang.
3. Berapa nominal dan persentase pertumbuhan kredit yang diberikan di sektor tambang dan konstruksi? 📄 Hal 4
Berikut adalah data nominal dan persentase pertumbuhan kredit untuk sektor tambang dan konstruksi (dalam Rp juta): * Sektor Tambang: Pertumbuhan nominal sebesar Rp11.614.853 dengan persentase pertumbuhan sebesar 7,98%. Nilai kredit meningkat dari Rp145.571.176 pada tahun 2024 menjadi Rp157.186.029 pada tahun 2025. * Sektor Konstruksi: Pertumbuhan nominal sebesar Rp8.264.848 dengan persentase pertumbuhan sebesar 8,27%. Nilai kredit meningkat dari Rp99.883.788 pada tahun 2024 menjadi Rp108.148.636 pada tahun 2025.
4. Sebutkan presentase komposisi dana pihak ketiga (DPK) di Bank Mandiri pada tahun 2024 dan 2025? 📄 Hal 6, Hal 7, Hal 5, Hal 4, Hal 8
Presentase komposisi Dana Pihak Ketiga (DPK) Bank Mandiri pada tahun 2024 dan 2025 adalah sebagai berikut: Komposisi Tahun 2024: * Giro dan Giro Wadiah: 39,31% * Tabungan dan Tabungan Wadiah: 40,12% * Deposito Berjangka: 20,57% Komposisi Tahun 2025: * Giro dan Giro Wadiah: 36,66% * Tabungan dan Tabungan Wadiah: 34,23% * Deposito Berjangka: 29,11% Secara keseluruhan, pada Desember 2025, pendanaan berbiaya murah atau CASA (yang terdiri dari giro dan tabungan) mencapai 70,89% dari total DPK.
5. Bagaimana alur penganganan nasabah di bank mandiri jika terdapat laporan pengaduan? 📄 Hal 9, Hal 8
Alur penanganan pengaduan nasabah di Bank Mandiri dilakukan melalui tahapan berikut: 1. Penyampaian Pengaduan: Nasabah menyampaikan keluhan melalui berbagai saluran lisan maupun tertulis yang disediakan, yaitu: * Mandiri Call 14000 (24 jam). * Media Sosial: Akun X (@mandiricare dan @bankmandiri), Facebook (Mandiri Care dan Bank Mandiri), serta Instagram (@bankmandiri). * WhatsApp MITA: 0811-8414-000. * Website: www.bankmandiri.co.id (menu "contact us"). * Email: mandiricare@bankmandiri.co.id. * Kantor Cabang Bank Mandiri di seluruh Indonesia. * Surat resmi yang dikirim melalui pos atau diantar langsung. 2. Pengelolaan oleh Unit Khusus: Pengaduan ditangani oleh Customer Care Group, yaitu unit khusus yang bertugas mengelola serta memantau penyelesaian pengaduan sesuai dengan *Service Level Agreement* (SLA) yang berlaku. 3. Proses Verifikasi dan Investigasi: * Petugas menerima pengaduan dan melakukan verifikasi. * Pengaduan di-input ke dalam sistem pengaduan. * Dilakukan investigasi terhadap permasalahan yang dilaporkan. * Pihak bank membuat keputusan berdasarkan hasil investigasi. 4. Penyelesaian: * Petugas melakukan pembaruan (*update*) hasil investigasi ke dalam sistem. * Menginformasikan hasil investigasi tersebut kepada nasabah. * Nasabah menerima hasil akhir dari pengaduan yang diajukan.
6. Apa saja saluran pengaduan yang disediakan oleh Bank Mandiri? 📄 Hal 9, Hal 8
Bank Mandiri menyediakan berbagai saluran pengaduan yang dapat diakses secara lisan maupun tertulis, yaitu: 1. Mandiri Call: 14000 (layanan 24 jam melalui Line). 2. WhatsApp MITA: 0811-8414-000. 3. Email: mandiricare@bankmandiri.co.id. 4. Website: www.bankmandiri.co.id dengan memilih menu "contact us". 5. Media Sosial: * Akun X: mandiricare dan @bankmandiri. * Akun Facebook: "Mandiri Care" dan "Bank Mandiri". * Akun Instagram: @bankmandiri. 6. Kantor Cabang Bank: Tersedia di seluruh Indonesia. 7. Surat Resmi: Ditujukan kepada Bank Mandiri, baik yang diantar langsung maupun dikirim melalui pos. 8. Whistleblowing System – Letter to CEO (WBS-LTC): Saluran pelaporan yang dikelola oleh pihak ketiga independen untuk memastikan pengelolaan yang profesional dan bebas dari benturan kepentingan. Seluruh pengaduan tersebut dikelola dan dipantau penyelesaiannya oleh unit khusus bernama Customer Care Group sesuai dengan *Service Level Agreement* (SLA) yang berlaku.

✅ Kesesuaian dengan Spesifikasi

Spesifikasi (soal)Implementasi
Endpoint Ingestion: raw PDF → multimodal parsing (teks, tabel, gambar/chart)POST /api/ingest — PyMuPDF (teks+tabel Markdown) + caption VLM Gemini utk chart/infografis✓
Chunking cerdas agar konteks tidak terputuslayout-aware: tabel & caption utuh, heading menempel, potong kalimat + overlap✓
Embedding → Vector Databasefastembed MiniLM multilingual → ChromaDB (persist + metadata)✓
Endpoint Query: retrieval → synthesis LLMPOST /api/query — LangGraph: retrieve → grade → (refine) → synthesize✓
Wajib metadata sumber halamansetiap chunk bawa {page}; response memuat sources[{page, type}]✓
Tech stack: FastAPI · LangChain/LangGraph · Vector DB · LLM/Embedding bebasFastAPI ✓ LangGraph ✓ ChromaDB ✓ Gemini + MiniLM✓
B: Code Pipeline (Python / Jupyter Notebook)notebooks/part_b_pipeline.ipynb + pipeline/extract.py (CLI)✓
B: File HTML — Background Layer + Text Layer (<span> top/left/width)outputs/slide-01…05.html — span absolut persen + font cqw✓
B opsional: penanganan teks gandainpainting TELEA + tombol pembanding Background Asli↔Bersih✓
B opsional: edit teksMode Edit contenteditable + Reset✓

⚙️ Arsitektur

Bagian A — Multimodal RAG
PDF→Parsing teks (PyMuPDF)+ Tabel → Markdown+Caption VLM Gemini →Chunking layout-aware→ Embedding MiniLM→ChromaDB
Pertanyaan→Retrieve top-8→ Grade (LangGraph)→Synthesize + sitasi halaman
Bagian B — Layout-Aware Extraction
Slide 5734px→Downscale→ OCR RapidOCR (bbox)→Style (warna/ukuran/bold) →Inpainting anti-duplikasi→HTML overlay

🖼️ B. Layout Aware Text Extraction (Computer Vision) — Demo Interaktif

Teks hasil ekstraksi = elemen HTML asli (Text Layer) di atas Background Layer. Buka slide → tombol 🖼️ Background (bandingkan asli vs bersih-inpaint) → ✏️ Mode Edit → klik teks untuk mengedit tanpa merusak background.

▶️ Menjalankan Sendiri (API + Web UI)

git clone https://github.com/tixo831/Mandiri-AI.git
cd Mandiri-AI/part_a_multimodal_rag
pip install -r requirements.txt

# isi Gemini API key (gratis: aistudio.google.com/apikey)
cp ../.env.example .env   # lalu edit GEMINI_API_KEY=...

PYTHONPATH=. uvicorn app.main:app --port 8000
# buka http://localhost:8000  → web demo (ingest + query + galeri)
#           http://localhost:8000/docs → Swagger API

Halaman ini (GitHub Pages) memuat demo statis Bagian B dan hasil evaluasi; endpoint API aktif saat dijalankan lokal.