Lewati ke konten utama

Cara Mengatur dan Menjalankan DeepSeek R1 Secara Lokal dengan Ollama

Pelajari cara menginstal, menyiapkan, dan menjalankan DeepSeek-R1 secara lokal dengan Ollama serta membangun aplikasi RAG sederhana.
Diperbarui 28 Sep 2026  · 12 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Dalam tutorial ini, saya akan menjelaskan langkah demi langkah cara menjalankan DeepSeek-R1 secara lokal dan cara menyiapkannya menggunakan Ollama. Kita juga akan membahas pembuatan aplikasi RAG sederhana yang dijalankan di laptop Anda menggunakan model R1, LangChain, dan Gradio.

Jika Anda hanya ingin gambaran umum tentang model R1, saya merekomendasikan artikel DeepSeek-R1 ini. Untuk mempelajari cara fine-tuning R1, saya sarankan tutorial tentang fine-tuning DeepSeek-R1. Dan jika Anda lebih suka belajar melalui video, pastikan menonton ini:

Mengapa Menjalankan DeepSeek-R1 Secara Lokal?

Menjalankan DeepSeek-R1 secara lokal memberi Anda kendali penuh atas eksekusi model tanpa bergantung pada server eksternal. Berikut beberapa keuntungan menjalankan DeepSeek-R1 secara lokal:

  • Privasi & keamanan: Tidak ada data yang keluar dari sistem Anda.
  • Akses tanpa gangguan: Hindari batasan kuota, downtime, atau gangguan layanan.
  • Kinerja: Dapatkan respons lebih cepat dengan inferensi lokal, tanpa latensi API.
  • Kustomisasi: Ubah parameter, fine-tune prompt, dan integrasikan model ke aplikasi lokal.
  • Efisiensi biaya: Hilangkan biaya API dengan menjalankan model secara lokal.
  • Ketersediaan offline: Bekerja tanpa koneksi internet setelah model diunduh.

Menyiapkan DeepSeek-R1 Secara Lokal dengan Ollama

Ollama mempermudah menjalankan LLM secara lokal dengan menangani pengunduhan model, kuantisasi, dan eksekusi secara mulus.

Langkah 1: Instal Ollama

Pertama, unduh dan instal Ollama dari situs web resmi.

Mengunduh Ollama

Setelah unduhan selesai, instal aplikasi Ollama seperti Anda menginstal aplikasi lainnya.

Langkah 2: Mengunduh dan menjalankan DeepSeek-R1

Mari uji pengaturan dan unduh model kita. Buka terminal dan ketik perintah berikut.

ollama run deepseek-r1

Ollama menawarkan beragam model DeepSeek R1, mulai dari 1,5B parameter hingga model penuh 671B parameter. Model 671B adalah DeepSeek-R1 asli, sementara model yang lebih kecil merupakan versi distilasi berbasis arsitektur Qwen dan Llama. Jika perangkat keras Anda tidak mendukung model 671B, Anda dapat dengan mudah menjalankan versi yang lebih kecil dengan menggunakan perintah berikut dan mengganti X di bawah ini dengan ukuran parameter yang Anda inginkan (1.5b, 7b, 8b, 14b, 32b, 70b, 671b):

ollama run deepseek-r1:Xb

Dengan fleksibilitas ini, Anda tetap dapat memanfaatkan kemampuan DeepSeek-R1 bahkan tanpa superkomputer.

Langkah 3: Menjalankan DeepSeek-R1 di latar belakang

Untuk menjalankan DeepSeek-R1 secara terus-menerus dan menyajikannya melalui API, jalankan server Ollama:

ollama serve

Ini akan membuat model tersedia untuk diintegrasikan dengan aplikasi lain.

Menggunakan DeepSeek-R1 Secara Lokal

Langkah 1: Menjalankan inferensi melalui CLI

Setelah model diunduh, Anda dapat berinteraksi dengan DeepSeek-R1 langsung di terminal.

DeepSeek-R1 berjalan di terminal

Langkah 2: Mengakses DeepSeek-R1 melalui API

Untuk mengintegrasikan DeepSeek-R1 ke aplikasi, gunakan API Ollama dengan curl:

curl http://localhost:11434/api/chat -d '{
  "model": "deepseek-r1",
  "messages": [{ "role": "user", "content": "Solve: 25 * 25" }],
  "stream": false
}'

