Bu proje, Türkçe haber metinlerinden oluşan büyük bir bilgi havuzunu kullanarak, kullanıcıların doğal dilde sordukları sorulara doğru, bağlama uygun ve hızlı yanıtlar verebilen RAG (Retrieval-Augmented Generation) tabanlı bir chatbot sistemidir.
- Veri Erişilebilirliği: 42.000 haberlik bir arşivde elle arama yapma zorluğunu ortadan kaldırır.
- Doğru Bilgiyi Bulma: Geleneksel arama motorlarının getirdiği sonuçlardan ziyade, doğrudan özetlenmiş bilgi sunar.
- Bilgi Kısıtlılığı: Genel modellerin bilmediği özel verileri kullanarak alanında uzmanlaşmış yanıtlar verir.
RAG, büyük dil modellerinin (LLM) bilgi eksikliğini gidermek için dış kaynaklardan bilgi alarak (Retrieval) bu bilgilerle zenginleştirilmiş (Augmented) yanıtlar üreten bir yapay zeka tekniğidir. Bu projede, Türkçe haber içerikleri vektör veritabanında saklanır ve kullanıcı sorularına bu bilgilerle yanıt verilir.
- Soru Sor: Örn. “Son teknoloji haberleri neler?”
- Anında Yanıt Al: Model, en uygun içerikleri bulup özet yanıt sunar.
- Kaynak Tabanlı Bilgi: Yanıtlar gerçek haber içeriklerine dayanır.
- Kategoriye Özel Sorgu: Spor, ekonomi, teknoloji gibi filtrelenmiş aramalar yapılabilir.
| Özellik | Geleneksel NLP | RAG |
|---|---|---|
| Güncel Bilgi | Sınırlı | Vektör DB güncellenebilir |
| Halüsinasyon | Yüksek risk | Kaynak tabanlı, düşük risk |
| Domain Spesifik | Zor, maliyetli | Kolay, veriyle entegre |
| Maliyet | Yüksek | Düşük |
| Şeffaflık | Düşük | Kaynak bilgisi içerir |
- Büyük haber arşivini verimli kullanma
- Güncellenebilir vektör veritabanı
- Düşük maliyetli çözüm (LLM + embedding)
- Yüksek doğruluk ve güvenilirlik
- Kategori bazlı sorgu desteği
- Kaynak: Kaggle - 42 Bin Haber Veri Kümesi
- İçerik: 42.000 Türkçe haber metni, 13 kategori (teknoloji, spor, ekonomi, vb.)
- Veri Formatı:
news/klasöründe .txt formatlı haberlerokubeni.doc: Bilgilendirme dosyası
- Dil: Türkçe
- İşleme Süreci:
- Noktalama/sayı/özel karakter temizliği
- Küçük harfe dönüştürme
- Tokenizasyon
- Chunk'lama (~500 karakter)
- Metadata (kategori, tarih, başlık)
- FastAPI: Modern ve hızlı API framework
- LangChain: RAG pipeline yönetimi
- ChromaDB: Vektör veritabanı
- HuggingFace: Embedding modeli
- Ek Kütüphaneler: pandas, dotenv, kagglehub
- React: SPA (Single Page Application)
- Axios: API bağlantısı
- Vite: Hızlı geliştirme ortamı
- TailwindCSS: Responsive tasarım
- React Router: Sayfa yönlendirme
Bu projeyi çalıştırmak için aşağıdaki araçların sisteminizde kurulu olması gerekmektedir:
- Git
- Python 3.10 ve üzeri
- Node.js 18 ve üzeri
- npm (Node paket yöneticisi)
macOS kullanıyorsanız, Homebrew aracılığıyla aşağıdaki komutlarla gerekli yazılımları yükleyebilirsiniz:
brew install git python@3.11 nodeWindows kullanıcıları için Windows Paket Yöneticisi (winget) ile gerekli yazılımları yükleme komutları:
winget install --id Git.Git -e
winget install --id Python.Python.3.11 -e
winget install --id OpenJS.NodeJS.LTS -eProjeyi kendi bilgisayarınıza klonlamak için terminal veya PowerShell üzerinde şu komutları kullanabilirsiniz:
git clone https://github.com/Alper-Bilgin/Akbank_Generative_AI.git
cd Akbank_Generative_AIBackend kısmını çalıştırmak için öncelikle Python sanal ortamı oluşturup, bağımlılıkları yükleyin.
cd backend
# Sanal ortam oluşturma ve aktive etme
python3 -m venv .venv
source .venv/bin/activate
# pip güncelleme ve bağımlılıkların yüklenmesi
python -m pip install --upgrade pip
pip install -r requirements.txt
# Ortam değişkenleri dosyasını oluşturma (varsa)
# cp .env.example .env
# Backend sunucusunu başlatma (FastAPI örneği)
# uvicorn main:app --reload --host 0.0.0.0 --port 8000
cd backend
# Sanal ortam oluşturma ve aktive etme
py -m venv .venv
.\.venv\Scripts\Activate.ps1
# pip güncelleme ve bağımlılıkların yüklenmesi
python -m pip install --upgrade pip
pip install -r requirements.txt
# Ortam değişkenleri dosyasını oluşturma (varsa)
# Copy-Item .env.example .env
# Backend sunucusunu başlatma (FastAPI örneği)
# uvicorn main:app --reload --host 0.0.0.0 --port 8000
Frontend kısmını çalıştırmak için Node.js paketlerini kurmanız gerekmektedir.
cd ../frontend
# Kilit dosyası (package-lock.json veya yarn.lock) varsa hızlı kurulum:
npm ci
# Yoksa bağımlılıkları yüklemek için:
# npm install
# Ortam değişkenleri dosyasını oluşturma (varsa)
# cp .env.example .env
# Geliştirme sunucusunu başlatma (Vite örneği)
# npm run dev
cd ../frontend
# Kilit dosyası varsa hızlı kurulum:
npm ci
# Yoksa:
# npm install
# Ortam değişkenleri dosyasını oluşturma (varsa)
# Copy-Item .env.example .env
# Geliştirme sunucusunu başlatma (Vite örneği)
# npm run dev
-
Backend ve frontend’i ayrı terminal pencerelerinde başlatmanız gerekmektedir.
-
Varsayılan portlar:
-
Backend:
8000 -
Frontend:
5173(Vite) veya3000(Create React App)
-
-
Frontend, backend API adresini
.envdosyasındakiVITE_API_BASE_URLortam değişkeninden alır.
Projede hem backend hem de frontend tarafında bazı yapılandırmalar .env dosyaları aracılığıyla yapılmaktadır. Aşağıda gerekli ortam değişkenleri ve açıklamaları listelenmiştir.
.env dosyası backend/ dizininde yer almalı ve aşağıdaki örneğe benzer şekilde yapılandırılmalıdır:
# Backend
PORT=8000
DEBUG=true
# Google Generative AI
GOOGLE_API_KEY=your-google-api-key-here
# ChromaDB (vektör veritabanı)
CHROMA_PERSIST_DIR=./chroma
# Frontend erişimi için (opsiyonel)
VITE_API_URL=http://localhost:8000-
PORT: FastAPI sunucusunun çalışacağı port. -
DEBUG: Geliştirme modunu aktif eder. -
GOOGLE_API_KEY: Google Generative AI hizmeti için gerekli API anahtarı. -
CHROMA_PERSIST_DIR: ChromaDB'nin vektör verilerini saklayacağı klasör. -
VITE_API_URL: (Opsiyonel) frontend’in backend’e erişimi için kullanılan URL.
.env dosyası frontend/ dizininde yer almalı ve şu şekilde yapılandırılmalıdır:
VITE_API_BASE_URL=http://localhost:8000VITE_API_BASE_URL: Frontend’in backend API ile iletişim kurduğu adres. Geliştirme sırasında genelliklehttp://localhost:8000kullanılır.
Proje kapsamında Kaggle üzerindeki veri setlerini doğrudan indirmek için Kaggle API kullanılmaktadır.
-
Kaggle hesabınız yoksa https://www.kaggle.com adresinden kayıt olun.
-
Giriş yaptıktan sonra profilinize tıklayıp "My Account" sayfasına gidin. Direkt bağlantı: https://www.kaggle.com/account
-
Sayfada aşağıya inerek "API" bölümünü bulun.
-
"Create New API Token" butonuna tıklayın.
-
Bilgisayarınıza
kaggle.jsonadlı bir dosya indirilecektir.
Dosya içeriği örneği:
{
"username": "seninkullaniciadın",
"key": "kullanıcıya_özel_uzun_anahtar"
}Python kaggle kütüphanesi, bu dosyayı varsayılan olarak aşağıdaki konumlarda arar:
C:\Users\<kullanıcı_adı>\.kaggle\kaggle.json~/.kaggle/kaggle.jsonAlternatif olarak, dosyayı farklı bir klasörde tutuyorsanız Python içerisinde bu yolu belirtmelisiniz:
import os
os.environ["KAGGLE_CONFIG_DIR"] = "/dosyanın/bulunduğu/klasör"Bu bölümde projede kullanılan LangChain bileşenlerinin detayları ve veri akış mimarisi açıklanmaktadır.
# 1. LLM - Google Gemini
llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
temperature=0.2 # Düşük rastgelelik (deterministik cevaplar)
)
# 2. Embedding - Türkçe Destekli
embedding = HuggingFaceEmbeddings(
model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
)
# 3. Vector Database - ChromaDB
vectorstore = Chroma(
persist_directory="backend/chroma_db",
embedding_function=embedding
)
# 4. Text Splitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
# 5. RAG Chain (LCEL ile)
rag_chain = (
{"context": retriever | _format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)| Bileşen | Amaç | Özellik |
|---|---|---|
ChatGoogleGenerativeAI |
LLM | Gemini 2.5 Flash, temp=0.2 |
HuggingFaceEmbeddings |
Vektörleştirme | Türkçe destekli, 384 boyutlu |
Chroma |
Vektör DB | Disk’e kalıcı kayıt (persist) |
RecursiveCharacterTextSplitter |
Metin parçalama | 1000 karakter, %20 çakışma |
PromptTemplate |
Prompt tasarımı | context + question |
RunnableLambda |
Dönüştürücü işlev | Belgeleri string'e çevirir |
StrOutputParser |
Sonuç ayrıştırma | LLM çıktısını temizler (string) |
┌─────────────┐
│ React │ Kullanıcı sorusu
│ Frontend │
└──────┬──────┘
│ POST /api/chat
↓
┌─────────────┐
│ FastAPI │ API Gateway
│ Backend │
└──────┬──────┘
│
↓
┌─────────────┐
│ RAG Pipeline│ Retrieval + Generation
└───┬─────┬───┘
│ │
↓ ↓
┌────────┐ ┌────────┐
│ChromaDB│ │Gemini │
│(Vektör)│ │ LLM │
└────────┘ └────────┘
CSV / TXT Dosyaları
↓
Document Loader (LangChain)
↓
Text Splitting (1000 karakter parça)
↓
Embedding (384 boyutlu vektörler)
↓
ChromaDB'ye kaydet
Kullanıcı Sorusu
↓
Embedding (Soru → Vektör)
↓
ChromaDB Similarity Search (k=5)
↓
En Benzer 5 Parça (Chunk)
↓
Prompt Template (context + question)
↓
Gemini LLM
↓
Yanıt
# API → RAG Pipeline
@app.post("/api/chat")
async def chat(request: ChatRequest):
answer = rag_chain.invoke(request.question)
return {"answer": answer}
# RAG Chain (LCEL)
rag_chain = (
{"context": retriever | _format_docs, "question": RunnablePassthrough()}
| prompt # Prompt template ile doldur
| llm # Gemini'ye gönder
| StrOutputParser() # Yanıtı ayrıştır
)Projeyi daha işlevsel ve kullanıcı dostu hale getirmek için aşağıdaki geliştirmeler planlanmaktadır:
- iOS ve Android platformları için React Native tabanlı bir mobil uygulama geliştirilmesi.
- Chatbot ile mobil üzerinden hızlı ve kullanıcı dostu etkileşim.
- Kullanıcıların birden fazla konuyu aynı anda takip edebileceği sekmeli sohbet arayüzü.
- Her sekme, ayrı bir sohbet geçmişini ve bağlamı tutacak şekilde yapılandırılacak.
- Kullanıcının geçmiş sorularına ve yanıtlarına erişebileceği kişisel oturum sistemi.
- Daha bağlamsal ve süreklilik sağlayan sohbet deneyimi.
- Kullanıcıların sistemle belge veya medya paylaşabilmesini sağlayan bir yükleme arayüzü.
- Gelecekte görsel destekli analizler (örneğin OCR, belge özetleme vb.) için temel oluşturur.
- Haber veri setinin belirli periyotlarla otomatik güncellenmesi.
- Yeni haberlerin vektör veritabanına entegre edilmesiyle sürekli güncel yanıtlar sunulması.
- Yüklenen verileri, kullanıcı oturumlarını ve sistem durumunu görselleştiren basit bir yönetim paneli.
Bu proje, Konya Teknik Üniversitesi Bilgisayar Mühendisliği öğrencileri tarafından geliştirilmiştir.
- Konya Teknik Üniversitesi, Bilgisayar Mühendisliği Öğrencisi
- LinkedIn Profili
- Konya Teknik Üniversitesi, Bilgisayar Mühendisliği Öğrencisi
- LinkedIn Profili
