02 / ARSITEKTUR · SEBUAH SISTEM YANG BISA DIPERIKSA

Tujuh agen. Satu sumber kebenaran. Nol server di sisi penonton.

Di balik sebuah film data terdapat crawler yang tahan gangguan, penyimpanan terstruktur, indeks pencarian artikel, embedding semantik, AI agent, dan pemeriksaan bukti. Komputasi berat tetap terpisah dari website publik yang menyajikan JSON statis.

AKUISISI03jalur: RSS · crawling · GDELT
ORKESTRASI07peran agen dalam satu alur
PENGOLAHAN08tahap dari akuisisi hingga ekspor
PENYAJIANJSONsnapshot statis untuk website
01
ARSITEKTUR YANG BERJALAN

Berat di belakang layar. Ringan saat dibuka.

Dari URL sampai insight diperlukan beberapa jalur data: akuisisi RSS/crawling dengan GDELT sebagai pendukung, ekstraksi dan normalisasi teks, dedup serta embedding, klasifikasi AI, penyimpanan, analitik, verifikasi, lalu ekspor JSON yang bisa diaudit.

01 / PIPELINE DATA · AKTIFJakarta News Intelligence
RSS · sitemap · GDELT→Crawl & ekstraksi→Normalisasi + dedup→GLiNER2 / LLM→Analyst + Verifier→JSON

RSS dan sitemap membantu menemukan tautan berita, crawler mengambil isi artikel dari media, dan indeks GDELT mendukung penemuan serta pemeriksaan cakupan. Klasifikasi, analisis, dan verifikasi berlangsung sebelum ekspor.

02 / PUBLIKASI · STATISFilm Jakarta, 730 Hari
Data terolah→JSON tervalidasi→Next.js→Browser

Pengunjung melihat snapshot yang sudah diproses, bukan hasil crawl real-time. Hasil pengolahan berita disajikan sebagai snapshot di story.json. Pengunjung membaca data yang sudah tersedia tanpa menjalankan crawler, database, atau model AI di browser.

SYSTEM OF RECORD

PostgreSQL + pgvector

Artikel, label, cerita, insight, checkpoint.

SEARCH INDEX

Elasticsearch

Temukan teks dan topik; bisa dibangun ulang.

OBJECT STORAGE

MinIO / S3

HTML mentah terkompresi untuk pemrosesan ulang.

02
PENYIMPANAN & PENCARIAN

Bukan “masukkan semua teks ke Elasticsearch”.

Berita berawal dari HTML yang tidak terstruktur. Setelah diekstrak, dinormalisasi, deduplikasi, dan diberi metadata NLP, artikel direkam dalam database dan diproyeksikan ke indeks pencarian. Search index bukan sumber kebenaran.

POLYGLOT STORAGE / DATA ARCHITECTURE

Satu berita. Empat kebutuhan berbeda.

Database menyimpan kebenaran; indeks menyediakan retrieval; vektor membantu similarity; object storage menjaga bahan sumber. Pilih komponen untuk membaca data flow-nya.

SYSTEM OF RECORD

PostgreSQL

Artikel, sumber, label, versi model, cerita, run, dan evidence_ids disimpan sebagai relasi yang dapat diaudit. Constraints menjaga integritas.

KENAPA DIPISAH?

Transaksi, audit trail, checkpoint dan kemampuan membangun ulang indeks.

CONTOH STRUKTURarticles → labels → stories → insights
Elasticsearch tidak otomatis menentukan topik, sentimen, atau kesamaan peristiwa. Field-field tersebut dihasilkan oleh tahap NLP dan clustering terlebih dahulu, lalu ikut diindeks agar dapat dicari, difilter, serta diagregasi.
01 / INDEX MAPPING

Teks bukan keyword.

Judul dan isi memakai text analyzer. URL/ID/topik memakai keyword, waktu memakai date, confidence dan skor memakai numerik. Mapping yang salah membuat filter dan agregasi menyesatkan.

02 / INDONESIAN ANALYZER

Bahasa punya konteks.

