Lewati ke konten utama

DeepSeek V3.1: Panduan dengan Proyek Demo

Pelajari cara mengubah PDF apa pun menjadi asisten riset interaktif menggunakan DeepSeek V3.1 dan aplikasi Streamlit.
Diperbarui 28 Sep 2026  · 12 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

DeepSeek baru-baru ini merilis DeepSeek V3.1, model penalaran hibrida skala besar yang mendukung mode jawaban “think” dan “non-think”, sehingga ideal untuk analisis dokumen interaktif.

Dalam blog ini, saya akan berfokus pada kapabilitas agen DeepSeek V3.1 untuk memahami makalah penelitian. Saya akan menjelaskan langkah demi langkah cara mengubah PDF apa pun menjadi asisten riset interaktif melalui aplikasi Streamlit—saya akan memandu Anda melalui:

  • Mengintegrasikan DeepSeek V3.1 melalui API OpenRouter untuk penalaran dokumen panjang yang skalabel
  • Mengekstraksi dan mengurai teks PDF untuk menangani makalah akademik dengan panjang berapa pun
  • Merancang aplikasi Streamlit yang memungkinkan pengguna beralih antara jawaban faktual cepat dan penalaran mendalam berbasis bukti
  • Menerapkan pelacakan biaya dan pengukuran kinerja untuk skenario riset dunia nyata
  • Mendukung jawaban dengan kutipan yang diekstrak dari sumber

Di akhir, aplikasi Anda akan terlihat seperti ini:

Proyek demo DeepSeek V3.1

Apa itu DeepSeek V3.1?

DeepSeek V3.1 adalah model Mixture-of-Experts (MoE) hibrida dengan 671 miliar parameter yang dilatih untuk gaya jawaban "thinking" (terperinci, bernalar) dan "non-thinking" (faktual, ringkas). Model ini mendukung konteks hingga 128.000 token dan dapat diakses melalui API OpenAI-kompatibel milik OpenRouter.

Tolok ukur DeepSeek V3.1

Sumber: DeepSeek

Fitur terpenting DeepSeek V3.1 adalah:

  • Penanganan konteks panjang: DeepSeek V3.1 memproses dokumen yang sangat panjang secara efisien, mendukung jendela konteks hingga 128.000 token (lebih dari 100 halaman), sehingga ideal untuk makalah penelitian dan laporan komprehensif.
  • Mode penalaran ganda: Model ini hadir dengan dua mode penalaran berikut:
    • Thinking mode: Mode ini menghasilkan penalaran terperinci langkah demi langkah dan mengutip bukti langsung dari materi sumber untuk analisis dan kritik mendalam.
    • Non-thinking mode: Mode ini memberikan respons ringkas dan faktual untuk pengambilan informasi cepat serta tanya jawab singkat.
  • Arsitektur hybrid mixture-of-experts: DeepSeek V3.1 menggabungkan beberapa sub-jaringan pakar, memungkinkan pengingatan faktual dan sintesis lanjutan dalam satu model.
  • Alur kerja agen dan berbantuan alat: Model ini dirancang untuk integrasi dengan sistem berbasis agen dan mendukung penggunaan alat eksternal untuk alur kerja multi-langkah yang lebih kaya.
  • Akses API yang kompatibel dengan OpenAI: Dapat diakses melalui API OpenAI-kompatibel milik OpenRouter, sehingga penerapan dan integrasi menjadi mudah bagi pengembang.

Demo DeepSeek V3.1: Asisten Makalah Penelitian

Pada bagian ini, saya akan menjelaskan bagaimana saya menggunakan DeepSeek V3.1 untuk mengubah makalah penelitian PDF apa pun yang diunggah menjadi asisten riset bertenaga AI yang interaktif.

Begini cara kerjanya:

  • Unggah makalah penelitian PDF dan pratinjau teks yang diekstrak.
  • Ajukan pertanyaan dalam bahasa alami tentang makalah tersebut.
  • Pilih antara “Jelaskan Singkat” (non-think) atau “Jelaskan Mendetail” (think) sebagai mode respons.
  • Langsung menerima jawaban, beserta waktu respons, estimasi penggunaan token/biaya, dan kutipan pendukung dari sumber.

Langkah 1: Prasyarat

Sebelum menjalankan demo ini, pastikan semua prasyarat sudah siap.

Langkah 1.1: Impor 

Pertama, pastikan Anda telah memasang impor berikut:

pip install streamlit openai pypdf

Perintah ini memastikan Anda memiliki semua dependensi inti untuk UI, penanganan PDF, dan permintaan API.

