ilacChatBot / README.md
emrecn's picture
Update README.md
c2a8ce2 verified

A newer version of the Gradio SDK is available: 6.14.0

Upgrade
metadata
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


✨ Ö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: selincroSELİNCRO, parolPAROL

🎯 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ı

.
├── 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

python -m venv venv
.\venv\Scripts\activate
pip install -r requirements.txt

.env dosyası oluştur ve API anahtarlarını ekle:

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):

python -m app.ingest --pdf-dir ./allpdfs --mode full

Uygulamayı başlat:

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.