Bu proje, Google Gemini 2.5 Flash modeliyle çalışan, Flask tabanlı bir web uygulamasıdır. Kullanıcılar, 3D görselli bir web arayüzü üzerinden Türkçe veya İngilizce olarak Vikipedi'den bilgi sorgulayabilir, matematiksel hesaplamalar yapabilir ve sonuçları gerçek zamanlı (streaming) olarak görebilir.
- Wikipedia entegrasyonu: Doğrudan Vikipedi API'sinden özet, başlık ve tablo bilgilerini çeker.
- Matematik motoru: Güvenli
numexprtemelli hesaplama desteği içerir; kullanıcıdan gelen ifadeleri doğrular ve değerlendirir. - Gerçek zamanlı yanıt akışı:
Server-Sent Events (SSE)ile model çıktısı parça parça kullanıcıya iletilir. - Chat geçmişi yönetimi: Her sohbet için ayrı kimlik (
chat_id) ve bellek tutulur. - Modern 3D arayüz: HTML/CSS/JS ile geliştirilmiş interaktif ve animasyonlu tasarım.
- Markdown çıktısı: Model yanıtları başlıklar, listeler, kod blokları ve vurgu biçimleriyle biçimlendirilir.
- Function Calling: Gemini'nin native function calling özelliği ile Wikipedia araması ve hesaplama.
VIKIPEDI-WEBCHATBOT/
│
├── src/ # Kaynak kod
│ ├── app.py # Flask sunucusu (SSE ve endpoint'ler)
│ ├── chatbot.py # Gemini tabanlı sohbet mantığı
│ │
│ ├── services/ # Alt servisler
│ │ ├── __init__.py
│ │ ├── wikipedia.py # Wikipedia API entegrasyonu
│ │ └── calculator.py # Güvenli hesaplama fonksiyonları
│ │
│ ├── routes/ # API endpoint'leri
│ │ ├── __init__.py
│ │ └── chat_routes.py
│ │
│ └── config/ # Yapılandırma
│ ├── __init__.py
│ └── settings.py
│
├── static/ # Statik dosyalar
│ ├── css/
│ │ └── styles.css
│ └── js/
│ └── main.js
│
├── templates/ # HTML şablonları
│ └── index.html # 3D web arayüzü (frontend)
│
├── tests/ # Test dosyaları
│ ├── __init__.py
│ ├── test_calculator.py
│ └── test_wikipedia.py
│
├── .env.example # Örnek ortam değişkenleri
├── .gitattributes # Git yapılandırması
├── .gitignore # Gereksiz dosyaların hariç tutulması
├── requirements.txt # Bağımlılıklar
├── run.py # Uygulama başlatma noktası
└── README.md # Bu doküman
Yüklenecek temel kütüphaneler:
pip install -r requirements.txtrequirements.txt içeriği:
# Web Framework
flask>=3.0.0
flask-cors>=4.0.0
# AI/LLM
google-generativeai>=0.8.0
# Wikipedia
wikipedia-api>=0.6.0
# Utilities
python-dotenv>=1.0.0
requests>=2.31.0
numexpr>=2.8.0
Ek olarak, oluşturacağınız .env dosyasında Gemini API anahtarınızı belirtin:
GEMINI_API_KEY=your_gemini_api_key_here
python run.pyveya doğrudan:
python src/app.pyBaşlatıldığında terminalde:
🚀 Chatbot başlatılıyor...
🔗 http://127.0.0.1:5000 adresinde çalışacak
Tarayıcıda açarak etkileşimli arayüze ulaşabilirsiniz: 👉 http://127.0.0.1:5000
-
Tarayıcıda uygulamayı açın.
-
Sol panelden Yeni Sohbet oluşturun.
-
Mesaj kutusuna bir konu yazın:
- "Atatürk hakkında bilgi ver."
- "5*(12+3)^2 hesapla."
-
Yanıtlar model tarafından Markdown biçiminde ve parça parça (streaming) olarak gösterilir.
-
Sohbetler tarayıcı LocalStorage'da saklanır; sıfırlama veya silme işlemleri arayüzden yapılabilir.
-
Frontend (
templates/index.html) – Kullanıcı mesajlarını/chatendpoint'ine gönderir ve SSE ile stream'i okur. -
Backend (
src/app.py) – Flask, her sohbet içinWebChatbotnesnesi oluşturur ve yanıt akışını yönetir. -
Chatbot Mantığı (
src/chatbot.py) –- Gemini modeliyle konuşma geçmişini işler,
- Function calling ile
search_info()veyacalculate()fonksiyonlarını çağırır.
-
services/wikipedia.py & services/calculator.py –
search_info()→ Wikipedia'dan veri toplar,calculate()→ Güvenli matematik hesaplaması yapar.
calculator.pyyalnızca sayısal karakterleri ve basit operatörleri kabul eder; aşırı uzun ifadeleri veya büyük üs değerlerini engeller.wikipedia.py, yalnızca var olan Vikipedi sayfalarını döndürür ve gereksiz ağ isteklerini sınırlar.- API anahtarı
.envdosyasında gizli tutulmalıdır. - Rate limiting ile API istekleri sınırlandırılmıştır.
| Katman | Teknoloji |
|---|---|
| Backend | Flask, Google Gemini API, Python |
| AI Model | Gemini 2.5 Flash |
| Bilgi | Wikipedia-API |
| Hesaplama | NumExpr |
| Frontend | HTML5, CSS3 (3D animasyonlu arayüz), JavaScript |
| Formatlama | Markdown Rendering (Marked.js) |
python -m pytest tests/ -vblack src/
flake8 src/