Tokenization, stopword, sinonim lokal seperti Transjakarta–TJ–busway, dan aturan normalisasi membantu menemukan artikel meskipun redaksi berbeda.

03 / REBUILDABLE INDEX

Indeks bisa diulang.

PostgreSQL tetap otoritatif. Artikel dan label disinkronkan per batch ke indeks bulanan di belakang alias sehingga reindex tidak harus mengubah aplikasi yang mengaksesnya.

03
DATA CONTRACTS / ENTITY RELATIONSHIPS

Setiap insight punya jalur pulang ke sumber.

Skema bukan sekadar tabel penyimpanan: ID dan versi diperlukan untuk menyelidiki klasifikasi salah, menemukan artikel pendukung sebuah insight, dan menjalankan ulang analitik dengan aturan yang sama.

ENTITASFIELD / RELASI PENTINGKENAPA ADA
sourcesdomain, media_name, country, feed_urls, last_ok_atMelacak kualitas dan keterbatasan tiap sumber berita.
articlesid, source_id, url_canonical, published_at, body_key, content_hash, story_idSatu identitas artikel, riwayat crawl dan pengaitan peristiwa.
labels / entitiesarticle_id, task, label, score, model_version, roleTopik, sentimen, lokasi, aktor dan dasar confidence.
stories / embeddingsstory_id, n_sources, vector(768), similarityPengelompokan peristiwa dan pencarian kandidat semantik.
insightsperiod, numbers, evidence_ids, verdict, verifier_noteMenelusuri narasi dan statistik ke artikel buktinya.
runs / eval_runsstage, n_in, n_out, cost_usd, metrics, model_versionAudit keberhasilan batch, biaya, kualitas dan perubahan model.
01ARTICLE

Sumber, URL, timestamp, raw object key, content hash

02LABEL

Isu, sentimen, lokasi, entitas, confidence, model version

03STORY

Cluster peristiwa, jumlah sumber, embedding, bukti

04INSIGHT

Statistik, interval, evidence_ids, verdict verifier

05EXPORT

Schema validation, JSON berversi, review, snapshot

04
PEMBAGIAN KERJA

Tujuh peran. Tidak semuanya harus memakai AI.

Scout memantau sumber, crawler dan dedup bekerja deterministik, classifier menilai label, analyst menyusun narasi, verifier memeriksa bukti, publisher mengekspor hasil. Klik peran untuk melihat input, alat, output, dan kebutuhan LLM-nya.

AGEN 01 / 07

Scout.

Pengambil keputusan

Menilai sumber berita baru, sumber yang mati, dan perubahan daftar media agar penemuan URL tetap andal.

TOOLS / KOMPONENRSS · sitemap · GDELT · sources
KELUARANDaftar sumber yang disetujui
PEMAKAIAN LLMSaat memilih atau menilai sumber
05
ELASTICSEARCH / RETRIEVAL PIPELINE

Pencarian artikel itu hasil pemrosesan, bukan sumber analisis.

Search berguna untuk mengambil evidence: teks berita, pihak yang disebut, waktu terbit, isu, dan sentimen. Data yang masuk ke indeks sudah melewati validasi, deduplikasi dan pelabelan NLP.

01 / VALIDASIClean articleHTML diekstrak menjadi teks beserta metadata kanonik, relevance wilayah, quality flag.
02 / ENRICHMENTNLP labelsTopik multi-label, sentimen artikel atau pihak, entitas, story_id, confidence dan versi model.
03 / INDEXMapping + analyzerBulk indexing ke articles-YYYY.MM; alias articles, text analyzer Indonesia, keyword/date untuk filter.
04 / QUERYRetrieve evidenceFull-text search + filter isu, media, waktu, sentimen; ID hasil dipakai untuk memeriksa klaim.
Contoh kueri: cari berita berbahasa Indonesia tentang “banjir Jakarta” dalam periode tertentu, batasi topik = banjir, sentiment = negatif, lalu ambil article_id untuk membaca sumber. Ini adalah penjelasan pola retrieval, bukan fitur pencarian live di website statis.
06
PILIHAN TEKNOLOGI

