Steve Yegge pernah berbicara tentang "Insight Compression" dalam "Software Survival 3.0" — bahwa Git atau Kubernetes memadatkan puluhan tahun trial and error sehingga tidak mudah direproduksi oleh LLM. Saya memulai dari pemikiran bahwa saju-myeongri juga serupa.
Apa yang terjadi jika saju diserahkan ke LLM
Seperti yang banyak dilakukan sekarang, jika data saju dimasukkan ke LLM, hasil yang keluar tampak meyakinkan. Masalahnya adalah jurang antara "terlihat meyakinkan" dan "akurat".
Saya menguji berbagai model seperti GPT-5, GPT-4o, Claude, dan DeepSeek V3 dengan menggabungkan structured output dan few-shot. Ada titik-titik kesalahan yang bersifat sistematis. Misalnya pada saju dengan pola jongganggyeok (從強格), model hanya menerapkan logika eokbu (抑扶) lalu menyimpulkan unsur api (火) sebagai yongshin. Putusan seperti itu melanggar prinsip klasik "choknogangsin daeheung (觸怒強神 大凶)", dan tidak bisa dicegah sepenuhnya hanya dengan prompt.
Selain itu, ada kecenderungan untuk ter-anchoring pada tafsir mazhab tertentu lalu mendistorsi teks asli, terlalu memperindah pembacaan yang buruk, atau sebaliknya memperbesar rasa cemas. Menyerahkan penilaian berbasis aturan pada pattern matching LLM adalah masalah yang sejenis dengan meminta model bahasa mengerjakan aritmetika.
Engine Hojak: aturan di kode, penjelasan saja di LLM
Karena itu saya merancang struktur berlapis.
Ho (虎) — rule engine. Logika perhitungan myeongri diimplementasikan dalam kode. Setelah menetapkan per domain tafsir mana yang dijadikan acuan di antara perbedaan penafsiran dalam 5 kitab klasik utama (Jeokcheonsu, Japyeongjinjeon, Gungtongbogam, Sammyeongtonghoe, Yeonhaejapyeong), keputusan tersebut dipatok dalam kode.
Jak (鵲) — layer penjelasan LLM. LLM hanya menangani bagian yang mengubah data terstruktur hasil perhitungan engine menjadi bahasa alami.
Yang sulit direproduksi LLM bukanlah kodenya, melainkan standar penilaian yang telah diasah selama ribuan tahun.
Titik saat batas vibe coding muncul
Awalnya semuanya berjalan mulus. LLM membantu dengan cepat untuk analisis kitab klasik berbahasa Tionghoa, perapihan mazhab, hingga draf awal kode perhitungan astronomi. Batasnya muncul saat aturan antarmazhab saling bertentangan.
Sebagai contoh, dalam penentuan gyeokguk (格局), Jeokcheonsu lebih dulu melihat kuat-lemahnya ilgan, sedangkan Japyeongjinjeon lebih dulu melihat wollyeong tuechul. Untuk saju yang sama, ada kasus di mana keputusan berbalik tergantung kitab mana yang diikuti, dan urutan prioritas ini bukan wilayah yang bisa diputuskan oleh LLM.
Pada akhirnya saya harus memperoleh dan membandingkan langsung kelima kitab tersebut. Karena ada sebagian versi yang tidak lengkap atau sulit dibaca, saya melalui proses validasi silang atas beberapa edisi. Ternyata upaya pelestarian klasik sebagai proyek nasional sudah cukup besar, tetapi tetap saja ini pekerjaan yang sulit ditanggung individu tanpa bantuan LLM. Saya hampir menghabiskan batas Claude Max x20 selama hampir 3 bulan penuh.
Hal yang menarik, dalam kebanyakan kasus pemindahan teks yang keliru justru berasal dari manusia (para sarjana). Cara membaca kalimat Jeokcheonsu, "旺者宜泄, 唯有情有力者可克", dapat mengubah sendiri percabangan algoritme; di sini LLM justru berguna untuk membandingkan silang terjemahan berbagai sarjana dan anotasi teks aslinya.
Presisi waktu: 1 menit dapat mengubah keputusan
Dalam myeongri, selisih 1 menit waktu dapat mengubah penilaian inti. Jika pilar jam berubah di batas antara jasi (子時) dan chuksi (丑時), maka penentuan gyeokguk itu sendiri bisa berubah.
Engine Hojak menggabungkan persamaan waktu deret Fourier berbasis NASA/JPL (presisi ±13 detik), penentuan DST global berbasis IANA tzdata, dan basis data bujur untuk 163.400+ kota. Untuk Korea, sistem ini mencerminkan 4 kali perubahan bujur standar sejak 1908 dan riwayat daylight saving selama 12 tahun.
Secara pribadi, saya sangat terkesan ketika menemukan rumus koreksi bujur yang identik dengan kode saat ini dalam catatan resmi Gwansanggam era Joseon (Seoungwanji).
Status verifikasi
Perhitungan jeolgi cocok 100% saat dibandingkan dengan data resmi Korea Astronomy and Space Science Institute (KASI) untuk rentang 2000–2050. Persamaan waktu mencapai presisi ±13 detik berbasis NASA/JPL Horizons. Untuk sinsal, saya menetapkan versi ortodoks Sipisin-sal (berbasis Sammyeongtonghoe) dan hasilnya 100% cocok dengan manse-ryeok. Sementara itu, gwiinsal dan teuksusal diterapkan setelah validasi silang kitab klasik dengan klasifikasi 3 tingkat: orthodox / disputed / reference.
Tech stack
Engine menggunakan Python FastAPI + PostgreSQL + SQLAlchemy 2.0(async), sementara frontend menggunakan Next.js 15 + React 19 + TypeScript + Tailwind CSS. Untuk AI, sistem memakai multi-model via OpenRouter (GPT-4o, Claude, DeepSeek V3) hanya pada layer penjelasan. Deployment menggunakan Fly.io(Blue-Green) + Vercel, dan pembayaran menggunakan Toss Payments + PayPal.
Saat ini sistem menghasilkan laporan terstruktur berskala 30.000+ karakter untuk analisis saju-palja dan 20.000+ karakter untuk analisis tahunan, dengan data kelahiran disimpan dalam keadaan terenkripsi.
Penutup
Ada berbagai sudut pandang tentang validitas prediktif myeongri. Proyek ini berfokus bukan pada perdebatan itu, melainkan pada tantangan rekayasa: "jika sistem ini hendak digunakan, mari hitung secara konsisten dengan standar yang akurat sesuai maksud aslinya."
Awalnya ini dimulai ringan dengan vibe coding, tetapi pada akhirnya saya sampai menganalisis lima kitab klasik utama dan bahkan menelaah kode persamaan waktu NASA/JPL. Meminjam ungkapan Yegge, kepadatan insight yang terkompres di domain ini ternyata jauh lebih tinggi dari perkiraan.
Pertanyaan teknis maupun feedback sangat saya sambut.
3 komentar
Peruntungan dekade saya sedang kurang bagus jadi agak sedih... Biasanya urutan palja secara umum adalah jam, hari, bulan, tahun, tetapi layanan ini justru kebalikannya, jadi ada sisi yang sedikit membingungkan. Kalau memang tidak ada maksud khusus, bagaimana kalau diubah ke susunan yang umum?
Setelah Anda menyampaikan hal itu, saya langsung mengubahnya kembali ke urutan si-il-wol-tahun. Karena sedang mengerjakan hal lain, baru sekarang saya sempat mengemas dan merilisnya. Terima kasih.
Setelah dianalisis, ternyata memang orang-orang yang sudah memiliki minat pada saju lebih bisa berempati secara mendalam dengan kontennya, dan juga menggunakan layanannya lebih lama. Pada awalnya, karena ambisi ingin membuatnya "mudah bahkan bagi orang yang tidak mengenal saju", saya mengubah urutannya, dan itu adalah keputusan yang keliru. Berkat masukan Anda, saya bisa segera meluruskan arahnya. Sekali lagi, terima kasih.
Anda benar soal urutan susunannya. Pada awalnya, agar orang yang belum familiar dengan saju bisa memeriksa tahun, bulan, tanggal, dan jam lahirnya secara intuitif, saya menatanya dalam urutan waktu (tahun-bulan-tanggal-jam), tetapi tampaknya cukup banyak orang yang sudah terbiasa dengan susunan saju sehingga justru menimbulkan kebingungan.
Dalam naskah klasik pun urutan bakunya adalah jam-hari-bulan-tahun, jadi saya akan secara serius mempertimbangkan untuk mengubahnya. Ini benar-benar masukan yang penting,
terima kasih atas umpan baliknya!
Dan Anda mengatakan bahwa sekarang adalah periode daewoon yang tidak mudah, tetapi dalam myeongri, daewoon adalah arus besar, dan di dalamnya ada perubahan sewoon (歲運). Bahkan di tengah daewoon yang sulit, saat bertemu yongsin pasti akan datang, jadi semoga Anda dapat menangkap peluang itu dengan baik.