AI API Gratis untuk Developer: Pilihan dan Cara Mulai

Minggu, Sep 20, 2026 | 20 menit baca | Diperbarui pada Minggu, Sep 20, 2026

@
AI API Gratis untuk Developer: Pilihan dan Cara Mulai

Seorang developer bisa memulai aplikasi AI tanpa langsung membayar tagihan bulanan, tetapi kata gratis di sini punya batas. Google Gemini menyediakan akses free tier untuk model tertentu, sedangkan Groq menyediakan API dengan paket gratis dan batas pemakaian yang harus dicek di akun. Keduanya cocok untuk belajar, prototipe, dan pengujian ringan. Aplikasi produksi tetap perlu rencana kuota, pengamanan API key, pencatatan error, serta pilihan cadangan.

Artikel ini membahas cara memilih layanan, membuat panggilan pertama dengan Python dan cURL, membaca error, dan memutuskan kapan free tier sudah tidak cukup. Contohnya memakai domain serta nilai API key dummy. Jangan menyalin key ke repository atau browser klien.

Apa yang dimaksud API AI gratis?

API adalah pintu yang dipanggil oleh program. Aplikasi mengirim input dalam format tertentu, layanan memprosesnya memakai model, lalu mengembalikan respons. Bedanya dengan aplikasi chat, API bisa ditempelkan ke situs, bot internal, skrip terminal, aplikasi seluler, atau alur kerja yang kamu kendalikan sendiri.

Free tier berarti vendor memberikan jatah pemakaian tanpa biaya pada syarat tertentu. Bentuknya bisa berupa token input dan output gratis, permintaan per menit, permintaan per hari, model yang boleh dipakai, atau akses yang hanya tersedia dalam mode tertentu. Batas itu bukan janji jumlah pemakaian yang sama untuk setiap akun. Vendor dapat mengubah model, kuota, kebijakan data, dan syarat billing.

Ada tiga hal yang sering tercampur di pencarian developer pemula.

Pertama, chatbot gratis bukan berarti API gratis. Kamu bisa memakai layanan chat tanpa membayar, tetapi akses programatiknya mempunyai dashboard, key, kuota, dan aturan tersendiri. Kedua, membuat API key tidak sama dengan mendapatkan pemakaian tanpa batas. Ketiga, free tier bukan tempat aman untuk menaruh data produksi hanya karena tagihannya nol.

Kalau tujuanmu belajar mengirim request JSON, membuat bot kecil, atau menguji alur ekstraksi teks, free tier biasanya sudah cukup. Kalau aplikasi melayani pengguna umum, menyimpan data sensitif, atau harus selalu tersedia, hitung kebutuhan dari awal. Gratis boleh dipakai sebagai pintu masuk, bukan alasan mengabaikan desain.

Pilihan yang layak dicoba lebih dulu

Google Gemini API melalui AI Studio

Google menyatakan akun baru memulai pada Free Tier yang memberi akses ke model tertentu dan batas laju sesuai model. Halaman harga Gemini menampilkan input dan output gratis untuk model yang mendapat free tier, dengan catatan akses model, penggunaan data, dan batas pemakaian dapat berbeda. Google AI Studio menyediakan tempat untuk membuat key dan melihat penggunaan.

Pilihan ini masuk akal jika kamu ingin menguji model multimodal, memakai SDK Python atau JavaScript resmi, atau memulai dari dokumentasi yang menyediakan contoh REST. Google juga mencantumkan versi model yang stabil, pratinjau, terbaru, dan eksperimental. Untuk aplikasi yang ingin bertahan, pilih nama model stabil yang jelas, bukan alias yang bisa berpindah versi tanpa kamu sadari.

Free tier Gemini bukan cek kosong. Halaman pricing menjelaskan bahwa fitur tertentu, seperti grounding dengan Google Search, bisa mempunyai aturan berbeda dari input dan output teks biasa. Jangan menyamakan akses model gratis dengan semua fitur tambahan gratis.

Groq API

Groq menyediakan API dengan dokumentasi quickstart, key, dan kompatibilitas dengan sebagian besar library OpenAI. Pada konfigurasi kompatibilitas itu, aplikasi diarahkan ke base URL https://api.groq.com/openai/v1, lalu memakai API key Groq. Dokumentasi resmi Groq juga mencatat beberapa fitur OpenAI yang belum didukung atau mempunyai batas berbeda.

