Spaces:
Sleeping
Sleeping
File size: 6,046 Bytes
efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc efc4680 6919acc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | ---
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.
|