<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nugroho Ardi Sutrisno</title>
    <description>The latest articles on DEV Community by Nugroho Ardi Sutrisno (@ardisaurus).</description>
    <link>https://dev.to/ardisaurus</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F343086%2F5de8e835-a9f6-461c-979d-c948953efd29.jpg</url>
      <title>DEV Community: Nugroho Ardi Sutrisno</title>
      <link>https://dev.to/ardisaurus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ardisaurus"/>
    <language>en</language>
    <item>
      <title>Bikin Chatbot Sendiri yang Bisa Jawab Pertanyaan dari Dokumen kamu</title>
      <dc:creator>Nugroho Ardi Sutrisno</dc:creator>
      <pubDate>Thu, 21 May 2026 09:50:26 +0000</pubDate>
      <link>https://dev.to/ardisaurus/bikin-chatbot-sendiri-yang-bisa-jawab-pertanyaan-dari-dokumen-kamu-5464</link>
      <guid>https://dev.to/ardisaurus/bikin-chatbot-sendiri-yang-bisa-jawab-pertanyaan-dari-dokumen-kamu-5464</guid>
      <description>&lt;p&gt;Di tulisan ini kita akan membahas soal sebuah proyek kecil bernama &lt;strong&gt;Simple RAG Chatbot&lt;/strong&gt;. Tujuannya sederhana: bikin chatbot yang bisa menjawab pertanyaan berdasarkan dokumen yang &lt;strong&gt;kamu&lt;/strong&gt; punya — bukan ngarang dari pengetahuan model. Cocok buat kamu yang baru pertama kali denger istilah RAG dan pengen tahu cara kerjanya tanpa pusing.&lt;/p&gt;

&lt;p&gt;Repository proyek aplikasi : &lt;a href="https://github.com/ardisaurus/simple-rag-chatbot" rel="noopener noreferrer"&gt;https://github.com/ardisaurus/simple-rag-chatbot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiynskue1iwrcz9iclewp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiynskue1iwrcz9iclewp.gif" alt="demo project" width="800" height="840"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Masalah yang Ingin Diselesaikan
&lt;/h2&gt;

&lt;p&gt;Coba bayangin kamu punya banyak banget dokumentasi produk: file Markdown, catatan teknis, panduan instalasi, FAQ. Setiap kali ada orang baru gabung, mereka selalu nanya hal yang sebenernya udah ada di dokumen — tapi siapa juga yang sempat baca semuanya?&lt;/p&gt;

&lt;p&gt;Solusi instan yang mungkin terlintas: "kasih aja ke ChatGPT terus suruh jawab." Tapi ada dua masalah:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model AI seperti ChatGPT &lt;strong&gt;tidak tahu&lt;/strong&gt; isi dokumen pribadimu.&lt;/li&gt;
&lt;li&gt;Kalau kamu paste seluruh dokumen ke chat, biayanya mahal dan sering kepotong limit token.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Di sinilah teknik bernama &lt;strong&gt;RAG&lt;/strong&gt; masuk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa Itu RAG?
&lt;/h2&gt;

&lt;p&gt;RAG kepanjangannya &lt;strong&gt;Retrieval-Augmented Generation&lt;/strong&gt;. Kedengeran ribet, padahal idenya simpel banget:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval&lt;/strong&gt; (pengambilan): cari potongan dokumen yang paling relevan dengan pertanyaan user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Augmented&lt;/strong&gt; (diperkaya): tempelin potongan itu ke prompt yang dikirim ke LLM (model bahasa besar).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generation&lt;/strong&gt; (pembuatan jawaban): LLM jawab berdasarkan potongan yang barusan dia terima.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Jadi LLM-nya gak perlu hapal seluruh dokumenmu. Dia cuma perlu baca beberapa paragraf yang relevan untuk setiap pertanyaan. Hemat token, hemat biaya, dan jawabannya jadi lebih akurat karena ada bukti sumbernya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Komputer Cari Potongan yang Relevan: Embeddings
&lt;/h2&gt;

&lt;p&gt;Pertanyaannya: gimana komputer tau potongan dokumen mana yang relevan sama pertanyaan user?&lt;/p&gt;

&lt;p&gt;Jawabannya pakai konsep &lt;strong&gt;embeddings&lt;/strong&gt;. Embedding itu cara mengubah teks menjadi sebuah deretan angka (vektor) yang merepresentasikan &lt;strong&gt;makna&lt;/strong&gt; teks tersebut. Dua kalimat yang artinya mirip akan menghasilkan vektor yang mirip juga, walaupun kata-katanya berbeda.&lt;/p&gt;

&lt;p&gt;Contoh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How do I install the product?" → &lt;code&gt;[0.12, -0.34, 0.88, ...]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;"Cara memasang aplikasinya gimana?" → &lt;code&gt;[0.11, -0.33, 0.86, ...]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Walaupun bahasanya beda, vektornya berdekatan karena maknanya mirip.&lt;/p&gt;

&lt;p&gt;Lalu kita simpan semua vektor dokumen di sebuah &lt;strong&gt;vector database&lt;/strong&gt;. Saat user nanya, kita ubah pertanyaannya jadi vektor, terus cari vektor dokumen yang paling dekat. Itulah potongan yang paling relevan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools yang Dipakai di Proyek Ini
&lt;/h2&gt;