Groq menarik untuk prototipe yang menuntut respons cepat dan memakai model yang tersedia di platformnya. Batas paket gratis dijelaskan pada halaman Rate Limits dan dapat berubah menurut model serta akun. Jangan menyalin angka kuota dari artikel lama ke konfigurasi baru. Buka halaman resmi sebelum menetapkan batas retry atau target throughput.

Kompatibilitas OpenAI mengurangi pekerjaan pindah library, tetapi bukan berarti semua parameter berperilaku sama. Dokumentasi Groq menyebut beberapa field, seperti logprobs, logit_bias, top_logprobs, dan messages[].name, tidak didukung pada konteks tertentu. Aplikasi yang bergantung pada fitur itu harus diuji dengan provider yang dipilih.

Bagaimana dengan provider lain?

Provider lain bisa memiliki program gratis, kredit awal, model open source, atau akses melalui platform penghubung. Statusnya berubah cepat. Untuk artikel ini, Gemini dan Groq dipakai sebagai jalur praktik karena dokumentasi free tier dan quickstart mereka dapat dirujuk langsung. Jangan memilih layanan hanya karena sebuah daftar menulis kata unlimited. Biasanya kata itu menghilangkan bagian paling penting, yaitu batas laju, model yang boleh dipakai, masa berlaku kredit, atau syarat akun.

Kalau kamu ingin menjalankan model tanpa mengirim teks ke layanan luar, pilihan lokal seperti LM Studio atau server model sendiri bisa dipertimbangkan. Itu menggeser biaya ke RAM, GPU, penyimpanan, listrik, dan perawatan. Jalur lokal bukan otomatis lebih murah. Ia hanya memindahkan tempat biaya muncul.

Cara memilih provider untuk proyek pertama

Mulai dari tugas, bukan nama model. Tulis satu kalimat seperti, “Aplikasi ini mengelompokkan tiket dukungan berbahasa Indonesia menjadi kategori dan urgensi.” Lalu tentukan ukuran input, bentuk output, toleransi menunggu, dan apa yang terjadi kalau provider gagal.

Untuk latihan request sederhana, Gemini cocok karena dokumentasi resminya memberi contoh Python, JavaScript, REST, dan streaming. Untuk aplikasi yang sudah memakai client OpenAI, Groq bisa memperpendek perubahan konfigurasi. Untuk input gambar atau dokumen, periksa dukungan model yang dipilih, bukan hanya halaman beranda vendornya.

Gunakan tabel keputusan berikut sebagai penyaring awal.

KebutuhanPilihan awalHal yang perlu dicek
Belajar request teksGemini Free Tier atau Groq free planModel, RPM, token, dan wilayah akun
Menguji aplikasi berbasis OpenAI SDKGroqBase URL, field yang didukung, format respons
Menguji input multimodalGeminiModel yang mendukung input tersebut dan batas file
Menjaga data tetap di mesin sendiriModel lokalRAM, GPU, waktu respons, pembaruan model
Melayani pengguna umumProvider berbayar atau gabunganAnggaran, retry, pemantauan, SLA, dan fallback

Tabel itu belum memilihkan pemenang. Memang begitu. Pengujian kecil dengan input nyata dari proyekmu lebih berguna daripada klaim performa yang tidak memakai data milikmu.

Mulai dari Gemini API dengan Python

Dokumentasi Google saat ini menggunakan paket google-genai. Buat lingkungan virtual agar dependensi proyek tidak bercampur dengan instalasi Python lain.

python3 -m venv .venv
. .venv/bin/activate
python -m pip install -U google-genai

Buat key melalui Google AI Studio, kemudian simpan sebagai environment variable. Contoh berikut menggunakan nilai dummy. Ganti hanya di terminal lokalmu, bukan di file yang akan di-commit.

export GEMINI_API_KEY="ganti_dengan_key_di_mesinmu"

Contoh Python sederhana:

import os
from google import genai

api_key = os.environ.get("GEMINI_API_KEY")
if not api_key:
    raise SystemExit("GEMINI_API_KEY belum diatur")

client = genai.Client(api_key=api_key)
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Jelaskan API dalam dua kalimat untuk siswa SMK."
)
print(response.text)

Nama model pada contoh hanya contoh yang perlu dicocokkan dengan daftar model dan akses akun saat kamu membaca artikel ini. Google memperbarui nama endpoint dan model. Jika model ditolak, buka halaman Models, pilih model yang tersedia, lalu ubah nilai model tanpa mengubah cara penyimpanan key.

