Bu proje, PDF veya EPUB formatındaki kitap/doküman içeriklerini akıllıca parçalara ayırıp, vektör veri tabanı Pinecone üzerinde saklayan ve RAG (Retrieval Augmented Generation - Bilgi Geri Çağırmayla Zenginleştirilmiş Nesil) yaklaşımıyla kitap içeriği hakkında Türkçe soru-cevap yapılabilmesini sağlayan modern bir yapay zeka uygulamasıdır.
Proje, hem pratik ve şık bir Streamlit Arayüzü (app.py) hem de toplu işlemler için tasarlanmış bir CLI Betiği (ingest_book_to_pinecone.py) sunmaktadır.
- Doküman Desteği: PDF ve EPUB formatındaki kitapları otomatik olarak ayrıştırır ve temizler.
- Akıllı Metin Parçalama (Chunking): LangChain'in
RecursiveCharacterTextSplitterbileşeni kullanılarak anlam bütünlüğünü koruyacak şekilde metni parçalar. - Gelişmiş Vektör Veritabanı: Sunucusuz (Serverless) Pinecone yapısını destekler, indeksleri otomatik oluşturur ve yönetir.
- İki Farklı Model Desteği:
- Ollama (Yerel): Streamlit arayüzünde varsayılan olarak yerel
nomic-embed-textmodeli kullanılarak yerel olarak embedding oluşturulur. - MiniMax API: CLI arayüzünde MiniMax
embedding-modelkullanılarak yüksek performanslı bulut tabanlı embedding üretilir.
- Ollama (Yerel): Streamlit arayüzünde varsayılan olarak yerel
- MiniMax LLM (RAG): Pinecone üzerinden benzerlik araması (similarity search) ile tespit edilen bağlamlar, Anthropic uyumlu MiniMax API (
MiniMax-M2.7) modeline gönderilerek doğrudan kitaba sadık Türkçe yanıtlar üretilir. - Gelişmiş Streamlit Arayüzü:
- Kolay sürükle-bırak dosya yükleyici.
- Adım adım işlem durum çubukları (Progress bar).
- Benzerlik oranları, kaynak parçalar ve RAG detaylarını içeren interaktif analiz paneli.
- Pinecone indeks istatistikleri ve genel durum takibi.
git clone https://github.com/hakanhnt/vector_database_createv1.git
cd vector_database_createv1Gerekli Python paketlerini yüklemek için:
pip install -r requirements.txtArayüzde yerel embedding oluşturabilmek için sisteminizde Ollama'nın yüklü ve çalışır durumda olması gerekir.
- Ollama'yı ollama.com adresinden indirin.
- Terminalde modeli indirin ve servisi başlatın:
ollama pull nomic-embed-textProje dizininde bir .env dosyası oluşturun ve aşağıdaki değişkenleri tanımlayın:
# Pinecone API Ayarları (https://app.pinecone.io/)
PINECONE_API_KEY=your_pinecone_api_key_here
# MiniMax API Ayarları (RAG ve CLI Embedding için)
MINIMAX_API_KEY=your_minimax_api_key_here
MINIMAX_GROUP_ID=your_minimax_group_id_hereWeb arayüzünü çalıştırmak için terminalde şu komutu çalıştırın:
streamlit run app.pyAçılan tarayıcı ekranında:
- 📤 Yükle sekmesinden bir PDF veya EPUB dosyası seçip
▶️ İşlemi Başlat butonuna tıklayın. - İşlem bittikten sonra 🔍 Ara sekmesine geçerek kitabın içeriği ile ilgili sorularınızı sorabilirsiniz.
Streamlit arayüzü yerine doğrudan terminalden bir kitabı indeksleyip Pinecone'a yüklemek için:
python ingest_book_to_pinecone.py --book "/yol/kitap.pdf" --index-name "kitap-indeksi"Kullanılabilir CLI Parametreleri:
--book/-b: İşlenecek kitap dosyasının yolu (PDF veya EPUB - Zorunlu)--index-name/-i: Pinecone indeks adı (Zorunlu)--chunk-size/-c: Parçalama boyutu (Varsayılan: 750 karakter)--chunk-overlap/-o: Parçalar arası örtüşme boyutu (Varsayılan: 75 karakter)--embedding-model/-e: Kullanılacak MiniMax embedding modeli (Varsayılan:embedding-model)
├── app.py # Streamlit web arayüzü ve RAG sorgu motoru
├── ingest_book_to_pinecone.py # CLI tabanlı toplu kitap indeksleme betiği
├── requirements.txt # Proje bağımlılık listesi
├── .gitignore # Git dışı bırakılacak dosyalar listesi
├── .env.example # Çevre değişkenleri şablonu
└── README.md # Proje açıklama dokümanı (Bu dosya)
- Güvenlik:
.envdosyanız API anahtarlarını barındırır..gitignoredosyasının bu dosyayı kapsadığından emin olun ve asla GitHub'a push etmeyin. - Pinecone Ücretsiz Katmanı: Pinecone'un ücretsiz katmanını kullanıyorsanız, tek seferde bir adet aktif indeks oluşturabileceğinizi unutmayın. Farklı kitaplar için aynı indeksi kullanabilir veya eski indeksi Pinecone konsolundan temizleyebilirsiniz.