&lt;p&gt;Aku sengaja pilih tools yang gratis atau super murah supaya kamu bisa self-hosting di laptop sendiri:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js (App Router)&lt;/strong&gt; — framework React untuk bikin web app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; — biar kode lebih aman dan mudah di-maintain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LangChain.js&lt;/strong&gt; — library yang mempermudah semua langkah RAG: split dokumen, bikin embedding, retrieval, sampai panggil LLM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChromaDB&lt;/strong&gt; — vector database yang bisa jalan lokal pakai Docker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenRouter&lt;/strong&gt; — gateway buat berbagai LLM (GPT, Claude, Llama, dll). Bayar per token, dan model default-nya cuma beberapa rupiah per pertanyaan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@xenova/transformers&lt;/strong&gt; — library untuk bikin embedding &lt;strong&gt;langsung di laptopmu&lt;/strong&gt;, tanpa API. Jadi gak perlu langganan OpenAI cuma buat embedding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; — supaya tampilannya rapi tanpa nulis CSS panjang.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Format Dokumen yang Didukung &amp;amp; Batasannya
&lt;/h2&gt;

&lt;p&gt;Sebelum kita masuk ke alur teknisnya, penting kamu tahu dulu &lt;strong&gt;dokumen apa aja yang bisa diproses&lt;/strong&gt; sama proyek ini, dan apa aja &lt;strong&gt;batasan&lt;/strong&gt; dari implementasi sekarang. Jangan sampai kamu masukin file PDF terus heran kenapa chatbot-nya jawab "saya tidak tahu" — ternyata file-nya emang gak pernah ke-index.&lt;/p&gt;

&lt;h3&gt;
  
  
  Format yang Didukung Saat Ini
&lt;/h3&gt;

&lt;p&gt;Hanya tiga ekstensi yang dibaca oleh script ingest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.md&lt;/code&gt; — Markdown standar.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.markdown&lt;/code&gt; — sama aja, beda ekstensi.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.txt&lt;/code&gt; — teks polos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Daftar ini didefinisikan di &lt;code&gt;lib/ingest.ts&lt;/code&gt; sebagai &lt;code&gt;SUPPORTED_EXTENSIONS&lt;/code&gt;. File dengan ekstensi lain akan &lt;strong&gt;di-skip diam-diam&lt;/strong&gt; (tanpa warning) saat script jalan menjelajahi folder. Subfolder ikut dibaca rekursif, jadi kamu bebas mengelompokkan dokumen ke dalam beberapa folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Format yang Belum Didukung
&lt;/h3&gt;

&lt;p&gt;Berikut yang &lt;strong&gt;belum&lt;/strong&gt; bisa langsung kamu masukin tanpa modifikasi kode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PDF&lt;/strong&gt; — perlu library tambahan kayak &lt;code&gt;pdf-parse&lt;/code&gt;. Cara nambahinnya udah dijelasin di file &lt;code&gt;data/docs/wiki/08-extending.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DOCX / Office documents&lt;/strong&gt; — perlu parser tersendiri (misal &lt;code&gt;mammoth&lt;/code&gt; untuk DOCX).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML&lt;/strong&gt; — bisa diproses, tapi butuh parser untuk strip tag HTML supaya yang ke-embed cuma teksnya.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MDX&lt;/strong&gt; — walaupun mirip Markdown, ekstensinya &lt;code&gt;.mdx&lt;/code&gt; jadi gak akan ke-pickup. Kalau kamu yakin gak ada JSX di dalamnya, gampang aja: tambahin &lt;code&gt;.mdx&lt;/code&gt; ke &lt;code&gt;SUPPORTED_EXTENSIONS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gambar / scan / screenshot&lt;/strong&gt; — proyek ini gak punya OCR. Kalau dokumenmu berbentuk gambar, perlu pipeline tambahan (misal Tesseract atau API OCR) untuk ngubah jadi teks dulu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSV / spreadsheet / JSON terstruktur&lt;/strong&gt; — bisa di-index sebagai teks polos, tapi hasilnya kurang optimal karena splitter-nya gak paham struktur tabel.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cara Kerja Aplikasinya, Step by Step
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Ingestion: Masukin Dokumen ke Database
&lt;/h3&gt;

&lt;p&gt;Pertama, kita siapin semua dokumen di folder &lt;code&gt;data/docs/&lt;/code&gt;. Bisa Markdown atau TXT. Lalu jalanin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run ingest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yang terjadi di balik layar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Script jalanin &lt;strong&gt;walk&lt;/strong&gt; di folder &lt;code&gt;data/docs/&lt;/code&gt;, ngambil semua file yang didukung.&lt;/li&gt;
&lt;li&gt;Setiap file dipotong-potong jadi chunk kecil (sekitar 1000 karakter, dengan overlap 150 karakter biar konteksnya gak putus).&lt;/li&gt;
&lt;li&gt;Setiap chunk diubah jadi vektor pakai model embedding lokal.&lt;/li&gt;
&lt;li&gt;Vektor + chunk + metadata (nama file, nomor chunk) disimpan ke Chroma.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sekarang Chroma punya "ingatan" tentang dokumenmu, siap dipakai untuk pencarian.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Pertanyaan dari User
&lt;/h3&gt;

&lt;p&gt;User buka &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;, ketik pertanyaan, terus pencet enter. Pertanyaan itu dikirim ke &lt;code&gt;/api/chat&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Retrieval: Cari Chunk yang Relevan
&lt;/h3&gt;

&lt;p&gt;Backend ngambil pertanyaan, ubah jadi vektor pakai model embedding yang sama, lalu tanya ke Chroma: "kasih aku 5 chunk yang vektornya paling dekat dengan ini."&lt;/p&gt;

&lt;p&gt;Chroma balikin 5 chunk beserta metadata-nya.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Generation: Tanya ke LLM
&lt;/h3&gt;

&lt;p&gt;5 chunk tadi dirakit jadi sebuah prompt seperti ini (disederhanakan):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kamu adalah asisten dokumentasi. Jawab HANYA berdasarkan konteks
berikut. Kalau jawabannya tidak ada di konteks, bilang kamu tidak tahu.

Konteks:
[1] (instalasi.md #0) Untuk memasang aplikasi, unduh installer ...
[2] (instalasi.md #1) Setelah terpasang, jalankan dari menu ...
[3] ...

Pertanyaan: Bagaimana cara memasang aplikasinya?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt itu dikirim ke OpenRouter, dan model jawab berdasarkan konteks yang udah dikasih. Karena ada instruksi tegas "jawab hanya dari konteks", model gak akan ngarang.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Streaming: Jawaban Muncul Sedikit-Sedikit
&lt;/h3&gt;

&lt;p&gt;Daripada nunggu jawaban full baru ditampilkan, jawabannya &lt;strong&gt;distreaming&lt;/strong&gt; token per token ke browser. User langsung lihat huruf demi huruf mengalir, mirip pengalaman ChatGPT. Lebih enak dilihat dan kerasa cepat.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Sumber Ditampilkan
&lt;/h3&gt;

&lt;p&gt;Di bawah setiap jawaban ada tombol "Sources" yang bisa diklik. Isinya daftar chunk yang dipakai untuk menjawab, lengkap dengan nama file dan nomor chunk-nya. Jadi user bisa verifikasi jawaban si bot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kenapa Pilihan Teknisnya Begini?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kenapa embedding-nya lokal, bukan pakai OpenAI?
&lt;/h3&gt;

&lt;p&gt;Karena bisa &lt;strong&gt;gratis&lt;/strong&gt;. Model &lt;code&gt;Xenova/all-MiniLM-L6-v2&lt;/code&gt; cukup pintar buat dokumentasi pendek, ukurannya kecil (~30 MB), dan jalan langsung di Node.js tanpa internet. Cocok buat self-hosting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kenapa LLM-nya pakai OpenRouter?
&lt;/h3&gt;

&lt;p&gt;OpenRouter ngasih akses ke banyak model dengan satu API key. Kamu bisa ganti dari &lt;code&gt;gpt-4o-mini&lt;/code&gt; ke &lt;code&gt;claude-3.5-sonnet&lt;/code&gt; ke &lt;code&gt;llama-3.1&lt;/code&gt; cuma dengan ubah satu env var. Bagus buat eksperimen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kenapa Chroma, bukan Pinecone atau Weaviate?
&lt;/h3&gt;

&lt;p&gt;Chroma gratis, jalan lokal, dan setup-nya cuma satu perintah Docker. Untuk skala kecil-menengah (puluhan ribu chunk) udah lebih dari cukup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kenapa wipe-and-replace saat ingest, bukan update incremental?
&lt;/h3&gt;

&lt;p&gt;Biar simpel. Kalau ada file yang dihapus atau di-rename, gak akan ada chunk orphan yang tertinggal. Untuk dokumentasi yang gak terlalu besar, re-ingest cepat banget — hitungan detik.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Coba di Laptopmu
&lt;/h2&gt;

&lt;p&gt;Singkat aja, langkah-langkahnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Install dependency&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# 2. Setup env (isi OPENROUTER_API_KEY dari https://openrouter.ai/keys)&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env

&lt;span class="c"&gt;# 3. Jalanin Chroma di Docker&lt;/span&gt;
npm run chroma

&lt;span class="c"&gt;# 4. Index dokumentasi sample yang udah disediain&lt;/span&gt;
npm run ingest

&lt;span class="c"&gt;# 5. Jalanin aplikasinya&lt;/span&gt;
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buka &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;, tanya apa aja soal dokumentasi yang udah di-index. Misalnya: "What is the default chunk size?"&lt;/p&gt;

&lt;h3&gt;
  
  
  Batasan Lain yang Perlu Dipahami
&lt;/h3&gt;

&lt;p&gt;Selain soal format file, ada beberapa batasan implementasi yang penting kamu tahu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encoding harus UTF-8.&lt;/strong&gt; Kalau file &lt;code&gt;.txt&lt;/code&gt; kamu disimpan dalam encoding lain (misal Windows-1252), karakter non-ASCII (è, ñ, é, dll) bisa berantakan saat dibaca.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Splitter berbasis karakter, bukan struktur.&lt;/strong&gt; Splitter default-nya &lt;code&gt;RecursiveCharacterTextSplitter&lt;/code&gt;, yang motong teks berdasarkan jumlah karakter. Artinya tabel Markdown atau code block panjang bisa kepotong di tengah. Untuk Markdown yang lebih rapi splitnya, kamu bisa ganti ke &lt;code&gt;MarkdownTextSplitter&lt;/code&gt; yang lebih sadar struktur heading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedding model default-nya English-leaning.&lt;/strong&gt; &lt;code&gt;Xenova/all-MiniLM-L6-v2&lt;/code&gt; dilatih dominan pada teks bahasa Inggris. Untuk dokumentasi Bahasa Indonesia, hasilnya masih lumayan tapi gak seoptimal model multilingual. Kalau kualitas pencarian dirasa kurang, ganti ke model multilingual seperti &lt;code&gt;Xenova/multilingual-e5-small&lt;/code&gt; (jangan lupa re-ingest karena dimensi vektornya beda).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ingest itu wipe-and-replace, bukan incremental.&lt;/strong&gt; Setiap kali &lt;code&gt;npm run ingest&lt;/code&gt; dijalankan, seluruh collection di Chroma dihapus dan dibangun ulang dari nol. Konsekuensinya: gak bisa update satu file aja. Tapi enaknya: gak akan ada chunk basi tertinggal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gak ada akses kontrol per-dokumen.&lt;/strong&gt; Semua orang yang bisa akses chatbot akan dapet jawaban dari semua dokumen yang ke-index. Kalau ada dokumen sensitif, pisahin di collection berbeda atau jangan di-index sama sekali.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chunk besar bisa boros token.&lt;/strong&gt; Default &lt;code&gt;CHUNK_SIZE = 1000&lt;/code&gt; karakter × &lt;code&gt;RETRIEVAL_K = 5&lt;/code&gt; chunk = ~5000 karakter konteks per pertanyaan. Kalau modelmu mahal atau context window-nya kecil, turunin salah satu angka itu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Intinya: proyek ini sengaja dibuat &lt;strong&gt;simpel dulu&lt;/strong&gt;. Format yang lebih kompleks dan fitur incremental update memang sengaja gak dimasukin supaya kode-nya tetep gampang dibaca. Kalau butuh, semuanya bisa kamu tambahin sendiri dengan modifikasi kecil di &lt;code&gt;lib/ingest.ts&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;RAG itu konsep yang awalnya kelihatan ribet, padahal intinya cuma: &lt;strong&gt;cari potongan yang relevan, tempelin ke prompt, biarkan LLM jawab berdasarkan itu&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Proyek ini sengaja dibuat &lt;strong&gt;minimal&lt;/strong&gt; dan &lt;strong&gt;mudah dibaca&lt;/strong&gt;. Total kode inti cuma di folder &lt;code&gt;lib/&lt;/code&gt; dan &lt;code&gt;app/&lt;/code&gt; — tiap file punya tanggung jawab yang jelas. Kalau kamu pengen belajar gimana sistem RAG bekerja dari nol, baca aja file-filenya satu per satu, dimulai dari &lt;code&gt;lib/ingest.ts&lt;/code&gt;, lalu &lt;code&gt;lib/rag.ts&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Selamat ngoprek, dan semoga proyek kecil ini bisa jadi titik awal kamu bikin asisten dokumentasi sendiri!&lt;/p&gt;

&lt;p&gt;Repository proyek aplikasi : &lt;a href="https://github.com/ardisaurus/simple-rag-chatbot" rel="noopener noreferrer"&gt;https://github.com/ardisaurus/simple-rag-chatbot&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>rag</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>"Attention Is All You Need" Paper tahun 2017 yang mengubah dunia kecerdasan buatan, dijelaskan tanpa perlu latar belakang teknis.</title>
      <dc:creator>Nugroho Ardi Sutrisno</dc:creator>
      <pubDate>Fri, 10 Apr 2026 07:15:33 +0000</pubDate>
      <link>https://dev.to/ardisaurus/attention-is-all-you-need-paper-tahun-2017-yang-mengubah-dunia-kecerdasan-buatan-dijelaskan-593h</link>
      <guid>https://dev.to/ardisaurus/attention-is-all-you-need-paper-tahun-2017-yang-mengubah-dunia-kecerdasan-buatan-dijelaskan-593h</guid>
      <description>&lt;h2&gt;
  
  
  🌍 Mengapa paper ini begitu penting?
&lt;/h2&gt;

&lt;p&gt;Sebelum 2017, komputer sangat kesulitan memahami dan menghasilkan bahasa manusia. Para peneliti sudah mencoba berbagai pendekatan, tapi semuanya punya masalah mendasar.&lt;/p&gt;

&lt;p&gt;Lalu delapan peneliti Google menulis sebuah paper berjudul "Attention Is All You Need" — dan dunia AI tidak pernah sama lagi. Paper ini memperkenalkan arsitektur bernama Transformer, yang menjadi fondasi dari hampir semua AI bahasa modern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT dan semua model GPT dari OpenAI&lt;/li&gt;
&lt;li&gt;Claude&lt;/li&gt;
&lt;li&gt;Gemini dari Google&lt;/li&gt;
&lt;li&gt;Google Translate versi modern&lt;/li&gt;
&lt;li&gt;Dan ratusan aplikasi AI lainnya&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Analogi : Bayangkan sebelumnya orang mencoba membangun gedung pencakar langit menggunakan bata satu per satu dari bawah. Paper ini seperti menemukan baja dan beton bertulang — material baru yang jauh lebih kuat dan efisien.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  😓 Masalah sebelum Transformer
&lt;/h2&gt;

&lt;p&gt;Untuk memahami solusinya, kita perlu tahu dulu apa masalahnya. Sebelum Transformer, model bahasa menggunakan arsitektur yang disebut RNNRecurrent Neural Network — jaringan saraf yang memproses kata satu per satu secara berurutan (Recurrent Neural Network).&lt;/p&gt;

&lt;p&gt;Bayangkan kamu membaca kalimat ini kata per kata, dan kamu hanya diizinkan mengingat satu catatan kecil yang terus kamu perbarui setiap membaca kata baru. Di akhir kalimat, kamu harus menjawab pertanyaan tentang kata yang ada di awal — tapi catatan kamu sudah berubah berkali-kali!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80604qatifrr87d3wlhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80604qatifrr87d3wlhp.png" alt=" " width="727" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 Apa itu "Attention"?
&lt;/h2&gt;

&lt;p&gt;Konsep paling kunci dalam paper ini adalah mekanisme attention. Idenya intuitif: ketika kamu membaca sebuah kata, kamu secara alami memperhatikan kata-kata lain yang relevan untuk memahaminya.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Contoh Nyata : Dalam kalimat "Kucing itu duduk di atas matras karena ia lelah" — untuk memahami kata "ia", kamu secara otomatis melirik ke belakang dan menghubungkannya dengan "Kucing". Itulah persis yang dilakukan attention!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mekanisme attention memungkinkan model untuk melihat semua kata sekaligus dan menentukan kata mana yang paling relevan untuk memahami sebuah kata tertentu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rumus Attention (tidak perlu panik!)&lt;/strong&gt;&lt;br&gt;
Secara matematis, attention dihitung dengan rumus sederhana:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm4ixlkmv0h5zs13nwm6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm4ixlkmv0h5zs13nwm6v.png" alt=" " width="755" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terjemahannya dalam bahasa manusia:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Q (Query) = "Apa yang sedang aku cari?"&lt;/li&gt;
&lt;li&gt;K (Key) = "Apa yang dimiliki setiap kata?"&lt;/li&gt;
&lt;li&gt;V (Value) = "Informasi apa yang ingin kubawa jika relevan?"&lt;/li&gt;
&lt;li&gt;Hitung seberapa cocok Query dengan setiap Key → dapat skor&lt;/li&gt;
&lt;li&gt;Gunakan skor itu untuk mengambil Value yang proporsional&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🎯 Multi-Head Attention
&lt;/h2&gt;

&lt;p&gt;Satu mekanisme attention saja tidak cukup, karena setiap kata punya banyak aspek yang perlu diperhatikan secara bersamaan. Transformer menggunakan Multi-Head Attention — beberapa "kepala" attention yang bekerja paralel, masing-masing fokus pada aspek yang berbeda.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kepala Sintaksis : Kepala ini fokus pada hubungan tata bahasa, subjek-predikat, kata sifat-kata benda. Seperti seorang ahli tata bahasa yang menganalisis struktur kalimat.&lt;/li&gt;
&lt;li&gt;Kepala Referensi : Kepala ini ahli mencari referensi kata ganti, menemukan bahwa "ia", "mereka", atau "itu" merujuk ke entitas mana. Sangat penting untuk pemahaman konteks.&lt;/li&gt;
&lt;li&gt;Kepala Kedekatan : Kepala ini memperhatikan kata-kata yang berdekatan secara posisi, frasa seperti "di atas", "sangat cepat", atau "meja kayu". Tangkap hubungan lokal.&lt;/li&gt;
&lt;li&gt;Kepala Semantik : Kepala ini fokus pada makna, menghubungkan kata-kata yang memiliki hubungan semantik seperti tindakan dengan pelakunya atau benda dengan sifatnya.&lt;/li&gt;
&lt;li&gt;Kepala Temporal : Kepala ini sensitif terhadap hubungan waktu dan urutan kejadian dalam teks kata kerja, kata keterangan waktu, dan kausalitas.&lt;/li&gt;
&lt;li&gt;Kepala Konteks : Kepala ini punya jangkauan luas, menghubungkan tema utama paragraph atau dokumen, menjaga koherensi global teks.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🏗️ Arsitektur Transformer
&lt;/h2&gt;

&lt;p&gt;Transformer terdiri dari dua bagian besar: Encoder (pemahaman) dan Decoder (pembuatan). Untuk tugas terjemahan misalnya, encoder membaca bahasa sumber dan decoder menghasilkan terjemahannya.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. ENCODER&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Encoder Self-Attention
Setiap kata dalam input memperhatikan semua kata lain di kalimat yang sama. Ini membangun pemahaman konteks yang kaya — "bank" dalam "bank sungai" vs "bank uang" akan berbeda representasinya.&lt;/li&gt;
&lt;li&gt;Feed-Forward
Proses tiap kata&lt;/li&gt;
&lt;li&gt;Layer Normalization
Normalisasi memastikan nilai tidak meledak atau mengecil saat data melewati banyak lapisan. Tanpa ini, training bisa tidak stabil. Juga ada "residual connections" (skip connections) yang membantu gradient mengalir.&lt;/li&gt;
&lt;li&gt;Output Encoder
Encoder menghasilkan representasi kontekstual yang kaya untuk setiap kata input. Bukan lagi sekadar "embeddings" statis, tapi representasi yang sudah memahami konteks penuh kalimat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;B. DECODER&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Masked Self-Attention
Kata yang sudah ada&lt;/li&gt;
&lt;li&gt;Cross-Attention — Jembatan Encoder↔Decoder
Bagian paling krusial! Decoder menggunakan output yang sedang dihasilkan sebagai Query dan seluruh output encoder sebagai Key+Value. Model secara eksplisit memilih bagian mana dari input yang relevan untuk setiap langkah decoding.&lt;/li&gt;
&lt;li&gt;Decoder Feed-Forward
Sama seperti encoder, lapisan ini memproses setiap posisi secara independen setelah informasi dari kedua attention layers digabungkan.&lt;/li&gt;
&lt;li&gt;Feed-forward
Proses gabungan info&lt;/li&gt;
&lt;li&gt;Softmax Output
Output akhir adalah distribusi probabilitas atas seluruh kosakata (bisa ratusan ribu kata!). Kata dengan probabilitas tertinggi dipilih, atau kita bisa "sampling" untuk variasi. Proses ini berulang sampai kalimat selesai.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yn40o8dzegb0onwn62c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yn40o8dzegb0onwn62c.png" alt=" " width="649" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📍 Positional Encoding
&lt;/h2&gt;

&lt;p&gt;Ada satu masalah kecil: karena Transformer memproses semua kata secara paralel (bukan berurutan), model tidak tahu kata mana yang datang pertama, kedua, atau ketiga. Ini seperti dikasih kartu yang sudah diacak — kamu tidak tahu urutannya!&lt;/p&gt;

&lt;p&gt;Solusinya: tambahkan informasi posisi ke setiap kata sebelum diproses. Paper ini menggunakan fungsi sinus dan cosinus untuk mengkodekan posisi ini.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Intuisi Sederhana Setiap posisi mendapat "cap" numerik yang unik, seperti nomor kursi di bioskop. Model belajar menggunakan cap ini untuk memahami urutan dan jarak antar kata.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📊 Hasil yang Menakjubkan
&lt;/h2&gt;

&lt;p&gt;Ketika paper ini pertama dirilis, hasilnya membuat komunitas riset terkejut. Transformer tidak hanya lebih baik — ia jauh lebih baik, dengan waktu training yang lebih singkat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ibptl3701b6zirkh4ml.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ibptl3701b6zirkh4ml.png" alt=" " width="771" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎓 Apa yang sudah kita pelajari?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmnhgbmjjjgxfa09v2ubl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmnhgbmjjjgxfa09v2ubl.png" alt=" " width="760" height="617"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Mau belajar lebih lanjut?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://arxiv.org/abs/1706.03762" rel="noopener noreferrer"&gt;Paper asli "Attention Is All You Need" (arXiv)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://jalammar.github.io/illustrated-transformer/" rel="noopener noreferrer"&gt;The Illustrated Transformer — Jay Alammar (visualisasi cantik, bahasa Inggris)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=iDulhoQ2pro" rel="noopener noreferrer"&gt;Andrej Karpathy: Let's build GPT from scratch (YouTube)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>nlp</category>
    </item>
    <item>
      <title>Hipotesis Tiket Lotre: Penemuan Jaringan Saraf Jarang yang Dapat Dilatih dengan Efisien</title>
      <dc:creator>Nugroho Ardi Sutrisno</dc:creator>
      <pubDate>Sat, 14 Mar 2026 04:56:49 +0000</pubDate>
      <link>https://dev.to/ardisaurus/hipotesis-tiket-lotre-penemuan-jaringan-saraf-jarang-yang-dapat-dilatih-dengan-efisien-39cm</link>
      <guid>https://dev.to/ardisaurus/hipotesis-tiket-lotre-penemuan-jaringan-saraf-jarang-yang-dapat-dilatih-dengan-efisien-39cm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hipotesis Tiket Lotre&lt;/strong&gt; (Lottery Ticket Hypothesis) merupakan konsep revolusioner dalam bidang kecerdasan buatan, yang pertama kali diperkenalkan oleh Jonathan Frankle dan Michael Carbin pada tahun 2018. Konsep ini mengungkap potensi efisiensi luar biasa dalam pelatihan jaringan saraf buatan (neural networks). Artikel ini menyajikan penjelasan yang mudah dipahami bagi pemula, dengan analogi sederhana dan ilustrasi visual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pengertian Hipotesis Tiket Lotre
&lt;/h2&gt;

&lt;p&gt;Hipotesis ini menganalogikan jaringan saraf besar sebagai kumpulan tiket lotre. Sebagian besar tiket tidak berguna, tetapi terdapat sub-jaringan jarang (sparse subnetwork) yang, jika diidentifikasi dan dilatih secara terpisah, mampu mencapai performa setara dengan jaringan penuh.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jaringan saraf terdiri dari jutaan parameter (bobot koneksi antar-neuron).&lt;/li&gt;
&lt;li&gt;Pada inisialisasi acak, sub-jaringan kecil (10-20% parameter) sudah "berpotensi menang".&lt;/li&gt;
&lt;li&gt;Fakta kunci: Sub-jaringan ini, setelah dipisahkan, dapat dilatih dengan sumber daya minimal tanpa mengorbankan akurasi.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ilustrasi 1: Analogi Tiket Lotre
&lt;/h2&gt;

&lt;p&gt;Bayangkan sebuah kotak berisi 1.000 tiket lotre. Hanya satu tiket pemenang. Demikian pula, dari jaringan saraf dengan jutaan parameter, hanya sub-jaringan kecil yang "pemenang".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy017hg9urm5ji5zjq87v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy017hg9urm5ji5zjq87v.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Signifikansi bagi Pemula di Bidang AI
&lt;/h2&gt;

&lt;p&gt;Konsep ini memiliki implikasi praktis yang signifikan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Efisiensi Komputasi: Mengurangi kebutuhan GPU/CPU hingga 10 kali lipat.&lt;/li&gt;
&lt;li&gt;Aksesibilitas: Memungkinkan pelatihan model di perangkat sederhana, seperti laptop standar.&lt;/li&gt;
&lt;li&gt;Keberlanjutan: Menghemat energi, relevan di era komputasi ramah lingkungan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh: Pada dataset pengenalan gambar CIFAR-10, sub-jaringan dengan 10% parameter mencapai akurasi &amp;gt;90%, setara model penuh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mekanisme Kerja: Proses Langkah demi Langkah
&lt;/h2&gt;

&lt;p&gt;Proses pencarian "tiket pemenang" dilakukan secara sistematis:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inisialisasi jaringan saraf besar secara acak.&lt;/li&gt;
&lt;li&gt;Latih sementara (1-2 epoch) untuk mengidentifikasi bobot penting.&lt;/li&gt;
&lt;li&gt;Pemangkasan (pruning): Hilangkan 80-90% bobot terkecil.&lt;/li&gt;
&lt;li&gt;Reset bobot sub-jaringan ke inisialisasi awal, lalu latih ulang.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Ilustrasi 2: Diagram Proses (Mermaid)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ztckuye9chdn1u1ryk2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ztckuye9chdn1u1ryk2.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diagram ini menggambarkan alur efisien, di mana output akhir (hijau) adalah model jarang yang superior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dampak dan Prospek Masa Depan
&lt;/h2&gt;

&lt;p&gt;Hipotesis ini telah diadopsi dalam framework seperti PyTorch dan TensorFlow, dengan aplikasi pada model besar seperti Transformer. Penelitian terkini (hingga 2025) menunjukkan keberhasilannya pada large language models (LLM). Tantangan utama meliputi konsistensi lintas arsitektur dan skalabilitas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;Hipotesis Tiket Lotre menegaskan prinsip kualitas mengungguli kuantitas dalam pengembangan AI. Bagi praktisi pemula, konsep ini mendorong eksplorasi implementasi langsung melalui repositori open-source. Unduh paper asli di &lt;a href="https://arxiv.org/abs/1803.03635" rel="noopener noreferrer"&gt;arXiv:1803.03635&lt;/a&gt; untuk studi lebih lanjut.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Dari Matematika Murni ke Enkripsi: Bagaimana G. H. Hardy Secara Tak Sengaja Menggerakkan Kriptografi Modern</title>
      <dc:creator>Nugroho Ardi Sutrisno</dc:creator>
      <pubDate>Thu, 04 Dec 2025 06:52:16 +0000</pubDate>
      <link>https://dev.to/ardisaurus/dari-matematika-murni-ke-enkripsi-bagaimana-g-h-hardy-secara-tak-sengaja-menggerakkan-4go6</link>
      <guid>https://dev.to/ardisaurus/dari-matematika-murni-ke-enkripsi-bagaimana-g-h-hardy-secara-tak-sengaja-menggerakkan-4go6</guid>
      <description>&lt;p&gt;Ketika G. H. Hardy (Godfrey Harold Hardy) dengan bangga menyatakan bahwa karyanya dalam &lt;em&gt;matematika murni&lt;/em&gt; tidak akan pernah berguna secara praktis, ia ternyata keliru besar.&lt;/p&gt;

&lt;p&gt;Lebih dari 50 tahun setelah kematiannya, sistem yang mengamankan pesan WhatsApp Anda, melindungi transaksi perbankan online, dan menjaga komunikasi digital global semuanya bergantung pada ide-ide matematika yang pernah ia kembangkan.&lt;/p&gt;

&lt;p&gt;Ironisnya, matematika yang dulu ia sebut sebagai “indah tapi tak berguna” justru menjadi tulang punggung &lt;strong&gt;kriptografi modern&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Artikel ini membahas jembatan tak terduga antara teori bilangan awal abad ke-20 karya Hardy dan skema enkripsi yang mengamankan dunia digital kita saat ini.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔑 Dunia Hardy: Matematika Murni demi Keindahan, Bukan Kegunaan
&lt;/h2&gt;

&lt;p&gt;Hardy adalah penganut kuat &lt;strong&gt;matematika murni&lt;/strong&gt; ilmu yang dikejar demi keindahannya, bukan aplikasinya.&lt;br&gt;&lt;br&gt;
Ia bekerja secara luas pada:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teori bilangan prima&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analisis bilangan&lt;/strong&gt; (analytic number theory)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rumus-rumus asimtotik&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kolaborasi dengan Ramanujan dan Littlewood&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pada masanya, bidang-bidang ini dipandang kaya secara intelektual namun tidak memiliki manfaat praktis.&lt;/p&gt;

&lt;p&gt;Hari ini, bidang yang sama justru menjadi inti dari kriptografi.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Bagaimana Karya Hardy Terhubung dengan Kriptografi Modern
&lt;/h2&gt;

&lt;p&gt;Berikut diagram sederhana untuk memperlihatkan keterkaitannya:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx13ytl77jylcw8tijh6o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx13ytl77jylcw8tijh6o.png" alt="Relation between Hardy's work to modern cryptography" width="800" height="1091"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1️⃣ Teori Bilangan Prima → RSA dan Enkripsi Kunci Publik
&lt;/h2&gt;

&lt;p&gt;Karya Hardy bersama Littlewood menghasilkan pemahaman mendalam tentang distribusi bilangan prima.&lt;/p&gt;

&lt;p&gt;Hal ini sangat penting hari ini karena hampir semua sistem kriptografi kunci publik seperti RSA, Diffie–Hellman, hingga elliptic-curve cryptography (ECC) bergantung pada:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ketersediaan bilangan prima besar&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;kepadatan bilangan prima dalam rentang tertentu&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kesulitan memfaktorkan bilangan komposit besar&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RSA, misalnya, bekerja dengan memilih dua bilangan prima besar dan mengalikannya. Keamanan muncul dari kesulitan memfaktorkan hasil perkalian itu kembali menjadi dua bilangan prima awal yang merupakan fenomena yang dipahami melalui teori bilangan.&lt;/p&gt;




&lt;h2&gt;
  
  
  2️⃣ Analisis Bilangan → Fondasi “Tingkat Kesulitan” dalam Kriptografi
&lt;/h2&gt;

&lt;p&gt;Hardy adalah salah satu pionir &lt;strong&gt;analytic number theory&lt;/strong&gt;, penggunaan analisis matematis untuk mempelajari bilangan bulat.&lt;/p&gt;

&lt;p&gt;Bidang ini menjadi dasar bagi banyak asumsi keamanan dalam kriptografi modern, seperti:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;distribusi bilangan prima
&lt;/li&gt;
&lt;li&gt;struktur aritmetika modular
&lt;/li&gt;
&lt;li&gt;kesulitan logaritma diskrit
&lt;/li&gt;
&lt;li&gt;sifat acak fungsi bilangan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Analisis bilangan menyediakan “medan matematis” tempat algoritma kriptografi berdiri.&lt;/p&gt;




&lt;h2&gt;
  
  
  3️⃣ Metode Asimtotik Hardy–Ramanujan → Analisis Kompleksitas Algoritma
&lt;/h2&gt;

&lt;p&gt;Hardy dan Ramanujan mengembangkan metode canggih untuk memperkirakan pertumbuhan fungsi, yang kini berhubungan dengan &lt;strong&gt;analisis kompleksitas algoritma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Pendekatan ini penting untuk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mengevaluasi performa algoritma kriptografi
&lt;/li&gt;
&lt;li&gt;menentukan ukuran kunci yang aman
&lt;/li&gt;
&lt;li&gt;memperkirakan ketahanan brute-force
&lt;/li&gt;
&lt;li&gt;menganalisis hash dan pseudorandom number generators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teknik-teknik mereka membentuk cara kita memahami keamanan digital secara matematis.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Ironi Terbesar: Matematika “Tak Berguna” Hardy Justru Menjadi Pondasi Dunia Siber
&lt;/h2&gt;

&lt;p&gt;Dalam &lt;em&gt;A Mathematician’s Apology&lt;/em&gt;, Hardy pernah menulis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Saya tidak pernah melakukan sesuatu yang ‘berguna’. Tidak ada penemuan saya yang membuat atau memungkinkan, langsung atau tidak langsung, perbedaan terhadap kenyamanan dunia.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ironisnya, ia tidak mungkin membayangkan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;perbankan online
&lt;/li&gt;
&lt;li&gt;komunikasi terenkripsi
&lt;/li&gt;
&lt;li&gt;tanda tangan digital
&lt;/li&gt;
&lt;li&gt;blockchain
&lt;/li&gt;
&lt;li&gt;belanja internet
&lt;/li&gt;
&lt;li&gt;enkripsi untuk pertahanan dan keamanan nasional
&lt;/li&gt;
&lt;li&gt;komunikasi satelit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Semua bergantung pada teori bilangan, bidang yang ia kembangkan dengan penuh kecintaan.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Kesimpulan
&lt;/h2&gt;

&lt;p&gt;G. H. Hardy tidak pernah membayangkan kriptografi. Namun karya matematisnya yang murni, elegan, dan sengaja tidak praktis menjadi fondasi yang menopang keamanan dunia digital modern.&lt;/p&gt;

&lt;p&gt;Di era ketika miliaran pesan terenkripsi terkirim setiap hari, warisan Hardy semakin terasa hidup.&lt;/p&gt;

&lt;p&gt;Matematikanya yang “tidak berguna” kini menjadi salah satu matematika &lt;strong&gt;paling berguna&lt;/strong&gt; yang pernah dibuat.&lt;/p&gt;

</description>
      <category>cryptography</category>
      <category>math</category>
      <category>history</category>
    </item>
  </channel>
</rss>