Versi REST berguna saat kamu ingin melihat request mentah sebelum menambahkan SDK.

curl -sS \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" \
  -d '{
    "contents": [{
      "parts": [{"text": "Tulis satu kalimat tentang fungsi API."}]
    }]
  }'

Jangan panik kalau struktur respons terlihat lebih panjang daripada teks yang tampil di terminal. SDK menyederhanakan akses ke teks. Pada REST, kamu perlu membaca JSON sesuai skema endpoint yang dipakai. Simpan satu respons mentah selama debugging, tetapi hapus jika berisi input rahasia atau data pelanggan.

Mengatur output agar mudah dipakai program

Teks bebas enak dibaca, tetapi sulit diproses. Untuk tugas seperti klasifikasi tiket, minta format JSON dan validasi hasilnya di sisi aplikasi. Jangan langsung melakukan json.loads() tanpa menangani respons yang tidak sesuai.

import json

prompt = """
Klasifikasikan tiket berikut.
Balas sebagai JSON dengan dua field: category dan urgency.
Nilai category hanya billing, technical, atau account.
Nilai urgency hanya low, medium, atau high.
Tiket: Website pelanggan mengembalikan HTTP 500 sejak pagi.
"""

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=prompt,
)

try:
    data = json.loads(response.text)
except json.JSONDecodeError:
    raise RuntimeError("Respons bukan JSON yang valid")

if data.get("category") not in {"billing", "technical", "account"}:
    raise ValueError("category di luar daftar")
if data.get("urgency") not in {"low", "medium", "high"}:
    raise ValueError("urgency di luar daftar")
print(data)

Untuk proyek serius, gunakan fitur structured output yang tersedia pada model dan SDK pilihanmu jika memang sesuai. Validasi aplikasi tetap diperlukan. Model bisa menghasilkan nilai yang secara bentuk terlihat benar, tetapi tidak cocok dengan logika bisnis.

Memakai Groq lewat Python atau client OpenAI

Instal library resmi Groq jika kamu ingin API yang jelas sesuai dokumentasinya.

python3 -m venv .venv-groq
. .venv-groq/bin/activate
python -m pip install -U groq
export GROQ_API_KEY="ganti_dengan_key_di_mesinmu"

Contoh panggilan:

import os
from groq import Groq

client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
completion = client.chat.completions.create(
    model="llama-3.3-70b-versatile",
    messages=[
        {"role": "system", "content": "Jawab singkat dan gunakan Bahasa Indonesia."},
        {"role": "user", "content": "Apa fungsi endpoint API?"},
    ],
)
print(completion.choices[0].message.content)

Model pada contoh dapat berubah atau tidak tersedia di akunmu. Periksa model yang tercantum di dokumentasi serta console Groq. Kalau muncul error model decommissioned, jangan menurunkan kualitas penanganan error dengan mengganti nama secara acak. Pilih model pengganti dari daftar resmi, lalu jalankan kembali pengujian.

Jika proyekmu sudah memakai client OpenAI, pola perpindahan dapat terlihat seperti ini:

from openai import OpenAI

client = OpenAI(
    api_key="ganti_dengan_key_di_mesinmu",
    base_url="https://api.groq.com/openai/v1",
)

response = client.chat.completions.create(
    model="nama-model-yang-tersedia",
    messages=[{"role": "user", "content": "Tulis satu kalimat tentang cache."}],
)
print(response.choices[0].message.content)

Contoh itu sengaja tidak memakai key nyata. Untuk kode yang benar-benar dijalankan, baca key dari environment variable. Dokumentasi Groq menyebut kompatibilitasnya bersifat sebagian. Jadi, tes parameter satu per satu, terutama jika wrapper aplikasi mengirim field tambahan secara otomatis.

Batas free tier yang perlu dihitung

Free tier punya beberapa jenis batas. Masing-masing menimbulkan gejala yang berbeda.

Batas request per menit membuat server menolak lonjakan panggilan walaupun total pemakaian harian masih kecil. Batas token per menit membuat prompt panjang atau output besar gagal lebih cepat. Batas request per hari menghentikan aplikasi setelah akumulasi panggilan tertentu. Ada juga pembatasan model, pembatasan fitur, dan antrean yang membuat respons lebih lambat.