Langkah 1.2: Menyiapkan kunci API OpenRouter 

Model DeepSeek V3.1 tersedia melalui berbagai platform serta DeepSeek Official API. Namun, saya menggunakan OpenRouter yang menyediakan akses ke banyak kunci API untuk berbagai model dan paling hemat biaya untuk tujuan demo ini. Berikut langkah menyiapkan kunci API untuk DeepSeek V3.1:

  • Buat akun di https://openrouter.ai/
  • Buka tab Models dan cari “DeepSeek V3.1”. Anda juga dapat memilih versi dasar, tetapi versi tersebut hanya dilatih untuk prediksi token berikutnya mentah, yang membuat penyusunan prompt sedikit lebih sulit. Jadi, saya menggunakan versi chat “deepseek/deepseek-chat-v3.1.”

DeepSeek V3.1 di OpenRouter

  • Gulir ke bawah dan klik Create API Key. Isi nama kunci dan batas kredit (opsional), lalu klik Create. Simpan kunci API ini untuk digunakan nanti. 

Buat kunci API

  • Selanjutnya, buka tab Credits dan tambahkan informasi kartu atau bank Anda. Anda juga dapat membayar melalui Amazon Pay atau kripto. Untuk demo ini, saya menambahkan sekitar $8, yang sudah cukup.

Tambah kredit

Sekarang, setel kunci API Anda sebagai variabel lingkungan sebelum menjalankan aplikasi:

export OPENROUTER_API_KEY=your_api_key

Memilih API yang tepat

API resmi DeepSeek paling cocok untuk beban kerja otomatis dengan volume tinggi.

Untuk sebagian besar riset, pendidikan, atau kasus demo, termasuk Streamlit Research Paper Assistant ini, saya lebih memilih OpenRouter karena lebih sederhana dan fleksibel. Platform ini menawarkan harga global yang dapat diprediksi tanpa batasan jangka waktu atau logika cache yang perlu dikelola, sehingga cocok untuk analisis ad hoc, kueri dokumen unik, dan kolaborasi yang mudah.

Catatan: Menggunakan DeepSeek V3.1 melalui API hanya memerlukan sekitar 8 GB memori untuk UI, sehingga Anda tidak perlu meng-host model 670 miliar parameter yang masif secara lokal, yang jika tidak akan memerlukan ruang disk 170+ GB dan GPU yang kuat.

Langkah 2: Menyiapkan Aplikasi Streamlit

Untuk menghadirkan DeepSeek V3.1 melalui antarmuka yang ramah pengguna, kita akan menggunakan Streamlit sebagai kerangka aplikasi dan menghubungkannya ke model melalui API OpenAI-kompatibel milik OpenRouter. 

Langkah 2.1: Konfigurasi

Langkah ini mencakup penyiapan lingkungan, autentikasi API, dan konfigurasi dasar Streamlit.

import streamlit as stimport pypdfimport tempfilefrom openai import OpenAIimport osimport timeimport rest.set_page_config(    page_title="DeepSeek V3.1 Research Assistant",    layout="wide")with st.sidebar:    st.title("Research Paper Assistant")    st.info("Tip: Ask about the methods, findings, or reasoning for best results.")OPENROUTER_API_KEY = os.environ.get("OPENROUTER_API_KEY", "")if not OPENROUTER_API_KEY:    st.warning("Add your OpenRouter API key to an environment variable.")    st.stop()client = OpenAI(    base_url="https://openrouter.ai/api/v1",    api_key=OPENROUTER_API_KEY,)

Pada kode di atas, pemanggilan fungsi st.set_page_config() menyesuaikan judul halaman dan tata letak aplikasi Streamlit. Aplikasi mengambil kunci API OpenRouter dari variabel lingkungan dan klien yang kompatibel dengan OpenAI diinisialisasi, mengarah ke endpoint API OpenRouter, memastikan semua panggilan LLM berikutnya diarahkan dan diautentikasi dengan benar untuk DeepSeek V3.1.

Langkah 2.2: Fungsi pembantu

Sebelum membangun alur kerja utama, kita memerlukan fungsi utilitas yang andal untuk menangani pemrosesan dokumen dan estimasi sumber daya. Pada langkah ini, kita mendefinisikan fungsi pembantu untuk mengekstrak teks dari PDF yang diunggah, meninjau konten dokumen, menghitung perkiraan jumlah token, dan memperkirakan biaya berdasarkan harga DeepSeek V3.1 di OpenRouter. 

