Skip to content

tmy-datamesa/kmk-deploy

Repository files navigation

⚖ Multi-Law Legal RAG Agent — Deployment

Komßuluk & Apartman Hukuku Yapay Zeka Asistanı

🔗 Canlı Uygulama: Streamlit Cloud 🔗 Backend API: Cloud Run — Swagger UI


1. Proje Hakkında

Bu proje, Kat MĂŒlkiyeti Kanunu (KMK) baßta olmak ĂŒzere 6 farklı hukuk kaynağını kullanarak apartman ve site yönetimiyle ilgili hukuki soruları yanıtlayan bir Yapay Zeka Asistanıdır.

Sistem, Retrieval-Augmented Generation (RAG) tekniğini ve Agentic (Ajan) mimarisini kullanarak:

  1. Kullanıcının sorusunu analiz eder,
  2. Hangi kanunun uzmanlık alanına girdiğine karar verir,
  3. İlgili kanun maddelerini vektör veritabanından bulur,
  4. Bulunan bilgilere dayanarak doğru ve kaynaklı bir cevap ĂŒretir.

2. Kullanılan Teknolojiler

đŸ€– Yapay Zeka & NLP

Teknoloji Ne İçin Kullanıldı?
OpenAI GPT-4o Metin ĂŒretimi (LLM) — Soruları anlama ve cevap olußturma
OpenAI text-embedding-3-small Metin vektörleßtirme — Kanun maddelerini sayısal vektörlere çevirme
OpenAI Function Calling (Tools) Ajan mimarisi — LLM'in hangi kanunu arayacağına karar vermesi

đŸ’Ÿ Veri & Veritabanı

Teknoloji Ne İçin Kullanıldı?
ChromaDB (Cloud) Vektör veritabanı — Kanun maddelerinin embedding'lerini saklar ve benzerlik araması yapar
PyPDF PDF dosyalarından metin çıkarma
LangChain Text Splitters Metni anlamlı parçalara (chunks) bölme

🌐 Backend (API)

Teknoloji Ne İçin Kullanıldı?
FastAPI REST API sunucusu — RAG motorunu HTTP endpoint'i olarak sunar
Uvicorn ASGI sunucusu — FastAPI'yi çalıßtırır
Pydantic Veri doğrulama — API request/response modellerini tanımlar

🎹 Frontend

Teknoloji Ne İçin Kullanıldı?
Streamlit Web arayĂŒzĂŒ — Sohbet tabanlı kullanıcı deneyimi
Streamlit Cloud Frontend hosting — Uygulamayı internete açar

☁ Bulut & DevOps

Teknoloji Ne İçin Kullanıldı?
Docker Konteynerizasyon — Uygulamayı paketler ve taßınabilir hale getirir
Google Cloud Build CI/CD — Docker image'ını bulutta olußturur
Google Cloud Run Sunucusuz (Serverless) hosting — Backend API'yi çalıßtırır
Google Artifact Registry Docker image deposu — Image'ları saklar ve versiyonlar

📊 MLOps (Deney Takibi)

Teknoloji Ne İçin Kullanıldı?
MLflow Deney loglama — Her soruyu, modeli ve parametreleri kaydeder
RAGAS Değerlendirme — RAG sisteminin doğruluğunu ölçer (Faithfulness, Answer Relevancy)

3. Sistem Mimarisi

┌─────────────────┐         ┌──────────────────────────────────┐
│  Streamlit Cloud │  HTTP   │     Google Cloud Run             │
│  (Frontend)      │────────▶│     FastAPI Backend              │
│                  │  /ask   │                                  │
│  app.py          │◀────────│  app_api.py                      │
│                  │  JSON   │    │                              │
└─────────────────┘         │    â–Œ                              │
                            │  LegalRAG Agent (agent.py)        │
                            │    │                              │
                            │    ├── OpenAI API (GPT-4o)   │
                            │    │   └── Function Calling       │
                            │    │                              │
                            │    └── RAG Engine (rag_engine.py) │
                            │        └── ChromaDB Cloud         │
                            │            (6 Kanun Koleksiyonu)  │
                            └──────────────────────────────────┘

Veri Akıßı (Bir Soru Sorulduğunda):