Jangan membuat estimasi dengan membagi kuota secara rata lalu menganggap aplikasi aman. Beban nyata datang dalam gelombang. Tombol refresh bisa mengulang request. Worker bisa menjalankan pekerjaan yang sama dua kali. Retry tanpa jeda dapat memperparah situasi.

Catat setidaknya hal berikut untuk setiap request:

  • nama provider dan model;
  • waktu mulai dan waktu selesai;
  • status HTTP atau jenis exception;
  • jumlah token jika tersedia;
  • ukuran input dan output;
  • ID request jika vendor memberikannya;
  • apakah request pertama, retry, atau fallback.

Jangan menyimpan prompt mentah tanpa alasan. Untuk debugging, hash ID pengguna, potong isi yang sensitif, dan pisahkan log teknis dari data aplikasi.

Anggaran request sederhana

Misalkan skrip ringkasmu memproses 200 dokumen kecil per hari. Itu bukan angka kuota vendor, hanya beban proyek sebagai contoh. Jika satu dokumen membutuhkan satu request, aplikasi mengirim sekitar 200 request per hari. Tambahkan kemungkinan retry dan proses manual. Bila kamu membuat dua request untuk setiap dokumen, jumlah panggilan berubah. Hitung dari alur kode, bukan dari perasaan.

Gunakan pembatas lokal:

MAX_REQUESTS_PER_RUN = 50

processed = 0
for item in items:
    if processed >= MAX_REQUESTS_PER_RUN:
        break
    # panggil API di sini setelah validasi item
    processed += 1

Pembatas itu bukan pengganti kuota vendor. Ia hanya mencegah satu eksekusi lokal melahap jatah tanpa sengaja. Untuk worker paralel, simpan penghitung di tempat yang aman, bukan hanya variabel proses.

Keamanan API key, bagian yang sering terlambat

Key harus diperlakukan seperti kata sandi. Google menulis bahwa key yang bocor bisa dipakai pihak lain untuk mengonsumsi kuota, menimbulkan billing, atau mengakses sumber daya yang terhubung. Dokumentasi mereka juga menyarankan environment variable, pembatasan key, secret manager untuk produksi, dan backend proxy untuk aplikasi klien.

Aturan praktisnya sederhana.

Simpan key di environment variable pada pengembangan. Untuk server, gunakan secret manager atau mekanisme rahasia yang disediakan platform. Jangan menaruh key di JavaScript yang dikirim ke browser. Pengguna bisa melihat bundle, network request, atau source map. Kalau aplikasi web perlu memanggil model, kirim request ke backend milikmu, lalu backend yang berbicara dengan provider.

Tambahkan pola rahasia ke .gitignore, tetapi jangan menganggap .gitignore memperbaiki key yang sudah terlanjur masuk Git. Jika key pernah di-commit, anggap bocor. Cabut atau rotasi key di dashboard, audit penggunaan, lalu ganti konfigurasi aplikasi.

Contoh .env lokal:

GEMINI_API_KEY=isi_di_mesin_lokal
GROQ_API_KEY=isi_di_mesin_lokal

File itu tidak boleh dikirim ke repository. Contoh .env.example boleh berisi nama variabel tanpa nilai:

GEMINI_API_KEY=
GROQ_API_KEY=

Untuk dashboard web yang diletakkan di domain contoh app-demo.example, jangan menaruh key pada kode seperti ini:

const apiKey = "AIzaSyContohBukanKey";

Walaupun nilainya palsu pada tutorial, pola itu mendorong kebiasaan yang salah. Di produksi, browser hanya mengirim permintaan ke endpoint milik aplikasi kamu. Backend membaca key dari secret environment.

Pola backend proxy yang aman

Aplikasi klien mengirim pertanyaan ke backend. Backend memeriksa sesi, batas pengguna, ukuran input, dan izin. Setelah itu backend meneruskan permintaan ke provider. Respons dikembalikan setelah disaring.

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.post("/api/ask")
def ask():
    body = request.get_json(silent=True) or {}
    question = body.get("question", "")
    if not isinstance(question, str) or not question.strip():
        return jsonify({"error": "question wajib diisi"}), 400
    if len(question) > 4000:
        return jsonify({"error": "question terlalu panjang"}), 413
    # Periksa sesi dan panggil provider di sini.
    return jsonify({"status": "request diterima"})