def pdf_to_text(uploaded_file):    with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:        tmp_file.write(uploaded_file.read())        tmp_path = tmp_file.name    reader = pypdf.PdfReader(tmp_path)    text = ""    for page in reader.pages:        page_text = page.extract_text()        if page_text:            text += page_text + "\n"    return textdef preview_pdf_text(text, max_chars=600):    preview = text[:max_chars]    if len(text) > max_chars:        preview += "\n...\n[Preview truncated]"    return previewdef count_tokens(text):    return max(1, int(len(text) / 4))def estimate_cost(tokens, mode="input"):    if mode == "input":        return tokens / 1_000_000 * 0.20    else:        return tokens / 1_000_000 * 0.80

Dengan fungsi pembantu ini diterapkan, backend kita siap mendukung antarmuka asisten riset yang skalabel:

  • Penguraian PDF yang efisien: Fungsi pdf_to_text() memproses PDF multi-halaman menjadi teks biasa sambil mempertahankan batas halaman, membuat data sesuai untuk input LLM dan pemrosesan lanjutan.
  • Penghitungan token dan estimasi biaya: Fungsi count_tokens() memberikan perkiraan jumlah token untuk membantu memantau penggunaan API relatif terhadap jendela konteks besar DeepSeek. Sementara fungsi estimate_cost() kemudian menerjemahkan jumlah token ini menjadi umpan balik biaya waktu nyata menggunakan harga OpenRouter untuk input dan output, sehingga pengguna tetap mengetahui anggaran komputasi untuk setiap kueri.
  • Pembuatan pratinjau: Fungsi preview_pdf_text() membuat pratinjau yang dipersingkat, memungkinkan pengguna memverifikasi integritas dan relevansi konten yang diekstrak sebelum menimbulkan biaya model atau mencapai batas API.

Dengan fondasi ini, kita sekarang dapat melanjutkan untuk merangkai aplikasi Streamlit lengkap untuk tanya jawab makalah penelitian berkonteks panjang dan berbasis agen.

Langkah 2.3: Aplikasi Streamlit

Dengan utilitas inti siap, kita kini dapat menyusun antarmuka pengguna Streamlit utama yang menyatukan pemrosesan PDF, estimasi token/biaya, tanya jawab berbasis pengguna, dan interaksi langsung dengan DeepSeek V3.1 melalui OpenRouter. 

st.header("Research Paper Assistant")pdf_file = st.file_uploader("Upload your research paper (PDF)", type=["pdf"])if "paper_text" not in st.session_state or st.session_state.get("last_uploaded") != pdf_file:    if pdf_file is not None:        with st.spinner("Extracting text from PDF..."):            st.session_state.paper_text = pdf_to_text(pdf_file)            st.session_state.last_uploaded = pdf_file            st.success(f"PDF uploaded. Total characters extracted: {len(st.session_state.paper_text):,}")            with st.expander("Preview of extracted PDF text:"):                st.code(preview_pdf_text(st.session_state.paper_text), language='markdown')paper_text = st.session_state.get("paper_text")if paper_text:    input_tokens = count_tokens(paper_text)    st.caption(f"Estimated input tokens: {input_tokens:,} (Estimated input cost: ${estimate_cost(input_tokens):.3f})")    question = st.text_area("Ask a question about this paper:", height=80, placeholder="E.g. What are the main findings?")    mode = st.radio(        "Select Mode",        ["Explain in Brief (Non-Think)", "Explain in Detail (Think)"],        horizontal=True,    )    go = st.button("Get Answer", use_container_width=True)    if question and go:        if mode == "Explain in Brief (Non-Think)":            prompt = (                f"{paper_text}\n\n"                f"Question: {question}\n"                "First, answer in a few sentences. Then, quote 1–2 exact sentences from the above paper that best support your answer. "                "Show each quote on a new line."            )            thinking_flag = False            header = "Explain in Brief (Non-Think)"        else:            prompt = (                f"{paper_text}\n\n"                f"Question: {question}\n"                "First, answer in detail with reasoning and evidence. Then, quote 2–3 exact sentences from the above paper that most strongly support your answer. "                "List the quotes after your answer."            )            thinking_flag = True            header = "Explain in Detail (Think)"        with st.spinner(f"Generating answer..."):            start_time = time.perf_counter()            try:                response = client.chat.completions.create(                    model="deepseek/deepseek-chat-v3.1",                    messages=[                        {"role": "system", "content": "You are a helpful research assistant."},                        {"role": "user", "content": prompt}                    ],                    max_tokens=900,                    extra_body={"thinking": thinking_flag},                 )                answer = response.choices[0].message.content.strip()                output_tokens = count_tokens(answer)            except Exception as e:                answer = f"Error: {e}"                output_tokens = 0            end_time = time.perf_counter()            elapsed_time = end_time - start_time            parts = re.split(r"(?:^|\n)(Quotes?:?)", answer, flags=re.IGNORECASE)            if len(parts) >= 3:                main_answer = parts[0].strip()                quotes = parts[2].strip()            else:                main_answer = answer                quotes = None            st.markdown(f"### {header}")            st.info(f"Time taken: {elapsed_time:.2f} seconds | Output tokens: {output_tokens} (Est. output cost: ${estimate_cost(output_tokens, 'output'):.3f})")            st.write(main_answer)            if quotes:                st.markdown("**Supporting Quotes:**")                st.success(quotes)

