Kurs
Bu eğitimde, DeepSeek-R1’ı adım adım yerelde nasıl çalıştıracağınızı ve Ollama kullanarak nasıl kuracağınızı anlatacağım. Ayrıca R1 modeli, LangChain ve Gradio kullanarak dizüstü bilgisayarınızda çalışan basit bir RAG uygulaması oluşturmayı da inceleyeceğiz.
Yalnızca R1 modeline genel bir bakış istiyorsanız, bu DeepSeek-R1 makalesini öneririm. R1’ı nasıl ince ayar yapacağınızı öğrenmek için DeepSeek-R1’ı ince ayar yapma konulu bu eğitimi tavsiye ederim. Videoyla öğrenmeyi tercih ediyorsanız, mutlaka bunu izleyin:
Neden DeepSeek-R1’ı Yerelde Çalıştırmalısınız?
DeepSeek-R1’ı yerelde çalıştırmak, harici sunuculara bağımlı olmadan model çalıştırma üzerinde tam denetim sağlar. DeepSeek-R1’ı yerelde çalıştırmanın birkaç avantajı şunlardır:
- Gizlilik ve güvenlik: Verileriniz sisteminizden dışarı çıkmaz.
- Kesintisiz erişim: Oran sınırlamalarından, kesinti sürelerinden veya hizmet aksamalarından kaçının.
- Performans: API gecikmesini ortadan kaldırarak yerel çıkarımla daha hızlı yanıtlar alın.
- Özelleştirme: Parametreleri değiştirin, istemleri iyileştirin ve modeli yerel uygulamalara entegre edin.
- Maliyet etkinliği: Modeli yerelde çalıştırarak API ücretlerini ortadan kaldırın.
- Çevrimdışı kullanılabilirlik: Model indirildikten sonra internet bağlantısı olmadan çalışın.
DeepSeek-R1’ı Ollama ile Yerelde Kurma
Ollama, model indirme, niceleme ve çalıştırmayı sorunsuz biçimde yöneterek LLM’leri yerelde çalıştırmayı kolaylaştırır.
Adım 1: Ollama’yı kurun
Önce, Ollama’yı resmi web sitesinden indirin ve kurun.

İndirme tamamlandıktan sonra, Ollama uygulamasını diğer uygulamalar gibi kurun.
Adım 2: DeepSeek-R1’ı indirin ve çalıştırın
Kurulumu test edelim ve modelimizi indirelim. Terminali açın ve aşağıdaki komutu yazın.
ollama run deepseek-r1
Ollama, 1.5B parametreden tam 671B parametreli modele kadar bir dizi DeepSeek R1 modeli sunar. 671B model orijinal DeepSeek-R1’dır; daha küçük modeller ise Qwen ve Llama mimarilerine dayanan damıtılmış sürümlerdir. Donanımınız 671B modeli desteklemiyorsa, aşağıdaki komutu kullanarak ve X ifadesini istediğiniz parametre boyutuyla (1.5b, 7b, 8b, 14b, 32b, 70b, 671b) değiştirerek kolayca daha küçük bir sürümü çalıştırabilirsiniz:
ollama run deepseek-r1:Xb
Bu esneklik sayesinde, bir süper bilgisayarınız olmasa bile DeepSeek-R1’ın yeteneklerinden yararlanabilirsiniz.
Adım 3: DeepSeek-R1’ı arka planda çalıştırma
DeepSeek-R1’ı kesintisiz olarak çalıştırmak ve bir API üzerinden sunmak için, Ollama sunucusunu başlatın:
ollama serve
Bu, modeli diğer uygulamalarla entegrasyona hazır hale getirecektir.
DeepSeek-R1’ı Yerelde Kullanma
Adım 1: CLI üzerinden çıkarım çalıştırma
Model indirildikten sonra, DeepSeek-R1 ile doğrudan terminal üzerinden etkileşime geçebilirsiniz.

Adım 2: DeepSeek-R1’a API üzerinden erişim
DeepSeek-R1’ı uygulamalara entegre etmek için, curl kullanarak Ollama API’sini kullanın:
curl http://localhost:11434/api/chat -d '{
"model": "deepseek-r1",
"messages": [{ "role": "user", "content": "Solve: 25 * 25" }],
"stream": false
}'
curl, Linux’a özgü bir komut satırı aracıdır ancak macOS’ta da çalışır. Terminalden doğrudan HTTP istekleri yapmanıza olanak tanır; bu da API’lerle etkileşim için mükemmel bir araçtır.

Adım 3: DeepSeek-R1’a Python üzerinden erişim
Ollama’yı istediğiniz herhangi bir tümleşik geliştirme ortamında (IDE) çalıştırabiliriz. Aşağıdaki kodla Ollama Python paketini kurabilirsiniz:
!pip install ollama
Ollama kurulduktan sonra, modelle etkileşim kurmak için aşağıdaki betiği kullanın:
import ollama
response = ollama.chat(
model="deepseek-r1",
messages=[
{"role": "user", "content": "Explain Newton's second law of motion"},
],
)
print(response["message"]["content"])
ollama.chat() işlevi, model adını ve bir kullanıcı istemini alır ve bunu sohbet alışverişi olarak işler. Betik daha sonra modelin yanıtını çıkarır ve yazdırır.

