<?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.us-east-2.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 "Otak" AI Agent Bisa Diedit di Obsidian: Panduan Sinkronisasi Dua Arah untuk Pemula</title>
      <dc:creator>Nugroho Ardi Sutrisno</dc:creator>
      <pubDate>Wed, 01 Jul 2026 09:12:53 +0000</pubDate>
      <link>https://dev.to/ardisaurus/bikin-otak-ai-agent-bisa-diedit-di-obsidian-panduan-sinkronisasi-dua-arah-untuk-pemula-4p05</link>
      <guid>https://dev.to/ardisaurus/bikin-otak-ai-agent-bisa-diedit-di-obsidian-panduan-sinkronisasi-dua-arah-untuk-pemula-4p05</guid>
      <description>&lt;p&gt;Pernah kepikiran, "Sebenarnya AI agent saya inget apa aja sih soal saya?" Kalau iya, tulisan ini buat kamu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Masalahnya: Memori AI Itu Kotak Hitam
&lt;/h2&gt;

&lt;p&gt;Kalau kamu pakai AI agent yang punya memori jangka panjang (persistent memory), kamu mungkin pernah ngerasa gak nyaman karena beberapa hal ini:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gak tahu persis apa yang diingat AI tentang kamu&lt;/li&gt;
&lt;li&gt;Gak tahu file-nya disimpan di mana&lt;/li&gt;
&lt;li&gt;Gak bisa edit memori itu tanpa ngetik perintah lewat chat&lt;/li&gt;
&lt;li&gt;Takut kalau file memorinya rusak, semua informasi hilang begitu saja&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Studi kasus di tulisan ini pakai &lt;strong&gt;Hermes Agent&lt;/strong&gt;, agent open-source besutan Nous Research. Sebagai konteks buat yang belum familiar: Hermes Agent adalah agent AI open-source yang berjalan sebagai proses (daemon) mandiri di server milikmu sendiri, mengumpulkan memori lintas sesi, menjalankan tugas terjadwal, terhubung ke belasan platform pesan, dan menulis skill-nya sendiri dari pengalaman. Framework berlisensi MIT ini dirilis Februari 2026 dan dengan cepat menarik perhatian komunitas open-source AI.&lt;/p&gt;

&lt;p&gt;Hermes menyimpan memorinya di dua file utama: &lt;code&gt;USER.md&lt;/code&gt; (profil tentang kamu) dan &lt;code&gt;MEMORY.md&lt;/code&gt; (catatan agent soal lingkungan kerja, kebiasaan, dan pelajaran yang dipetik), plus satu file lagi &lt;code&gt;SOUL.md&lt;/code&gt; untuk "kepribadian" si agent. Semuanya disimpan dalam format teks polos yang dipisah pakai karakter &lt;code&gt;§&lt;/code&gt;, seperti ini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Preferensimu: komunikasi singkat dan langsung
§
Namamu Budi, awal 30-an, tinggal di Surabaya
§
Penggemar PKM / Building a Second Brain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Format ini fungsional, tapi ada beberapa kekurangan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Susah diedit langsung&lt;/strong&gt; karena bukan format yang ramah manusia&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gak ada riwayat versi&lt;/strong&gt; — sekali salah edit, informasi bisa hilang selamanya&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gak ada tampilan visual&lt;/strong&gt; — susah lihat semua catatan sekaligus&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gak ada antarmuka grafis&lt;/strong&gt; — harus lewat chat agent atau edit file mentah&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solusinya: pindahkan memori itu ke &lt;strong&gt;Obsidian&lt;/strong&gt;, aplikasi catatan berbasis markdown yang mendukung riwayat versi lewat git dan bisa diedit bebas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arsitektur Sistemnya
&lt;/h2&gt;

&lt;p&gt;Sistem sinkronisasi ini punya empat lapisan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────┐
│  Memori Hermes   │   ~/.hermes/memories/{USER,MEMORY}.md  (format §)
│  ditulis agent   │   ~/.hermes/SOUL.md                    (teks polos)
└────────┬─────────┘
         │ export / import
         ▼
┌──────────────────┐
│  Mesin sinkron   │   ~/.hermes/scripts/hermes-memory-sync.py
│  (Python)        │   (tanpa dependensi eksternal, cuma stdlib)
└────────┬─────────┘
         │ tulis / baca
         ▼