Stack yang dipilih untuk satu alasan: dapat diaudit.

Setiap komponen menyelesaikan masalah yang berbeda: crawling dan ekstraksi, orkestrasi yang bisa diulang, semantic NLP, pencarian dan penyimpanan, lalu publikasi snapshot. Detailnya dibedah di atas.

01 / AKUISISI

Berita sebagai sumber

Dari halaman publik ke isi yang dapat diproses.

RSS & sitemapGDELThttpx / Crawl4AITrafilatura
Browser hanya untuk situs dengan JavaScript.
02 / ORKESTRASI

Alur yang terkontrol

Tugas, retry, pemeriksaan dan persetujuan.

LangGraphPrefectLangfuse
Keputusan agen bisa ditelusuri lewat trace.
03 / MODEL

AI sesuai kebutuhannya

Model kecil dulu; model besar untuk pengecualian.

GLiNER2LLM terstrukturmultilingual-e5
LLM diprioritaskan untuk kasus ambigu, bukan semua artikel.
04 / DATA

Satu sumber kebenaran

Data transaksional terpisah dari indeks pencarian.

PostgreSQL 16pgvectorElasticsearch 8MinIO / S3
Indeks dapat dibangun ulang dari database.
05 / PUBLIKASI

Hasil siap dibaca

JSON tervalidasi dipublikasikan menjadi halaman statis.

PydanticGitHub PRNext.js / Vercel
Tidak perlu database produksi di browser pengunjung.
07
KEANDALAN & OPERASIONAL

Bukan sekadar diagram yang tampak canggih.

Pipeline harus bisa membedakan source error, extraction error, label drift, dan insight tanpa dukungan bukti. Retry tidak menyelesaikan semuanya; beberapa kasus perlu karantina, review manusia atau rollback model.

01 / KESELAMATAN SUMBER

Crawl dengan sopan.

Hormati robots.txt, jaga jarak antarrequest untuk setiap domain, jangan membobol paywall, dan pantau kegagalan ekstraksi.

Aturan laju: 1 request / 2 detik per domain
02 / MUTU & EVIDENCE

Setiap klaim punya jejak.

Insight menyimpan ID artikel bukti. Verifier dapat menolak narasi; angka di dalam teks tetap dicocokkan dengan tabel sumber.

Hanya insight didukung yang diekspor
03 / BIAYA & PRIVASI

Anggaran dan retensi jelas.

Kuota LLM dibatasi harian, cache menghindari pekerjaan berulang, data pribadi diminimalkan, dan HTML mentah dijadwalkan untuk dihapus.

Kebijakan retensi HTML: 180 hari
08
RELIABILITY / QUALITY GATES

Apa yang diperiksa sebelum hasil dipercaya?

Dari sumber yang mati sampai model yang drift, pipeline membutuhkan observability dan quality gates di setiap lapisan—bukan hanya grafik yang berhasil dirender.

01

Source health

Registry media, RSS/sitemap, status feed, robots, jadwal crawling.

PEMERIKSAANSumber mati, blokir, dan penurunan volume terbaca.
QUALITY GATE
02

Extraction quality

Fetch, parse, tanggal, bahasa, geolokasi, skema, karantina.

PEMERIKSAANArtikel gagal ekstraksi tidak diam-diam menjadi data nol.
QUALITY GATE
03

Dedup & similarity

Canonical URL, MinHash, embedding, event window, source count.

PEMERIKSAANDuplikat dan cerita terpisah; ambang diuji terhadap sampel.
QUALITY GATE
04

Model quality

GLiNER2, confidence, LLM escalation, benchmark per isu.

PEMERIKSAANF1, disagreement, label drift dan biaya dapat dievaluasi.
QUALITY GATE
05

Evidence verification

Agregasi, numerator/denominator, insight, evidence_ids, verifier.

PEMERIKSAANKlaim dan angka dicek sebelum publikasi.
QUALITY GATE
06

Publish & recovery

Validasi JSON, versioning schema, review, backup dan rollback.

PEMERIKSAANSnapshot website tetap bisa dibuka saat pipeline gagal.
QUALITY GATE