Membangun Sistem yang Tahan Banting
Sesi 13.5 · ~5 menit baca
Prinsip Abstraksi
Pipeline kamu punya masalah kerapuhan. Kalau kamu nulis script yang manggil API Claude langsung, dengan nama model di-hardcode, URL endpoint ditanam, dan teks prompt ditulis di dalam script, maka mengubah apapun butuh edit di setiap script. Kamu punya 12 script? Itu 12 file yang harus di-update ketika ganti model. 12 peluang error. 12 alasan pipeline kamu rusak di hari Selasa pagi.
Abstraksi menyelesaikan ini. Daripada 12 script memanggil Claude langsung, 12 script memanggil fungsi bernama generate_text(). Fungsi itu, yang didefinisikan di satu file, memanggil Claude. Ketika kamu perlu pindah ke Gemini, kamu ubah satu fungsi di satu file. 12 script ga pernah tahu bedanya.
Abstraksi: Menaruh layer antara logika bisnis kamu (apa yang script kamu lakukan) dan implementasi tool (API mana yang mereka panggil). Ketika tool berubah, kamu update layer abstraksi. Logika bisnis kamu ga tersentuh. Ini bukan over-engineering. Ini asuransi yang akan kamu butuhkan.
Tiga Layer Abstraksi
Pipeline konten yang tahan banting punya tiga layer abstraksi. Masing-masing mengisolasi jenis perubahan yang berbeda.
Membungkus API call.
Model bisa dikonfigurasi."] A2["search_web()
Membungkus search API.
Provider bisa dikonfigurasi."] A3["load_prompt()
Membaca prompt dari file.
Versi bisa dikonfigurasi."] end subgraph External["API Eksternal"] E1["Claude API"] E2["Gemini API"] E3["Tavily API"] E4["Google Search API"] end S1 --> A1 S1 --> A3 S2 --> A1 S2 --> A3 S3 --> A2 A1 -->|"Saat ini"| E1 A1 -.->|"Kalau perlu"| E2 A2 -->|"Saat ini"| E3 A2 -.->|"Kalau perlu"| E4 style Scripts fill:#222221,stroke:#6b8f71 style Abstraction fill:#222221,stroke:#c8a882 style External fill:#222221,stroke:#8a8478
Layer 1: Abstraksi API
Satu fungsi membungkus semua AI generation. Fungsi ini menerima prompt, system prompt, dan parameter (temperature, max token). Secara internal, fungsi ini memanggil API manapun yang dikonfigurasi. Script yang memanggil ga tahu dan ga peduli API mana yang sedang dipakai.
Ketika kamu ganti model, kamu ubah implementasi di dalam generate_text(). Ga ada lagi yang berubah. Ketika kamu mau menguji model baru terhadap benchmark (Sesi 13.2), kamu tambahkan sebagai opsi di layer abstraksi dan arahkan benchmark runner ke situ.
Layer 2: Abstraksi Prompt
Prompt disimpan di file terpisah, bukan di-hardcode dalam script. Fungsi bernama load_prompt() membaca file prompt yang sesuai berdasarkan tipe tugas dan versi model aktif. Ini memungkinkan kamu memelihara varian prompt spesifik per model tanpa menduplikasi script.
| Tanpa Abstraksi | Dengan Abstraksi |
|---|---|
| Teks prompt di dalam script | Prompt di prompts/article_v3.txt |
| Nama model di-hardcode | Nama model di config.env |
| API endpoint di setiap script | Endpoint di fungsi abstraksi |
| Temperature di-set per script | Temperature default di config, bisa di-override per panggilan |
| Ganti model = edit 12 file | Ganti model = edit 1 nilai config |
Layer 3: Abstraksi Konfigurasi
Semua pengaturan tinggal di file konfigurasi: nama model, API key (via .env), default temperature, batas max token, direktori output, dan preferensi logging. Script membaca dari konfigurasi ini saat runtime. Ga ada angka ajaib. Ga ada path yang di-hardcode. Semua yang mungkin berubah ada di satu tempat.
Proses Refactoring
Kalau kamu udah punya script dengan dependensi yang di-hardcode, refactoring mengikuti urutan yang jelas:
- Identifikasi semua nilai yang di-hardcode. Cari di script kamu untuk nama model, API endpoint, teks prompt, path file, dan nilai konfigurasi.
- Buat layer abstraksi. Tulis fungsi wrapper untuk API call. Buat file konfigurasi. Buat direktori prompt.
- Migrasi satu script per satu. Jangan refactor semuanya sekaligus. Pindahkan satu script ke arsitektur baru. Tes. Konfirmasi output identik. Pindahkan yang berikutnya.
- Tes dengan pergantian model. Setelah semua script dimigrasi, ubah model di konfigurasi dan jalankan benchmark suite kamu. Kalau semuanya jalan, abstraksi kamu solid.
Hasilnya
Pertama kali update model merusak API call langsung dan pipeline kamu yang terabstraksi tetap jalan karena kamu cuma perlu ubah satu fungsi, investasinya terbayar. Kedua kalinya, kamu heran kenapa ada orang yang bangun pipeline dengan cara lain.
Organisasi yang pakai arsitektur LLM-agnostic melaporkan hingga 40% lebih sedikit downtime dan penghematan biaya 30% melalui kemampuan berpindah provider berdasarkan harga, performa, atau ketersediaan. Angkanya berlaku di skala enterprise, tapi prinsipnya berlaku di skala apapun: fleksibilitas lebih murah dari lock-in.
Bacaan Lanjutan
- LLM Agnostic AI: Why the Smartest Enterprises Are Not Betting on a Single Model, Unframe AI
- What Is an LLM Agnostic Approach to AI Implementation?, Quiq
- How to Build Resilient Agentic AI Pipelines in a World of Change, GeekFence
- Why LLM Agnostic Solutions Are the Future of Dev Tools, Pieces
Tugas
Audit script kamu untuk dependensi yang di-hardcode: nama model, API endpoint, teks prompt di dalam kode, path file, dan nilai konfigurasi. Daftarkan setiap instance. Lalu refactor minimal satu script untuk pakai abstraksi: buat fungsi wrapper generate_text(), pindahkan prompt ke file eksternal, dan taruh nilai konfigurasi di file config. Tes bahwa versi yang sudah di-refactor menghasilkan output identik dengan yang asli. Dokumentasikan struktur sebelum/sesudahnya.