Aplikasi Streamlit ini menerapkan asisten makalah penelitian dinamis menggunakan DeepSeek V3.1, menangani semuanya mulai dari pemasukan dokumen hingga tanya jawab LLM yang sadar konteks. Berikut fungsi-fungsi kunci yang ditangani oleh aplikasi Streamlit:

1. Unggah PDF dan caching

Pengguna mengunggah file PDF melalui antarmuka, lalu:

  • Aplikasi memeriksa st.session_state untuk melihat apakah file baru. Jika ya, aplikasi mengekstrak teks dan menyimpannya di session_state bersama referensi unggahan, sehingga menghindari ekstraksi berulang pada setiap interaksi.
  • Setelah ekstraksi, aplikasi menampilkan pratinjau ~600 karakter pertama dari dokumen, beserta statistik seperti jumlah karakter, perkiraan token input, dan biaya.

2. Kueri pengguna dan pemilihan mode

Setelah dokumen dimuat, pengguna dapat mengetik pertanyaan dan memilih antara mode Non-think dan Think, di mana UI menyesuaikan instruksi prompt untuk tiap mode:

  • Mode Non-think: Mengembalikan jawaban singkat dengan 1–2 kutipan pendukung dari makalah.
  • Mode Think: Mengembalikan jawaban terperinci yang didukung bukti dengan 2–3 kutipan pendukung.

3. Rekayasa prompt dan pemanggilan API

Saat pengguna mengeklik "Get Answer", aplikasi kemudian:

  • Membangun prompt kaya konteks, memasukkan konten makalah, pertanyaan, dan instruksi jawaban.
  • Menyetel parameter thinking pada permintaan API OpenRouter (extra_body={"thinking": thinking_flag}), memastikan model berjalan dalam mode penalaran yang benar, alih-alih mengandalkan temperature.
  • Aplikasi mengukur waktu inferensi, jumlah token keluaran, dan biaya untuk setiap respons, lalu menampilkannya demi transparansi.

4. Pascapemrosesan dan tampilan

Jawaban yang dikembalikan diurai sehingga respons utama dan kutipan pendukung dipisahkan (jika ditemukan). Lalu, baik jawaban maupun kutipan yang diekstrak dirender di UI, menonjolkan bukti tekstual yang tepat dari makalah sumber.

Untuk mencoba sendiri, simpan kodenya sebagai app.py dan jalankan:

streamlit run app.py

Dalam eksperimen saya, DeepSeek V3.1 membutuhkan waktu jauh lebih lama untuk menghasilkan jawaban “think” yang terperinci dibandingkan respons “non-think” yang singkat. Hal ini karena keluaran yang lebih panjang dan bernalar memerlukan lebih banyak komputasi dan waktu.

Kesimpulan

Tutorial ini menunjukkan bagaimana kita dapat menggunakan DeepSeek V3.1 untuk membangun asisten makalah penelitian interaktif yang mampu menganalisis dokumen panjang, memberikan jawaban ringkas maupun mendetail, dan melacak biaya secara real time—semua dalam aplikasi Streamlit. Jika Anda ingin terus membangun proyek dengan DeepSeek, saya sarankan melihat tutorial kami yang membahas DeepSeek V3.2-Speciale yang baru.


Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Saya adalah Google Developers Expert di ML (Gen AI), Kaggle 3x Expert, dan Women Techmakers Ambassador dengan pengalaman lebih dari 3 tahun di bidang teknologi. Saya ikut mendirikan startup health-tech pada 2020 dan sedang menempuh studi magister ilmu komputer di Georgia Tech dengan spesialisasi machine learning.

Topik
Kecerdasan Buatan
Large Language Models

Pelajari AI dengan kursus-kursus ini!

Kursus

Agen Teks-ke-Kueri dengan MongoDB dan LangGraph

2 jam
919
Pelajari cara berinteraksi dengan data Anda menggunakan agen AI berbasis teks-ke-kueri dengan MongoDB dan LangGraph.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya