Kullanıcıların PDF yükleyip belge hakkında soru sorabildiği bir Streamlit uygulaması. PDF'den metin çıkarır, soruları LangChain + OpenAI ile yanıtlar ve sohbet geçmişini tutar.
- PDF Yükleme (sadece .pdf, 10 MB sınır)
- PDF İşleme:
pdfplumberile metin çıkarma, tam metni görüntüleme - Soru-Cevap: LangChain
LLMChain+ConversationBufferMemory - Chat Arayüzü:
st.chat_messageile mesajlar - Sayfa Sayısı: Toplam sayıyı ve okunan sayfaları gösterme
- Model Seçimi: Sidebar'dan farklı modeller (ör.
gpt-4o-mini,gpt-4o,o4-mini, özel ad) - Sohbet İndirme: TXT ve JSON formatında indirme
- PDF Önizleme: İlk sayfanın metinsel önizlemesi
- Sohbet Temizleme: Tek tıkla geçmişi sıfırlama
- Karakter/Kelime Sayısı: Çıkarılan metin istatistikleri
Not: Büyük PDF'ler için metin parçalara ayrılır ve basit anahtar kelime eşleşmesi ile ilgili parçalar seçilerek modele verilir.
-
Projeyi indirin / klonlayın
git clone <repo-url> cd belge-asistani
-
Python sürümü: 3.10+ önerilir. (Kontrol:
python --version) -
Sanal ortam oluşturun ve etkinleştirin
python -m venv .venv source .venv/bin/activate -
Gerekli paketler
pip install -r requirements.txt
-
API anahtarı
.env.exampledosyasını.envolarak kopyalayın ve kendi OPENAI_API_KEY değerinizle doldurun.- .env dosyasını asla GitHub'a yüklemeyin.
.gitignorebuna göre ayarlı.
-
Uygulamayı çalıştırın
streamlit run app.py
Tarayıcıda açılan sayfadan PDF yükleyin ve soru sorun.
belge-asistani/
├── app.py
├── requirements.txt
├── .env
├── README.md
└── .gitignore
- Metin içeren basit bir PDF ile başlayın.
- Görsel ağırlıklı (metinsiz) PDF'lerde metin çıkarılamayabilir — uygulama uyarır.
- Uzun PDF'lerde soru sorduğunuzda önce anahtar kelimeleri net yazın (konu, kişi, başlık).
- API anahtarınızı .env dosyasında tutun; koda gömmeyin.
- Paylaşıma açık repolara .env yüklemeyin.
Aşağıdaki bölümleri açıp ekran görüntüsü alabilirsiniz:
- PDF Önizleme (1. sayfa) expander
- Sohbet arayüzü (soru-cevap)
- Sohbeti indir (TXT/JSON) tuşları
langchain_openai.ChatOpenAImodeli içinOPENAI_API_KEYortam değişkeni gerekir.- Varsayılan yanıt stili kısa ve doğrudandır; bağlam yoksa “Bu bilgi belgede yok” denir.