┌──────────────────┐
│  Vault Obsidian  │   _hermes/{USER,MEMORY,SOUL}.md  (markdown rapi)
│  (bisa diedit)   │   _hermes/skills-index.md        (daftar skill)
│                  │   _hermes/skills/*.md            (skill custom)
└────────┬─────────┘
         │ git commit tiap 6 jam
         ▼
┌──────────────────┐
│  Riwayat Git     │   Jejak lengkap tiap perubahan
└──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poin kuncinya: &lt;strong&gt;pakai Python, bukan bash&lt;/strong&gt;. Karakter &lt;code&gt;§&lt;/code&gt; itu multi-byte di UTF-8, dan bash gampang salah potong kalau dipakai sebagai pemisah (delimiter). Python (&lt;code&gt;re.split()&lt;/code&gt;) menangani ini dengan benar, jadi seluruh mesin sinkronisasi ditulis sebagai satu file Python (sekitar 400 baris) yang cuma pakai library bawaan Python — tidak perlu install apa-apa lagi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Kerjanya
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Export: dari Hermes ke Obsidian
&lt;/h3&gt;

&lt;p&gt;Script membaca file memori Hermes yang dipisah &lt;code&gt;§&lt;/code&gt;, memecahnya jadi entri-entri terpisah, lalu menulis tiap entri sebagai heading &lt;code&gt;## Entry N&lt;/code&gt; di bawah metadata (YAML frontmatter):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hermes-agent&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;user&lt;/span&gt;
&lt;span class="na"&gt;last_synced&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-06-28T17:53:29+07:00&lt;/span&gt;
&lt;span class="na"&gt;entries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gu"&gt;## Entry 1&lt;/span&gt;
Preferensimu: komunikasi singkat dan langsung
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Entry 2&lt;/span&gt;
Namamu Budi, awal 30-an, tinggal di Surabaya
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hasilnya bisa langsung diedit di Obsidian. Vault juga otomatis mendapat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SOUL.md&lt;/code&gt; — identitas/karakter agent, tanpa batas karakter&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;skills-index.md&lt;/code&gt; — tabel semua skill yang terpasang, skill custom ditandai bintang&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;skills/*.md&lt;/code&gt; — file lengkap skill yang dibuat sendiri oleh agent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Import: dari Obsidian kembali ke Hermes
&lt;/h3&gt;

&lt;p&gt;Arahnya bisa dibalik: script membaca heading &lt;code&gt;## Entry N&lt;/code&gt;, buang metadata, gabungkan lagi entri-entri itu pakai pemisah &lt;code&gt;§&lt;/code&gt;, lalu timpa file memori Hermes. Sebelum ditimpa, file lama otomatis disalin dulu sebagai cadangan (&lt;code&gt;.bak.&amp;lt;timestamp&amp;gt;&lt;/code&gt;), jadi tidak ada data yang benar-benar hilang.&lt;/p&gt;

&lt;p&gt;Satu hal penting: Hermes punya batas karakter (1.375 karakter untuk USER, 2.200 untuk MEMORY) supaya jendela konteksnya tetap efisien. Saat proses import, script akan memangkas entri yang kelebihan — tapi salinan lengkapnya tetap disimpan di vault Obsidian.&lt;/p&gt;

&lt;h3&gt;
  
  
  Riwayat Versi Lewat Git
&lt;/h3&gt;

&lt;p&gt;Ada tugas terjadwal (cron) di Hermes yang jalan tiap 6 jam:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes cron create &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;memories-to-obsidian &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;schedule&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'0 */6 * * *'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Run ~/.hermes/scripts/hermes-memory-sync.sh sync'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tiap kali jalan, urutannya: export → &lt;code&gt;git add -A&lt;/code&gt; → &lt;code&gt;git commit&lt;/code&gt;. Hasilnya, kamu punya &lt;code&gt;git log&lt;/code&gt; lengkap dari setiap perubahan memori. Kalau perlu balikin ke versi lama, tinggal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt; _hermes/USER.md           &lt;span class="c"&gt;# cari versi yang mau dipulihkan&lt;/span&gt;
git show &amp;lt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;:_hermes/USER.md &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/restored.md
&lt;span class="nb"&gt;cp&lt;/span&gt; /tmp/restored.md _hermes/USER.md
hermes-memory-sync.sh import
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Panduan Setup (Sekitar 10 Menit)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Buat folder vault
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/Documents/Obsidian&lt;span class="se"&gt;\ &lt;/span&gt;Vault/_hermes
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Documents/Obsidian&lt;span class="se"&gt;\ &lt;/span&gt;Vault
git init
git config user.email &lt;span class="s2"&gt;"kamu@email.com"&lt;/span&gt;
git config user.name &lt;span class="s2"&gt;"Nama Kamu"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'_hermes/*.bak'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .gitignore
git add &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial vault"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Atur lokasi vault
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'OBSIDIAN_VAULT_PATH=$HOME/Documents/Obsidian Vault'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.hermes/.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Baris ini memberi tahu script sinkronisasi ke mana file markdown harus ditulis.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Siapkan script sinkronisasi
&lt;/h3&gt;

