nihalm-collab commited on
Commit
33ddaec
·
verified ·
1 Parent(s): 50d444a

Upload 3 files

Browse files
Files changed (3) hide show
  1. README (1).md +86 -0
  2. app.py +79 -0
  3. requirements.txt +7 -3
README (1).md ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: KitapYurdu Chatbot
3
+ emoji: 📖
4
+ colorFrom: indigo
5
+ colorTo: blue
6
+ sdk: streamlit
7
+ sdk_version: 1.50.0
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # Kitapyurdu Yorum Chatbotu
13
+
14
+ Bu proje, Kitapyurdu yorumları üzerine geliştirilmiş bir **RAG tabanlı chatbot** içerir.
15
+ Kullanıcılar kitaplarla ilgili sorular sorabilir ve chatbot, kullanıcı yorumlarını baz alarak yanıt üretir.
16
+
17
+ ---
18
+
19
+ ## Projenin Amacı
20
+ - Kitap yorumlarını kullanarak kullanıcıların sorularını yanıtlamak
21
+ - Kitapların olumlu/olumsuz yönlerini özetlemek
22
+ - RAG mimarisi ile doğruluğu artırmak
23
+
24
+ ---
25
+
26
+ ## Veri Seti
27
+ - **Ad:** Kitapyurdu Yorumları
28
+ - **Kaynak:** [HuggingFace](https://huggingface.co/datasets/alibayram/kitapyurdu_yorumlar) (token gerektirir)
29
+ - **Sütunlar:**
30
+ - yorum: Kullanıcı yorumu
31
+ - kitap_adi: Kitap adı
32
+ - puan: 1-5 arası kullanıcı puanı
33
+ - tarih: Yorum tarihi
34
+ - **İçerik:** Türkçe kitap yorumları, olumlu ve olumsuz görüşler içerir.
35
+ - **Hazırlık:** Boş veya kısa yorumlar çıkarıldı, Türkçe karakterler normalize edildi. Metadata olarak kitap adı ve puan saklandı.
36
+
37
+ ---
38
+
39
+ ## Kullanılan Yöntemler
40
+ 1. **RAG Pipeline**
41
+ - Metinler embedding modeline (OpenAI/Gemini) gönderildi
42
+ - Chroma vektör veritabanında saklandı
43
+ - Soru geldiğinde retriever benzer yorumları buluyor ve LLM yanıt üretiyor
44
+ 2. **Embedding Modeli**
45
+ - OpenAI `text-embedding-3-small` modeli
46
+ 3. **Vektör Veritabanı**
47
+ - Chroma kullanıldı
48
+ 4. **Web Arayüzü**
49
+ - Streamlit ile kullanıcı etkileşimi sağlandı
50
+
51
+ ---
52
+
53
+ ## Elde Edilen Sonuçlar
54
+ - Kullanıcı sorularına hızlı ve bağlamsal cevaplar üretildi
55
+ - Örnek sorular:
56
+ - "Bu kitabın konusu nedir?"
57
+ - "Kullanıcılar bu kitabı beğenmiş mi?"
58
+ - Arayüz minimal ama işlevsel, soru-yanıt geçmişi tutuluyor
59
+
60
+ ---
61
+
62
+ ## Kurulum ve Çalıştırma
63
+ 1. Reponuzu klonlayın:
64
+ ```bash
65
+ git clone https://github.com/nihalm-collab/GAIH-Chatbot-Projesi.git
66
+ cd GAIH-Chatbot-Projesi
67
+ ```
68
+ 2. Virtual environment oluşturun ve aktif edin:
69
+ ```bash
70
+ python -m venv venv
71
+ source venv/bin/activate # Linux/Mac
72
+ venv\Scripts\activate # Windows
73
+ ```
74
+ 3. Gerekli paketleri yükleyin:
75
+ ```bash
76
+ pip install -r requirements.txt
77
+ ```
78
+ 4. `.env` dosyasını oluşturun ve API anahtarlarınızı ekleyin:
79
+ ```bash
80
+ OPENAI_API_KEY=your_openai_api_key_here
81
+ HF_TOKEN=your_huggingface_token_here
82
+ ```
83
+ 5. Streamlit uygulamasını çalıştırın:
84
+ ```bash
85
+ streamlit run app.py
86
+ ```
app.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ 📚 KitapYurdu Yorum Asistanı Chatbot
3
+ - Hugging Face Spaces veya Lokal ortamda çalışacak
4
+ """
5
+
6
+ import os
7
+ import streamlit as st
8
+ from datasets import load_dataset
9
+ import chromadb
10
+ from chromadb.config import Settings
11
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
12
+ from langchain.vectorstores import Chroma
13
+ from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings
14
+ from langchain.chains import RetrievalQA
15
+ from dotenv import load_dotenv
16
+
17
+ # --- 1. Ortam Değişkenleri
18
+ # Lokal için .env yükle
19
+ if os.path.exists(".env"):
20
+ load_dotenv()
21
+
22
+ GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY")
23
+ HF_TOKEN = os.environ.get("HF_TOKEN")
24
+
25
+ # --- 2. Streamlit Başlığı
26
+ st.set_page_config(page_title="📖 KitapYurdu Chatbot")
27
+ st.title("📖 KitapYurdu Yorum Asistanı (Gemini 2.0 Flash)")
28
+
29
+ # --- 3. Veri Seti Yükleme
30
+ @st.cache_data
31
+ def load_kitapyurdu_dataset():
32
+ dataset = load_dataset("alibayram/kitapyurdu_yorumlar", split="train", token=HF_TOKEN)
33
+ return dataset
34
+
35
+ st.write("📡 Veri seti yükleniyor...")
36
+ dataset = load_kitapyurdu_dataset()
37
+ st.success("✅ Veri seti yüklendi!")
38
+
39
+ # --- 4. Metinleri Bölme
40
+ text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
41
+ texts = text_splitter.split_text(" ".join(dataset["yorum"][:500])) # İlk 500 yorum örnek
42
+
43
+ # --- 5. ChromaDB
44
+ PERSIST_DIR = "chroma_db"
45
+ os.makedirs(PERSIST_DIR, exist_ok=True)
46
+
47
+ embeddings = GoogleGenerativeAIEmbeddings(
48
+ model="models/embedding-001",
49
+ google_api_key=GEMINI_API_KEY
50
+ )
51
+
52
+ vectorstore = Chroma.from_texts(
53
+ texts,
54
+ embeddings,
55
+ persist_directory=PERSIST_DIR
56
+ )
57
+
58
+ # --- 6. RAG Pipeline
59
+ retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
60
+ llm = ChatGoogleGenerativeAI(
61
+ model="gemini-2.0-flash",
62
+ google_api_key=GEMINI_API_KEY,
63
+ temperature=0.2
64
+ )
65
+ qa_chain = RetrievalQA.from_chain_type(
66
+ llm=llm,
67
+ chain_type="stuff",
68
+ retriever=retriever,
69
+ )
70
+
71
+ # --- 7. Kullanıcı Arayüzü
72
+ st.markdown("### 💬 Kitaplar hakkında soru sor:")
73
+ user_query = st.text_input("Örnek: 'En çok beğenilen kitap hangisi?'", "")
74
+
75
+ if user_query:
76
+ with st.spinner("Yanıt hazırlanıyor..."):
77
+ response = qa_chain.run(user_query)
78
+ st.markdown("### 🧠 Yanıt:")
79
+ st.write(response)
requirements.txt CHANGED
@@ -1,3 +1,7 @@
1
- altair
2
- pandas
3
- streamlit
 
 
 
 
 
1
+ streamlit==1.25.0
2
+ datasets==2.17.1
3
+ chromadb==0.4.3
4
+ langchain==0.1.118
5
+ tiktoken==0.4.3
6
+ langchain-google-genai==0.0.6
7
+ python-dotenv==1.0.1