1. Kullanıcı soru yazar  →  Streamlit Cloud (app.py)
2. HTTP POST /ask        →  Cloud Run (app_api.py)
3. LegalRAG.generate_answer() çalıßır:
   a. Soru GPT-4o'ye gönderilir
   b. GPT, hangi kanunu arayacağına karar verir (Function Calling)
      Örn: "search_kmk" veya "search_tbk"
   c. İlgili kanunun ChromaDB koleksiyonunda vektör araması yapılır
   d. Bulunan maddeler GPT'ye geri gönderilir
   e. GPT, kaynaklara dayanarak nihai cevabı ĂŒretir
4. Cevap + Kaynaklar JSON olarak döner
5. Streamlit ekranda gösterir

4. Proje Dosya Yapısı

kmk-deploy/
│
├── app.py                  # Streamlit Frontend (API çağrısı yapar)
├── app_api.py              # FastAPI Backend (POST /ask, GET /health)
├── Dockerfile              # Docker container tarifi
├── .dockerignore           # Docker build'den hariç tutulan dosyalar
├── requirements.txt        # Python bağımlılıkları
├── Makefile                # Kısayol komutları (make setup, make run)
├── .env.example            # Ortam değiƟkenleri Ɵablonu
│
├── src/                    # Ana Python paketi
│   ├── __init__.py
│   ├── config.py           # Merkezi konfigĂŒrasyon (modeller, parametreler)
│   ├── utils.py            # ChromaDB & Embedding bağlantıları
│   ├── ingestion.py        # ETL: PDF → Chunk → ChromaDB
│   ├── rag_engine.py       # Vektör arama motoru (Retriever)
│   ├── agent.py            # Ajan: Router + RAG + LLM (Beyin)
│   └── evaluation.py       # RAGAS + MLflow ile değerlendirme
│
└── data/                   # Hukuk kaynakları (PDF dosyaları)
    ├── kat-mulkiyeti.pdf
    ├── borclar-kanunu.pdf
    ├── anayasa.pdf
    ├── medeni_kanun.pdf
    ├── asansor_yonetmeligi.pdf
    └── yangin_yonetmeligi.pdf

5. Hukuk Kaynakları

# Kaynak Koleksiyon Kapsam
1 Kat MĂŒlkiyeti Kanunu (KMK) law_kmk Aidat, site yönetimi, kat malikleri kurulu
2 TĂŒrk Borçlar Kanunu (TBK) law_tbk Kira sözleßmeleri, kiracı hakları
3 T.C. Anayasası law_anayasa Konut dokunulmazlığı, mĂŒlkiyet hakkı
4 TĂŒrk Medeni Kanunu (TMK) law_tmk Genel mĂŒlkiyet ve komßuluk hakları
5 Asansör Yönetmeliği reg_asansor Asansör bakım, kırmızı etiket
6 Yangın Yönetmeliği reg_yangin Yangın merdiveni, kaĂ§Ä±ĆŸ yolları

6. RAG Pipeline Detayları

6.1 Veri Hazırlama (Ingestion — ETL)

PDF Dosyası → Metin Çıkarma → Parçalama (Chunking) → Vektörleßtirme → ChromaDB'ye Kayıt
  • Chunk Size: 2000 karakter
  • Chunk Overlap: 400 karakter (bağlam kaybını önlemek için)
  • Ayırıcılar: Hukuki yapıya uygun (KISIM, BÖLÜM, Madde, Ek Madde)

6.2 Ajan Mimarisi (Agentic RAG)

Klasik RAG'den farkı: Sistem tek bir veritabanında arama yapmak yerine, önce hangi kanunu arayacağına karar verir.

Kullanıcı Sorusu
      │
      ▌
  GPT-4o (Function Calling)
      │
      ├── "Aidat ödemezsem?"     → search_kmk() → KMK koleksiyonu
      ├── "Kiracı depozitosu?"   → search_tbk() → TBK koleksiyonu
      ├── "Asansör arızası?"     → search_asansor() → Asansör koleksiyonu
      └── "Yangın merdiveni?"    → search_yangin() → Yangın koleksiyonu

6.3 RAG Parametreleri

Parametre Değer Açıklama
LLM Model gpt-4o Maliyet/performans dengesi
Embedding Model text-embedding-3-small Hızlı ve verimli vektörleßtirme
Top-K 6 Her aramada döndĂŒrĂŒlen sonuç sayısı
Temperature 0.0 Deterministik cevaplar (yaratıcılık yok)
Chunk Size 2000 Metin parçalama boyutu (karakter)

