Sahaf.AI / src /chatbot.py
HayriTalha's picture
gereksiz kod silindi
e3ae1ba verified
import os
from dotenv import load_dotenv
import streamlit as st
# Gerekli LangChain bileşenleri
from langchain_chroma import Chroma
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import PromptTemplate
from langchain.chains import RetrievalQA
@st.cache_resource
def create_rag_chain():
load_dotenv()
print("Bileşenler ilk defa yükleniyor ve önbelleğe alınıyor...")
embedding_model_name = "BAAI/bge-m3"
db_directory = "./chroma_db"
embeddings = HuggingFaceEmbeddings(model_name=embedding_model_name)
db = Chroma(persist_directory=db_directory, embedding_function=embeddings)
print("Veritabanı başarıyla yüklendi.")
# 2. SOHBET BEYNİ (LLM): Cevap üretimi için Gemini modelini başlatıyoruz
llm = ChatGoogleGenerativeAI(model="gemma-3-27b-it") # Model adını güncelledim
print("Gemini LLM başarıyla yüklendi.")
# 3. PROMPT ve RAG ZİNCİRİ
prompt_template = """Senin adın Sahaf ve kitaplar hakkında bilgi veren yardımcı bir yapay zeka asistanısın.
Sana bir soru sorulduğunda şu kurallara göre cevap ver:
1. **Kendinle İlgili Sorular:** Eğer soru senin kim olduğun, ne olduğun veya ne işe yaradığınla ilgiliyse (örneğin: 'sen kimsin?', 'nesin?', 'ne yaparsın?'), BAĞLAMI dikkate alma. Kendini Sahaf olarak tanıt ve kitaplar hakkında bilgi vermek için tasarlandığını söyle.
2. **Kitaplarla İlgili Sorular:** Diğer tüm sorularda, cevabını mutlaka sana verilen BAĞLAM'a dayandır. Bağlamdaki bilgileri kullanarak soruyu cevapla.
3. **Bilgi Olmadığında:** Eğer bağlamda cevap yoksa, "Üzgünüm, veri setimde bu soruyla ilgili net bir bilgi bulamadım. Başka bir yazar veya kitap hakkında bilgi almak ister misiniz?" de.
4. **Dürüstlük:** Asla bilgi uydurma.
Bağlam: {context}
Soru: {question}
Cevap:"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=db.as_retriever(),
return_source_documents=False,
chain_type_kwargs={"prompt": PROMPT}
)
print("RAG Zinciri başarıyla kuruldu ve önbelleğe alındı.")
return qa_chain