PDF, DOCX, PPTX, ses, görsel ve web kaynaklarını tek bir sohbet arayüzünde birleştiren full-stack bilgi erişim uygulaması.
Bu, iki geliştirici tarafından birlikte geliştirilen ortak bir projedir.
Akademik çalışmalarda bilgi; PDF dosyaları, sunumlar, görseller, ses kayıtları ve web sayfaları gibi farklı kaynaklara dağılır. Bu proje, bu kaynaklardan metin çıkararak kullanıcının seçtiği içerikler üzerinden doğal dilde soru sormasını ve özet almasını amaçlar.
Uygulama; kullanıcı hesaplarını, sohbet odalarını, kaynakları ve mesaj geçmişini yönetir. Kaynak türüne göre uygun metin çıkarma bileşeni çalışır ve elde edilen içerik, ilgili sohbet odasının bağlamına eklenir.
- Ayyüce Özge Abban — Frontend geliştirme ve kullanıcı arayüzü
- Emir Kıvrak — Backend geliştirme ve servis altyapısı
- Özellikler
- Desteklenen kaynaklar
- Ekran görüntüleri
- Teknik mimari
- Kullanım ve kaynak işleme akışı
- API özeti
- Kullanılan teknolojiler
- Gereksinimler
- Kurulum ve çalıştırma
- Proje yapısı
- Yapılandırma
- Sınırlamalar
- Kullanıcıya özel sohbet odaları, mesaj geçmişi ve kaynak yönetimi
- Seçili kaynaklara dayalı soru-cevap ve özetleme
- Markdown ve LaTeX biçimli yanıtları görüntüleme
- E-posta doğrulama, Google ile giriş, kayıt ve şifre yönetimi
- JWT access/refresh token tabanlı oturum yönetimi
- Türkçe ve İngilizce arayüz
| Kaynak | Frontend dosya seçimi / bağlantı | Backend işlemi |
|---|---|---|
| Belgeler | PDF, DOCX, PPTX | Metin çıkarma |
| Ses | MP3; backend’de WAV, M4A, OGG | AssemblyAI ile transkripsiyon |
| Görsel | JPG, JPEG, PNG | Google Cloud Vision ile OCR |
| Web | Web sayfası bağlantısı | Paragraf metni çıkarma |
| Haber | Haber bağlantısı | Makale metni çıkarma |
| Video | YouTube bağlantısı | Ses indirme ve transkript çıkarma |
WAV, M4A ve OGG uzantıları backend extractor katmanında desteklenir; mevcut frontend dosya seçicisi bu uzantıları doğrudan listelemez.
Görseller uygulama akışına göre gruplanmıştır. Geniş ekranlar ve paneller iki sütunda, e-posta şablonları üç sütunda gösterilir. Tüm görseller sabit yükseklik kullanılmadan, özgün oranları korunarak sınırlandırılmıştır.
Yeni şifre belirleme |
|
Doğrulama e-postası |
Şifre sıfırlama e-postası (TR) |
Şifre sıfırlama e-postası (EN) |
Kaynaklar paneli (Türkçe) |
Kaynaklar paneli (İngilizce) |
LaTeX yanıtı |
|
Çoklu kaynaklarla sohbet |
flowchart LR
U[Kullanıcı] --> F[React / Vite frontend]
F -->|Axios + HTTP-only cookie| B[Flask REST API]
B --> A[Kimlik doğrulama]
B --> C[Sohbet ve kaynak yönetimi]
B --> X[Extractor katmanı]
X --> T[Metin ve dil tespiti]
B --> D[(MongoDB)]
C --> Q[QA / Context katmanı]
Q --> M[Model endpoint'i]
M --> Q
Q --> F
Frontend kullanıcı etkileşimlerini ve uygulama durumunu yönetir. Flask backend kimlik doğrulama, sohbet odaları, mesajlar, kaynak işlemleri ve metin çıkarma akışını yürütür. Çıkarılan içerikler MongoDB’de saklanır ve seçili kaynaklar QA katmanına bağlam olarak iletilir.
- Kullanıcı bir sohbet odası oluşturur ve dosya veya bağlantı ekler.
- Backend, sohbet odasının kullanıcıya ait olduğunu doğrular.
- Kaynak türüne göre ilgili extractor seçilir.
- Dosyadan veya bağlantıdan metin çıkarılır; gerektiğinde OCR ya da transkripsiyon uygulanır.
- Kaynak metadata bilgileri ve çıkarılan içerik MongoDB’ye kaydedilir.
- Kullanıcının seçtiği kaynaklar soru-cevap ve özetleme akışına bağlam olarak aktarılır.
Tüm korumalı endpoint’ler kimlik doğrulama gerektirir. İsteklerde frontend tarafından yapılandırılan VITE_API_URL temel adres olarak kullanılır.
| Grup | Method | Endpoint | Amaç |
|---|---|---|---|
| Auth | POST | /auth/login |
Kullanıcı girişi |
| Auth | POST | /auth/register |
Kullanıcı kaydı |
| Auth | POST | /auth/refresh |
Access token yenileme |
| Auth | POST | /auth/logout |
Oturumu kapatma |
| Auth | GET | /auth/me |
Aktif kullanıcı bilgisi |
| Auth | GET | /auth/verify-email |
E-posta doğrulama |
| Auth | POST | /auth/forgot-password |
Şifre sıfırlama bağlantısı isteme |
| Auth | POST | /auth/reset-password |
Yeni şifre belirleme |
| Auth | POST | /auth/google-login |
Google token ile giriş |
| Auth | POST | /auth/change-password |
Oturum açmış kullanıcının şifresini değiştirme |
| Chat | GET | /chat/fetch-chat-rooms |
Kullanıcının sohbet odalarını getirme |
| Chat | POST | /chat/new-chat |
Yeni sohbet odası oluşturma |
| Chat | GET | /chat/fetch-messages |
Oda mesajlarını getirme |
| Chat | POST | /chat/send-message |
Mesaj gönderme |
| Chat | POST | /chat/delete-room |
Sohbet odası silme |
| Chat | POST | /chat/rename-room |
Sohbet odası adını değiştirme |
| Upload | POST | /chat/upload-and-chat |
Dosya yükleme ve işleme |
| Upload | POST | /chat/upload-link-and-chat |
Web, haber veya YouTube bağlantısı işleme |
| File | POST | /chat/delete-file |
Kaynağı silme |
| File | POST | /chat/rename-file |
Kaynağı yeniden adlandırma |
| Document | GET | /documents/documents |
Belgeleri listeleme |
| Document | GET | /documents/documents/user |
Kullanıcının belgelerini listeleme |
Dosya, kaynak ve sohbet odası işlemlerinde sahiplik kontrolü uygulanır. Böylece bir kullanıcı başka bir kullanıcıya ait odaya veya dosyaya erişemez.
- React.js
- Vite
- React Router
- Zustand
- Axios
- react-i18next
- react-markdown ve remark-gfm
- react-toastify
- Python ve Flask
- MongoDB ve PyMongo
- PyMuPDF
- python-docx
- python-pptx
- BeautifulSoup ve Newspaper3k
- AssemblyAI entegrasyonu
- Google Cloud Vision entegrasyonu
- PyJWT ve bcrypt
- Python 3.10 veya üzeri
- Node.js 18 veya üzeri ve npm
- Çalışan bir MongoDB sunucusu
- YouTube kaynakları için
yt-dlp - E-posta akışlarını yerel ortamda test etmek için isteğe bağlı Mailpit
- OCR, ses transkripsiyonu ve bazı bağlantı türleri için ilgili dış servis erişimleri
Windows üzerinde geliştirme yapılırken PowerShell kullanılması önerilir. YouTube bağlantılarının işlenmesi için yt-dlp sistem PATH’inde bulunmalıdır.
cd backend
python -m venv .venvWindows PowerShell:
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
pip install yt-dlp
Copy-Item .env.example .env
python app.pyBackend varsayılan olarak http://127.0.0.1:8000 adresinde çalışır.
cd frontend
npm install
npm run devFrontend varsayılan olarak http://127.0.0.1:5173 adresinde açılır.
Frontend üretim derlemesini almak veya lint kontrolü çalıştırmak için:
npm run build
npm run lintbackend/.env.example ve frontend/.env.example dosyaları kopyalanarak ilgili .env dosyaları oluşturulmalıdır.
Backend:
SECRET_KEY=uzun-ve-guvenli-bir-gizli-anahtar
MONGO_URI=mongodb://127.0.0.1:27017
DB_NAME=chatbot
FRONTEND_URL=http://127.0.0.1:5173
MODEL_API_URL=http://127.0.0.1:5005
ASSEMBLY_API_KEY=
GOOGLE_APPLICATION_CREDENTIALS=Frontend:
VITE_API_URL=http://127.0.0.1:8000
VITE_GOOGLE_CLIENT_ID=MongoDB’nin çalışır durumda olması gerekir. Bu repository içinde AI/model servisi bulunmaz; backend soru-cevap isteklerini MODEL_API_URL ile tanımlanan harici /qa endpoint’ine gönderir. Bu endpoint yapılandırılmadığında kaynak yükleme ve metin çıkarma çalışabilir, ancak soru-cevap yanıtı üretilemez.
E-posta gönderimi, OCR ve ses transkripsiyonu için ilgili dış servislerin ayrıca yapılandırılması gerekebilir. Gizli anahtarlar ve servis kimlik bilgileri repository’ye eklenmemelidir.
AI-Digital-Assistant/
├── backend/
│ ├── controllers/ # API endpoint controller'ları
│ ├── core/ # Veritabanı, güvenlik, mail ve extractor'lar
│ │ └── extractors/ # PDF, DOCX, PPTX, ses, web ve OCR extractor'ları
│ ├── services/ # Auth, chat, upload, document ve QA servisleri
│ │ └── qa/ # Bağlam oluşturma ve QA istemcisi
│ ├── routes/ # Flask route kayıtları
│ └── app.py # Backend giriş noktası
├── frontend/
│ ├── src/api/ # Axios ve API yardımcıları
│ ├── src/components/ # Ortak bileşenler ve sidebar'lar
│ ├── src/features/chat/ # Sohbet ekranı
│ ├── src/pages/ # Auth ve profil sayfaları
│ ├── src/store/ # Zustand state yönetimi
│ ├── src/locales/ # Türkçe ve İngilizce çeviriler
│ └── src/utils/ # Frontend yardımcıları
└── assets/ # README ekran görüntüleri
- Soru-cevap, OCR, ses transkripsiyonu ve bazı web/YouTube içerikleri dış servis veya araç ayarlarına bağlıdır.
- YouTube extractor’ı çalıştırmak için
yt-dlpkurulumu gerekir. - Dosya yükleme boyutu backend’de 10 MB ile sınırlıdır.
- Bir sohbet odasında frontend tarafından en fazla 5 kaynak desteklenir.
- MP4 dosya yükleme desteklenmez; video içeriği YouTube bağlantısı üzerinden işlenir.