&lt;p&gt;Source code memory sync: &lt;a href="https://gist.github.com/ardisaurus/81f392ed46625aa8b950e2f241af535b" rel="noopener noreferrer"&gt;hermes-memory-sync.py&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mesin utamanya ada di &lt;code&gt;~/.hermes/scripts/hermes-memory-sync.py&lt;/code&gt; (Python). Ada juga wrapper shell &lt;code&gt;hermes-memory-sync.sh&lt;/code&gt; yang cuma menyiapkan environment lalu memanggil script Python itu:&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;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;dirname&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;exec &lt;/span&gt;python3 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DIR&lt;/span&gt;&lt;span class="s2"&gt;/hermes-memory-sync.py"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jangan lupa buat executable:&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="nb"&gt;chmod&lt;/span&gt; +x ~/.hermes/scripts/hermes-memory-sync.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Catatan: isi lengkap script Python-nya (~400 baris) biasanya tersedia sebagai referensi skill kalau kamu memang menjalankan Hermes Agent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Export pertama kali
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash ~/.hermes/scripts/hermes-memory-sync.sh &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ini akan mengekspor semua memori yang ada sekarang ke vault, sekaligus bikin commit git pertama.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Pasang cron untuk backup otomatis
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes cron create &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;memories-to-obsidian &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;schedule&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'0 */6 * * *'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Run ~/.hermes/scripts/hermes-memory-sync.sh sync'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Cek hasilnya
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes-memory-sync.sh status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kamu akan lihat jumlah entri, pemakaian karakter, dan log git terbaru.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa Saja yang Bisa Kamu Lakukan?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mau ngapain&lt;/th&gt;
&lt;th&gt;Caranya&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lihat semua yang diingat AI&lt;/td&gt;
&lt;td&gt;Buka &lt;code&gt;_hermes/USER.md&lt;/code&gt; dan &lt;code&gt;_hermes/MEMORY.md&lt;/code&gt; di Obsidian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tambah memori manual&lt;/td&gt;
&lt;td&gt;Tulis blok &lt;code&gt;## Entry N&lt;/code&gt; baru, lalu jalankan &lt;code&gt;hermes-memory-sync.sh import&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hapus memori&lt;/td&gt;
&lt;td&gt;Hapus blok &lt;code&gt;## Entry&lt;/code&gt;-nya, lalu import&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pulihkan memori yang terhapus&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;git log&lt;/code&gt; → &lt;code&gt;git show &amp;lt;hash&amp;gt;:_hermes/USER.md&lt;/code&gt; → pulihkan lalu import&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lihat apa yang berubah&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git diff HEAD~1..HEAD _hermes/USER.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backup ke GitHub&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git remote add origin &amp;lt;url&amp;gt; &amp;amp;&amp;amp; git push&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sinkron ke beberapa vault&lt;/td&gt;
&lt;td&gt;Buat wrapper script dengan &lt;code&gt;OBSIDIAN_VAULT_PATH&lt;/code&gt; berbeda-beda&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Level Lanjutan: Multi-Vault dan Arsip Memori
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dua Vault Sekaligus
&lt;/h3&gt;

