Ana içeriğe geç

DeepSeek V3.1: Demo Projesiyle Bir Rehber

DeepSeek V3.1 ve bir Streamlit uygulaması kullanarak herhangi bir PDF'yi etkileşimli bir araştırma asistanına nasıl dönüştüreceğinizi öğrenin.
· 12 dk. oku

Yapay Zeka ile Keşfedin

DeepSeek kısa süre önce DeepSeek V3.1’i yayımladı. “think” ve “non-think” yanıt modlarını destekleyen, büyük ölçekli hibrit bir akıl yürütme modeli olan bu sürüm, etkileşimli doküman analizi için ideal.

Bu yazıda, araştırma makalelerini anlamaya yönelik DeepSeek V3.1’in ajan yeteneklerine odaklanacağım. Herhangi bir PDF’yi bir Streamlit uygulaması aracılığıyla etkileşimli bir araştırma asistanına nasıl dönüştürebileceğinizi adım adım açıklayacağım—şunları göstereceğim:

  • DeepSeek V3.1’i OpenRouter’ın API’si üzerinden entegre ederek ölçeklenebilir, uzun doküman akıl yürütme iş akışları kurma
  • Her uzunluktaki akademik makaleleri işlemek için PDF metnini çıkarma ve ayrıştırma
  • Kullanıcıların hızlı, olgusal yanıtlar ile derin, kanıta dayalı akıl yürütme arasında geçiş yapabildiği bir Streamlit uygulaması tasarlama
  • Gerçek dünya araştırma senaryoları için maliyet takibi ve performans ölçümü uygulama
  • Yanıtları kaynaktan çıkarılan alıntılarla destekleme

Sonunda uygulamanız aşağıdaki gibi görünecek:

DeepSeek V3.1 demo project

DeepSeek V3.1 Nedir?

DeepSeek V3.1, hem "düşünen" (ayrıntılı, gerekçeli) hem de "düşünmeyen" (olgusal, öz) yanıtlama tarzları için eğitilmiş 671 milyar parametreli hibrit bir Mixture-of-Experts (MoE) modelidir. 128.000 token’a kadar bağlamları destekler ve OpenRouter’ın OpenAI uyumlu API’si üzerinden erişilebilir.

DeepSeek V3.1 Benchmarks

Kaynak: DeepSeek

DeepSeek V3.1’in en önemli özellikleri şunlardır:

  • Uzun bağlam işleme: DeepSeek V3.1, son derece uzun dokümanları verimli şekilde işler; 128.000 token’a (100+ sayfa) kadar bağlam pencerelerini destekler. Bu da kapsamlı araştırma makaleleri ve raporlar için idealdir.
  • Çift akıl yürütme modu: Model, aşağıdaki iki akıl yürütme modu ile gelir:
    • Thinking modu: Ayrıntılı, adım adım akıl yürütme sunar ve derin analiz ile eleştiri için kanıtları doğrudan kaynak metninden alıntılar.
    • Non-thinking modu: Hızlı bilgi erişimi ve kısa S&C için öz, olgusal yanıtlar sağlar.
  • Hibrit mixture-of-experts mimarisi: DeepSeek V3.1, birden fazla uzman alt ağı birleştirir; böylece aynı model içinde hem olgusal hatırlama hem de ileri düzey sentez mümkün olur.
  • Ajanik ve araç destekli iş akışları: Model, ajan tabanlı sistemlere entegrasyon için tasarlanmıştır ve daha zengin, çok adımlı iş akışları için harici araç kullanımını destekler.
  • OpenAI uyumlu API erişimi: Geliştiriciler için dağıtımı ve entegrasyonu kolaylaştıran, OpenRouter’ın OpenAI uyumlu API’si üzerinden erişilebilir.

DeepSeek V3.1 Demo: Araştırma Makalesi Asistanı

Bu bölümde, yüklenen herhangi bir PDF araştırma makalesini etkileşimli, yapay zekâ destekli bir araştırma asistanına dönüştürmek için DeepSeek V3.1’i nasıl kullandığımı anlatacağım.

Nasıl çalıştığı şöyle:

  • Bir PDF araştırma makalesi yükleyin ve çıkarılan metni önizleyin.
  • Makale hakkında doğal dilde sorular sorun.
  • “Kısaca Açıkla” (non-think) veya “Ayrıntılı Açıkla” (think) yanıt modları arasında seçim yapın.
  • Yanıtları anında alın; yanıt süresi, token kullanımı/maliyet tahminleri ve kaynaktan destekleyici alıntılarla birlikte görün.

Adım 1: Önkoşullar

Bu demoyu çalıştırmadan önce gerekli tüm önkoşulların hazır olduğundan emin olalım.

Adım 1.1: İçe aktarımlar 

Öncelikle aşağıdaki paketlerin kurulu olduğundan emin olun:

pip install streamlit openai pypdf

Bu komut, arayüz, PDF işleme ve API istekleri için gerekli tüm temel bağımlılıkları sağlar.

Adım 1.2: OpenRouter API anahtarının ayarlanması 

DeepSeek V3.1 modeli, DeepSeek Resmi API dahil çeşitli platformlar üzerinden sunulmaktadır. Ancak ben, OpenRouter kullandım. Bu servis, birçok modele ait API anahtarlarına erişim sağlar ve bu demo için en uygun maliyetli seçenektir. DeepSeek V3.1 için bir API anahtarı ayarlama adımları şöyle:

  • Şu adreste bir hesap oluşturun: https://openrouter.ai/
  • Models sekmesine gidin ve “DeepSeek V3.1” araması yapın. Taban bir sürüm de seçebilirsiniz; ancak bu sürüm yalnızca ham sonraki token kestirimi için eğitildiğinden istem yazımı biraz daha zordur. Bu yüzden “deepseek/deepseek-chat-v3.1” sohbet sürümünü kullandım.

DeepSeek V3.1 on OpenRouter

  • Aşağı kaydırın ve Create API Key’e tıklayın. Anahtar adı ve kredi limitini (isteğe bağlı) girin ve Create’e tıklayın. Bu API anahtarını ileride kullanmak üzere kaydedin. 

Create API key

  • Ardından Credits sekmesine giderek kart veya banka bilgilerinizi ekleyin. Amazon Pay veya kripto ile de ödeme yapabilirsiniz. Bu demo için yaklaşık 8 $ ekledim ve yeterli oldu.

Add credits

Şimdi, uygulamayı çalıştırmadan önce API anahtarınızı bir ortam değişkeni olarak ayarlayın:

export OPENROUTER_API_KEY=your_api_key

Doğru API’nin seçilmesi

Resmi DeepSeek API’si, yüksek hacimli, otomatik iş yükleri için en uygunudur.

Çoğu araştırma, eğitim veya demo kullanım senaryosu—bu Streamlit Araştırma Makalesi Asistanı da dahil—için OpenRouter’ı tercih ederim; çünkü daha basit ve esnek bir seçenektir. Zaman penceresi kısıtları veya önbellek mantığı yönetimi olmadan öngörülebilir küresel fiyatlandırma sunar; bu da geçici analizler, tekil doküman sorguları ve kolay işbirliği için idealdir.

Not: API üzerinden DeepSeek V3.1 kullanmak, arayüz için yalnızca yaklaşık 8 GB bellek gerektirir; böylece aksi halde 170+ GB disk alanı ve güçlü bir GPU gerektiren 670B parametreli modeli yerelde barındırma ihtiyacından kurtulursunuz.

Adım 2: Streamlit Uygulamasını Kurma

DeepSeek V3.1’i kullanıcı dostu bir arayüz üzerinden erişilebilir kılmak için uygulama çatısı olarak Streamlit kullanacağız ve modeli OpenRouter’ın OpenAI uyumlu API’si üzerinden bağlayacağız. 

Adım 2.1: Yapılandırma

Bu adım, ortam kurulumu, API kimlik doğrulaması ve temel Streamlit yapılandırmasını kapsar.

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,)

Yukarıdaki kodda, st.set_page_config() çağrısı Streamlit uygulamasının sayfa başlığını ve yerleşimini özelleştirir. Uygulama, OpenRouter API anahtarını ortam değişkenlerinden alır ve OpenAI uyumlu bir istemci, OpenRouter API uç noktasına işaret edecek şekilde başlatılır; böylece sonraki tüm LLM çağrıları DeepSeek V3.1 için doğru şekilde yönlendirilir ve kimlik doğrulaması yapılır.

Adım 2.2: Yardımcı fonksiyonlar

Ana iş akışını oluşturmadan önce, doküman işleme ve kaynak tahmini için sağlam yardımcı araçlara ihtiyacımız var. Bu adımda, yüklenen PDF’lerden metin çıkarmak, doküman içeriğini önizlemek, yaklaşık token sayısını hesaplamak ve OpenRouter’ın DeepSeek V3.1 fiyatlandırmasına göre maliyeti tahmin etmek için yardımcı fonksiyonları tanımlıyoruz. 

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

