{"id":20031,"date":"2026-09-28T00:19:15","date_gmt":"2026-09-28T04:19:15","guid":{"rendered":"https:\/\/wp.glbgpt.com\/?p=20031"},"modified":"2026-09-28T00:19:17","modified_gmt":"2026-09-28T04:19:17","slug":"perplexity-api-tutorial","status":"publish","type":"post","link":"https:\/\/wp.glbgpt.com\/id\/hub\/perplexity-api-tutorial","title":{"rendered":"Tutorial API Perplexity: Membuat Jawaban yang Di-ground ke Sumber Secara Bertahap"},"content":{"rendered":"<style>\n[class*=\"pat-\"]{box-sizing:border-box}\np.pat-p,ul.pat-list{font:17px\/1.8 system-ui,-apple-system,\"Segoe UI\",sans-serif;color:#243F46;margin:0 0 22px}\np.pat-eyebrow{font:750 12px\/1.5 system-ui,sans-serif;letter-spacing:.12em;color:#35756f;margin:0 0 22px}\nh2.pat-h2{font:750 30px\/1.28 system-ui,sans-serif;color:#173E48;border-top:1px solid #D5E1DB;padding-top:23px;margin:58px 0 22px;scroll-margin-top:24px}\nh3.pat-h3{font:700 22px\/1.4 system-ui,sans-serif;color:#245D56;margin:30px 0 14px}\n.pat-p a,.pat-list a,.pat-table a{color:#146B61;text-decoration:underline;text-underline-offset:3px}\n.pat-p code,.pat-list code,.pat-table code{font:.88em Consolas,monospace;overflow-wrap:anywhere;background:#EEF3EF;padding:2px 4px;border-radius:3px}\np.pat-quick{background:#F5EDDA;border-left:4px solid #B99749;padding:23px 26px}\np.pat-note{background:#EEF4EF;border-radius:10px;padding:20px 24px}\nul.pat-toc{background:#EEF4EF;padding:24px 24px 24px 46px;border-radius:10px;columns:2;column-gap:32px;font-size:15px}\n.pat-list li{margin:8px 0;break-inside:avoid}\nul.pat-checklist{background:#F7F2E8;border:1px solid #DFD1B2;border-radius:10px;padding:20px 24px 20px 46px}\nfigure.pat-table{display:block;max-width:100%;overflow-x:auto;border:1px solid #CEDDD5;border-radius:10px;margin:26px 0}\n.pat-table table{border-collapse:collapse;width:100%;min-width:610px;font:14px\/1.65 system-ui,sans-serif}\n.pat-table th{background:#215957;color:white;text-align:left;padding:14px 16px;font-weight:650}\n.pat-table td{padding:13px 16px;vertical-align:top;border-bottom:1px solid #DFE7DF}\n.pat-table tbody tr:nth-child(even){background:#F2F6F0}\n.pat-table td:first-child{font-weight:600}\npre.pat-code{max-width:100%;overflow-x:auto;white-space:pre;padding:24px;border-radius:10px;background:#142F3C;color:#ECF7EF;font:14px\/1.7 Consolas,monospace;margin:24px 0}\n.pat-code code{font:inherit;white-space:pre;overflow-wrap:normal}\nfigure.pat-image{margin:30px 0}.pat-image img{display:block;width:100%;height:auto;border-radius:12px}\n.pat-image figcaption{font:14px\/1.6 system-ui,sans-serif;color:#627773;margin-top:10px}\n@media(max-width:650px){p.pat-p,ul.pat-list{font-size:16px}h2.pat-h2{font-size:26px;margin-top:44px}h3.pat-h3{font-size:20px}ul.pat-toc{columns:1}pre.pat-code{padding:18px;font-size:13px}p.pat-quick{padding:18px}.pat-table th,.pat-table td{padding:11px 12px}}\n\n\/* Native image blocks: same presentation as the approved preview. *\/\nfigure.wp-block-image.pat-image{display:block;max-width:100%;margin:30px 0}\nfigure.wp-block-image.pat-official{width:100%;max-width:848px;margin:30px auto}\nfigure.pat-image>a{display:block}figure.pat-image img{display:block;width:100%;max-width:100%;height:auto;border-radius:12px}\nfigure.pat-image figcaption.wp-element-caption{font:14px\/1.6 system-ui,sans-serif;color:#627773;margin:10px 0 0;text-align:left}\n.pat-image figcaption a{color:#146B61;text-decoration:underline;text-underline-offset:3px}\n<\/style>\n\n\n\n<p class=\"pat-p pat-eyebrow wp-block-paragraph\">API PERPLEXITY \u00b7 TUTORIAL PYTHON \u00b7 2026<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Tutorial API Perplexity ini akan memandu Anda dalam membuat skrip Python yang menghasilkan jawaban beserta sumber web yang dapat diklik. Gunakan API Agent untuk mengirimkan pertanyaan, membaca jawabannya, mencocokkan penanda kutipannya dengan ID sumber, dan mengekspor berkas Markdown yang dapat Anda tinjau.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Kami akan menggunakan satu pertanyaan sepanjang pembahasan ini: <em>Bagaimana seharusnya sebuah proyek Python berskala kecil menggunakan lingkungan virtual dan mengelola dependensi?<\/em> Mulailah dengan permintaan dasar, lalu tambahkan pemrosesan sumber dan filter domain. Anda memerlukan pengetahuan dasar tentang Python serta akun pengembang Perplexity yang sudah dilengkapi dengan pengaturan penagihan API.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Jika Anda juga menggunakan AI untuk penelitian dan penulisan sehari-hari, <a href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\">Perplexity pada GlobalGPT<\/a> menawarkan akses dalam ruang kerja AI serba guna, sehingga mengurangi kebutuhan untuk berpindah-pindah antar alat yang terpisah. Alur kerja konsumen tersebut terpisah dari kunci pengembang dan penagihan API yang digunakan di sini.<\/p>\n\n\n\n<p class=\"pat-p pat-quick wp-block-paragraph\"><strong>Jawaban singkat:<\/strong> Gunakan <code>cepat<\/code> Pengaturan awal agen untuk jawaban pertama yang didasarkan pada web, baca <code>response.output_text<\/code> untuk jawabannya, dan baca <code>hasil_pencarian<\/code> item di <code>respons.keluaran<\/code> untuk sumber. Cocokkan setiap penanda dalam teks dengan sumbernya berdasarkan nilai yang dikembalikan <code>id<\/code>. Sebuah kutipan berarti \u201cjawaban tersebut mengarah pada hasil ini\u201d; hal itu tidak menjamin bahwa halaman tersebut membuktikan setiap pernyataan.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Contoh status:<\/strong> Sintaks permintaan ini mengikuti dokumentasi resmi yang diperiksa pada tanggal 28 September 2026. Alat bantu kutipan telah diverifikasi menggunakan data sampel offline; tidak ada permintaan API berbayar yang dijalankan untuk tutorial ini. Catatan sumber yang ditampilkan dalam ilustrasi merupakan contoh penjelasan.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\"><img alt=\"\" decoding=\"async\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2025\/10\/image-33.png\" class=\"wp-image-2306\"\/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-3e41869c wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-black-color has-text-color has-background has-link-color has-medium-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\" style=\"background-color:#fec33a;line-height:1\"><strong>Coba Perplexity Sekarang &gt;<\/strong><\/a><\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list pat-list pat-toc\">\n<li><a href=\"#api-choice\">API Perplexity mana yang sebaiknya Anda gunakan?<\/a><\/li>\n\n\n\n<li><a href=\"#setup\">Langkah 1: Dapatkan kunci API dan atur Python<\/a><\/li>\n\n\n\n<li><a href=\"#first-request\">Langkah 2: Kirim permintaan source-grounded pertama Anda<\/a><\/li>\n\n\n\n<li><a href=\"#sources\">Langkah 3: Ekstrak jawaban dan cocokkan dengan sumbernya<\/a><\/li>\n\n\n\n<li><a href=\"#filters\">Langkah 4: Perbaiki jawaban dengan menggunakan filter pencarian<\/a><\/li>\n\n\n\n<li><a href=\"#export\">Langkah 5: Simpan jawaban lengkap beserta sumber-sumber yang dapat diklik<\/a><\/li>\n\n\n\n<li><a href=\"#advanced\">Streaming dan keluaran terstruktur<\/a><\/li>\n\n\n\n<li><a href=\"#cost-errors\">Biaya dan kesalahan umum<\/a><\/li>\n\n\n\n<li><a href=\"#migration\">Beralih dari tutorial Sonar yang lebih lama<\/a><\/li>\n\n\n\n<li><a href=\"#faq\">Pertanyaan yang Sering Diajukan<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"api-choice\" class=\"wp-block-heading pat-h2\">Tutorial API Perplexity: memilih API yang tepat<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Ini adalah antarmuka pengembang. Produk obrolan mungkin menyajikan fitur serupa dengan cara yang berbeda; uraian kami mengenai <a href=\"https:\/\/www.glbgpt.com\/hub\/what-are-the-main-features-of-perplexity-ai\/\">Fitur-fitur Perplexity<\/a> menjelaskan pengalaman yang dirasakan pengguna.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Perplexity\u2019s <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">Panduan Cepat API Resmi<\/a> mengelompokkan produk-produk pengembangnya berdasarkan tugas yang perlu Anda selesaikan. Pilihlah area terkecil yang menghasilkan data yang benar-benar dibutuhkan oleh aplikasi Anda.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>API<\/th><th>Paling cocok<\/th><th>Apa yang diterima oleh kode Anda<\/th><\/tr><\/thead><tbody><tr><td><strong>Agen<\/strong><\/td><td>Jawaban yang sudah lengkap dan didasarkan pada pencarian di web atau alat bantu lainnya<\/td><td>Item keluaran yang diketik, teks jawaban, dan catatan hasil pencarian<\/td><\/tr><tr><td><strong>Pencarian<\/strong><\/td><td>Aplikasi Anda akan secara otomatis mengurutkan, menyaring, atau merangkum hasilnya<\/td><td>Hasil pencarian tanpa meminta Perplexity untuk menuliskan jawaban akhir<\/td><\/tr><tr><td><strong>Router<\/strong><\/td><td>Mengarahkan permintaan ke model yang sesuai<\/td><td>Respons model yang dipilih melalui router<\/td><\/tr><tr><td><strong>Embedding<\/strong><\/td><td>Pencarian semantik dan indeks RAG<\/td><td>Vektor untuk lapisan pencarian Anda sendiri<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Tutorial ini memilih opsi \"Agent\" karena hasil yang Anda inginkan adalah jawaban lengkap beserta sumber-sumbernya. Untuk alur kerja penelitian yang lebih luas, lihat panduan kami mengenai <a href=\"https:\/\/www.glbgpt.com\/hub\/how-to-use-perplexity-for-research\/\">menggunakan Perplexity untuk penelitian<\/a>.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Tentang Sonar:<\/strong> Arus <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">gambaran umum migrasi<\/a> menyatakan bahwa Sonar Chat Completions masih didukung dan merekomendasikan Agent untuk semua proyek baru. Oleh karena itu, tutorial ini menggunakan Agent. Jangan menyimpulkan bahwa integrasi lama sudah tidak berfungsi lagi hanya berdasarkan batas waktu yang disebutkan dalam tutorial lama.<\/p>\n\n\n\n<h2 id=\"setup\" class=\"wp-block-heading pat-h2\">Langkah 1: Dapatkan kunci API dan atur Python<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Buat kunci dan siapkan penagihan<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/console.perplexity.ai\/\">Buka konsol API Perplexity<\/a>, pilih atau buat proyek yang akan Anda gunakan, atur penagihan API, dan buat kunci. Simpan kunci tersebut di sisi server. Biaya API pengembang ditagihkan secara terpisah dari langganan konsumen; periksa saldo proyek Anda sebelum melakukan permintaan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Instal SDK resmi<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>python -m venv .venv\n\n# macOS\/Linux: pilih perintah aktivasi ini\nsource .venv\/bin\/activate\n\n# Windows PowerShell: gunakan perintah ini sebagai gantinya\n.venv\\Scripts\\Activate.ps1\n\npython -m pip install --upgrade perplexityai<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Gunakan Python 3.10 atau yang lebih baru untuk kode di bawah ini. Aktifkan lingkungan tersebut menggunakan perintah yang sesuai dengan sistem operasi Anda, lalu instal SDK. Jika PowerShell menghalangi proses aktivasi, gunakan <code>.venv\\Scripts\\python.exe<\/code> sebagai gantinya <code>Python<\/code> untuk pemasangan dan eksekusi skrip.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Nama paketnya adalah <code>perplexityai<\/code>, sedangkan perintah `import` di Python adalah <code>kebingungan<\/code>. Gunakan lingkungan virtual agar dependensi dalam tutorial ini tidak memengaruhi proyek lain.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Contoh ini menggunakan soal pemrograman karena klaim-klaimnya dapat diverifikasi berdasarkan dokumentasi yang terus diperbarui. Panduan kami mengenai <a href=\"https:\/\/www.glbgpt.com\/hub\/is-perplexity-good-for-coding\/\">Perplexity untuk pemrograman<\/a> menjelaskan bagaimana dukungan penelitian berperan dalam konteks pengujian kode secara mandiri.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Tetapkan kunci API sebagai variabel lingkungan<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code># macOS\/Linux\nexport PERPLEXITY_API_KEY=\"kunci-Anda-di-sini\"\n\n# Windows PowerShell\n$env:PERPLEXITY_API_KEY = \"kunci-Anda-di-sini\"<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">SDK tersebut membaca <code>KUNCI API PERPLEXITY<\/code> saat Anda membuat klien. Jangan menempelkan kunci tersebut ke dalam buku catatan, mengunggahnya ke Git, atau mengirimkannya ke browser. Jika Anda menggunakan berkas .env secara lokal, pastikan berkas tersebut tidak dimasukkan ke dalam sistem kontrol versi dan muatlah berkas tersebut menggunakan pustaka variabel lingkungan pilihan Anda.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"848\" height=\"632\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication.webp\" alt=\"Dokumentasi resmi Perplexity yang menjelaskan proses instalasi SDK Python dan variabel lingkungan PERPLEXITY_API_KEY.\" class=\"wp-image-20033\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication.webp 848w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication-300x224.webp 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication-16x12.webp 16w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication-767x572.webp 767w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/figure>\n\n\n\n<h2 id=\"first-request\" class=\"wp-block-heading pat-h2\">Langkah 2: Kirim permintaan source-grounded pertama Anda<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/quickstart\">Panduan Cepat API Agent<\/a> dokumen <code>POST https:\/\/api.perplexity.ai\/v1\/agent<\/code>. Klien Python-nya membungkus permintaan tersebut dengan <code>client.responses.create()<\/code>. The <code>cepat<\/code> Pengaturan bawaan mengaktifkan pencarian web secara default, sehingga contoh pertama tetap ringkas.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>dari perplexity impor Perplexity\n\nclient = Perplexity()\n\npertanyaan = (\n    \"Bagaimana seharusnya proyek Python kecil menggunakan lingkungan virtual \"\n    \"dan mengelola dependensi?\"\n)\n\nresponse = client.responses.create(\n    preset=\"fast\",\n    input=question,\n)\n\nprint(response.output_text)<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Simpan potongan kode tersebut sebagai <code>first_request.py<\/code>, lalu jalankan <code>python first_request.py<\/code> di terminal yang sama tempat Anda menetapkan kunci tersebut. Panggilan yang berhasil seharusnya menampilkan teks jawaban yang tidak kosong. Jika Anda memerlukan bukti hasil tersebut, lanjutkan ke langkah ekstraksi sumber; teks saja tidak cukup untuk dianggap sebagai pemeriksaan yang lengkap.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Sifat kemudahan <code>teks_keluaran<\/code> memberikan teks jawaban akhir kepada Anda. Simpan juga seluruh objek respons: catatan sumber dan rincian penggunaan terdapat dalam keluaran yang diketik, bukan hanya dalam paragraf yang dicetak saja.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Permintaan yang sama menggunakan cURL<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>curl https:\/\/api.perplexity.ai\/v1\/agent \\\n  -H \"Authorization: Bearer $PERPLEXITY_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"preset\": \"fast\",\n    \"input\": \"Bagaimana seharusnya proyek Python kecil menggunakan lingkungan virtual dan mengelola dependensi?\"\n  }'<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Contoh cURL ini menggunakan sintaks Bash untuk macOS\/Linux atau shell yang kompatibel dengan Bash. Setiap kali dijalankan, permintaan yang dikenakan biaya akan dibuat. Gunakan hanya jika Anda perlu memisahkan masalah pada endpoint dari masalah pada Python; jangan jalankan setiap versi hanya untuk mengikuti langkah-langkahnya.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Setara dengan JavaScript sisi server<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Node.js 18+ mencakup <code>ambil<\/code>, sehingga uji coba awal di sisi server tidak memerlukan pustaka tambahan. Baca teks aslinya <code>keluaran<\/code> elemen dalam respons JSON; SDK Python menyediakan cara yang praktis <code>teks_keluaran<\/code> aksesori.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>const res = await fetch(\"https:\/\/api.perplexity.ai\/v1\/agent\", {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${process.env.PERPLEXITY_API_KEY}`,\n    \"Content-Type\": \"application\/json\"\n  },\n  body: JSON.stringify({\n    preset: \"fast\",\n    input: \"Bagaimana seharusnya proyek Python kecil menggunakan lingkungan virtual dan mengelola dependensi?\"\n  })\n});\nif (!res.ok) throw new Error(`Perplexity HTTP ${res.status}`);\nconsole.log(await res.json());<\/code><\/pre>\n\n\n\n<h2 id=\"sources\" class=\"wp-block-heading pat-h2\">Langkah 3: Ekstrak jawaban dan cocokkan dengan sumbernya<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/how-to#inline-citations\">Panduan resmi mengenai kutipan<\/a> membedakan teks prosa tersebut dari catatan bukti-buktinya. Sumber-sumber tersebut disajikan dalam sebuah <code>keluaran<\/code> item dengan tipe <code>hasil_pencarian<\/code>. Baca artikel tersebut <code>hasil<\/code> dan cocokkan setiap penanda kutipan dengan hasil <code>id<\/code>. Setiap hasil memiliki judul dan URL; tangani nilai yang tidak ada sebelum menampilkannya.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"848\" height=\"880\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations.webp\" alt=\"Dokumentasi resmi Perplexity yang menjelaskan kutipan bernomor, kutipan berdasarkan jenis sumber, dan penanda pencocokan dengan ID hasil pencarian.\" class=\"wp-image-20034\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations.webp 848w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations-289x300.webp 289w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations-12x12.webp 12w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations-767x796.webp 767w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Detail terakhir itu penting. Jangan berasumsi bahwa \u201ckutipan 1\u201d selalu menjadi elemen pertama dalam sebuah larik setelah alat lain menambahkan suatu item. Buatlah pencarian berdasarkan ID, lalu tentukan penanda-penanda yang benar-benar muncul dalam jawaban.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>def field(obj, name, default=None):\n    return obj.get(name, default) jika isinstance(obj, dict), jika tidak, return getattr(obj, name, default)\n\ndef source_index(output):\n    sources = {}\n    for item in output or []:\n    if field(item, \"type\") != \"search_results\":\n        continue\n    for result in field(item, \"results\", []) or []:\n            sid, url = field(result, \"id\"), field(result, \"url\")\n if sid is None:\n continue\n key = str(sid)\n if key in sources and field(sources[key], \"url\") != url:\n                raise ValueError(f\"URL bertentangan untuk ID sumber {key}\")\n sources[key] = result\n    return sources\n\nsources = source_index(response.output)\nprint(sources.get(\"7\"))  # Sebuah ID sumber, bukan posisi array ke-7<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Skrip lengkap di bawah ini mengenali <code>[1]<\/code> dan <code>[web:1]<\/code>, bentuk kutipan yang terdokumentasi untuk pengaturan bawaan umum. Fungsi bantu di atas dapat menangani baik objek SDK maupun kamus, serta menolak URL yang bertentangan yang ditetapkan ke ID yang sama. Fungsi ini tidak mengubah urutan hasil atau menebak sumber yang hilang.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Untuk pembahasan yang lebih luas mengenai kualitas kutipan, silakan lihat artikel kami <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-citation-accuracy\/\">Panduan Akurasi Kutipan Perplexity<\/a>. Kutipan merupakan jejak audit; aplikasi Anda masih memerlukan kebijakan terkait halaman yang sudah usang, URL ganda, dan klaim yang tidak didukung.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Misalnya, jika array yang dikembalikan berisi ID 2 yang diikuti oleh ID 7, penanda tersebut <code>[7]<\/code> harus ditautkan ke ID 7. Jika URL yang sama muncul di bawah ID 7 dan 9, Anda dapat menampilkan URL tersebut sekali sambil tetap mempertahankan kedua ID tersebut. Jika ID 8 tidak pernah muncul, pertahankan <code>[8]<\/code> tampak dan tandai sebagai tidak cocok.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"597\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-1024x597.webp\" alt=\"Referensi 7 terkait dengan hasil pencarian dengan ID 7, meskipun hasil yang berbeda tercantum terlebih dahulu.\" class=\"wp-image-20035\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-1024x597.webp 1024w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-300x175.webp 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-768x448.webp 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-18x10.webp 18w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow.webp 1440w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 id=\"filters\" class=\"wp-block-heading pat-h2\">Langkah 4: Perbaiki jawaban dengan menggunakan filter pencarian<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Setelah permintaan dasar berhasil, persempit cakupan pencarian jika pertanyaan Anda memiliki batasan otoritas yang jelas. Untuk pengemasan Python, dokumentasi bahasa dan panduan pengemasan merupakan titik awal yang lebih baik daripada tutorial sembarangan.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>response = client.responses.create(\n    preset=\"fast\",\n    input=(\n \"Bagaimana seharusnya sebuah proyek Python berskala kecil menggunakan lingkungan virtual \"\n \"dan mengelola dependensi? Sebutkan panduan yang Anda gunakan.\"\n    ),\n    tools=[\n {\n \"type\": \"web_search\",\n \"filters\": {\n \"search_domain_filter\": [\n \"docs.python.org\",\n                    \"packaging.python.org\",\n ]\n },\n }\n    ],\n)<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Filter tersebut berada di dalam konfigurasi alat pencarian web. Dokumentasi migrasi juga menjelaskan <code>filter_keterbaruan_pencarian<\/code> untuk pertanyaan yang bersifat mendesak. Gunakan faktor kemutakhiran jika pertanyaan tersebut bergantung pada rilis atau berita terbaru; kombinasi bidang dan tanggal yang terlalu sempit dapat membuat Anda hanya memiliki sedikit bukti.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Untuk pertanyaan mengenai rilis dalam sebulan terakhir, tambahkan <code>\"search_recency_filter\": \"bulan\"<\/code> di samping <code>filter_pencarian_domain<\/code>. Jangan sertakan hal ini dalam contoh lingkungan virtual: dokumentasi versi stabil mungkin memiliki tanggal publikasi yang lebih lama. Jika Anda beralih dari model yang sudah ditentukan sebelumnya ke model yang dipilih secara langsung, sertakan alat pencarian web secara eksplisit.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Bandingkan hasil yang telah difilter dengan yang belum difilter selama proses pengembangan. Jika jawabannya berubah, catat alasannya: filter mungkin menghilangkan konteks yang berguna, atau mungkin menghilangkan halaman-halaman dengan otoritas rendah yang mengganggu model. Ini adalah keputusan terkait kualitas, bukan jaminan bahwa setiap halaman yang tersisa sudah benar.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Jika aplikasi Anda hanya memerlukan tautan yang diurutkan dan cuplikan, panggil metode <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">API Pencarian<\/a> dan lakukan sintesisnya sendiri. Pemisahan tersebut dapat mempermudah proses peninjauan dan penyimpanan dalam cache. Untuk perbandingan yang lebih luas dengan Google, lihat <a href=\"https:\/\/www.glbgpt.com\/hub\/how-is-perplexity-different-than-google\/\">Perbedaan antara Perplexity dan Google<\/a>.<\/p>\n\n\n\n<h2 id=\"export\" class=\"wp-block-heading pat-h2\">Langkah 5: Simpan jawaban lengkap beserta sumber-sumber yang dapat diklik<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Simpan yang berikut ini sebagai <code>perplexity_tutorial.py<\/code>. Fitur ini bersifat mandiri: mencakup helper sumber, menerapkan filter domain dokumentasi Python, mengubah penanda kutipan yang cocok menjadi tautan, mengelompokkan URL duplikat tanpa menghilangkan ID-nya, dan menyimpan respons SDK lengkap bersama dengan Markdown.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>from pathlib import Path\nfrom collections import defaultdict\nfrom urllib.parse import urlsplit\nimport json\nimport re\n\nQUESTION = (\n    \"How should a small Python project use virtual environments \"\n    \"and manage dependencies?\"\n)\n# Supports the documented &#91;1] and &#91;web:1] forms in prose answers.\nCITATION_RE = re.compile(r\"(?&lt;!!)\\&#91;(?:web:)?(\\d+)\\](?!\\()\")\n\ndef field(obj, name, default=None):\n    return obj.get(name, default) if isinstance(obj, dict) else getattr(obj, name, default)\n\ndef source_index(output):\n    sources = {}\n    for item in output or &#91;]:\n        if field(item, \"type\") != \"search_results\":\n            continue\n        for result in field(item, \"results\", &#91;]) or &#91;]:\n            sid, url = field(result, \"id\"), field(result, \"url\")\n            if sid is None:\n                continue\n            key = str(sid)\n            if key in sources and field(sources&#91;key], \"url\") != url:\n                raise ValueError(f\"Conflicting URLs for source ID {key}\")\n            sources&#91;key] = result\n    return sources\n\ndef safe_url(value):\n    if not isinstance(value, str):\n        return None\n    parsed = urlsplit(value)\n    if parsed.scheme not in (\"http\", \"https\") or not parsed.netloc:\n        return None\n    # Protect a Markdown angle-bracket destination.\n    return value.replace(\"&lt;\", \"%3C\").replace(\"&gt;\", \"%3E\").replace(\" \", \"%20\")\n\ndef md_label(value):\n    return re.sub(r\"(&#91;\\\\\\&#91;\\]&lt;&gt;])\", r\"\\\\\\1\", str(value).replace(\"\\n\", \" \"))\n\ndef export_markdown(answer, output, question=QUESTION):\n    sources = source_index(output)\n    cited = list(dict.fromkeys(CITATION_RE.findall(answer)))\n    missing = &#91;\n        sid for sid in cited\n        if sid not in sources or not safe_url(field(sources&#91;sid], \"url\"))\n    ]\n    def link(match):\n        sid = match.group(1)\n        url = safe_url(field(sources.get(sid, {}), \"url\"))\n        return f\"&#91;{match.group(0)&#91;1:-1]}](&lt;{url}&gt;)\" if url else match.group(0)\n\n    # Keep every ID when the same URL appears under different IDs.\n    grouped = defaultdict(list)\n    titles = {}\n    for sid in cited:\n        source = sources.get(sid, {})\n        url = safe_url(field(source, \"url\"))\n        if url:\n            grouped&#91;url].append(sid)\n            titles.setdefault(url, field(source, \"title\") or url)\n\n    lines = &#91;\"# Source-grounded answer\", \"\", question, \"\",\n             CITATION_RE.sub(link, answer), \"\", \"## Cited sources\", \"\"]\n    for url, ids in grouped.items():\n        lines.append(f\"- IDs {', '.join(ids)}: &#91;{md_label(titles&#91;url])}](&lt;{url}&gt;)\")\n    if missing:\n        lines.append(\"- Unmatched or unusable source IDs: \" + \", \".join(missing))\n    if not cited:\n        lines.append(\"- No recognized inline citations; evidence not verified.\")\n    lines.extend(&#91;\"\", \"Source links require review; matching IDs does not verify claims.\"])\n    return \"\\n\".join(lines) + \"\\n\"\n\ndef main():\n    from perplexity import Perplexity\n    response = Perplexity().responses.create(\n        preset=\"fast\",\n        input=QUESTION,\n        tools=&#91;{\"type\": \"web_search\", \"filters\": {\n            \"search_domain_filter\": &#91;\"docs.python.org\", \"packaging.python.org\"]\n        }}],\n    )\n    answer = response.output_text or \"\"\n    if not answer.strip():\n        raise RuntimeError(\"No answer text returned; inspect response status and errors.\")\n    Path(\"perplexity-response.json\").write_text(\n        response.model_dump_json(indent=2), encoding=\"utf-8\"\n    )\n    Path(\"perplexity-answer.md\").write_text(\n        export_markdown(answer, response.output), encoding=\"utf-8\"\n    )\n    print(\"Saved perplexity-answer.md and perplexity-response.json\")\n\nif __name__ == \"__main__\":\n    main()\n\n<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Jalankan <code>python perplexity_tutorial.py<\/code> dari direktori proyek Anda. Perintah ini akan menulis <code>perplexity-jawaban.md<\/code> dan <code>perplexity-response.json<\/code> Di sana, file-file sebelumnya akan diganti dengan file-file yang memiliki nama tersebut. Berkas Markdown berisi pertanyaan, jawaban yang ditautkan, sumber yang dikutip, dan ID yang tidak cocok. Berkas JSON menyimpan hasil yang dikembalikan serta informasi penggunaannya untuk keperluan diagnosis.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Parser ini dirancang untuk mengolah bentuk-bentuk penanda tunggal yang tercantum dalam teks prosa. Parser ini bukanlah parser Markdown yang lengkap: jika aplikasi Anda memerlukan Markdown sembarang, contoh kode, atau kutipan seperti <code>[1,2]<\/code>, tambahkan renderer yang mendukung sintaks dan uji coba untuk format tersebut. Jangan menafsirkan ulang penanda yang tidak dikenal tanpa pemberitahuan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Periksa apakah halaman yang ditautkan mendukung jawaban tersebut<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Untuk contoh ini, periksa apakah dokumentasi yang dikutip benar-benar menjelaskan isolasi lingkungan dan pemasangan dependensi. Tautan ke laman utama Python kurang berguna dibandingkan bagian dokumentasi yang relevan. Jika sebuah jawaban merekomendasikan perintah tertentu, periksa sistem operasi dan versi Python-nya sebelum menjalankannya. Mark menyatakan bahwa teks yang dikutip tidak mendukung status \u201cbelum terselesaikan\u201d.<\/p>\n\n\n\n<h2 id=\"advanced\" class=\"wp-block-heading pat-h2\">Tambahkan output streaming atau terstruktur jika diperlukan<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Streaming<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Streaming meningkatkan persepsi latensi pada antarmuka obrolan. Panduan migrasi Agen mendokumentasikan peristiwa delta teks seperti <code>response.output_text.delta<\/code>. Tampilkan perubahan tersebut begitu masuk, tetapi kumpulkan juga item respons akhir agar antarmuka pengguna Anda dapat menampilkan sumber-sumbernya setelah jawaban selesai. Aliran teks saja bukanlah daftar sumber.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Berikut ini hanya tampilan teks. Simpan ekspor non-streaming untuk catatan sumber lengkap pertama Anda; implementasi streaming produksi juga harus mengumpulkan peristiwa alat\/keluaran serta menangani proses yang terputus atau gagal.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>stream = client.responses.create(\n    preset=\"fast\", input=question, stream=True\n)\nfor event in stream:\n    if event.type == \"response.output_text.delta\":\n print(event.delta, end=\"\", flush=True)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Hasil terstruktur<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Gunakan respons terstruktur jika kode di bagian hilir memerlukan bidang-bidang seperti <code>jawaban<\/code>, <code>catatan_kepercayaan<\/code> dan <code>pertanyaan_tindak_lanjut<\/code>. Simpan ID sumber sebagai kolom terpisah atau pertahankan keluaran Agent yang asli agar skema Anda tidak menyembunyikan bukti tersebut. Lakukan validasi skema tersebut pada kasus uji Anda sendiri sebelum menggunakannya dalam alur kerja.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Referensi migrasi tersebut tetap berlaku <code>format_tanggapan<\/code> dengan <code>jenis: \"json_schema\"<\/code> untuk keluaran terstruktur. Tentukan bidang-bidang yang wajib diisi dan larang penggunaan properti yang tidak diharapkan jika diperlukan. Pemeriksaan validitas skema berfokus pada bentuk, bukan kebenaran: ID sumber tetap harus dapat dipetakan ke catatan yang sebenarnya dikembalikan, dan label kepercayaan yang ditulis oleh model bukanlah ukuran akurasi.<\/p>\n\n\n\n<h2 id=\"cost-errors\" class=\"wp-block-heading pat-h2\">Biaya API Perplexity dan kesalahan umum<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/pricing\">Halaman harga resmi Perplexity<\/a>, diperiksa pada 28 September 2026, memisahkan token model Agen dari pemanggilan alat. Berikut ini adalah biaya alat\/pencarian dalam USD. Biaya tersebut <code>cepat<\/code> Pengaturan awal agen dan <code>jenis_pencarian: \"cepat\"<\/code> Terdapat berbagai pilihan konfigurasi; jangan menyimpulkan laju pencarian hanya berdasarkan nama preset.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Tindakan yang dapat ditagih<\/th><th>USD per saham<\/th><th>USD per 1.000<\/th><\/tr><\/thead><tbody><tr><td>Pencarian web standar agen<\/td><td>$0.0025<\/td><td>$2.50<\/td><\/tr><tr><td>Pemanggilan Fitur Pencarian Cepat<\/td><td>$0.001<\/td><td>$1.00<\/td><\/tr><tr><td>Pengambilan URL oleh agen<\/td><td>$0.0005<\/td><td>$0.50<\/td><\/tr><tr><td>Permintaan API Pencarian berhasil<\/td><td>$0.005<\/td><td>$5.00<\/td><\/tr><tr><td>API Pencarian dengan Fast Search<\/td><td>$0.001<\/td><td>$1.00<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"1024\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-736x1024.webp\" alt=\"Tabel harga resmi Perplexity yang mencantumkan harga pemanggilan alat Agent dan harga API Pencarian per 1.000 permintaan.\" class=\"wp-image-20036\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-736x1024.webp 736w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-216x300.webp 216w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-9x12.webp 9w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-768x1068.webp 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing.webp 848w\" sizes=\"(max-width: 736px) 100vw, 736px\" \/><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Contoh:<\/strong> Biaya untuk 1.000 permintaan pencarian web standar ditambah 1.000 pengambilan URL <strong>$3.00 dalam biaya alat<\/strong> ($2.50 + $0.50), sebelum token model atau biaya lainnya. Itu adalah perkiraan beban kerja, bukan biaya yang diukur untuk tutorial ini. Satu permintaan Agen dapat memicu penggunaan beberapa alat. Jika tersedia, periksa <code>penggunaan.biaya.biaya_total<\/code> pada tanggapan yang telah diselesaikan.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Gejala<\/th><th>Hal yang perlu diperiksa terlebih dahulu<\/th><\/tr><\/thead><tbody><tr><td>401 atau 403<\/td><td>Nama variabel lingkungan, masa berlaku kunci, akses akun, dan apakah permintaan tersebut sampai ke titik akhir saat ini.<\/td><\/tr><tr><td>Kesalahan penagihan atau kuota<\/td><td>Kredit API, pengaturan pembayaran, biaya model\/alat, dan batas akun. Paket konsumen Perplexity tidak secara otomatis mencakup kredit API.<\/td><\/tr><tr><td>429<\/td><td>Batas frekuensi dan perilaku percobaan ulang. Gunakan metode backoff eksponensial terbatas dan hindari mengulangi permintaan yang telah dibayar secara sembarangan.<\/td><\/tr><tr><td>Waktu habis<\/td><td>Pengaturan jalur jaringan, ukuran prompt, jumlah alat, dan batas waktu klien. Catat ID permintaan jika SDK menyediakannya, tetapi jangan pernah mencatat kuncinya.<\/td><\/tr><tr><td>Jawaban tersebut tidak memiliki sumber yang sesuai<\/td><td>Periksa bahan mentahnya <code>respons.keluaran<\/code>, sintaks kutipan dan ID sumber; tandai jawaban tersebut sebagai \"belum diverifikasi\" daripada membuat tautan palsu.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">API Pencarian menagih permintaan yang berhasil, termasuk yang tidak menghasilkan hasil apa pun; harga per permintaan tidak dikenakan biaya token tambahan. Biaya agen bergantung pada token model dan alat yang digunakan. Pastikan untuk memisahkan unit penagihan ini saat membandingkan alur kerja yang menghasilkan jawaban dengan alur kerja yang hanya melakukan pencarian.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Untuk perbandingan anggaran API, kami <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-api-cost-2025\/\">Panduan Biaya API Perplexity<\/a> menambahkan informasi latar belakang, sementara halaman harga resmi tetap menjadi sumber informasi yang paling dapat diandalkan untuk tarif terkini.<\/p>\n\n\n\n<h2 id=\"migration\" class=\"wp-block-heading pat-h2\">Beralih dari tutorial Sonar yang lebih lama<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Banyak hasil pencarian masih menampilkan tampilan Chat Completions versi lama. Panduan migrasi Agen menggunakan pemetaan konseptual langsung. Jika Anda membandingkan label model konsumen dengan preset API, panduan penjelasan kami mengenai <a href=\"https:\/\/www.glbgpt.com\/hub\/what-llm-does-perplexity-use\/\">apa yang digunakan LLM Perplexity<\/a> memberikan konteks, tetapi tidak dapat menggantikan dokumentasi Agent API.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Pola Sonar yang lebih lama<\/th><th>Pola API Agen<\/th><\/tr><\/thead><tbody><tr><td><code>pesan<\/code><\/td><td><code>masukan<\/code><\/td><\/tr><tr><td><code>model<\/code><\/td><td><code>pengaturan bawaan<\/code><\/td><\/tr><tr><td><code>choices[0].message.content<\/code><\/td><td><code>teks_keluaran<\/code><\/td><\/tr><tr><td>Asumsi-asumsi lama mengenai susunan kutipan<\/td><td><code>hasil_pencarian<\/code> item keluaran dan pencocokan berdasarkan ID<\/td><\/tr><tr><td>Parameter pencarian pada permintaan<\/td><td><code>tools=[{\"type\":\"web_search\",\"filters\":{...}}]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Baca siaran langsungnya <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">gambaran umum migrasi<\/a> dan <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/how-to\">rincian migrasi<\/a> sebelum mengubah kode produksi. Pemetaan bawaan tersebut hanyalah titik awal, bukan jaminan bahwa model lama dan baru akan menghasilkan kualitas, latensi, atau biaya yang sama.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading pat-h2\">Pertanyaan yang Sering Diajukan<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Apakah API Perplexity gratis?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">API ini menggunakan sistem bayar sesuai penggunaan sesuai dengan panduan cepat dan dokumentasi harga yang berlaku saat ini. Jangan berasumsi bahwa langganan konsumen, masa uji coba, atau kredit promosi membuat setiap permintaan API menjadi gratis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Apakah saya memerlukan Perplexity Pro untuk menggunakan API tersebut?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Akses API dan paket Pro untuk pengguna umum adalah dua produk yang terpisah. Buat kredensial API dan periksa tagihan API untuk akun pengembang yang akan Anda gunakan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Haruskah saya menggunakan Agent API atau Search API?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Pilih \"Agent\" jika Anda menginginkan jawaban yang sudah jadi, lengkap, dan didukung sumber. Pilih \"Search\" jika aplikasi Anda harus menangani pemeringkatan, penyaringan, dan sintesis. Anda dapat menggabungkan \"Search\" dengan model Anda sendiri jika Anda membutuhkan kendali ketat atas setiap langkah pembangkitan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Apakah saya bisa memanggil Perplexity dari JavaScript?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Ya. Gunakan contoh Node.js sisi server di atas atau SDK JavaScript resmi. Simpan kunci tersebut di server. Saat membaca JSON mentah, periksa item keluaran yang telah ditipe dan terapkan aturan pemetaan source-ID yang sama.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Apakah kutipan Perplexity dijamin akurat?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Tidak. Kutipan tersebut menunjukkan hasil pencarian mana yang menjadi acuan jawaban tersebut. Aplikasi Anda atau penilai tetap harus memeriksa keaktualan, keandalan, dan apakah halaman tersebut mendukung klaim yang dimaksud secara tepat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Mengapa parser saya tidak menemukan sumber apa pun?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Periksa jenis item hasil mentah, pastikan pencarian web telah dijalankan, dan periksa apakah ekspresi reguler Anda sesuai dengan format kutipan yang telah ditentukan. Jika tidak ada penanda yang muncul, simpan jawaban tersebut sebagai \"belum diverifikasi\" dan selidiki permintaan tersebut, alih-alih menambahkan tautan yang hanya didasarkan pada tebakan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Apakah GlobalGPT dapat menggantikan kunci API Perplexity?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">GlobalGPT adalah ruang kerja AI serba guna untuk penggunaan AI sehari-hari. Langganan dan akses modelnya terpisah dari akun pengembang Perplexity, kunci API, dan kredit API; tutorial Python ini menggunakan akun pengembang tersebut.<\/p>\n\n\n\n<h2 id=\"checklist\" class=\"wp-block-heading pat-h2\">Daftar periksa peluncuran yang praktis<\/h2>\n\n\n\n<ul class=\"wp-block-list pat-list pat-checklist\">\n<li>Buat kunci sisi server dan konfirmasi penagihan API.<\/li>\n\n\n\n<li>Jalankan versi minimal <code>cepat<\/code> Harap lakukan permintaan ini sebelum menambahkan filter atau memulai streaming.<\/li>\n\n\n\n<li>Simpan respons lengkapnya, bukan hanya teks jawaban yang terlihat.<\/li>\n\n\n\n<li>Cocokkan penanda kutipan dengan ID sumber yang diperoleh, dan tandai penanda yang tidak cocok.<\/li>\n\n\n\n<li>Periksa halaman-halaman yang dikutip untuk memastikan adanya bukti pendukung klaim, keaktualan, dan URL ganda.<\/li>\n\n\n\n<li>Periksa kembali dokumentasi mengenai Live Agent, harga, dan migrasi sebelum melakukan implementasi.<\/li>\n<\/ul>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Kini Anda telah memiliki pola dasar untuk integrasi API Perplexity yang andal: ajukan pertanyaan yang spesifik, biarkan API Agen melakukan pencarian, simpan jawaban dan bukti secara bersamaan, serta pastikan setiap kutipan dapat diaudit. Dari sini, tambahkan fitur penyimpanan sementara (caching), upaya ulang (retries), dan aturan peninjauan Anda sendiri dalam alur kerja yang sama berdasarkan ID sumber.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\n    \"@context\": \"https:\\\/\\\/schema.org\",\n    \"@type\": \"FAQPage\",\n    \"mainEntity\": [\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Is the Perplexity API free?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"The APIs are pay-as-you-go according to the current quickstart and pricing documentation. Do not assume that a consumer subscription, a trial or a promotional credit makes every API request free.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Do I need Perplexity Pro to use the API?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"API access and a consumer Pro plan are separate products. Create API credentials and check API billing for the developer account you plan to use.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Should I use Agent API or Search API?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Choose Agent when you want a finished grounded answer with sources. Choose Search when your application should own ranking, filtering and synthesis. You can combine Search with your own model if you need strict control over every generation step.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Can I call Perplexity from JavaScript?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Yes. Use the server-side Node.js example above or the official JavaScript SDK. Keep the key on the server. When reading raw JSON, inspect the typed output items and apply the same source-ID mapping rules.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Are Perplexity citations guaranteed to be correct?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"No. A citation tells you which returned result the answer points to. Your application or reviewer must still check freshness, authority and whether the page supports the exact claim.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Why did my parser find no sources?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Inspect the raw output item types, confirm that web search ran, and check whether your regular expression matches the preset's citation form. If no marker appears, save the answer as unverified and investigate the request rather than adding a guessed link.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Can GlobalGPT replace a Perplexity API key?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"GlobalGPT is an all-in-one AI workspace for everyday AI use. Its subscription and model access are separate from a Perplexity developer account, API key and API credits; this Python tutorial uses the developer account.\"\n            }\n        }\n    ]\n}<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>API PERPLEXITY \u00b7 TUTORIAL PYTHON \u00b7 2026 Tutorial API Perplexity ini menunjukkan kepada Anda cara membuat skrip Python yang menghasilkan jawaban beserta sumber web yang dapat diklik. Gunakan API Agent untuk mengirim pertanyaan, membaca jawabannya, mencocokkan penanda kutipannya dengan ID sumber, dan mengekspor berkas Markdown yang dapat Anda tinjau. Kita akan [\u2026]<\/p>","protected":false},"author":17,"featured_media":20032,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"Perplexity API Tutorial: Build Answers with Sources","_seopress_titles_desc":"Perplexity API tutorial for Python: get a key, build answers with clickable sources, and match citation IDs correctly. Follow the complete script step by step.","_seopress_robots_index":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-20031","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-chat"],"acf":[],"_links":{"self":[{"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/posts\/20031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/comments?post=20031"}],"version-history":[{"count":2,"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/posts\/20031\/revisions"}],"predecessor-version":[{"id":20038,"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/posts\/20031\/revisions\/20038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/media\/20032"}],"wp:attachment":[{"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/media?parent=20031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/categories?post=20031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/id\/wp-json\/wp\/v2\/tags?post=20031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}