--- title: ilacChat emoji: 💊 colorFrom: blue colorTo: green sdk: gradio app_file: app.py pinned: false --- # 💊 İlaç KT Chatbot Türkiye'de satılan ilaçların resmî **Kullanma Talimatı** (KT) belgelerine dayanarak Türkçe soru-cevap yapan, retrieval-augmented bir sohbet asistanı. Yalnızca dahili PDF kaynaklarını kullanır; bağlamda olmayan bilgi için "Bilmiyorum" der, tıbbi tahmin yürütmez. 🔗 **Canlı Demo:** [huggingface.co/spaces/emrecn/ilacChatBot](https://huggingface.co/spaces/emrecn/ilacChatBot) --- ## ✨ Özellikler ### 🔎 Retrieval ve Yanıt - **2.202 ilaç** Türkiye'de satılan TABLET ilaçların KT belgeleriyle indekslenmiş - **Bölüm-duyarlı chunking**: 5 standart KT bölümü (ne için kullanılır, dikkat edilmesi gerekenler, nasıl kullanılır, yan etkiler, saklama) - **Jina Embeddings v3** + **ChromaDB** vektör arama (top-20 aday) - **Cross-encoder reranking** (Jina Reranker v2 multilingual): top-20 → top-5 - **Gemini Flash** ile düşük gecikmeli yanıt üretimi - Sıkı bağlam kuralı: bağlamda olmayan iddialar için "Bilmiyorum" - Düşük güven eşiği (rerank skoru < 0.2) → otomatik "Bilmiyorum" ### 💬 Çoklu-Tur Sohbet - **Akıllı sorgu yeniden yazma** (query rewriting): "yan etkileri ne?" gibi takip soruları önceki ilaca otomatik bağlanır - **Karşılaştırma soruları**: "X ile Y arasındaki fark nedir?" hem ikisini korur - **Konu değişimi**: yeni ilaç adı tespit edildiğinde geçmiş otomatik atlanır - **Türkçe karakter-duyarsız** normalize: `selincro` ↔ `SELİNCRO`, `parol` ↔ `PAROL` ### 🎯 Metadata Filtering - Sorguda ilaç adı tespit edilirse retrieval o ilacın chunk'larına filtrelenir → daha hızlı ve daha alakalı sonuçlar - Çok-tokenli ilaç adları (örn. `abizol 10 mg`) tam eşleşmeyle önceliklendirilir ### 🛡️ Güven ve Güvenlik - Her yanıta otomatik **doktor / eczacı uyarısı** eklenir - Kota / rate-limit hatalarında kullanıcı dostu mesaj - Hayalet ilaç (yanlış / eksik isim) durumunda spekülasyon yapmaz - Bağlamda olmayan kullanım soruları için "Bilmiyorum" fail-safe ### 📚 Kaynak Gösterimi (Citation) - Her yanıtın altında kullanılan KT bölümleri ve ilaç adları listelenir - Birden fazla ilaçtan chunk gelirse uyarı log'lanır ### 🖥️ Kullanıcı Arayüzü - Gradio sohbet arayüzü, varsayılan **dark tema** - **İşlenen ilaçlar listesi**: aranabilir accordion, Türkçe-duyarsız substring filtre - Toplam işlenen ilaç sayısı dinamik gösterilir - Çok-turlu sohbet desteği ### 📊 Gözlemlenebilirlik - **JSONL sorgu logları** (`logs/queries.jsonl`): ham sorgu, yeniden yazılmış sorgu, tespit edilen ilaç, retrieval skorları, latency breakdown (rewrite / retrieval / rerank / llm), flag'ler - **Detaylı retrieval logu**: aday chunk'lar (rerank öncesi), seçilen chunk'lar (rerank sonrası) tam metadata ile --- ## 🧱 Teknolojiler | Katman | Bileşen | |---|---| | Embedding | Jina Embeddings v3 | | Vector Store | ChromaDB (persistent) | | Reranker | Jina Reranker v2 (multilingual) | | LLM | Google Gemini (`gemini-flash-latest`, temperature=0) | | Orchestration | LangChain | | UI | Gradio 5.x | | PDF | pypdf | | Deployment | Hugging Face Spaces (Git LFS) | --- ## 🔄 Akış ``` Kullanıcı sorusu + sohbet geçmişi │ ▼ ┌──────────────────────────┐ │ Query Rewrite │ ← geçmiş yoksa atlanır └──────────────────────────┘ │ ▼ ┌──────────────────────────┐ │ Drug ID Detection │ ← Türkçe-normalize, çok-token eşleşme └──────────────────────────┘ │ ▼ ┌──────────────────────────┐ │ ChromaDB Similarity │ ← top-20, drug_id metadata filtresi │ Search │ └──────────────────────────┘ │ ▼ ┌──────────────────────────┐ │ Jina Reranker v2 │ ← top-5; skor < 0.2 → "Bilmiyorum" └──────────────────────────┘ │ ▼ ┌──────────────────────────┐ │ Gemini Flash Yanıt │ ← KT bağlamı + geçmiş ile sıkı prompt └──────────────────────────┘ │ ▼ Cevap + Kaynaklar + Doktor uyarısı ``` --- ## 📁 Proje Yapısı ```text . ├── app.py # Gradio launcher ├── app/ │ ├── ui.py # Sohbet arayüzü + işlenen ilaç listesi │ ├── retrieval.py # Query rewrite, retrieval, rerank, answer │ ├── ingest.py # PDF parse + chunk + embed → ChromaDB │ └── logger.py # Yapılandırılmış (JSONL + text) log ├── chroma_db/ # Persisted vector store (Git LFS) ├── requirements.txt └── README.md ``` --- ## 🚀 Yerel Kurulum ```bash python -m venv venv .\venv\Scripts\activate pip install -r requirements.txt ``` `.env` dosyası oluştur ve API anahtarlarını ekle: ```ini GOOGLE_API_KEY=your_gemini_key JINA_API_KEY=your_jina_key ``` PDF'leri indekse al (yalnızca ilk kurulumda veya yeni PDF eklendiğinde): ```bash python -m app.ingest --pdf-dir ./allpdfs --mode full ``` Uygulamayı başlat: ```bash python app.py ``` ## ⚠️ Yasal Uyarı Bu asistan yalnızca **bilgilendirme amaçlıdır**. Yanıtlar resmî KT belgelerine dayanır, ancak güncel olmayabilir veya eksik bilgi içerebilir. **Her tıbbi karar öncesinde mutlaka doktorunuza veya eczacınıza danışın.** Uygulama bir teşhis aracı değildir.