DeepSeek-R1 ile Yerel RAG için Bir Gradio Uygulaması Çalıştırma
Gradio kullanarak DeepSeek-R1 ile belgeleri sorgulayıp analiz etmek için basit bir demo uygulaması oluşturalım.
Adım 1: Önkoşullar
Uygulamaya geçmeden önce, aşağıdaki araç ve kitaplıkların kurulu olduğundan emin olalım:
- Python 3.8+
- Langchain: Büyük dil modelleri (LLM’ler) ile çalışan uygulamalar geliştirmeye yönelik çerçeve; kolay alma, akıl yürütme ve araç entegrasyonu sağlar.
- Chromadb: Gömlemeleri depolamak ve benzerlik aramalarını verimli yürütmek için tasarlanmış yüksek performanslı bir vektör veritabanı.
- Gradio: Kullanıcı dostu bir web arayüzü oluşturmak için.
Gerekli bağımlılıkları kurmak için aşağıdaki komutları çalıştırın:
!pip install langchain chromadb gradio
!pip install -U langchain-community
Yukarıdaki bağımlılıklar kurulduktan sonra aşağıdaki içe aktarma komutlarını çalıştırın:
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
Adım 2: Yüklenen PDF’nin işlenmesi
Kitaplıklar içe aktarıldıktan sonra, yüklenen PDF’yi işleyeceğiz.
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
process_pdf işlevi:
- PDF içeriğini alma tabanlı yanıtlama için yükler ve hazırlar.
- Bir PDF’nin yüklenip yüklenmediğini kontrol eder.
PyMuPDFLoaderkullanarak metni çıkarır.RecursiveCharacterTextSplitterkullanarak metni parçalara böler.OllamaEmbeddingskullanarak vektör gömlemeleri üretir.- Gömlemeleri verimli alma için bir Chroma vektör deposunda saklar.
Adım 3: Alınan belge parçalarının birleştirilmesi
Gömlemeler alındıktan sonra, bunları bir araya getirmemiz gerekir. combine_docs() işlevi, birden çok alınan belge parçasını tek bir dize halinde birleştirir.
def combine_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
Alma tabanlı modeller tüm belgeler yerine ilgili alıntıları çektiğinden, bu işlev, çıkarılan içeriğin DeepSeek-R1’a iletilmeden önce okunabilir ve düzgün biçimlendirilmiş kalmasını sağlar.
Adım 4: Ollama kullanarak DeepSeek-R1’a sorgu gönderme
Artık modele girdi olarak vereceğimiz içerik hazır. Ollama kullanarak DeepSeek R1’ı kuralım.
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
ollama_llm() işlevi, kullanıcının sorusunu ve alınan belge bağlamını yapılandırılmış bir isteme dönüştürür. Bu biçimlendirilmiş girdi, ollama.chat() aracılığıyla DeepSeek-R1’a gönderilir; model soruyu verilen bağlam içinde işler ve ilgili bir yanıt döndürür. Yanıtı modelin düşünme çıktısı olmadan almak isterseniz, son yanıtı döndürmek için strip() işlevini kullanın.
Adım 5: RAG hattı
Gerekli tüm bileşenlere artık sahibiz; demomuz için RAG hattını oluşturalım.
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)
Yukarıdaki işlev, önce retriever.invoke(question) kullanarak vektör deposunda arama yapar ve en ilgili belge alıntılarını döndürür. Bu alıntılar, combine_docs işlevi kullanılarak yapılandırılmış bir girdiye dönüştürülür ve ollama_llm’ye gönderilir; böylece DeepSeek-R1, alınan içeriğe dayalı olarak iyi bilgilendirilmiş yanıtlar üretir.
Adım 6: Gradio arayüzünün oluşturulması
RAG hattımız hazır. Şimdi, PDF girdisini işlemek ve onunla ilgili sorular sormak için DeepSeek-R1 modeliyle birlikte yerel olarak Gradio arayüzünü oluşturabiliriz.
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()
Şu adımları gerçekleştiriyoruz:
- Bir PDF’nin yüklenip yüklenmediğini kontrol edin.
process_pdfişlevini kullanarak PDF’yi işleyin, metni çıkarın ve belge gömlemeleri oluşturun.- Kullanıcının sorgusunu ve belge gömlemelerini
rag_chain()işlevine ileterek ilgili bilgileri alın ve bağlamsal olarak doğru bir yanıt üretin. - Kullanıcıların bir PDF yüklemesine ve içeriği hakkında soru sormasına olanak tanıyan Gradio tabanlı bir web arayüzü kurun.
gr.Interface()işlevini kullanarak düzeni tanımlayın; girdi olarak bir PDF dosyası ve metin sorgusu kabul edin.interface.launch()ile uygulamayı başlatarak web tarayıcısı üzerinden sorunsuz, etkileşimli belge tabanlı Soru-Cevap işlemini etkinleştirin.

Sonuç
DeepSeek-R1’ı Ollama ile yerelde çalıştırmak, daha hızlı, gizli ve maliyet etkin model çıkarımı sağlar. Basit bir kurulum süreci, CLI etkileşimi, API desteği ve Python entegrasyonu ile DeepSeek-R1’ı genel sorgulardan karmaşık alma tabanlı görevlere kadar çok çeşitli yapay zeka uygulamaları için kullanabilirsiniz.
Yapay zekâdaki en son gelişmeleri takip etmek için şu blogları öneririm:
ML (Üretken Yapay Zekâ) alanında Google Developers Uzmanıyım, Kaggle 3x Expert unvanına sahibim ve 3+ yıllık teknoloji deneyimiyle Women Techmakers Elçisiyim. 2020'de bir sağlık teknolojileri girişiminin kurucu ortağı oldum ve Georgia Tech'te makine öğrenmesi alanında uzmanlaşarak bilgisayar bilimleri yüksek lisansı yapıyorum.