Potongan itu baru validasi dasar, bukan server AI siap produksi. Tambahkan autentikasi, rate limit per akun, timeout, pencatatan, dan penanganan exception sebelum dibuka ke internet. Jangan menerima URL, instruksi alat, atau nama model dari klien tanpa allowlist. Input pengguna bukan konfigurasi tepercaya.

Troubleshooting saat request gagal

Error 401 atau 403

Periksa key yang dibaca proses, bukan key yang kamu kira dibaca. Jalankan print(bool(os.environ.get("GEMINI_API_KEY"))), bukan mencetak nilainya. Pastikan key milik provider yang benar, API sudah aktif, dan pembatasan key tidak memblokir endpoint. Pada Google, periksa juga perubahan kebijakan key serta kebutuhan migrasi tipe key yang disebut di dokumentasi API key.

Error 429

Ini biasanya berkaitan dengan rate limit, kuota, atau pembatasan akun. Jangan langsung mengulang sepuluh kali. Pakai jeda dengan backoff, batasi jumlah retry, dan hormati header retry jika disediakan.

import random
import time

for attempt in range(4):
    try:
        result = call_provider()
        break
    except RateLimitError:
        if attempt == 3:
            raise
        delay = (2 ** attempt) + random.random()
        time.sleep(delay)

Nama exception pada contoh harus diganti dengan exception dari SDK yang kamu pakai. Jangan menangkap semua exception lalu memperlakukannya sebagai rate limit. Error autentikasi, payload, dan model yang tidak ada memerlukan tindakan berbeda.

Error model tidak ditemukan

Model punya siklus hidup. Ada yang stabil, preview, latest, atau eksperimental. Alias latest bisa berpindah versi. Baca daftar model provider, lihat endpoint yang tersedia, lalu kunci model stabil ketika aplikasi mulai dipakai orang lain. Simpan nama model di satu environment variable agar penggantian tidak menyebar ke banyak file.

Respons kosong atau format berubah

Periksa respons mentah tanpa menyimpan data sensitif. Pastikan kode mengambil field yang benar untuk endpoint tersebut. Client OpenAI dan client Gemini tidak memakai struktur respons yang sama. Library yang kompatibel juga belum tentu meniru seluruh detail provider.

Jika aplikasi membutuhkan JSON, validasi schema dan siapkan jalur gagal. Jangan mengirim string kosong ke pengguna seolah tugas selesai. Tampilkan pesan yang jujur, simpan ID error, dan sediakan tombol coba lagi yang tetap tunduk pada batas retry.

Timeout

Perkecil input, pilih model yang lebih cepat, tetapkan timeout eksplisit, dan gunakan streaming bila antarmuka perlu menampilkan hasil bertahap. Streaming mengubah cara kamu menangani koneksi putus. Teks yang sudah tampil ke pengguna belum tentu berarti respons selesai dan tersimpan.

Pengujian yang tidak mengarang hasil

Artikel ini tidak mengklaim hasil benchmark atau latensi tertentu. Provider, model, lokasi jaringan, ukuran prompt, dan beban akun bisa mengubah hasil. Pengujian yang masuk akal adalah pengujian kecil dengan data yang memang akan dipakai aplikasi.

Buat set uji lokal berisi input yang sudah dianonimkan. Misalnya, 20 pertanyaan dukungan dengan label yang ditentukan manusia. Jalankan model yang ingin dibandingkan. Ukur apakah format keluarannya valid, apakah labelnya tepat menurut kriteria tim, berapa request gagal, dan berapa lama respons selesai. Simpan konfigurasi model serta tanggal pengujian.

Jangan hanya menghitung jawaban yang berhasil. Catat error 429, timeout, output kosong, dan jawaban yang lolos JSON tetapi salah isi. Satu output salah bisa lebih mahal daripada beberapa detik tambahan.

Contoh struktur hasil uji:

{
  "provider": "gemini",
  "model": "nama-model-yang-diuji",
  "tested_at": "2026-09-20",
  "cases": 20,
  "valid_json": null,
  "manual_quality_score": null,
  "errors": [],
  "notes": "Isi setelah pengujian lokal, bukan sebelum."
}

Nilai null pada contoh bukan hasil pengujian. Itu pengingat agar kamu tidak mengisi angka yang belum dikumpulkan.

Kapan harus pindah dari free tier?

Pindah saat kebutuhanmu dapat dijelaskan dalam angka atau risiko yang jelas. Misalnya, request rutin melewati batas, pengguna menunggu terlalu lama karena antrean, model gratis tidak punya fitur yang dibutuhkan, kebijakan penggunaan data tidak cocok, atau satu provider terlalu berisiko jika gagal.

Jangan pindah hanya karena dashboard terlihat lebih profesional. Paket berbayar tetap perlu pembatasan. Tetapkan anggaran, limit per akun, alert, dan tombol pemutus. Uji apakah biaya bertambah sesuai pemakaian yang kamu pahami.

Ada tiga pola perpindahan yang masuk akal. Pertama, tetap satu provider tetapi naik ke tier berbayar ketika kebutuhan sudah stabil. Kedua, gunakan provider utama dan fallback untuk error tertentu. Ketiga, pisahkan tugas murah dan tugas berat pada model berbeda. Fallback bukan berarti mengirim ulang semua request ke dua provider sekaligus. Pilih kondisi gagal dan cegah duplikasi hasil.

Kalau memakai beberapa provider, buat antarmuka internal kecil:

def generate_text(provider, prompt):
    if provider == "gemini":
        return generate_with_gemini(prompt)
    if provider == "groq":
        return generate_with_groq(prompt)
    raise ValueError("provider tidak diizinkan")

Jangan menyembunyikan perbedaan provider terlalu dalam. Parameter model, format tool call, streaming, dan kebijakan data tidak selalu sama. Abstraksi yang terlalu rapi sering menyembunyikan bagian yang harus diuji.

Kesalahan yang sebaiknya dihindari

Kesalahan pertama adalah menyimpan key di frontend karena cara itu paling cepat saat demo. Demo yang sudah masuk repository sering berubah menjadi aplikasi yang dipakai lebih lama dari rencana. Mulai dengan backend proxy meskipun fiturnya sedikit.

Kesalahan kedua adalah memilih model berdasarkan nama tanpa membaca dukungan endpoint. Model yang cepat di playground belum tentu tersedia melalui API yang kamu pakai. Cek daftar model, versi, wilayah, dan fitur.

Kesalahan ketiga adalah memakai retry tanpa batas. Request gagal tidak selalu berarti boleh diulang. Payload salah akan tetap salah. Key dicabut tidak akan pulih karena retry. Batasi retry dan bedakan error sementara dari error permanen.

Kesalahan keempat adalah menganggap output AI benar karena format JSON-nya valid. JSON hanya menjawab pertanyaan bentuk. Isi tetap perlu aturan, label, pengecekan, dan jalur eskalasi ke manusia.

Kesalahan kelima adalah mengirim data pribadi ke free tier tanpa membaca kebijakan provider. Hapus nama, nomor telepon, alamat, token sesi, dan dokumen internal dari contoh uji. Jika data tidak boleh bocor, jangan kirim ke endpoint publik hanya karena kamu sedang belajar.

Kesalahan terakhir adalah mencampur pembahasan API dengan aplikasi chat. Kalau kebutuhanmu hanya menulis dan bertanya, aplikasi chat mungkin lebih sederhana. API dipilih saat program harus memanggil model sebagai bagian dari alur kerja.

Rute belajar tujuh hari untuk developer pemula

Hari pertama, buat key melalui dashboard resmi dan simpan di environment variable. Jalankan satu request teks dengan SDK.

Hari kedua, jalankan request yang sama melalui cURL. Baca JSON mentah dan catat field yang dipakai.

Hari ketiga, tambahkan validasi input, timeout, dan penanganan error sederhana. Uji key kosong, prompt kosong, dan model yang salah.

Hari keempat, minta output terstruktur lalu validasi dengan schema di aplikasi. Masukkan satu respons rusak secara sengaja untuk memastikan jalur gagal bekerja.

Hari kelima, buat log tanpa prompt sensitif. Catat model, durasi, status, dan ukuran respons.

Hari keenam, ulangi tugas dengan provider kedua. Dokumentasikan bagian yang sama dan bagian yang berbeda.

Hari ketujuh, putuskan apakah free tier cukup untuk prototipe. Kalau belum ada angka pemakaian dan pengguna nyata, jangan membuat klaim biaya produksi. Buat batas lokal dan rencana pemantauan dulu.

Jadwal itu tidak wajib diikuti persis. Yang penting, setiap langkah menghasilkan sesuatu yang bisa diperiksa. Kode yang hanya berjalan di terminal sekali belum menjadi integrasi yang siap dibagikan.

