ilacChatBot / README.md
emrecn's picture
Update README.md
c2a8ce2 verified
---
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.