curl adalah alat baris perintah yang native di Linux tetapi juga berfungsi di macOS. Alat ini memungkinkan pengguna membuat permintaan HTTP langsung dari terminal, sehingga sangat cocok untuk berinteraksi dengan API.

Mengakses DeepSeek-R1 melalui API di terminal

Langkah 3: Mengakses DeepSeek-R1 melalui Python

Kita dapat menjalankan Ollama di lingkungan pengembangan terintegrasi (IDE) apa pun. Anda dapat memasang paket Python Ollama menggunakan kode berikut:

!pip install ollama

Setelah Ollama terpasang, gunakan skrip berikut untuk berinteraksi dengan model:

import ollama
response = ollama.chat(
    model="deepseek-r1",
    messages=[
        {"role": "user", "content": "Explain Newton's second law of motion"},
    ],
)
print(response["message"]["content"])

Fungsi ollama.chat() menerima nama model dan prompt pengguna, lalu memprosesnya sebagai percakapan. Skrip kemudian mengekstrak dan mencetak respons model.

Menjalankan DeepSeek R1 secara lokal di VSCode

Menjalankan Aplikasi Gradio Lokal untuk RAG dengan DeepSeek-R1

Mari kita bangun aplikasi demo sederhana menggunakan Gradio untuk menanyakan dan menganalisis dokumen dengan DeepSeek-R1.

Langkah 1: Prasyarat

Sebelum masuk ke implementasi, pastikan kita telah memasang alat dan pustaka berikut:

  • Python 3.8+
  • Langchain: Kerangka kerja untuk membangun aplikasi berbasis large language models (LLM), yang memudahkan pengambilan, penalaran, dan integrasi alat.
  • Chromadb: Basis data vektor berkinerja tinggi yang dirancang untuk pencarian kemiripan dan penyimpanan embedding secara efisien.
  • Gradio: Untuk membuat antarmuka web yang ramah pengguna.

Jalankan perintah berikut untuk memasang dependensi yang diperlukan:

!pip install langchain chromadb gradio 
!pip install -U langchain-community

Setelah dependensi di atas terpasang, jalankan perintah impor berikut:

import gradio as gr
from langchain_community.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
import ollama

Langkah 2: Memproses PDF yang diunggah

Setelah pustaka diimpor, kita akan memproses PDF yang diunggah.

def process_pdf(pdf_bytes):
    if pdf_bytes is None:
        return None, None, None

    loader = PyMuPDFLoader(pdf_bytes)
    data = loader.load()

    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=500, chunk_overlap=100
    )
    chunks = text_splitter.split_documents(data)

    embeddings = OllamaEmbeddings(model="deepseek-r1")
    vectorstore = Chroma.from_documents(
        documents=chunks, embedding=embeddings, persist_directory="./chroma_db"
    )
    retriever = vectorstore.as_retriever()

    return text_splitter, vectorstore, retriever

Fungsi process_pdf:

  • Memuat dan menyiapkan konten PDF untuk penjawaban berbasis penelusuran (retrieval).
  • Memeriksa apakah PDF diunggah.
  • Menarik teks menggunakan PyMuPDFLoader.
  • Membagi teks menjadi potongan menggunakan RecursiveCharacterTextSplitter.
  • Menghasilkan embedding vektor menggunakan OllamaEmbeddings.
  • Menyimpan embedding di penyimpanan vektor Chroma untuk pengambilan yang efisien.

Langkah 3: Menggabungkan potongan dokumen yang diambil

Setelah embedding diambil, selanjutnya kita perlu menyusunnya kembali. Fungsi combine_docs() menggabungkan beberapa potongan dokumen yang diambil menjadi satu string.

def combine_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

Karena model berbasis penelusuran mengambil kutipan yang relevan alih-alih seluruh dokumen, fungsi ini memastikan konten yang diekstrak tetap mudah dibaca dan terformat dengan baik sebelum diteruskan ke DeepSeek-R1.

Langkah 4: Mengajukan pertanyaan ke DeepSeek-R1 menggunakan Ollama

Sekarang, masukan ke model sudah siap. Mari menyiapkan DeepSeek R1 menggunakan Ollama.

import re