Pilih berdasarkan masalah yang ingin diselesaikan

Untuk latihan singkat, mulai dari provider yang dokumentasinya paling mudah kamu ikuti. Gemini memberi jalur Python, JavaScript, REST, dan streaming pada dokumentasi getting started. Groq memberi jalur quickstart dan kompatibilitas dengan client OpenAI. Pilihan praktisnya bergantung pada library yang sudah ada dan fitur model yang dibutuhkan.

Untuk aplikasi Indonesia, masukkan contoh bahasa Indonesia ke set uji. Jangan mengandalkan penilaian dari satu prompt bahasa Inggris. Periksa istilah teknis, nama produk, format angka, dan gaya jawaban. Kalau model membuat keputusan otomatis, tentukan kasus yang harus dilempar ke pemeriksaan manusia.

Untuk proyek yang memproses dokumen pelanggan, jadikan privasi sebagai syarat awal. Free tier tidak menghapus kewajiban untuk menghapus data sensitif, mengamankan key, dan membaca ketentuan penggunaan data. Duh, biaya nol tetap bisa berubah menjadi insiden kalau key atau dokumen bocor.

Untuk aplikasi yang akan dipakai banyak orang, ukur sebelum menjanjikan pengalaman. Ukur ukuran prompt, token keluaran, pola jam sibuk, tingkat retry, serta dampak jika provider tidak tersedia. Angka itu nanti yang dipakai untuk memilih tier, bukan judul promosi di halaman layanan.

Cara membaca dokumentasi tanpa tersesat

Dokumentasi API sering terasa seperti hutan halaman. Kamu tidak perlu membaca semuanya pada hari pertama. Cari lima bagian yang langsung menentukan apakah contohmu bisa jalan. Buka halaman autentikasi, quickstart, daftar model, rate limits, dan pricing. Setelah itu cari bagian error atau troubleshooting.

Autentikasi menjawab nama header atau environment variable yang harus dipakai. Quickstart memperlihatkan request paling kecil. Daftar model menjawab endpoint yang masih tersedia. Rate limits memberi tahu kapan aplikasi harus berhenti atau menunggu. Pricing menjelaskan apa yang gratis dan apa yang mulai dihitung sebagai biaya. Lima halaman ini jauh lebih berguna daripada membaca semua pengumuman produk.

Perhatikan tanggal pembaruan dokumentasi. Nama model yang muncul di potongan kode lama bisa sudah dihentikan. SDK juga bisa berganti pola. Google, misalnya, kini mendokumentasikan paket google-genai untuk jalur Python terbaru, sedangkan kode lama dengan paket berbeda masih beredar di blog dan video. Kalau dua contoh memakai library berbeda, jangan mencampur import, nama method, dan skema responsnya.

Simpan URL halaman yang dipakai saat menguji. Bukan untuk membebani artikel, melainkan supaya kamu tahu alasan sebuah konfigurasi dipilih. Ketika request tiba-tiba gagal sebulan kemudian, catatan itu membantu membedakan perubahan kode dengan perubahan provider.

Bedakan error kode dan error layanan

Error lokal muncul sebelum request meninggalkan komputer. Contohnya environment variable kosong, modul belum terpasang, JSON tidak valid, atau fungsi dipanggil dengan argumen yang salah. Error layanan muncul setelah server menerima request, seperti key ditolak, model tidak tersedia, kuota habis, atau payload tidak cocok.

Log keduanya dengan label berbeda. Pesan GEMINI_API_KEY belum diatur harus langsung meminta perbaikan konfigurasi. Pesan 429 perlu pemeriksaan rate limit. Pesan 400 perlu membaca detail payload. Satu blok except Exception yang mengubah semua masalah menjadi "AI sedang sibuk" memang terlihat rapi, tapi bikin debugging gelap.

Di lingkungan pengembangan, tampilkan ID error dan status HTTP. Di produksi, sembunyikan detail internal dari pengguna lalu simpan versi yang aman untuk tim. Jangan menulis key, cookie, isi dokumen pelanggan, atau header autentikasi ke log. Kalau log dikirim ke layanan pihak ketiga, perlakukan log itu sebagai data yang juga perlu dilindungi.

Merancang prompt yang hemat dan mudah diuji

