<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Prompt Engineering on kenji.blog</title><link>http://kenji.blog/id/categories/prompt-engineering/</link><description>Recent content in Prompt Engineering on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>id</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 20:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/id/categories/prompt-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Untuk Engineer: Dasar-dasar Prompt Engineering dan Aplikasinya dalam Pengembangan</title><link>http://kenji.blog/id/p/prompt-engineering-for-engineers/</link><pubDate>Fri, 11 Sep 2026 20:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/prompt-engineering-for-engineers/</guid><description>&lt;img src="http://kenji.blog/p/prompt-engineering-for-engineers/img/eyecatch.jpg" alt="Featured image of post Untuk Engineer: Dasar-dasar Prompt Engineering dan Aplikasinya dalam Pengembangan" />&lt;h1 id="pengantar-mengapa-engineer-harus-mempelajari-prompt-engineering">Pengantar: Mengapa Engineer Harus Mempelajari Prompt Engineering
&lt;/h1>&lt;p>Dunia pengembangan perangkat lunak sedang berada di tengah-tengah pergeseran paradigma yang belum pernah terjadi sebelumnya karena evolusi pesat Large Language Models (LLM). Tidak berlebihan jika dikatakan bahwa kita sedang bertransisi dari &amp;ldquo;Software 2.0 (pengembangan menggunakan neural networks)&amp;rdquo; yang digagas oleh Andrejs Karpathy, ke &amp;ldquo;Software 3.0 (pengembangan berbasis prompt menggunakan bahasa alami)&amp;rdquo;.&lt;/p>
&lt;p>Dengan penyebaran alat asisten AI seperti GitHub Copilot, Cursor, atau berbagai API LLM, tugas utama para engineer bergeser dari &amp;ldquo;menulis kode dari nol&amp;rdquo; menjadi &amp;ldquo;merancang instruksi untuk membuat AI menghasilkan kode yang diinginkan, serta meninjau dan mengintegrasikan kode yang dihasilkan&amp;rdquo;.&lt;/p>
&lt;p>Keterampilan yang paling penting dalam metode pengembangan baru ini adalah &lt;strong>prompt engineering&lt;/strong>. Prompt engineering sering kali dianggap sebagai kata kunci populer untuk non-engineer seperti &amp;ldquo;mengobrol dengan AI dengan baik&amp;rdquo;, tetapi esensinya adalah &lt;strong>bentuk baru bahasa pemrograman untuk sistem komputasi non-deterministik (Non-deterministic)&lt;/strong>.&lt;/p>
&lt;p>Dalam artikel ini, yang ditujukan untuk software engineer dan arsitek, kami akan menjelaskan dengan sangat rinci (sekitar 10.000 karakter) mulai dari dasar-dasar matematis dan arsitektur di balik LLM, teknik prompt engineering tingkat lanjut seperti Few-Shot, Chain-of-Thought, dan ReAct, hingga cara mengintegrasikannya ke dalam alur kerja pengembangan dan API aktual.&lt;/p>
&lt;hr>
&lt;h2 id="1-dasar-dasar-dan-latar-belakang-matematis-large-language-models-llm">1. Dasar-dasar dan Latar Belakang Matematis Large Language Models (LLM)
&lt;/h2>&lt;p>Untuk mengoptimalkan prompt dan secara stabil mendapatkan output yang diinginkan, sangat penting untuk memahami secara matematis dan struktural &amp;ldquo;isi kotak hitam&amp;rdquo; tentang bagaimana LLM memproses dan menghasilkan teks atau kode secara internal. Sebagian besar LLM modern adalah model bahasa auto-regressive (Auto-regressive) yang menggunakan arsitektur Transformer.&lt;/p>
&lt;h3 id="11-tokenisasi-tokenization-dan-bpe">1.1 Tokenisasi (Tokenization) dan BPE
&lt;/h3>&lt;p>LLM tidak memproses string teks mentah secara langsung. Teks dibagi menjadi unit kecil yang disebut &lt;strong>token (Token)&lt;/strong>. Banyak model menggunakan algoritma yang disebut Byte-Pair Encoding (BPE).&lt;/p>
&lt;p>Pemahaman tentang tokenisasi penting bagi engineer. Hal ini karena cara indentasi (spasi) atau simbol khusus dalam bahasa pemrograman ditokenisasi secara langsung memengaruhi kualitas pembuatan kode. Misalnya, dalam pembuatan kode Python, jumlah spasi (apakah 4 spasi atau tab) sering diperlakukan sebagai token independen, dan kegagalan untuk memperjelas aturan indentasi dalam prompt dapat menyebabkan kesalahan sintaksis.&lt;/p>
&lt;h3 id="12-prediksi-token-berikutnya-next-token-prediction">1.2 Prediksi Token Berikutnya (Next Token Prediction)
&lt;/h3>&lt;p>Tugas dasar LLM auto-regressive adalah memprediksi &amp;ldquo;1 token berikutnya dengan probabilitas tertinggi&amp;rdquo; yang mengikuti urutan input yang diberikan (konteks). Secara matematis, ini dinyatakan sebagai masalah maksimisasi probabilitas bersyarat berikut.&lt;/p>
$$ P(w_t | w_{1}, w_{2}, \dots, w_{t-1}) $$
&lt;p>Di sini, $w_i$ mewakili token, dan $t$ adalah langkah waktu (time step) saat ini. Model menghitung distribusi probabilitas token berikutnya dari grup token input melalui neural network internal. Token yang dihasilkan ditambahkan secara auto-regressive sebagai input untuk langkah berikutnya, dan proses ini diulang hingga token akhir (seperti &lt;code>&amp;lt;EOS&amp;gt;&lt;/code>) dihasilkan.&lt;/p>
&lt;h3 id="13-mekanisme-atensi-attention-mechanism-dan-context-window">1.3 Mekanisme Atensi (Attention Mechanism) dan Context Window
&lt;/h3>&lt;p>Inti dari arsitektur Transformer adalah mekanisme Self-Attention. Hal ini memungkinkan model untuk menghitung dependensi antara token-token yang berjauhan dalam suatu urutan.&lt;/p>
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V $$
&lt;p>Di sini, $Q$ (Query), $K$ (Key), dan $V$ (Value) adalah matriks yang dihasilkan dari representasi input, dan $d_k$ adalah faktor penskalaan. Rumus ini berarti proses &amp;ldquo;menghitung kata-kata (Key) mana di masa lalu yang harus difokuskan (Attention) oleh kata yang sedang diproses saat ini (Query), dan menggabungkan informasi tersebut (Value)&amp;rdquo;.&lt;/p>
&lt;p>Mengapa memahami mekanisme ini penting dalam prompt engineering? Hal ini karena berkaitan langsung dengan konsep &lt;strong>Jendela Konteks (Context Window)&lt;/strong>. Jika prompt input menjadi terlalu panjang, instruksi penting akan terkubur di tengah-tengah konteks, dan bobot Attention akan tersebar, yang menyebabkan fenomena &amp;ldquo;Lost in the middle (hilangnya informasi di tengah)&amp;rdquo;. Dibandingkan memasukkan seluruh dokumen atau basis kode yang panjang ke dalam prompt, kita perlu membuat strategi untuk mengekstrak dan memberikan hanya chunk (potongan) yang diperlukan saja.&lt;/p>
&lt;h3 id="14-kontrol-sampling-melalui-parameter-suhu-temperature">1.4 Kontrol Sampling melalui Parameter Suhu (Temperature)
&lt;/h3>&lt;p>Pada lapisan output, fungsi Softmax biasanya digunakan untuk mengubah logit (output mentah model) menjadi distribusi probabilitas. Di sini, &lt;strong>Suhu (Temperature parameter $T$)&lt;/strong> diperkenalkan untuk mengontrol keragaman (keacakan) dari pembuatan teks.&lt;/p>
$$ p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)} $$
&lt;ul>
&lt;li>$z_i$ adalah logit (skor) dari token $i$ dalam kosakata.&lt;/li>
&lt;li>Saat $T = 1.0$, ini menjadi Softmax standar.&lt;/li>
&lt;li>Semakin mendekati $T \to 0$, distribusi probabilitas menjadi lebih tajam, dan hanya token dengan probabilitas tertinggi yang akan dipilih (deterministik, Greedy Decoding).&lt;/li>
&lt;li>Saat $T > 1.0$, distribusi probabilitas menjadi lebih datar, dan token minoritas yang biasanya tidak terpilih menjadi lebih mudah dipilih (meningkatkan kreativitas).&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Pendekatan Praktis untuk Engineer:&lt;/strong>
Saat melakukan pembuatan kode atau ekstraksi data JSON (Structured Output) melalui API, merupakan praktik standar untuk menetapkan nilai yang sangat rendah yaitu $T=0.0 \sim 0.2$ untuk mencegah halusinasi dan meningkatkan reproduktifitas. Di sisi lain, untuk tugas-tugas eksplorasi seperti brainstorming arsitektur atau bertukar pikiran tentang konvensi penamaan, tetapkan nilai pada $T=0.7 \sim 1.0$.&lt;/p>
&lt;hr>
&lt;h2 id="2-arsitektur-struktur-prompt-system-prompt-vs-user-prompt">2. Arsitektur Struktur Prompt: System Prompt vs User Prompt
&lt;/h2>&lt;p>Saat membangun aplikasi AI menggunakan API OpenAI (seperti GPT-4) atau API Anthropic (seperti Claude), prompt tidak disusun sebagai blok teks tunggal, melainkan sebagai susunan pesan. Yang paling penting di antaranya adalah pemisahan &amp;ldquo;System Prompt&amp;rdquo; dan &amp;ldquo;User Prompt&amp;rdquo;.&lt;/p>
&lt;h3 id="21-system-prompt-batasan-global-dan-definisi-persona">2.1 System Prompt: Batasan Global dan Definisi Persona
&lt;/h3>&lt;p>System Prompt digunakan untuk mendefinisikan &lt;strong>batasan global, persona (peran), dan aturan perilaku dasar&lt;/strong> untuk LLM. Jika dianalogikan dengan desain perangkat lunak, ia bertindak sebagai &amp;ldquo;variabel lingkungan&amp;rdquo; atau &amp;ldquo;kelas dasar&amp;rdquo; dari sebuah aplikasi, atau &amp;ldquo;Dockerfile&amp;rdquo; dari sebuah container.&lt;/p>
&lt;p>System prompt yang baik secara drastis akan menstabilkan kualitas dan format output.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"># Contoh System Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Anda adalah engineer Go senior kelas dunia dan sangat memahami desain pemrosesan paralel (Goroutine/Channel).
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Harap buat jawaban dengan mematuhi aturan ketat berikut.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Aturan]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. Saat memberikan kode, selalu berikan sebagai fungsi lengkap yang dapat dieksekusi.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. Jangan mengabaikan penanganan kesalahan (error handling), dan tangani secara eksplisit menggunakan `if err != nil` sesuai dengan konvensi Go.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. Gunakan poin-poin (bullet points) untuk penjelasan selain blok kode, dan pertahankan dalam maksimal 3 kalimat.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. Jika diminta untuk implementasi yang memiliki masalah keamanan (SQL injection, race condition, dll.), tawarkan alternatif yang aman.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">5. Format output hanya boleh berupa penjelasan dan blok kode Markdown.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="22-user-prompt-tugas-sementara-dan-injeksi-data">2.2 User Prompt: Tugas Sementara dan Injeksi Data
&lt;/h3>&lt;p>User prompt menyediakan tugas spesifik, pertanyaan, atau data input yang akan diproses. Ini setara dengan &amp;ldquo;pemanggilan fungsi (meneruskan argumen ke fungsi)&amp;rdquo; yang dieksekusi dalam lingkungan konteks yang dibangun oleh System Prompt.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"># Contoh User Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tolong implementasikan sebuah fungsi yang mengunduh gambar secara asinkron dari banyak daftar URL dan menyimpannya ke disk lokal.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Izinkan jumlah pekerja (workers) dikontrol oleh argumen, dan sertakan penanganan waktu tunggu (timeout) menggunakan konteks (context.Context) dalam implementasinya.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Dengan mengatur System Prompt secara kuat, Anda dapat memastikan stabilitas output terhadap User Prompt yang sangat fluktuatif yang diinjeksikan dari pengguna (atau komponen sistem lainnya). Ini juga berfungsi sebagai garis pertahanan pertama terhadap serangan &amp;ldquo;Prompt Injection&amp;rdquo; dari input pengguna yang berniat jahat.&lt;/p>
&lt;hr>
&lt;h2 id="3-kumpulan-teknik-inti-prompt-engineering">3. Kumpulan Teknik Inti Prompt Engineering
&lt;/h2>&lt;p>Mulai dari sini, kami akan menjelaskan paradigma prompting spesifik untuk secara dramatis meningkatkan akurasi tugas-tugas pengembangan perangkat lunak.&lt;/p>
&lt;h3 id="31-zero-shot-prompting-dan-few-shot-prompting">3.1 Zero-Shot Prompting dan Few-Shot Prompting
&lt;/h3>&lt;p>&lt;strong>Zero-Shot Prompting&lt;/strong> adalah metode untuk meminta model menjawab hanya dengan memberikan instruksi tugas tanpa memberikan contoh apa pun. Untuk permintaan umum seperti &amp;ldquo;Tulis quick sort dalam Python&amp;rdquo;, LLM canggih saat ini dapat berfungsi dengan baik bahkan dengan Zero-Shot.&lt;/p>
&lt;p>Namun, probabilitas bahwa formatnya akan rusak tinggi dengan Zero-Shot ketika Anda ingin model mengikuti konvensi pengkodean unik sebuah proyek atau menampilkan skema JSON tertentu. &lt;strong>Few-Shot Prompting&lt;/strong> memecahkan masalah ini.&lt;/p>
&lt;p>Few-Shot Prompting adalah metode untuk menyajikan beberapa &amp;ldquo;pasangan input dan output yang diharapkan (demonstrasi)&amp;rdquo; di dalam prompt. Metode ini menggunakan fenomena &amp;ldquo;In-Context Learning (pembelajaran dalam konteks)&amp;rdquo; di mana pola dipelajari dalam konteks prompt tanpa memperbarui parameter model.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"># Contoh Few-Shot Prompting (Tugas analisis log)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Harap analisis log mentah berikut dan ekstrak objek JSON terstruktur.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Contoh 1:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input: &amp;#34;[2023-10-01 10:00:05] ERROR [AuthService] Failed to authenticate user id=12345: Invalid password&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output: {&amp;#34;timestamp&amp;#34;: &amp;#34;2023-10-01T10:00:05Z&amp;#34;, &amp;#34;level&amp;#34;: &amp;#34;ERROR&amp;#34;, &amp;#34;service&amp;#34;: &amp;#34;AuthService&amp;#34;, &amp;#34;message&amp;#34;: &amp;#34;Failed to authenticate user&amp;#34;, &amp;#34;user_id&amp;#34;: 12345}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Contoh 2:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input: &amp;#34;[2023-10-01 10:05:12] WARN [DBPool] Connection timeout approaching for query_id=987&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output: {&amp;#34;timestamp&amp;#34;: &amp;#34;2023-10-01T10:05:12Z&amp;#34;, &amp;#34;level&amp;#34;: &amp;#34;WARN&amp;#34;, &amp;#34;service&amp;#34;: &amp;#34;DBPool&amp;#34;, &amp;#34;message&amp;#34;: &amp;#34;Connection timeout approaching&amp;#34;, &amp;#34;query_id&amp;#34;: 987}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input Tugas:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input: &amp;#34;[2023-10-01 10:15:30] FATAL [PaymentGateway] API rate limit exceeded. Retry after 60s&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Dengan memberikan contoh seperti ini, model secara implisit mempelajari format &lt;code>timestamp&lt;/code> (konversi ke ISO 8601) dan konvensi penamaan kunci, sehingga menghasilkan JSON yang sempurna.&lt;/p>
&lt;h3 id="32-chain-of-thought-cot-dan-zero-shot-cot">3.2 Chain-of-Thought (CoT) dan Zero-Shot CoT
&lt;/h3>&lt;p>Terobosan terkait kemampuan inferensi LLM adalah &lt;strong>Chain-of-Thought (CoT: Rantai Pemikiran)&lt;/strong>. Dalam tugas-tugas yang membutuhkan logika kompleks (misalnya: penerapan algoritme kompleks, pelacakan bug yang sulit dipahami, pembuatan regular expression, dll.), meminta LLM untuk langsung mengeluarkan kode akhir membuat lompatan logis atau kesalahan (halusinasi) lebih mungkin terjadi.&lt;/p>
&lt;p>CoT adalah metode yang meminta LLM memverbalisasi proses inferensi (proses pemikiran) menengahnya sebelum mengeluarkan jawaban akhir. Dengan meminta model untuk menganalisis situasi langkah demi langkah, konteks diperkaya dengan setiap pembuatan token, dan akurasi kesimpulan akhir meningkat secara dramatis.&lt;/p>
&lt;p>Teknik paling sederhana dan paling ampuh adalah &lt;strong>Zero-Shot CoT&lt;/strong>, yang menambahkan kata ajaib &amp;ldquo;&lt;strong>Mari kita berpikir langkah demi langkah (Let&amp;rsquo;s think step by step)&lt;/strong>&amp;rdquo; di akhir prompt.&lt;/p>
&lt;p>Dalam pengembangan, konsep ini diterapkan untuk menyusun prompt sebagai berikut.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Silakan buat komponen React yang memenuhi spesifikasi berikut.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Spesifikasi]...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sebelum menghasilkan kode, harap jelaskan proses pemikiran (dalam tag &amp;lt;thinking&amp;gt;) menggunakan langkah-langkah berikut.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. Identifikasi State (Keadaan) yang diperlukan dan desain struktur data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. Pertimbangan kasus tepi (edge cases) dan penanganan kesalahan yang mungkin terjadi
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. Pertimbangan unit pembagian komponen
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Setelah proses pemikiran selesai, silakan tulis kode TypeScript akhir.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="mermaid">graph TD
A["User Prompt: Definisi persyaratan yang kompleks"] --> B["Proses inferensi LLM dimulai"]
B --> C["Langkah 1: Dekomposisi logis dari persyaratan"]
C --> D["Langkah 2: Desain struktur data dan tipe"]
D --> E["Langkah 3: Pemilihan algoritme dan evaluasi kompleksitas komputasi"]
E --> F["Langkah 4: Pertimbangan corner cases dan keamanan"]
F --> G["Pembuatan kode akhir yang dioptimalkan"]&lt;/div>
&lt;h3 id="33-tree-of-thoughts-tot">3.3 Tree of Thoughts (ToT)
&lt;/h3>&lt;p>&lt;strong>Tree of Thoughts (ToT)&lt;/strong> adalah perluasan lebih lanjut dari konsep CoT. Sementara CoT mengikuti satu jalur (linier) penalaran, ToT adalah metode mengekspansikan beberapa jalur (cabang) penalaran secara paralel seperti pohon pencarian (search tree), meminta model untuk mengevaluasi sendiri setiap jalur, dan melakukan pelacakan mundur (backtracking) untuk mencapai solusi yang optimal.&lt;/p>
&lt;p>ToT sangat efektif untuk masalah dengan ruang pencarian yang luas dan mudah jatuh ke dalam kondisi optimum lokal, seperti desain arsitektur sistem, desain skema basis data kompleks, atau rencana refaktorisasi berskala besar.&lt;/p>
&lt;div class="mermaid">graph TD
Root["Masalah Awal: Strategi memecah monolit menjadi layanan mikro"]
Root --> Path1["Jalur Pemikiran A: Pemecahan berbasis Domain-Driven Design (DDD)"]
Root --> Path2["Jalur Pemikiran B: Pemecahan berdasarkan tabel database"]
Root --> Path3["Jalur Pemikiran C: Pemecahan berbasis lalu lintas/beban"]
Path1 --> Eval1["Evaluasi Diri: Kohesi yang tinggi dapat dicapai, tetapi biaya pemodelan awal pada tahap awal pengembangan sangat besar."]
Path2 --> Eval2["Evaluasi Diri: Mudah diimplementasikan, tetapi ada risiko tinggi bahwa tingkat ketergantungan antar layanan akan meningkat di masa mendatang."]
Path3 --> Eval3["Evaluasi Diri: Skalabilitas dapat dipastikan, tetapi manajemen transaksi menjadi kompleks."]
Eval1 --> Select["Keputusan: Memprioritaskan kemudahan pemeliharaan jangka panjang dan mengadopsi Jalur A (berbasis DDD)."]
Eval2 --> Discard1["Ditolak"]
Eval3 --> Discard2["Ditolak"]
Select --> Detail["Menghasilkan proposal pembagian layanan spesifik dan desain API berdasarkan strategi yang diadopsi."]&lt;/div>
&lt;p>Untuk mengimplementasikan ToT menggunakan prompt, Anda dapat menginstruksikan: &amp;ldquo;Tolong usulkan beberapa pendekatan, evaluasi pro dan kontra masing-masing pendekatan, lalu adopsi dan implementasikan pendekatan yang terbaik.&amp;rdquo;&lt;/p>
&lt;hr>
&lt;h2 id="4-agentic-workflow-dan-react-reasoning-and-acting">4. Agentic Workflow dan ReAct (Reasoning and Acting)
&lt;/h2>&lt;p>Penerapan LLM berkembang pesat dari sekadar input dan output teks tunggal menjadi bidang &lt;strong>Agen AI (AI Agents)&lt;/strong>, yang secara mandiri merencanakan dan menyelesaikan tugas sambil berinteraksi dengan lingkungan eksternal. Paradigma inti dari arsitektur agen ini adalah &lt;strong>ReAct (Reasoning and Acting)&lt;/strong>.&lt;/p>
&lt;h3 id="41-konsep-framework-react">4.1 Konsep Framework ReAct
&lt;/h3>&lt;p>LLM konvensional hanya mampu &amp;ldquo;berpikir lalu menjawab (CoT)&amp;rdquo;, namun tidak bisa &amp;ldquo;bertindak&amp;rdquo; untuk menutupi kekurangan pengetahuannya. Framework ReAct menerobos batas ini dengan membuat LLM secara bergantian melakukan &amp;ldquo;Pemikiran (Thought)&amp;rdquo; dan &amp;ldquo;Tindakan (Action)&amp;rdquo;.&lt;/p>
&lt;p>Model menganalisis masalah (Thought) dan jika dinilai bahwa informasi kurang, model akan mengeksekusi alat eksternal (Pencarian web, kueri database, perintah shell, pemanggilan API, dll.) (Action). Model menerima hasil eksekusi alat (Observation), menggunakannya sebagai konteks baru untuk melanjutkan pemikiran, dan mengulangi loop ini hingga mencapai jawaban akhir (Finish).&lt;/p>
&lt;div class="mermaid">graph LR
Start["Memulai tugas"] --> Thought["Thought (Analisis situasi dan perencanaan)"]
Thought --> Action["Action (Pemilihan dan eksekusi alat yang tepat)"]
Action --> Environment["Lingkungan Eksternal (API / DB / Shell / Code Interpreter)"]
Environment --> Observation["Observation (Hasil eksekusi/log error dari alat)"]
Observation --> Thought
Thought -->|Informasi yang dikumpulkan cukup| Finish["Finish (Output jawaban/kode akhir)"]&lt;/div>
&lt;h3 id="42-implementasi-menggunakan-function-calling-tool-use">4.2 Implementasi menggunakan Function Calling (Tool Use)
&lt;/h3>&lt;p>Antarmuka standar untuk mengintegrasikan ReAct ke dalam sebuah sistem adalah &lt;strong>Function Calling (pemanggilan fungsi / penggunaan alat)&lt;/strong> yang disediakan oleh OpenAI dan Anthropic.&lt;/p>
&lt;p>Engineer memberikan LLM &amp;ldquo;definisi set alat yang tersedia (Skema JSON)&amp;rdquo; bersama dengan System Prompt. LLM mem-parsing konteks prompt, dan jika memutuskan untuk menggunakan sebuah alat, ia akan menghasilkan &amp;ldquo;nama fungsi yang akan dipanggil&amp;rdquo; dan &amp;ldquo;JSON argumen-argumennya&amp;rdquo; daripada teks biasa. Sebuah loop terbentuk saat aplikasi mengeksekusi fungsi dan mengembalikan hasilnya kembali ke LLM.&lt;/p>
&lt;p>&lt;strong>Contoh aplikasi dalam pengembangan (Agen debug mandiri):&lt;/strong>
Saat membangun agen yang menyelidiki penyebab gagalnya pengujian dalam pipeline CI/CD dan membuat patch, kami menyediakan alat-alat berikut untuk LLM.&lt;/p>
&lt;ol>
&lt;li>&lt;code>search_codebase(regex_pattern)&lt;/code>: Mencari kode dalam repositori menggunakan ekspresi reguler.&lt;/li>
&lt;li>&lt;code>view_file_content(file_path, start_line, end_line)&lt;/code>: Membaca konten file yang ditentukan.&lt;/li>
&lt;li>&lt;code>run_unit_test(test_file_path)&lt;/code>: Menjalankan unit test tertentu dan mendapatkan traceback-nya.&lt;/li>
&lt;li>&lt;code>propose_patch(file_path, diff_content)&lt;/code>: Mengusulkan patch perbaikan.&lt;/li>
&lt;/ol>
&lt;p>LLM secara mandiri menalar dan bertindak sebagai berikut.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Thought&lt;/strong>: Melihat log pengujian, &lt;code>KeyError: 'user_id'&lt;/code> terjadi di baris 45 dari &lt;code>src/auth.py&lt;/code>. Saya perlu memeriksa kode di sekitarnya.&lt;/li>
&lt;li>&lt;strong>Action&lt;/strong>: &lt;code>view_file_content(file_path=&amp;quot;src/auth.py&amp;quot;, start_line=30, end_line=60)&lt;/code>&lt;/li>
&lt;li>&lt;strong>Observation&lt;/strong>: (Aplikasi membaca konten file dan mengembalikannya ke LLM)&lt;/li>
&lt;li>&lt;strong>Thought&lt;/strong>: Begitu, tidak ada validasi untuk kasus ketika &lt;code>user_id&lt;/code> tidak disertakan dalam JSON respons dari API. Mari buat patch yang menulis ulangnya dengan metode &lt;code>.get()&lt;/code> yang aman.&lt;/li>
&lt;li>&lt;strong>Action&lt;/strong>: &lt;code>propose_patch(...)&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Dengan cara ini, prompt engineering telah ditingkatkan dimensinya dari &amp;ldquo;pengendalian pembuatan teks&amp;rdquo; menjadi &amp;ldquo;definisi alat dan desain loop agen (orkestrasi)&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="5-integrasi-rag-retrieval-augmented-generation-dan-codebase">5. Integrasi RAG (Retrieval-Augmented Generation) dan Codebase
&lt;/h2>&lt;p>Salah satu kelemahan terbesar LLM adalah bahwa mereka tidak mengetahui &amp;ldquo;informasi pribadi&amp;rdquo; atau &amp;ldquo;informasi terbaru&amp;rdquo; yang tidak termasuk dalam data prapelatihan. Bahkan jika Anda bertanya tentang repositori internal pribadi atau spesifikasi API kepemilikan Anda, LLM akan secara terang-terangan berbohong (berhalusinasi) atau hanya memberikan jawaban umum.&lt;/p>
&lt;p>Arsitektur yang memecahkan masalah ini adalah &lt;strong>RAG (Retrieval-Augmented Generation)&lt;/strong>. RAG adalah teknologi yang menggabungkan pencarian informasi (Retrieval) dengan kemampuan generatif (Generation) dari LLM.&lt;/p>
&lt;h3 id="51-embeddings-dan-pencarian-vektor">5.1 Embeddings dan Pencarian Vektor
&lt;/h3>&lt;p>Dasar dari RAG adalah model ruang vektor matematis. Kode sumber dan dokumen internal diubah menjadi vektor dimensi tinggi (misalnya: susunan angka floating point dengan dimensi 1536) oleh model Embedding (misalnya: &lt;code>text-embedding-3-small&lt;/code>) dan disimpan dalam Vector Database.&lt;/p>
&lt;p>Ketika pengguna memasukkan pertanyaan (kueri), kueri tersebut juga diubah menjadi vektor menggunakan model yang sama, dan &lt;strong>Kemiripan Kosinus (Cosine Similarity)&lt;/strong> dihitung antara vektor kueri dan vektor dokumen di dalam database.&lt;/p>
$$ \text{Cosine Similarity}(A, B) = \frac{A \cdot B}{\|A\| \|B\|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}} $$
&lt;p>Beberapa cuplikan kode atau dokumen teratas dengan kemiripan tinggi (dekat secara semantik) diambil, dan secara dinamis diinjeksi sebagai &amp;ldquo;konteks&amp;rdquo; ke dalam User Prompt.&lt;/p>
&lt;h3 id="52-aplikasi-rag-dalam-alur-kerja-pengembangan">5.2 Aplikasi RAG dalam Alur Kerja Pengembangan
&lt;/h3>&lt;p>Mengintegrasikan RAG ke dalam alat pengembangan memungkinkan fitur-fitur canggih berikut dalam IDE.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Engineer["Engineer"]
participant RAG_System["IDE Plugin (RAG)"]
participant VectorDB["Vector Database (Basis Kode)"]
participant LLM["LLM API"]
Engineer->>RAG_System: "Di mana penanganan rollback transaksi diterapkan dalam alur pembayaran saat ini?"
RAG_System->>VectorDB: "Vektorisasi kueri dan jalankan pencarian semantik"
VectorDB-->>RAG_System: "Grup chunk kode yang relevan (payment_service.go, db_tx.go, dll.)"
RAG_System->>LLM: "System prompt + chunk kode yang dicari + pertanyaan engineer"
LLM-->>RAG_System: "Penjelasan dan arsitektur akurat yang diurai berdasarkan kode yang diekstraksi"
RAG_System-->>Engineer: "Memberikan jawaban dan tautan ke baris kode sumber yang relevan"&lt;/div>
&lt;p>Sebagai teknik prompt engineering yang penting dalam membangun RAG untuk basis kode, tidak hanya membagi kode menjadi bagian-bagian kecil, tetapi juga menyertakan &amp;ldquo;ringkasan yang dihasilkan dari Docstring setiap fungsi atau Abstract Syntax Tree (AST) kelas&amp;rdquo; dalam target vektorisasi akan meningkatkan akurasi pencarian secara dramatis.&lt;/p>
&lt;hr>
&lt;h2 id="6-kasus-penggunaan-praktis-dan-contoh-prompt-tingkat-lanjut-dalam-rekayasa-perangkat-lunak">6. Kasus Penggunaan Praktis dan Contoh Prompt Tingkat Lanjut dalam Rekayasa Perangkat Lunak
&lt;/h2>&lt;p>Kami akan memperkenalkan kasus penggunaan praktis dan teknik prompt tentang cara menerapkan teori prompt engineering ke otomasi dan efisiensi tugas-tugas pengembangan harian.&lt;/p>
&lt;h3 id="61-otomasi-peninjauan-kode-dan-pelengkap-analisis-statis">6.1 Otomasi Peninjauan Kode dan Pelengkap Analisis Statis
&lt;/h3>&lt;p>LLM diintegrasikan ke dalam pipeline CI untuk meninjau kode secara otomatis saat Pull Request (PR) dibuat. Tujuannya adalah agar model dapat mendeteksi ketidakkonsistenan dalam logika bisnis dan pola anti-desain yang tidak dapat dideteksi oleh alat Linting dan alat analisis statis.&lt;/p>
&lt;p>&lt;strong>Contoh prompt (Meminta output terstruktur):&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Anda adalah seorang software engineer senior yang ketat dan berpengalaman.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Harap analisis perbedaan dari Pull Request (Git Diff) yang diberikan dan lakukan peninjauan kode (code review).
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Fokus Area Peninjauan]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. Kerentanan keamanan (Injeksi, XSS, Bypass otorisasi, dll.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. Hambatan kinerja (Bottleneck kinerja, masalah query N+1, penghitungan perulangan yang tidak efisien, dll.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. Pemeliharaan dan keterbacaan (Pelanggaran prinsip SOLID, nesting yang terlalu kompleks, dll.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Batasan]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Jangan menunjuk pelanggaran format biasa (seperti indentasi) karena itu adalah peran alat Lint.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Jika tidak ada masalah, jangan memaksakan untuk mencari kesalahan, kembalikan saja array kosong.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Output harus mematuhi skema JSON berikut. Jangan bungkus dengan backtick Markdown (```json).
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Format Output JSON yang Diharapkan]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;review_comments&amp;#34;: [
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;file_path&amp;#34;: &amp;#34;string&amp;#34;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;line_number&amp;#34;: &amp;#34;integer&amp;#34;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;severity&amp;#34;: &amp;#34;High | Medium | Low&amp;#34;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;issue_title&amp;#34;: &amp;#34;string&amp;#34;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;detailed_description&amp;#34;: &amp;#34;string&amp;#34;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;suggested_code_fix&amp;#34;: &amp;#34;string&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Git Diff Data]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{PR_DIFF}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Poin penting dari prompt ini adalah memaksa output LLM menjadi JSON yang mudah di-parsing dan memisahkan dengan jelas peran alat Lint dan peran LLM (mendefinisikan batas sistem).&lt;/p>
&lt;h3 id="62-defensive-prompting-selama-pembuatan-kode-zero-shot">6.2 &amp;ldquo;Defensive Prompting&amp;rdquo; Selama Pembuatan Kode Zero-Shot
&lt;/h3>&lt;p>Masalah umum yang sering terjadi saat menyuruh AI menulis kode adalah fenomena di mana ia &amp;ldquo;mengimpor pustaka (library) yang tidak ada secara sewenang-wenang (halusinasi)&amp;rdquo; atau &amp;ldquo;menghilangkan definisi variabel yang diperlukan (seperti hanya menulis &lt;code># Tulis proses di sini&lt;/code>)&amp;rdquo;. Untuk mencegah hal ini, pagar pembatas (guardrail) yang kuat ditempatkan di dalam prompt, yang disebut &amp;ldquo;defensive prompting&amp;rdquo;.&lt;/p>
&lt;p>&lt;strong>Elemen penting dari Defensive Prompt:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Larangan untuk Menghilangkan:&lt;/strong> &amp;ldquo;Jangan menghilangkan kode atau menggunakan placeholder (seperti &lt;code>// ...&lt;/code>), dan hasilkan file lengkap yang dapat disalin, ditempel, dan dijalankan apa adanya.&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Pencegahan Halusinasi:&lt;/strong> &amp;ldquo;Jika pustaka standar untuk memenuhi persyaratan tidak ada, jangan mengarang pustaka pihak ketiga yang sebenarnya tidak ada. Dalam hal ini, nyatakan dengan jelas bahwa instalasi pustaka eksternal diperlukan, dan sarankan kode menggunakan pustaka standar yang paling umum (misalnya: requests).&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Persyaratan Kemandirian:&lt;/strong> &amp;ldquo;Semua variabel dan fungsi harus didefinisikan dengan benar dalam blok kode.&amp;rdquo;&lt;/li>
&lt;/ol>
&lt;h3 id="63-pembuatan-otomatis-pengujian-berbasis-properti--pengujian-edge-case">6.3 Pembuatan Otomatis Pengujian Berbasis Properti / Pengujian Edge Case
&lt;/h3>&lt;p>Untuk fungsi yang diimplementasikan oleh engineer, biarkan LLM menemukan corner case dan menghasilkan kode unit test. Ini sangat efektif untuk menghilangkan bias asumsi manusia.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Fungsi Python berikut menentukan apakah string yang diberikan adalah alamat IPv4 yang valid.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tulis suite unit test berbasis pytest yang komprehensif untuk fungsi ini.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Kondisi]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Tidak hanya test case normal, tetapi pastikan untuk sepenuhnya mencakup edge case berikut:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - Nilai batas (0, 255, 256, dll.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - Input dengan tipe berbeda (Integer, None, List, dll.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - String yang mengandung spasi atau karakter khusus
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - Kasus dengan jumlah titik yang tidak normal (kurang dari 3, atau 4 ke atas)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Manfaatkan parameterized testing (`@pytest.mark.parametrize`) untuk menjaga agar kode pengujian tetap ringkas.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Kode Fungsi]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">def is_valid_ipv4(ip_str):
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> # Implementasi...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-evaluasi-prompt-dan-llmops-eval">7. Evaluasi Prompt dan LLMOps (Eval)
&lt;/h2>&lt;p>Dalam dunia rekayasa perangkat lunak, kode yang belum diuji disebut kode warisan (legacy code). Hal yang persis sama berlaku untuk prompt engineering. Menerapkan &amp;ldquo;prompt yang bekerja dengan baik ketika diuji beberapa kali secara lokal&amp;rdquo; ke lingkungan produksi sangatlah berbahaya.&lt;/p>
&lt;p>Perilaku prompt dapat dengan mudah rusak oleh peningkatan versi dari model dasar atau perubahan dalam data domain yang ditangani. Untuk mencegah hal ini, sangat penting untuk membangun mekanisme &lt;strong>Evaluasi (Eval)&lt;/strong> (LLMOps) untuk secara kuantitatif mengevaluasi output prompt.&lt;/p>
&lt;h3 id="71-llm-as-a-judge-evaluasi-llm-oleh-llm">7.1 LLM-as-a-Judge (Evaluasi LLM oleh LLM)
&lt;/h3>&lt;p>Dalam tugas-tugas seperti pembuatan kode atau peringkasan teks, pengujian kecocokan yang tepat (Exact Match) tidak dimungkinkan. Metrik evaluasi Natural Language Processing klasik (BLEU dan ROUGE) juga tidak mampu mengukur keakuratan semantik dengan baik.&lt;/p>
&lt;p>Standar industri saat ini adalah menggunakan model canggih (misalnya: GPT-4o atau Claude 3.5 Sonnet) sebagai &amp;ldquo;hakim (Judge)&amp;rdquo; untuk menilai hasil yang dikeluarkan oleh LLM target, sebuah metode yang disebut &lt;strong>LLM-as-a-Judge&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Persiapan Test Set&lt;/strong>: Siapkan puluhan hingga ratusan pasang data input dan output (atau kriteria penilaian) yang ideal.&lt;/li>
&lt;li>&lt;strong>Eksekusi&lt;/strong>: Biarkan prompt dan model yang dievaluasi menghasilkan output untuk set pengujian.&lt;/li>
&lt;li>&lt;strong>Evaluasi&lt;/strong>: Siapkan prompt untuk evaluasi (metaprompt) dan instruksikan Judge LLM untuk &amp;ldquo;menilai apakah output yang dihasilkan memenuhi persyaratan dengan skor 1 hingga 5&amp;rdquo;.&lt;/li>
&lt;/ol>
&lt;p>Ini memungkinkan deteksi otomatis dari regresi (penurunan kinerja) saat prompt dimodifikasi dalam pipeline CI/CD. Prompt engineering berevolusi dari sekadar &amp;ldquo;mengutak-atik prompt&amp;rdquo; ala pengrajin menjadi &amp;ldquo;rekayasa (engineering)&amp;rdquo; berbasis data dan dapat direproduksi.&lt;/p>
&lt;hr>
&lt;h2 id="8-penutup-prompt-adalah-komponen-baru-perangkat-lunak">8. Penutup: Prompt Adalah Komponen Baru Perangkat Lunak
&lt;/h2>&lt;p>Di era di mana AI menulis kode, kadang-kadang disuarakan tentang &amp;ldquo;akhir dari pemrograman&amp;rdquo;, tetapi kenyataannya berbeda. Lapisan abstraksi yang dibutuhkan dari para engineer hanya naik satu tingkat.&lt;/p>
&lt;p>Dulu, dengan beralih dari bahasa assembly ke bahasa C, dan kemudian ke bahasa tingkat tinggi dengan pengumpulan sampah (garbage collection), kita terbebas dari kerumitan manajemen memori dan dapat fokus membangun logika bisnis yang lebih kompleks. LLM dan prompt engineering adalah gelombang abstraksi berikutnya yang mengikuti ini.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Memahami Arsitektur&lt;/strong>: Memahami sifat probabilitas LLM (Auto-regressive, Attention, Temperature) dan mengendalikan sifat non-deterministik dari sistem.&lt;/li>
&lt;li>&lt;strong>Desain Konteks&lt;/strong>: Pembatasan melalui System Prompt dan penyampaian maksud yang jelas menggunakan Few-Shot/CoT.&lt;/li>
&lt;li>&lt;strong>Pemikiran Agentik dan Integrasi Alat&lt;/strong>: Memanfaatkan paradigma ReAct sepenuhnya untuk menggunakan LLM sebagai pengorkestrasi sistem.&lt;/li>
&lt;li>&lt;strong>Evaluasi Berkelanjutan&lt;/strong>: Mengelola versi prompt sebagai bagian dari kode dan terus memperbaikinya melalui pengembangan yang digerakkan oleh pengujian (test-driven) melalui Eval.&lt;/li>
&lt;/ol>
&lt;p>Dengan menguasai prinsip-prinsip ini, prompt tidak lagi sekadar deretan string, melainkan komponen perangkat lunak yang tangguh dan dapat diskalakan. Kami berharap Anda dapat mengintegrasikan teknik prompt engineering tingkat lanjut yang dijelaskan dalam artikel ini ke dalam alur kerja pengembangan dan produk Anda sendiri, dan aktif berperan sebagai engineer yang memimpin &amp;ldquo;Software 3.0&amp;rdquo; generasi berikutnya.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Generated using Prompt Engineering Techniques.&lt;/em>&lt;/p></description></item></channel></rss>