{"id":1537,"date":"2026-09-02T11:01:21","date_gmt":"2026-09-02T04:01:21","guid":{"rendered":"https:\/\/komunitech.com\/blog\/?p=1537"},"modified":"2026-09-02T11:01:21","modified_gmt":"2026-09-02T04:01:21","slug":"7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026","status":"publish","type":"post","link":"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/","title":{"rendered":"7 Fitur Gemini API yang Jarang Dipakai tapi Bikin Agent Lebih Murah (2026)"},"content":{"rendered":"<p><strong>tl;dr:<\/strong> Kebanyakan orang berhenti di <code>generateContent<\/code> biasa \u2014 kirim prompt, terima teks, selesai. Padahal Gemini API punya tujuh fitur yang langsung memangkas biaya token, menghilangkan parsing manual, dan bikin agent lebih andal: output terstruktur lewat JSON Schema, function calling buat menyambungkan model ke sistem eksternal, Batch API dengan diskon 50%, thinking level buat mengatur seberapa dalam model bernalar, caching implisit otomatis, File API buat berkas besar, dan kompatibilitas library OpenAI. Halaman ini membedah tiap fitur pakai contoh kode dari dokumentasi resmi, plus kapan tiap fitur justru mubazir dipakai.<\/p>\n<p>Tagihan API yang membengkak biasanya bukan karena modelnya mahal, tapi karena caranya dipakai boros \u2014 parsing teks manual yang gagal separuh waktu, permintaan berulang yang seharusnya bisa dibatch, atau model bernalar penuh untuk tugas yang sebenarnya sepele. Tujuh fitur berikut ini langsung menyasar titik-titik boros itu, dimulai dari yang paling sering bikin kode jadi rapuh: parsing output jadi JSON.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<label for=\"ez-toc-cssicon-toggle-item-6a97bba001aa2\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"ez-toc-cssicon\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a97bba001aa2\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#1_Output_Terstruktur_JSON_Schema_Bukan_Parsing_Teks\" >1. Output Terstruktur: JSON Schema, Bukan Parsing Teks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#2_Function_Calling_Model_Jadi_Jembatan_ke_Tool_Eksternal\" >2. Function Calling: Model Jadi Jembatan ke Tool Eksternal<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#3_Batch_API_Diskon_50_untuk_Tugas_yang_Tidak_Buru-Buru\" >3. Batch API: Diskon 50% untuk Tugas yang Tidak Buru-Buru<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#4_Thinking_Level_Kontrol_Seberapa_Dalam_Model_Bernalar\" >4. Thinking Level: Kontrol Seberapa Dalam Model Bernalar<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#5_Caching_Implisit_Hemat_Otomatis_Tanpa_Kamu_Konfigurasi_Apa-Apa\" >5. Caching Implisit: Hemat Otomatis Tanpa Kamu Konfigurasi Apa-Apa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#6_File_API_Jalur_Wajib_untuk_Berkas_Besar\" >6. File API: Jalur Wajib untuk Berkas Besar<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#7_Kompatibilitas_OpenAI_Pindah_Tanpa_Menulis_Ulang_Kode\" >7. Kompatibilitas OpenAI: Pindah Tanpa Menulis Ulang Kode<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Mana_yang_Perlu_Kamu_Pakai_Duluan\" >Mana yang Perlu Kamu Pakai Duluan?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Pertanyaan_yang_Sering_Ditanya\" >Pertanyaan yang Sering Ditanya<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Apakah_output_terstruktur_menjamin_JSON_yang_dihasilkan_selalu_valid\" >Apakah output terstruktur menjamin JSON yang dihasilkan selalu valid?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Apakah_function_calling_membuat_model_langsung_menjalankan_aksi_ke_sistem_luar\" >Apakah function calling membuat model langsung menjalankan aksi ke sistem luar?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Berapa_lama_waktu_penyelesaian_Batch_API\" >Berapa lama waktu penyelesaian Batch API?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Apakah_caching_implisit_perlu_dikonfigurasi_manual\" >Apakah caching implisit perlu dikonfigurasi manual?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Kapan_File_API_wajib_dipakai_bukan_sekadar_opsional\" >Kapan File API wajib dipakai, bukan sekadar opsional?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Apakah_pindah_ke_Gemini_API_lewat_library_OpenAI_kehilangan_fitur_tertentu\" >Apakah pindah ke Gemini API lewat library OpenAI kehilangan fitur tertentu?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/7-fitur-gemini-api-yang-jarang-dipakai-tapi-bikin-agent-lebih-murah-2026\/#Referensi\" >Referensi<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"1_Output_Terstruktur_JSON_Schema_Bukan_Parsing_Teks\"><\/span>1. Output Terstruktur: JSON Schema, Bukan Parsing Teks<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Menurut <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/structured-output\" rel=\"noopener nofollow\" target=\"_blank\">dokumentasi resmi Gemini API tentang output terstruktur<\/a>, kamu bisa memaksa model mengembalikan respons yang mengikuti persis JSON Schema yang kamu tentukan \u2014 bukan menyuruhnya &#8220;tolong jawab dalam format JSON&#8221; dan berharap dia patuh.<\/p>\n<p>Bedanya penting: prompting biasa memberi hasil yang <em>kadang<\/em> valid JSON, kadang menambahkan penjelasan di depan atau belakang, kadang salah tipe data. Output terstruktur menjamin bentuknya sesuai skema di level API, sehingga kode di sisi kamu tidak perlu lagi menangani kasus &#8220;AI lupa format lagi&#8221;.<\/p>\n<p>Google GenAI SDK bahkan menerima skema langsung dari kelas Pydantic (Python) atau Zod (JavaScript), jadi kamu tidak perlu menulis JSON Schema mentah dengan tangan:<\/p>\n<pre><code>class Ingredient(BaseModel):\n    name: str\n    quantity: str\n\nclass Recipe(BaseModel):\n    recipe_name: str\n    ingredients: List[Ingredient]\n    instructions: List[str]\n\ninteraction = client.interactions.create(\n    model=\"gemini-3.6-flash\",\n    input=teks_resep,\n    response_format={\"type\": \"text\", \"mime_type\": \"application\/json\", \"schema\": Recipe.model_json_schema()},\n)\nrecipe = Recipe.model_validate_json(interaction.output_text)<\/code><\/pre>\n<p>Dokumentasi resmi menyebut tiga kasus penggunaan utamanya: ekstraksi data (menarik nama dan tanggal dari teks bebas), klasifikasi terstruktur (mengelompokkan teks ke kategori yang sudah ditentukan), dan alur kerja agentic (membuat input terstruktur untuk tool atau API lain). Kalau kamu sedang membangun agent yang hasil outputnya perlu langsung disimpan ke database atau dikirim ke API lain, ini fitur pertama yang harus dipakai \u2014 bukan yang terakhir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"2_Function_Calling_Model_Jadi_Jembatan_ke_Tool_Eksternal\"><\/span>2. Function Calling: Model Jadi Jembatan ke Tool Eksternal<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dokumentasi resmi <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/function-calling\" rel=\"noopener nofollow\" target=\"_blank\">Gemini API tentang function calling<\/a> mendeskripsikannya sebagai kemampuan model untuk terhubung ke tool dan API eksternal \u2014 model tidak menghasilkan teks jawaban, melainkan menentukan kapan harus memanggil fungsi tertentu dan parameter apa yang dibutuhkan untuk menjalankannya.<\/p>\n<p>Tiga kasus penggunaan utama menurut dokumentasi resmi: <strong>melakukan tindakan<\/strong> (menjadwalkan janji temu, membuat invoice, mengirim email, mengontrol perangkat), <strong>meningkatkan pengetahuan<\/strong> (mengakses database atau API eksternal), dan <strong>memperluas kemampuan<\/strong> (memakai kalkulator atau membuat diagram di luar batas model). Contoh resminya:<\/p>\n<pre><code>schedule_meeting_function = {\n    \"type\": \"function\",\n    \"name\": \"schedule_meeting\",\n    \"description\": \"Schedules a meeting with specified attendees at a given time and date.\",\n    \"parameters\": {\n        \"type\": \"object\",\n        \"properties\": {\n            \"attendees\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}},\n            \"date\": {\"type\": \"string\"},\n            \"time\": {\"type\": \"string\"},\n            \"topic\": {\"type\": \"string\"}\n        },\n        \"required\": [\"attendees\", \"date\", \"time\", \"topic\"]\n    }\n}\n\ninteraction = client.interactions.create(\n    model=\"gemini-3.6-flash\",\n    input=\"Schedule a meeting with Bob and Alice for 03\/14\/2025 at 10:00 AM about Q3 planning.\",\n    tools=[{\"type\": \"function\", <em><\/em>schedule_meeting_function}],\n)\nfor step in interaction.steps:\n    if step.type == \"function_call\":\n        print(f\"Function to call: {step.name}\")\n        print(f\"Arguments: {step.arguments}\")<\/code><\/pre>\n<p>Perhatikan alurnya: model tidak menjalankan fungsi itu sendiri. Dia cuma memutuskan fungsi mana yang perlu dipanggil dan mengisi argumennya \u2014 eksekusi sebenarnya tetap kode kamu yang jalankan. Ini yang membedakan agent yang beneran bertindak dari chatbot yang cuma menjawab. Kalau kamu baru mulai membangun AI Agent dari nol, konsep dasarnya sudah dibahas terpisah di <a href=\"https:\/\/komunitech.com\/blog\/karyawan-ai\/cara-bikin-karyawan-ai-pertamamu-panduan-langkah-demi-langkah-2026\/\">panduan cara bikin Karyawan AI pertamamu<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"3_Batch_API_Diskon_50_untuk_Tugas_yang_Tidak_Buru-Buru\"><\/span>3. Batch API: Diskon 50% untuk Tugas yang Tidak Buru-Buru<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dokumentasi resmi <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/batch-api\" rel=\"noopener nofollow\" target=\"_blank\">Gemini Batch API<\/a> menyebutnya dirancang untuk memproses permintaan volume besar secara asinkron dengan <strong>50% dari biaya standar<\/strong>. Target waktu penyelesaiannya 24 jam, meski dalam banyak kasus hasilnya keluar jauh lebih cepat dari itu.<\/p>\n<p>Ada dua cara mengirim permintaan: <strong>permintaan inline<\/strong> (daftar objek request langsung disertakan, cocok untuk batch di bawah 20 MB) atau <strong>file input JSONL<\/strong> (satu baris satu request, direkomendasikan untuk volume lebih besar). Contoh permintaan inline dari dokumentasi resmi:<\/p>\n<pre><code>inline_requests = [\n    {'contents': [{'parts': [{'text': 'Tell me a one-sentence joke.'}], 'role': 'user'}]},\n    {'contents': [{'parts': [{'text': 'Why is the sky blue?'}], 'role': 'user'}]}\n]\n\ninline_batch_job = client.batches.create(\n    model=\"gemini-3.5-flash\",\n    src=inline_requests,\n    config={'display_name': \"inlined-requests-job-1\"},\n)<\/code><\/pre>\n<p>Batch API cocok untuk kerja yang jelas-jelas tidak butuh jawaban seketika: pra-pemrosesan data, menjalankan evaluasi, mengklasifikasikan ribuan baris data lama, atau meringkas arsip dokumen. Kalau bot WhatsApp-mu perlu balas pelanggan detik itu juga, Batch API bukan buat itu \u2014 tapi kalau kamu tiap malam memproses ribuan transaksi untuk laporan besok pagi, potongan 50% ini langsung terasa di tagihan bulanan.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"4_Thinking_Level_Kontrol_Seberapa_Dalam_Model_Bernalar\"><\/span>4. Thinking Level: Kontrol Seberapa Dalam Model Bernalar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Model Gemini generasi 2.5 ke atas melakukan penalaran internal secara dinamis sebelum menjawab, dan menyesuaikan sendiri seberapa besar upaya penalarannya berdasarkan kompleksitas permintaan. Parameter <code>thinking_level<\/code> memungkinkanmu mengendalikan ini secara eksplisit, menurut <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/thinking\" rel=\"noopener nofollow\" target=\"_blank\">dokumentasi resmi Gemini API tentang thinking<\/a>.<\/p>\n<p>Level yang didukung berbeda per model \u2014 sebagian menerima <code>minimal<\/code>, <code>rendah<\/code>, <code>sedang<\/code>, <code>tinggi<\/code>, sebagian lain cuma sebagian dari opsi itu. Cara pakainya:<\/p>\n<pre><code>interaction = client.interactions.create(\n    model=\"gemini-3.6-flash\",\n    input=\"Provide a list of 3 famous physicists and their key contributions\",\n    generation_config={\"thinking_level\": \"low\"}\n)<\/code><\/pre>\n<p>Ini fitur kontrol biaya yang sering terlewat: penalaran mendalam butuh lebih banyak token internal, yang berarti lebih mahal dan lebih lambat. Untuk tugas sepele seperti klasifikasi pesan masuk jadi tiga kategori, level <code>minimal<\/code> atau <code>rendah<\/code> biasanya cukup dan jauh lebih hemat. Simpan level <code>tinggi<\/code> untuk tugas yang benar-benar butuh penalaran berlapis \u2014 debugging kode kompleks, analisis data multi-langkah, atau perencanaan strategi.<\/p>\n<div style=\"background:#f0f9ff;border-left:4px solid #0284c7;padding:1em 1.2em;margin:1.5em 0;border-radius:4px\">\n<p style=\"text-transform:uppercase;font-size:0.8em;font-weight:700;letter-spacing:0.05em;color:#0284c7;margin:0 0 0.5em\">\ud83d\udca1 Key Takeaway<\/p>\n<ul style=\"margin:0;padding-left:1.2em\">\n<li>Output terstruktur menjamin bentuk respons sesuai skema, menghilangkan kebutuhan parsing teks manual.<\/li>\n<li>Function calling membuat model memutuskan tindakan, tapi eksekusi tetap di tangan kodemu sendiri.<\/li>\n<li>Batch API memotong biaya 50% untuk beban kerja yang tidak butuh jawaban seketika.<\/li>\n<li>Thinking level rendah untuk tugas sepele, tinggi untuk penalaran berlapis \u2014 jangan bayar penalaran penuh untuk klasifikasi sederhana.<\/li>\n<\/ul>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"5_Caching_Implisit_Hemat_Otomatis_Tanpa_Kamu_Konfigurasi_Apa-Apa\"><\/span>5. Caching Implisit: Hemat Otomatis Tanpa Kamu Konfigurasi Apa-Apa<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dalam alur kerja AI yang berulang, kamu sering mengirim ulang token input yang sama persis \u2014 instruksi sistem yang panjang, konteks dokumen yang tetap, atau riwayat percakapan yang terus dibawa. Menurut <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/caching\" rel=\"noopener nofollow\" target=\"_blank\">dokumentasi resmi Gemini API tentang context caching<\/a>, caching implisit sudah <strong>aktif secara default<\/strong> untuk semua model Gemini 2.5 ke atas \u2014 kamu tidak perlu melakukan apa pun untuk mengaktifkannya, dan penghematan biaya otomatis diteruskan begitu permintaanmu cocok dengan cache.<\/p>\n<p>Ada batas token minimum supaya caching bisa berjalan, berbeda per model menurut dokumentasi resmi: Gemini 3.5 Flash dan Gemini 3.1 Pro Preview butuh minimal 4.096 token, sementara Gemini 2.5 Flash dan Gemini 2.5 Pro sudah bisa dari 2.048 token. Dua cara meningkatkan peluang cache-nya kena, menurut dokumentasi resmi: taruh konten besar dan umum di <em>awal<\/em> prompt, dan kirim permintaan dengan awalan yang serupa dalam rentang waktu singkat. Jumlah token yang berhasil cocok dengan cache bisa kamu lihat di kolom <code>usage.total_cached_tokens<\/code> pada objek respons.<\/p>\n<p>Bedakan ini dengan caching eksplisit (membuat dan mengelola objek cache secara manual) yang masih ada di <code>generateContent<\/code> API tapi tidak didukung di Interactions API generasi baru. Untuk kebanyakan kasus pemakaian bisnis, caching implisit yang otomatis ini sudah cukup \u2014 kamu baru perlu caching eksplisit kalau butuh kontrol presisi soal kapan cache dibuat dan dihapus.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"6_File_API_Jalur_Wajib_untuk_Berkas_Besar\"><\/span>6. File API: Jalur Wajib untuk Berkas Besar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Gemini bisa memproses teks, gambar, audio, video, dan dokumen sekaligus dalam satu permintaan. Tapi menurut <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/files\" rel=\"noopener nofollow\" target=\"_blank\">dokumentasi resmi Gemini API tentang File API<\/a>, ada batas ukuran yang wajib kamu tahu: <strong>selalu gunakan File API kalau total ukuran permintaan (termasuk file, prompt teks, instruksi sistem, dan lainnya) melebihi 100 MB<\/strong> \u2014 khusus file PDF, batasnya lebih ketat lagi di 50 MB.<\/p>\n<p>Di bawah batas itu, kamu bisa menyisipkan file langsung ke permintaan. Di atasnya, kamu wajib upload dulu lewat File API, baru referensikan URI-nya:<\/p>\n<pre><code>myfile = client.files.upload(file=\"path\/to\/sample.mp3\")\n\ninteraction = client.interactions.create(\n    model=\"gemini-3.7-flash\",\n    input=[\n        {\"type\": \"text\", \"text\": \"Describe this audio clip\"},\n        {\"type\": \"audio\", \"uri\": myfile.uri, \"mime_type\": myfile.mime_type}\n    ]\n)<\/code><\/pre>\n<p>Kesalahan yang sering terjadi: mengembangkan dan menguji dengan file kecil, lalu kaget saat produksi gagal karena pengguna upload video atau PDF berukuran besar. Kalau agent yang kamu bangun menerima upload dari pengguna \u2014 misalnya AI Agent WhatsApp yang menerima foto atau dokumen \u2014 jalur File API perlu ditangani sejak awal, bukan ditambal belakangan setelah error muncul di produksi. Detail teknis menghubungkan agent ke WhatsApp sudah dibahas terpisah di <a href=\"https:\/\/komunitech.com\/blog\/tutorial\/cara-bikin-ai-agent-whatsapp-telegram-dengan-openclaw\/\">panduan bikin AI Agent WhatsApp dan Telegram dengan OpenClaw<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"7_Kompatibilitas_OpenAI_Pindah_Tanpa_Menulis_Ulang_Kode\"><\/span>7. Kompatibilitas OpenAI: Pindah Tanpa Menulis Ulang Kode<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Kalau kodemu sudah ditulis pakai library resmi OpenAI, kamu tidak perlu membongkarnya untuk mencoba Gemini. Menurut <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/openai\" rel=\"noopener nofollow\" target=\"_blank\">dokumentasi resmi Gemini API tentang kompatibilitas OpenAI<\/a>, model Gemini bisa diakses lewat library OpenAI (Python maupun TypeScript\/JavaScript) dengan mengganti <strong>tiga baris kode saja<\/strong>:<\/p>\n<pre><code>from openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"GEMINI_API_KEY\",\n    base_url=\"https:\/\/generativelanguage.googleapis.com\/v1beta\/openai\/\"\n)\n\nresponse = client.chat.completions.create(\n    model=\"gemini-3.5-flash\",\n    messages=[\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Explain to me how AI works\"}\n    ]\n)<\/code><\/pre>\n<p>Tiga baris yang berubah, menurut dokumentasi resmi: <code>api_key<\/code> diganti kunci API Gemini, <code>base_url<\/code> diarahkan ke endpoint Gemini, dan <code>model<\/code> diisi nama model Gemini yang dipilih. Ini jalan pintas paling praktis buat tim yang sudah punya banyak kode berbasis SDK OpenAI dan ingin membandingkan performa atau biaya Gemini tanpa proyek migrasi besar. Untuk perbandingan model API secara lebih luas \u2014 bukan cuma Gemini \u2014 sudah dibahas terpisah di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/llm-terbaik-untuk-ai-agent-2026-gpt-vs-claude-vs-gemini\/\">LLM terbaik untuk AI Agent 2026: GPT vs Claude vs Gemini<\/a>.<\/p>\n<div style=\"background:#f0f9ff;border-left:4px solid #0284c7;padding:1em 1.2em;margin:1.5em 0;border-radius:4px\">\n<p style=\"text-transform:uppercase;font-size:0.8em;font-weight:700;letter-spacing:0.05em;color:#0284c7;margin:0 0 0.5em\">\ud83d\udca1 Key Takeaway<\/p>\n<ul style=\"margin:0;padding-left:1.2em\">\n<li>Caching implisit aktif otomatis di Gemini 2.5+ \u2014 taruh konten umum di awal prompt untuk memperbesar peluang kena cache.<\/li>\n<li>File API wajib dipakai begitu total permintaan lewat 100 MB (50 MB khusus PDF) \u2014 jangan tunggu error produksi.<\/li>\n<li>Kompatibilitas OpenAI cuma butuh ganti tiga baris kode: api_key, base_url, dan nama model.<\/li>\n<\/ul>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Mana_yang_Perlu_Kamu_Pakai_Duluan\"><\/span>Mana yang Perlu Kamu Pakai Duluan?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Tidak semua fitur ini relevan buat semua orang di saat yang sama. Kalau kamu baru membangun agent yang outputnya perlu masuk ke sistem lain, mulai dari <strong>output terstruktur<\/strong> \u2014 ini yang paling cepat menghilangkan bug akibat parsing gagal. Begitu agent-mu perlu benar-benar bertindak, bukan cuma menjawab, <strong>function calling<\/strong> jadi langkah berikutnya.<\/p>\n<p><strong>Batch API<\/strong> baru relevan kalau kamu punya beban kerja terjadwal dalam volume besar \u2014 bukan buat percakapan real-time. <strong>Thinking level<\/strong> layak disetel begitu kamu mulai memperhatikan tagihan bulanan dan sadar sebagian tugasmu terlalu sederhana untuk penalaran penuh. <strong>File API<\/strong> wajib begitu agent-mu menerima upload dari pengguna. <strong>Kompatibilitas OpenAI<\/strong> paling berguna kalau kamu sedang migrasi atau membandingkan provider.<\/p>\n<p>Satu-satunya yang tidak perlu kamu pikirkan sama sekali adalah <strong>caching implisit<\/strong> \u2014 itu berjalan sendiri di belakang layar, dan satu-satunya tindakanmu adalah menyusun prompt supaya bagian yang berulang ditaruh di depan.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Pertanyaan_yang_Sering_Ditanya\"><\/span>Pertanyaan yang Sering Ditanya<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Apakah_output_terstruktur_menjamin_JSON_yang_dihasilkan_selalu_valid\"><\/span>Apakah output terstruktur menjamin JSON yang dihasilkan selalu valid?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ya, selama skema JSON Schema yang kamu berikan valid, respons model dijamin mengikuti bentuk skema tersebut di level API \u2014 bukan lewat instruksi prompt yang bisa diabaikan model.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Apakah_function_calling_membuat_model_langsung_menjalankan_aksi_ke_sistem_luar\"><\/span>Apakah function calling membuat model langsung menjalankan aksi ke sistem luar?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tidak. Model hanya menentukan fungsi mana yang perlu dipanggil dan mengisi argumennya. Eksekusi sebenarnya \u2014 memanggil API, menulis ke database, mengirim pesan \u2014 tetap dilakukan oleh kode di sisi kamu.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Berapa_lama_waktu_penyelesaian_Batch_API\"><\/span>Berapa lama waktu penyelesaian Batch API?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Google menargetkan penyelesaian dalam 24 jam, meski menurut dokumentasi resmi hasilnya seringkali keluar jauh lebih cepat dari itu. Batch API tidak cocok untuk kebutuhan yang butuh respons seketika.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Apakah_caching_implisit_perlu_dikonfigurasi_manual\"><\/span>Apakah caching implisit perlu dikonfigurasi manual?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tidak. Caching implisit aktif secara default di semua model Gemini 2.5 ke atas. Yang bisa kamu lakukan hanya menyusun prompt agar bagian yang sering berulang ditaruh di awal, supaya peluang cocok dengan cache lebih besar.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kapan_File_API_wajib_dipakai_bukan_sekadar_opsional\"><\/span>Kapan File API wajib dipakai, bukan sekadar opsional?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Begitu total ukuran permintaan \u2014 termasuk file, prompt teks, dan instruksi sistem \u2014 melebihi 100 MB, atau melebihi 50 MB khusus untuk file PDF. Di bawah batas itu, file bisa disisipkan langsung tanpa upload terpisah.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Apakah_pindah_ke_Gemini_API_lewat_library_OpenAI_kehilangan_fitur_tertentu\"><\/span>Apakah pindah ke Gemini API lewat library OpenAI kehilangan fitur tertentu?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dokumentasi resmi tidak merinci daftar lengkap perbedaan fitur antara akses lewat library OpenAI dan akses langsung ke Gemini API. Untuk fitur-fitur lanjutan yang dibahas di halaman ini, cara paling aman adalah memanggil Gemini API secara langsung.<\/p>\n<p><em>Disclosure: Komunitech menyelenggarakan workshop dan layanan pengerjaan AI Agent, termasuk yang memanfaatkan Gemini API dan model sejenis, sehingga punya kepentingan komersial atas topik yang dibahas di halaman ini.<\/em><\/p>\n<p><em>Disclaimer: seluruh contoh kode dan detail teknis mengacu pada dokumentasi resmi Gemini API (ai.google.dev) per 2 September 2026. Nama model, parameter, dan perilaku default bisa berubah seiring rilis versi baru \u2014 periksa dokumentasi versi terkini sebelum menerapkannya di lingkungan produksi.<\/em><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Referensi\"><\/span>Referensi<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/structured-output\" rel=\"noopener nofollow\" target=\"_blank\">Output Terstruktur \u2014 Dokumentasi resmi Gemini API<\/a><\/li>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/function-calling\" rel=\"noopener nofollow\" target=\"_blank\">Function Calling \u2014 Dokumentasi resmi Gemini API<\/a><\/li>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/batch-api\" rel=\"noopener nofollow\" target=\"_blank\">Batch API \u2014 Dokumentasi resmi Gemini API<\/a><\/li>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/thinking\" rel=\"noopener nofollow\" target=\"_blank\">Thinking \u2014 Dokumentasi resmi Gemini API<\/a><\/li>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/caching\" rel=\"noopener nofollow\" target=\"_blank\">Context Caching \u2014 Dokumentasi resmi Gemini API<\/a><\/li>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/files\" rel=\"noopener nofollow\" target=\"_blank\">File API \u2014 Dokumentasi resmi Gemini API<\/a><\/li>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/openai\" rel=\"noopener nofollow\" target=\"_blank\">Kompatibilitas OpenAI \u2014 Dokumentasi resmi Gemini API<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>tl;dr: Kebanyakan orang berhenti di generateContent biasa \u2014 kirim prompt, terima teks, selesai. Padahal Gemini API punya tujuh fitur yang langsung memangkas biaya token, menghilangkan parsing manual, dan bikin agent lebih andal: output terstruktur lewat JSON Schema, function calling buat menyambungkan model ke sistem eksternal, Batch API dengan diskon 50%, thinking level buat mengatur seberapa [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1541,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75],"tags":[],"class_list":["post-1537","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial"],"_links":{"self":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/1537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/comments?post=1537"}],"version-history":[{"count":1,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/1537\/revisions"}],"predecessor-version":[{"id":1538,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/1537\/revisions\/1538"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media\/1541"}],"wp:attachment":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media?parent=1537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/categories?post=1537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/tags?post=1537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}