Free tier lebih awet ketika prompt tidak mengulang konteks yang sama tanpa alasan. Pisahkan instruksi yang tetap dari data yang berubah. Beri batas panjang output. Minta format yang bisa divalidasi. Tulis contoh satu input dan satu output hanya ketika pola yang kamu inginkan sulit dijelaskan dengan kalimat biasa.

Prompt pendek bukan selalu prompt bagus. Menghapus konteks yang dibutuhkan justru memicu jawaban melantur dan retry. Ukur bagian yang berulang. Jika setiap request mengirim dokumen panduan sepanjang beberapa halaman, pertimbangkan ringkasan terstruktur atau pencarian potongan relevan sebelum memanggil model.

Untuk klasifikasi, keluarkan label yang sudah ditentukan. Untuk ringkasan, minta sumber kalimat atau bagian dokumen yang dirujuk bila fitur dan model mendukungnya. Untuk ekstraksi, bedakan nilai yang tidak ditemukan dari nilai kosong. Detail kecil ini mengurangi pekerjaan perbaikan setelah respons diterima.

Kode aplikasi harus memperlakukan output sebagai masukan yang belum tepercaya. Jangan menjalankan perintah shell, SQL, atau kode yang ditulis model tanpa pemeriksaan manusia dan validasi tambahan. Model bisa menyusun string yang tampak masuk akal, lalu string itu menjadi masalah ketika langsung ditempelkan ke sistem lain.

Contoh antrean sederhana

Panggilan AI sebaiknya punya tempat di alur yang bisa dihentikan. Simpan status pekerjaan sebagai queued, running, done, atau failed. Jika proses mati setelah request berhasil tetapi sebelum status disimpan, gunakan ID request atau fingerprint input untuk mencegah pekerjaan yang sama diproses dua kali.

import hashlib


def fingerprint(text):
    return hashlib.sha256(text.encode("utf-8")).hexdigest()


job_id = fingerprint("dokumen-demo-001")
print(job_id)

Hash di atas hanya contoh identifikasi, bukan perlindungan kerahasiaan untuk semua kondisi. Jangan memasukkan secret ke string yang di-hash lalu menganggapnya aman. Untuk antrean nyata, gunakan penyimpanan yang dapat mengunci status dan tetapkan batas waktu pekerjaan.

Pola ini terasa berlebihan untuk skrip lima baris. Memang. Pakai hanya ketika request bernilai, berjalan lama, atau dipanggil ulang oleh worker. Untuk eksperimen terminal, fungsi sederhana sudah cukup. Ponytail-nya di sini adalah tidak membangun sistem antrean sebelum ada pekerjaan yang perlu diantrekan.

Pemeriksaan sebelum aplikasi dibagikan

Jalankan daftar pendek ini dari mesin yang bersih. Buat environment variable tanpa mencetak nilainya. Pasang dependensi dari file yang dicatat. Panggil model yang memang tercantum di dashboard. Kirim input pendek yang tidak sensitif. Matikan jaringan atau gunakan key yang salah untuk melihat jalur error. Lalu hapus key uji bila sudah tidak dipakai.

Periksa juga ukuran request. Batas pada provider sering dihitung dalam token, bukan jumlah karakter. Bahasa, format JSON, instruksi sistem, dan dokumen panjang menghasilkan ukuran berbeda. Jangan membuat batas hanya dari hitungan karakter lalu menganggapnya sama dengan kuota token.

Coba request dua kali untuk melihat apakah kode menyimpan hasil secara aman atau membuat duplikasi. Klik tombol dua kali pada antarmuka. Jalankan worker ulang setelah proses terhenti. Simulasikan timeout. Kode yang hanya diuji pada jalur sukses belum siap menerima pengguna yang menekan tombol saat koneksi sedang buruk.

Sediakan jalan keluar tanpa AI untuk tindakan yang menyangkut akun, pembayaran, penghapusan data, atau perubahan konfigurasi. Model boleh membantu membaca dan menyarankan. Keputusan yang tidak bisa dibatalkan harus melewati aturan aplikasi atau persetujuan manusia.

Artikel terkait

Sumber dan referensi

Halaman resmi bisa berubah. Cek pricing, model, rate limit, dan kebijakan key lagi sebelum aplikasi dipakai untuk pengguna lain. API gratis cukup buat mulai. Setelah itu, kode dan kebiasaan kerja kamu yang menentukan apakah proyeknya tetap aman dan terkendali.