KomĆuluk & Apartman Hukuku Yapay Zeka Asistanı
đ Canlı Uygulama: Streamlit Cloud đ Backend API: Cloud Run â Swagger UI
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:
- Kullanıcının sorusunu analiz eder,
- Hangi kanunun uzmanlık alanına girdiÄine karar verir,
- İlgili kanun maddelerini vektör veritabanından bulur,
- Bulunan bilgilere dayanarak doÄru ve kaynaklı bir cevap ĂŒretir.
| 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 |
| 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 |
| 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 |
| Teknoloji | Ne İçin Kullanıldı? |
|---|---|
| Streamlit | Web arayĂŒzĂŒ â Sohbet tabanlı kullanıcı deneyimi |
| Streamlit Cloud | Frontend hosting â Uygulamayı internete açar |
| 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 |
| 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) |
âââââââââââââââââââ ââââââââââââââââââââââââââââââââââââ
â 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) â
ââââââââââââââââââââââââââââââââââââ
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
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
| # | 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ı |
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)
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
| 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) |
| 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 |
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
| 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 |
| 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 |
curl -X POST https://legal-rag-api-232706383774.europe-west1.run.app/ask \
-H "Content-Type: application/json" \
-d '{"question": "Aidat ödemezsem ne olur?"}'{
"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..."}
]
}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)make setup # Sanal ortam + baÄımlılıkları kur
make ingest # PDF'leri ChromaDB'ye yĂŒkle
make run # Streamlit uygulamasını baĆlatdocker build -t legal-rag-api .
docker run -p 8080:8080 --env-file .env legal-rag-apigcloud 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- 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.