7. Deployment Mimarisi

Neden Backend ve Frontend Ayrıldı?

Monolitik (Eski) Microservice (Yeni)
Streamlit → doğrudan LegalRAG çağırır Streamlit → HTTP → FastAPI → LegalRAG
Tek sunucuda çalıßır Frontend ve Backend bağımsız ölçeklenir
Ölçeklenemez Cloud Run otomatik ölçeklenir

Deployment Adımları

1. FastAPI Backend yazıldı (app_api.py)
       ↓
2. Dockerfile ile paketlendi
       ↓
3. Google Cloud Build ile image olußturuldu (gcloud builds submit)
       ↓
4. Google Cloud Run'a deploy edildi (gcloud run deploy)
       ↓
5. Streamlit app.py gĂŒncellendi (requests.post ile API çağrısı)
       ↓
6. GitHub'a push edildi → Streamlit Cloud otomatik deploy etti

Ortam Değißkenleri (Environment Variables)

Değißken Nerede? Açıklama
OPENAI_API_KEY Cloud Run GPT ve Embedding API erißimi
CHROMA_HOST Cloud Run ChromaDB sunucu adresi
CHROMA_API_KEY Cloud Run ChromaDB kimlik doğrulama
CHROMA_TENANT Cloud Run ChromaDB kiracı ID'si
CHROMA_DATABASE Cloud Run ChromaDB veritabanı adı
BACKEND_URL Streamlit Cloud Cloud Run API adresi

8. API Endpoint'leri

Method Endpoint Açıklama Örnek
GET /health Health kontrolĂŒ {"status": "healthy", "rag_ready": true}
POST /ask Soru-cevap {"question": "Aidat ödemezsem ne olur?"}
GET /docs Swagger arayĂŒzĂŒ Otomatik API dokĂŒmantasyonu

Örnek API Çağrısı:

curl -X POST https://legal-rag-api-232706383774.europe-west1.run.app/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "Aidat ödemezsem ne olur?"}'

Örnek Cevap:

{
  "answer": "Kat MĂŒlkiyeti Kanunu Madde 20 uyarınca, aidat borcunuz nedeniyle icra takibi baßlatılabilir...",
  "sources": [
    {"doc_name": "Kat MĂŒlkiyeti Kanunu", "content": "Madde 20 – Kat malikleri..."}
  ]
}

9. Değerlendirme (MLOps)

Sistemin performansı RAGAS framework'ĂŒ ile ölĂ§ĂŒlmĂŒĆŸ ve MLflow ile loglanmıßtır.

Metrik Açıklama Ne ÖlĂ§ĂŒyor?
Faithfulness Cevap, kaynaklara sadık mı? HalĂŒsinasyon kontrolĂŒ
Answer Relevancy Cevap soruyla alakalı mı? Konu dıßı cevap kontrolĂŒ

Değerlendirme komutu:

make eval          # RAGAS testlerini çalıßtır
mlflow ui          # Sonuçları görĂŒntĂŒle (http://127.0.0.1:5000)

10. Kurulum ve Çalıßtırma

Yerel Gelißtirme

make setup         # Sanal ortam + bağımlılıkları kur
make ingest        # PDF'leri ChromaDB'ye yĂŒkle
make run           # Streamlit uygulamasını baßlat

Backend (Docker)

docker build -t legal-rag-api .
docker run -p 8080:8080 --env-file .env legal-rag-api

Google Cloud'a Deploy (Artifact Registry)

gcloud builds submit --tag europe-west1-docker.pkg.dev/PROJECT-ID/legal-rag-repo/legal-rag-api
gcloud run deploy legal-rag-api \
  --image europe-west1-docker.pkg.dev/PROJECT-ID/legal-rag-repo/legal-rag-api \
  --platform managed --region europe-west1

11. Kısıtlamalar

  • Sistem sadece apartman, site ve komßuluk hukuku bağlamında çalıßır.
  • Ceza hukuku, ticaret hukuku gibi farklı alanlar kapsam dıßıdır.
  • Cevaplar hukuki tavsiye niteliği taßımaz, bilgilendirme amaçlıdır.
  • LLM'in ĂŒrettiği cevaplar her zaman %100 doğru olmayabilir.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published