def ollama_llm(question, context):
    formatted_prompt = f"Question: {question}\n\nContext: {context}"

    response = ollama.chat(
        model="deepseek-r1",
        messages=[{"role": "user", "content": formatted_prompt}],
    )

    response_content = response["message"]["content"]

    # Remove content between <think> and </think> tags to remove thinking output
    final_answer = re.sub(r"<think>.*?</think>", "", response_content, flags=re.DOTALL).strip()

    return final_answer

Fungsi ollama_llm() memformat pertanyaan pengguna dan konteks dokumen yang diambil menjadi prompt terstruktur. Masukan terformat ini kemudian dikirim ke DeepSeek-R1 melalui ollama.chat(), yang memproses pertanyaan dalam konteks yang diberikan dan mengembalikan jawaban yang relevan. Jika Anda memerlukan jawaban tanpa naskah pemikiran model, gunakan fungsi strip() untuk mengembalikan jawaban akhir.

Langkah 5: Pipeline RAG

Sekarang kita sudah memiliki semua komponen yang diperlukan, mari kita bangun pipeline RAG untuk demo kita.

def rag_chain(question, text_splitter, vectorstore, retriever):
    retrieved_docs = retriever.invoke(question)
    formatted_content = combine_docs(retrieved_docs)
    return ollama_llm(question, formatted_content)

Fungsi di atas terlebih dahulu mencari di penyimpanan vektor menggunakan retriever.invoke(question), lalu mengembalikan kutipan dokumen yang paling relevan. Kutipan ini diformat menjadi masukan terstruktur menggunakan fungsi combine_docs dan dikirim ke ollama_llm, sehingga DeepSeek-R1 menghasilkan jawaban yang tepat berdasarkan konten yang diambil.

Langkah 6: Membuat Antarmuka Gradio

Kita sudah memiliki pipeline RAG. Sekarang, kita dapat membangun antarmuka Gradio secara lokal bersama model DeepSeek-R1 untuk memproses input PDF dan mengajukan pertanyaan terkait.

def ask_question(pdf_bytes, question):
    text_splitter, vectorstore, retriever = process_pdf(pdf_bytes)

    if text_splitter is None:
        return None  # No PDF uploaded

    result = rag_chain(question, text_splitter, vectorstore, retriever)
    return {result}


interface = gr.Interface(
    fn=ask_question,
    inputs=[
        gr.File(label="Upload PDF (optional)"),
        gr.Textbox(label="Ask a question"),
    ],
    outputs="text",
    title="Ask questions about your PDF",
    description="Use DeepSeek-R1 to answer your questions about the uploaded PDF document.",
)

interface.launch()

Kita melakukan langkah-langkah berikut:

  • Memeriksa apakah ada PDF yang diunggah.
  • Memproses PDF menggunakan fungsi process_pdf untuk mengekstrak teks dan menghasilkan embedding dokumen.
  • Meneruskan kueri pengguna dan embedding dokumen ke fungsi rag_chain() untuk mengambil informasi yang relevan dan menghasilkan respons yang kontekstual.
  • Menyiapkan antarmuka web berbasis Gradio agar pengguna dapat mengunggah PDF dan mengajukan pertanyaan tentang isinya.
  • Mendefinisikan tata letak menggunakan fungsi gr.Interface(), menerima file PDF dan kueri teks sebagai masukan.
  • Menjalankan aplikasi menggunakan interface.launch() untuk menghadirkan tanya jawab berbasis dokumen yang interaktif melalui peramban web.

Menjalankan Aplikasi Gradio Lokal untuk RAG dengan DeepSeek-R1

Kesimpulan

Menjalankan DeepSeek-R1 secara lokal dengan Ollama menghadirkan inferensi model yang lebih cepat, privat, dan hemat biaya. Dengan proses instalasi yang sederhana, interaksi melalui CLI, dukungan API, dan integrasi Python, Anda dapat menggunakan DeepSeek-R1 untuk berbagai aplikasi AI, mulai dari kueri umum hingga tugas berbasis penelusuran yang kompleks.

Untuk mengikuti perkembangan terbaru di bidang AI, saya merekomendasikan blog berikut:


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

Belajar AI dengan kursus-kursus ini!

Kursus

Mengembangkan Aplikasi LLM dengan LangChain

3 jam
51.3K
Temukan cara membangun aplikasi bertenaga AI menggunakan LLM, prompt, chain, dan agent di LangChain.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

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

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

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