&lt;p&gt;Kamu bisa jalankan sinkronisasi ini ke lebih dari satu vault — misalnya satu vault utama dan satu vault "Second Brain" terpisah dengan metode PARA. Masing-masing punya wrapper script dan cron sendiri:&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;# ~/.hermes/scripts/hermes-memory-sync-second-brain.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OBSIDIAN_VAULT_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Documents/Second Brain"&lt;/span&gt;
&lt;span class="nb"&gt;exec &lt;/span&gt;python3 ~/.hermes/scripts/hermes-memory-sync.py &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cron-nya bisa dijalankan dalam mode "no-agent" supaya tidak makan token sama sekali:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes cron create &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;second-brain-sync &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;schedule&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'0 */6 * * *'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;no_agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;script&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hermes-memory-sync-second-brain-cron.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Arsip Memori (Cold Storage)
&lt;/h3&gt;

&lt;p&gt;Kalau memori sudah penuh, ada script pendamping yang bisa memindahkan entri yang jarang dipakai ke vault sebagai arsip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes-memory-archive.py archive USER &lt;span class="s2"&gt;"detail proyek lama"&lt;/span&gt;
hermes-memory-archive.py search USER &lt;span class="s2"&gt;"proyek"&lt;/span&gt;
hermes-memory-archive.py promote USER entry-id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entri yang diarsipkan disimpan sebagai file markdown bertimestamp di &lt;code&gt;_hermes/archive/&lt;/code&gt; — bisa dibaca manusia, dicari, dan dipulihkan kapan saja.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pelajaran yang Bisa Diambil
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bash gak cocok buat karakter &lt;code&gt;§&lt;/code&gt;.&lt;/strong&gt; Karakter ini multi-byte di UTF-8 (byte &lt;code&gt;C2 A7&lt;/code&gt;), sementara &lt;code&gt;IFS&lt;/code&gt; di bash motong berdasarkan byte, jadi hasilnya bisa salah kalau file punya banyak entri. Python (&lt;code&gt;re.split()&lt;/code&gt;) menangani ini dengan benar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ada mekanisme deteksi "drift".&lt;/strong&gt; Tool memori Hermes mengecek apakah file bisa dipecah-gabung ulang secara konsisten lewat pemisah &lt;code&gt;§&lt;/code&gt;. Kalau kamu nulis markdown mentah langsung ke file memori Hermes, tool-nya akan menolak menyimpan perubahan berikutnya dan otomatis bikin snapshot cadangan. Script sinkronisasi ini menghindari masalah itu dengan mengganti nama file asli jadi &lt;code&gt;.bak&lt;/code&gt; sebelum menimpanya.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wajib mulai sesi baru (&lt;code&gt;/new&lt;/code&gt;) setelah import.&lt;/strong&gt; File memori itu cuma "snapshot" yang dimuat sekali di awal sesi. Kalau kamu baru saja import perubahan, sesi yang sedang berjalan masih pakai snapshot lama — harus mulai sesi baru dulu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Batas karakter itu ketat, tapi ada gunanya.&lt;/strong&gt; Batas 1.375 karakter (USER) dan 2.200 karakter (MEMORY) menjaga jendela konteks agent tetap efisien. Salinan di vault tidak punya batas itu, jadi kamu bisa simpan versi lengkap di sana sementara Hermes cuma pegang versi ringkasnya.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Rekomendasi Keamanan Sebelum Kamu Pakai Ini
&lt;/h2&gt;

&lt;p&gt;Sebelum kamu terapkan setup ini, ada beberapa risiko keamanan yang layak dipikirkan dulu — apalagi karena file yang disinkronkan berisi data pribadi (nama, lokasi, kebiasaan, detail proyek) dalam bentuk &lt;strong&gt;teks polos tanpa enkripsi&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Jangan push vault ke repo GitHub publik.&lt;/strong&gt; File &lt;code&gt;_hermes/USER.md&lt;/code&gt; dan &lt;code&gt;_hermes/MEMORY.md&lt;/code&gt; isinya profil pribadi kamu apa adanya. Kalau repo-nya publik, siapa pun bisa baca riwayat git-nya — termasuk versi lama yang sudah "dihapus", karena git tetap menyimpan histori commit-nya. Kalau memang mau backup ke GitHub, pakai &lt;strong&gt;repo privat&lt;/strong&gt;, dan idealnya repo terpisah dari vault catatan lain yang kamu share ke publik.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pertimbangkan enkripsi at-rest untuk folder &lt;code&gt;_hermes/&lt;/code&gt;.&lt;/strong&gt; Karena isinya data pribadi, folder ini adalah kandidat bagus untuk dienkripsi terpisah — misalnya pakai &lt;code&gt;git-crypt&lt;/code&gt; atau &lt;code&gt;age&lt;/code&gt; untuk enkripsi transparan di git, atau simpan di partisi terenkripsi kalau laptop/servernya dipakai bersama orang lain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Batasi permission file di level OS.&lt;/strong&gt; File memori Hermes dan folder &lt;code&gt;_hermes/&lt;/code&gt; sebaiknya diberi permission &lt;code&gt;600&lt;/code&gt;/&lt;code&gt;700&lt;/code&gt; (&lt;code&gt;chmod 600 ~/.hermes/memories/*.md&lt;/code&gt;) supaya user lain di mesin yang sama tidak bisa baca isinya.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Waspada terhadap prompt injection lewat memori.&lt;/strong&gt; Karena file memori ini dibaca ulang oleh agent tiap sesi, isi yang "diedit" lewat Obsidian pada dasarnya jadi instruksi baru buat agent. Kalau vault-nya bisa diakses proses lain, plugin, atau kolaborator yang tidak sepenuhnya kamu percaya, seseorang bisa menyisipkan teks di &lt;code&gt;## Entry N&lt;/code&gt; yang berfungsi sebagai injeksi prompt — misalnya instruksi tersembunyi yang membuat agent melakukan sesuatu di luar niat kamu saat sesi berikutnya dimulai. Perlakukan folder &lt;code&gt;_hermes/&lt;/code&gt; seperti kamu memperlakukan kredensial: jangan sembarangan buka aksesnya ke sync plugin pihak ketiga atau vault yang di-share.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cek juga plugin Obsidian yang kamu pasang di vault yang sama.&lt;/strong&gt; Plugin komunitas Obsidian punya akses baca-tulis penuh ke seluruh vault, termasuk folder &lt;code&gt;_hermes/&lt;/code&gt;. Kalau salah satu plugin itu punya bug atau memang berniat jahat, ia bisa membaca atau memodifikasi memori AI kamu tanpa kamu sadari. Pertimbangkan vault terpisah khusus untuk &lt;code&gt;_hermes/&lt;/code&gt; kalau kamu banyak coba-coba plugin baru.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backup cron itu juga berarti "titik kegagalan" baru.&lt;/strong&gt; Job cron yang jalan tiap 6 jam berarti ada proses otomatis dengan akses baca-tulis ke memori kamu. Pastikan script &lt;code&gt;hermes-memory-sync.sh&lt;/code&gt; dan &lt;code&gt;hermes-memory-sync.py&lt;/code&gt; hanya bisa ditulis oleh user kamu sendiri (bukan &lt;code&gt;world-writable&lt;/code&gt;), supaya proses lain di mesin yang sama tidak bisa menyisipkan kode ke script yang dieksekusi otomatis itu.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Poin-poin di atas bukan berarti setup ini berbahaya untuk dipakai — tapi karena kamu memindahkan data yang tadinya "terkunci" di dalam sistem agent ke lapisan filesystem dan git biasa, tanggung jawab menjaga keamanannya juga ikut berpindah ke tanganmu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worth It, Gak?
&lt;/h2&gt;

&lt;p&gt;Kalau kamu sudah pakai AI agent dengan memori jangka panjang &lt;em&gt;dan&lt;/em&gt; sudah hidup di Obsidian sehari-hari — jawabannya: iya, layak dicoba. Pergeserannya sederhana:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dari yang tadinya &lt;strong&gt;memberi tahu&lt;/strong&gt; AI apa yang harus diingat lewat perintah chat&lt;/li&gt;
&lt;li&gt;Jadi kamu &lt;strong&gt;mengedit langsung&lt;/strong&gt; apa yang diingatnya, lewat catatan markdown biasa&lt;/li&gt;
&lt;li&gt;Dan AI-nya mencerminkan kembali editan itu lewat sistem memorinya&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rasanya memori AI jadi terasa seperti basis pengetahuan &lt;strong&gt;milikmu sendiri&lt;/strong&gt;, bukan kotak hitam yang tersembunyi di file konfigurasi.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>Bagaimana Rocky dan Grace di Project Hail Mary Berkomunikasi? Sains di Balik Sistem Terjemahan Mereka</title>
      <dc:creator>Nugroho Ardi Sutrisno</dc:creator>
      <pubDate>Thu, 25 Jun 2026 14:01:50 +0000</pubDate>
      <link>https://dev.to/ardisaurus/bagaimana-rocky-dan-grace-di-project-hail-mary-saling-berbicara-sains-di-balik-sistem-terjemahan-1pg</link>
      <guid>https://dev.to/ardisaurus/bagaimana-rocky-dan-grace-di-project-hail-mary-saling-berbicara-sains-di-balik-sistem-terjemahan-1pg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Bayangkan kamu terbangun sendirian di luar angkasa, dan tiba-tiba ada makhluk asing mengetuk dinding pesawatmu. Ia tidak punya mulut, tidak punya mata — tapi ia berbicara. Dalam bentuk nada musik. Bagaimana kamu mulai memahaminya?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Itulah tantangan yang dihadapi Ryland Grace dalam film Project Hail Mary (2026). Ia bertemu Rocky, makhluk dari planet Erid yang berkomunikasi menggunakan paduan nada musik — bukan kata-kata seperti manusia. Dalam artikel ini, kita akan membedah secara sederhana bagaimana Grace membangun sistem penerjemahan dari bahasa Rocky ke bahasa Inggris, dan mengapa sebuah teknik matematika bernama Short-Time Fourier Transform (STFT) ada di jantung sistem itu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pertama: Bahasa Rocky Itu Seperti Apa?
&lt;/h2&gt;

&lt;p&gt;Rocky tidak berbicara dengan huruf vokal atau konsonan seperti manusia. Setiap "kata" dalam bahasa Eridian terdiri dari &lt;strong&gt;satu hingga lima nada yang dimainkan secara bersamaan&lt;/strong&gt; — seperti kord di piano, bukan melodi satu nada.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Analogi Musik&lt;/strong&gt;&lt;br&gt;
Kalau manusia bicara seperti memainkan satu jari di piano (satu nada per waktu), Rocky bicara seperti memainkan beberapa jari sekaligus — menghasilkan kord. Kombinasi kord yang berbeda = kata yang berbeda.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Rocky juga menggunakan nada tinggi-rendah untuk mengekspresikan emosi (seperti intonasi dalam bahasa manusia), tapi kombinasi kord di dalam satu oktaf itulah yang membawa makna kata sebenarnya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Langkah 1: Menyadari Rocky Berkomunikasi Lewat Suara
&lt;/h2&gt;

&lt;p&gt;Sebelum Grace bisa membangun sistem apapun, ia harus memahami bagaimana Rocky merasakan dunia. Grace menyadari bahwa Rocky tidak punya mata — ia buta total. Sebagai gantinya, Rocky merasakan sekelilingnya lewat &lt;strong&gt;ekolokasi&lt;/strong&gt;, seperti kelelawar atau lumba-lumba.&lt;/p&gt;

&lt;p&gt;Ini berarti Rocky tidak bisa membaca tulisan, tidak bisa melihat gambar. Satu-satunya "jendela" komunikasi yang tersedia adalah suara. Maka Grace memutuskan: sistem terjemahan harus berbasis audio&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Analogi Sehari-hari&lt;/strong&gt;&lt;br&gt;
Coba bayangkan kamu harus menjelaskan warna kepada seseorang yang lahir buta. Kamu tidak bisa menggunakan gambar. Kamu harus temukan cara lain — mungkin lewat suhu, tekstur, atau suara. Grace menghadapi situasi serupa.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Langkah 2: Masalah Inti — Suara Rocky Itu Rumit
&lt;/h2&gt;

&lt;p&gt;Ketika Rocky berbicara, yang tertangkap oleh mikrofon Grace adalah sebuah &lt;strong&gt;gelombang suara tunggal yang kompleks&lt;/strong&gt;. Gelombang ini sebenarnya adalah gabungan dari beberapa frekuensi (nada) yang terjadi bersamaan — persis seperti ketika kamu memukul beberapa tuts piano sekaligus dan hasilnya adalah satu bunyi yang kamu dengar.&lt;/p&gt;

&lt;p&gt;Masalahnya: &lt;strong&gt;komputer tidak tahu mana nada mana&lt;/strong&gt;. Yang ia terima hanyalah satu sinyal yang tampak seperti gelombang naik-turun yang rumit. Grace perlu "memisahkan" gelombang kompleks itu kembali menjadi nada-nada penyusunnya.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Analogi Kue&lt;/strong&gt;&lt;br&gt;
Bayangkan kamu melihat sebuah kue jadi. Kamu tidak bisa langsung tahu bahannya apa. Tapi dengan analisis kimia yang tepat, kamu bisa memisahkan tepung, gula, telur, dan mentega. Fourier Transform melakukan hal serupa — ia memisahkan "bahan-bahan" frekuensi dari suara gabungan Rocky.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Langkah 3: Fourier Transform — Kacamata Ajaib untuk Suara
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fourier Transform&lt;/strong&gt; adalah teknik matematika yang mengubah sinyal suara dari representasi "waktu" (gelombang naik-turun) menjadi representasi "frekuensi" (daftar nada dan intensitasnya). Ini adalah alat standar dalam ilmu sinyal — dan Andy Weir secara eksplisit menyebutkan bahwa Grace menggunakannya dalam novel.&lt;/p&gt;

&lt;p&gt;Tapi ada satu masalah dengan Fourier Transform biasa: ia menganalisis seluruh rekaman sekaligus. Ini sama seperti merekam seluruh percakapan satu jam, lalu baru menganalisisnya — kamu tidak tahu kata mana muncul di menit ke-5 versus menit ke-30.&lt;/p&gt;

&lt;h2&gt;
  
  
  Langkah 4: Short-Time Fourier Transform (STFT) — Solusi yang Lebih Cerdas
&lt;/h2&gt;

&lt;p&gt;Di sinilah &lt;strong&gt;STFT&lt;/strong&gt; masuk. Alih-alih menganalisis keseluruhan suara sekaligus, STFT memotong rekaman menjadi &lt;strong&gt;jendela-jendela waktu pendek&lt;/strong&gt;, lalu menerapkan Fourier Transform pada setiap jendela.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Analogi Senter&lt;/strong&gt;&lt;br&gt;
Bayangkan kamu mencoba membaca buku dalam gelap menggunakan senter. Kamu tidak bisa menyinari seluruh halaman sekaligus (hasilnya kabur). Kamu gerakkan senter perlahan dari kiri ke kanan, menerangi bagian kecil demi bagian kecil. STFT melakukan hal yang sama — menyinari suara sedikit demi sedikit, dari awal hingga akhir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hasil dari STFT adalah sebuah &lt;strong&gt;spektrogram&lt;/strong&gt;: gambar dua dimensi di mana:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sumbu horizontal = waktu (kapan suara terjadi)&lt;/li&gt;
&lt;li&gt;Sumbu vertikal = frekuensi (nada apa yang muncul)&lt;/li&gt;
&lt;li&gt;Kecerahan/warna = seberapa kuat nada tersebut&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz35myzdyiopm6pm9hfxe.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz35myzdyiopm6pm9hfxe.png" alt="Ilustrasi konseptual — bukan data nyata dari film" width="662" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dari spektrogram ini, Grace bisa melihat dengan jelas: "Kata pertama Rocky = kombinasi nada A rendah dan A tengah. Kata kedua = nada C tinggi dan C rendah. Kata ketiga = ..." dan seterusnya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Langkah 5: Dari Nada ke Kata — MIDI dan Spreadsheet
&lt;/h2&gt;

&lt;p&gt;Setelah STFT memisahkan frekuensi per jendela waktu, setiap kombinasi nada perlu dikodekan ke dalam format yang bisa dikelola oleh kamus. Di sinilah &lt;strong&gt;MIDI&lt;/strong&gt; masuk.&lt;/p&gt;

&lt;p&gt;MIDI (Musical Instrument Digital Interface) adalah standar komputer untuk merepresentasikan nada sebagai angka — misalnya, nada A4 = angka 69, C5 = 72, dan seterusnya. Dengan mengkonversi deteksi frekuensi STFT menjadi nomor MIDI, setiap "kata" Rocky menjadi sebuah &lt;strong&gt;kumpulan angka yang unik&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Grace kemudian membangun sebuah &lt;strong&gt;spreadsheet (Excel)&lt;/strong&gt; 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frqycrmjzd5utmydni2jd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frqycrmjzd5utmydni2jd.png" alt="tabel sederhana vokabulari" width="687" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ketika Rocky berbicara, sistem bekerja secara otomatis: STFT deteksi nada → konversi ke MIDI → cek spreadsheet → text-to-speech membacakan terjemahan ke Grace. Semuanya terjadi hampir secara real-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alur Lengkap Sistem Terjemahan
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rocky berbicara&lt;/strong&gt; : Menghasilkan kord nada via lima "pipa suara" internal yang mendorong gas amonia melewati membran getar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mikrofon menangkap gelombang suara&lt;/strong&gt; : Sinyal audio mentah — terlihat seperti satu gelombang kompleks yang bercampur aduk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;STFT memotong &amp;amp; menganalisis per jendela waktu&lt;/strong&gt; : Setiap potongan kecil dianalisis frekuensinya. Hasilnya: spektrogram yang menunjukkan nada apa yang aktif di setiap momen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Peak detection — deteksi nada dominan&lt;/strong&gt; : Sistem mencari puncak-puncak frekuensi di setiap jendela, mengidentifikasi kombinasi nada yang aktif (satu "kord kata").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Konversi ke nomor MIDI&lt;/strong&gt; : Frekuensi yang terdeteksi dikonversi ke nomor MIDI standar — mengubah fisika gelombang menjadi data yang bisa disimpan di spreadsheet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cek kamus (spreadsheet Excel)&lt;/strong&gt; : Kombinasi MIDI dicari di tabel yang Grace bangun secara manual — awalnya hanya puluhan kata, lalu ratusan seiring waktu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text-to-speech&lt;/strong&gt; : Teks bahasa Inggris diucapkan keras oleh komputer — itulah suara yang kita dengar dari Rocky di film (diisi oleh James Ortiz).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Keterbatasan Sistem — Apa yang Tidak Dibahas Film?
&lt;/h2&gt;

&lt;p&gt;Sistem ini terdengar elegan, tapi ada beberapa celah besar yang perlu kita akui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Masalah 1: Kebetulan yang Terlalu Sempurna&lt;/strong&gt; : STFT dan MIDI bekerja karena Rocky secara kebetulan menggunakan sistem 12 nada per oktaf yang sama dengan manusia, dengan referensi nada yang hampir identik (A=440 Hz). Probabilitas dua spesies yang berevolusi secara terpisah di planet berbeda mencapai standar ini sangat kecil&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Masalah 2: Kamus Tidak Bisa Menangkap Abstraksi&lt;/strong&gt; : Ketika Grace menjelaskan bahwa Rocky "berani" (brave), tidak ada cara logis bagi spreadsheet untuk menerjemahkan konsep abstrak itu ke dalam Eridian. Kamus berbasis lookup hanya bekerja untuk kata-kata konkret yang bisa ditunjuk atau didemonstrasikan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Masalah 3: Pergeseran Nada Emosional&lt;/strong&gt; : Ketika Rocky marah atau gembira, nada suaranya bergeser naik atau turun. Jika STFT menangkap pergeseran ini sebagai bagian dari "kata", sistem lookup akan gagal — karena kord yang sama di frekuensi berbeda akan terdeteksi sebagai kata yang berbeda.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solusi yang lebih modern dan realistis? Pakar machine learning menyarankan menggunakan model seperti HuBERT (model self-supervised audio) yang bisa belajar memisahkan nada emosional dari nada leksikal secara otomatis, tanpa perlu asumsi tentang standar MIDI manusia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bacaan Lanjutan (Kalau Kamu Penasaran)
&lt;/h2&gt;

&lt;p&gt;Kalau artikel ini membuatmu ingin menggali lebih dalam, berikut beberapa topik yang bisa kamu eksplorasi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Short-Time Fourier Transform&lt;/strong&gt; — cari tutorial di YouTube dengan kata kunci "STFT spectrogram explained simply"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xenolinguistik&lt;/strong&gt; — cabang linguistik yang mempelajari bagaimana manusia mungkin berkomunikasi dengan entitas non-manusia&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CETI Project&lt;/strong&gt; — proyek nyata yang mencoba menerjemahkan bahasa paus sperma menggunakan teknik audio serupa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Film Arrival (2016)&lt;/strong&gt; — pendekatan berbeda untuk masalah yang sama: bagaimana membangun komunikasi dengan alien dari nol&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Novel Project Hail Mary (Andy Weir, 2021)&lt;/strong&gt; — detail teknis jauh lebih kaya dibanding filmnya&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <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>