Bu yardımcı fonksiyonlarla, arka uç katmanı ölçeklenebilir bir araştırma asistanı arayüzünü desteklemeye hazırdır:

  • Verimli PDF ayrıştırma: pdf_to_text() fonksiyonu, çok sayfalı PDF’leri düz metne dönüştürürken sayfa sınırlarını korur; bu da veriyi LLM girdisi ve sonraki işlemler için uygun hale getirir.
  • Token sayımı ve maliyet tahmini: count_tokens() fonksiyonu, DeepSeek’in geniş bağlam penceresine göre API kullanımını izlemeye yardımcı olacak yaklaşık bir token sayısı sağlar. estimate_cost() ise bu token sayılarını, giriş ve çıkış için OpenRouter fiyatlandırmasını kullanarak gerçek zamanlı maliyet geri bildirimine çevirir; böylece kullanıcı her sorgu için hesaplama bütçesi hakkında bilgilendirilir.
  • Önizleme oluşturma: preview_pdf_text() fonksiyonu, kısaltılmış önizlemeler üretir; böylece kullanıcılar, model maliyetine katlanmadan veya API sınırlarına takılmadan önce çıkarılan içeriğin bütünlüğünü ve uygunluğunu doğrulayabilir.

Bu yapı taşları hazır olduğuna göre, şimdi uzun bağlamlı, ajan odaklı araştırma makalesi S&C’si için tam Streamlit uygulamasını birleştirebiliriz.

Adım 2.3: Streamlit uygulaması

Çekirdek yardımcılar hazırken, artık PDF işleme, token/maliyet tahmini, kullanıcı yönlendirmeli S&C ve OpenRouter üzerinden DeepSeek V3.1 ile canlı etkileşimi bir araya getiren ana Streamlit kullanıcı arayüzünü oluşturabiliriz. 

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)

Bu Streamlit uygulaması, DeepSeek V3.1’i kullanarak doküman alımından bağlam farkındalıklı LLM S&C’ye kadar tüm süreci yöneten dinamik bir araştırma makalesi asistanı uygular. StreamLit uygulamasının üstlendiği temel işlevler şunlardır:

1. PDF yükleme ve önbellekleme

Kullanıcı arayüz üzerinden bir PDF dosyası yükler, ardından:

  • st.session_state, dosyanın yeni olup olmadığını kontrol eder. Yeniyse metin çıkarılır ve yinelemeli etkileşimlerde her seferinde çıkarma yapılmaması için yükleme referansıyla birlikte session_state’e önbelleğe alınır.
  • Çıkarımın ardından, belgenin ilk ~600 karakteri; karakter sayısı, tahmini giriş token’ları ve maliyet gibi istatistiklerle birlikte önizlenir.

2. Kullanıcı sorgusu ve mod seçimi

Bir doküman yüklendikten sonra kullanıcı bir soru yazabilir ve Non-think ile Think modları arasında seçim yapabilir; arayüz her mod için istem talimatlarını uyarlayacaktır:

  • Non-think modu: Makaleden 1–2 destekleyici alıntıyla birlikte kısa bir yanıt döndürür.
  • Think modu: 2–3 destekleyici alıntıyla birlikte ayrıntılı, kanıta dayalı bir yanıt döndürür.

3. İstem tasarımı ve API çağrısı

Kullanıcı "Get Answer"a tıkladığında uygulama şunları yapar:

  • Makale içeriğini, soruyu ve yanıtlama talimatlarını enjekte eden, bağlam açısından zengin bir istem oluşturur.
  • thinking parametresini OpenRouter API isteğinde ayarlar (extra_body={"thinking": thinking_flag}); böylece model, sıcaklığa güvenmek yerine doğru akıl yürütme modunda çalışır.
  • Uygulama her yanıt için çıkarım süresi, çıktı token sayısı ve maliyeti ölçer ve şeffaflık için bunları gösterir.

4. Son işlem ve görüntüleme

Dönen yanıt, ana bölüm ve destekleyici alıntılar ayrılacak şekilde (bulunursa) ayrıştırılır. Ardından hem yanıt hem de çıkarılan alıntılar arayüzde görüntülenir; böylece kaynak makaleden alınan kesin metinsel kanıtlar vurgulanır.

Kendiniz denemek için kodu app.py olarak kaydedin ve şu komutla başlatın:

streamlit run app.py

Deneylerimde, DeepSeek V3.1’in ayrıntılı “think” yanıtları üretmesi, kısa “non-think” yanıtlara kıyasla çok daha uzun sürdü. Bunun nedeni, daha uzun ve gerekçelendirilmiş çıktılar için daha fazla hesaplama ve süre gerekmesidir.

Sonuç

Bu eğitimde, DeepSeek V3.1’i kullanarak uzun dokümanları analiz edebilen, hem öz hem de ayrıntılı yanıtlar üretebilen ve maliyetleri gerçek zamanlı izleyebilen—hem de tek bir Streamlit uygulaması içinde—etkileşimli bir araştırma makalesi asistanının nasıl oluşturulacağını gösterdik. DeepSeek ile projeler geliştirmeye devam etmek istiyorsanız, yeni DeepSeek V3.2-Speciale’yi anlatan eğitimimize göz atmanızı öneririm.

Aashi Dutt

Yazar

Aashi Dutt

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.

Konular

İlgili