Veri Gizliliği için LocalAI: Bulut Yapay Zekasına Alternatif
Şirket içi bir toplantıda yapay zeka destekli özetleme aracı kullanmak istiyorsunuz. Güzel fikir. Ama o araç bulut tabanlı ve müşteri verileriniz, sözleşmeleriniz, iç yazışmalarınız bir üçüncü taraf sunucusuna gidiyor. GDPR, KVKK, ISO 27001… Bunları bir kenara bırakın, sezgisel olarak da rahatsız edici. İşte tam bu noktada LocalAI devreye giriyor.
LocalAI Nedir ve Neden Önemli?
LocalAI, OpenAI API’siyle uyumlu, tamamen kendi sunucunuzda çalışan açık kaynaklı bir yapay zeka çalışma ortamıdır. Go diliyle yazılmıştır ve temel amacı şudur: OpenAI’ye gönderdiğiniz her isteği, hiçbir veri dışarı çıkmadan kendi altyapınızda karşılamak.
Neden bu kadar kritik?
- Müşteri verileri, finansal belgeler, sağlık kayıtları gibi hassas içerikler dışarı çıkmaz
- İnternet bağlantısı olmayan air-gapped ortamlarda çalışır
- Aylık API maliyetleri sıfıra iner
- Model üzerinde tam kontrol sizdedir, fine-tuning yapabilirsiniz
- Veri egemenliği yasalarına uyum kolaylaşır
LocalAI, LLaMA, Mistral, Phi, Falcon, RWKV gibi popüler modelleri destekler. Aynı zamanda Whisper ile ses tanıma, Stable Diffusion ile görüntü üretimi de yapabilir. Tek bir API endpoint’i üzerinden bunların hepsini yönetirsiniz.
Donanım Gereksinimleri
Gerçekçi olalım. Her şey çalışır ama her şey her donanımda iyi çalışmaz.
CPU ile çalıştırma:
- 7B parametreli modeller için minimum 16GB RAM
- 13B parametreli modeller için 32GB RAM önerilir
- Yanıt süreleri yavaştır ama production dışı kullanım için kabul edilebilir
GPU ile çalıştırma:
- NVIDIA GPU için 8GB VRAM, 7B modelleri rahat çalıştırır
- 13B modeller için 16GB VRAM idealdir
- CUDA 11.x veya üzeri gerekir
Disk:
- Modeller 4GB ile 30GB arasında değişir
- /opt/localai altında en az 100GB alan ayırmanızı öneririm
Kurulum: Adım Adım
Docker ile Hızlı Başlangıç
En pratik yol Docker. Özellikle test ortamı için idealdir.
# GPU olmayan ortam için
docker run -ti --name localai
-p 8080:8080
-v /opt/localai/models:/build/models
-e DEBUG=true
localai/localai:latest
# NVIDIA GPU destekli kurulum
docker run -ti --name localai
--gpus all
-p 8080:8080
-v /opt/localai/models:/build/models
-e DEBUG=true
localai/localai:latest-gpu-nvidia-cuda-12
Bare Metal Kurulum (Ubuntu 22.04)
Production ortamı için binary kurulum daha kontrol edilebilir.
# Bağımlılıkları kur
apt-get update && apt-get install -y
build-essential
cmake
curl
git
golang-go
libopenblas-dev
pkg-config
# LocalAI reposunu clone et
git clone https://github.com/mudler/LocalAI.git /opt/localai-src
cd /opt/localai-src
# Build al (bu biraz zaman alır)
make build
# Binary'yi kopyala
cp local-ai /usr/local/bin/local-ai
chmod +x /usr/local/bin/local-ai
# Model dizini oluştur
mkdir -p /opt/localai/models
Systemd Servis Dosyası
Sunucuda kalıcı çalışması için systemd unit dosyası şart.
cat > /etc/systemd/system/localai.service << 'EOF'
[Unit]
Description=LocalAI - Local AI API Server
After=network.target
Wants=network.target
[Service]
Type=simple
User=localai
Group=localai
WorkingDirectory=/opt/localai
ExecStart=/usr/local/bin/local-ai --models-path /opt/localai/models --address :8080 --threads 4
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
Environment=GOMAXPROCS=4
Environment=DEBUG=false
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
# Servis kullanıcısı oluştur
useradd -r -s /bin/false -d /opt/localai localai
chown -R localai:localai /opt/localai
systemctl daemon-reload
systemctl enable localai
systemctl start localai
Model İndirme ve Yapılandırma
Mistral 7B ile Başlayalım
Mistral 7B, hız ve kalite dengesi açısından başlangıç için ideal.
# GGUF formatında model indir
cd /opt/localai/models
curl -L -o mistral-7b-instruct.gguf
"https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q4_K_M.gguf"
# Model konfigürasyon dosyası oluştur
cat > /opt/localai/models/mistral-7b.yaml << 'EOF'
name: mistral-7b
backend: llama
model: mistral-7b-instruct.gguf
context_size: 4096
threads: 4
f16: true
parameters:
temperature: 0.7
top_k: 40
top_p: 0.95
repeat_penalty: 1.1
template:
chat: |
[INST] {{.Input}} [/INST]
completion: |
{{.Input}}
EOF
Model Doğrulama
# API üzerinden modeli test et
curl -X POST http://localhost:8080/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "mistral-7b",
"messages": [
{
"role": "user",
"content": "Merhaba, kendini tanıtır mısın?"
}
],
"temperature": 0.7,
"max_tokens": 200
}'
Bu istek OpenAI API formatıyla birebir uyumlu. Yani mevcut OpenAI kullanan uygulamalarınızda sadece base URL değiştirmeniz yeterli.
Gerçek Dünya Senaryosu 1: Doküman Analizi
Bir hukuk firması veya finans şirketi düşünün. Yüzlerce sözleşme, NDA, yönetim kurulu kararı… Bunları analizetmek için normalde OpenAI’ye göndermek gerekiyor. KVKK açısından kabul edilemez.
LocalAI ile basit bir Python scripti yazalım:
#!/usr/bin/env python3
# dokuman_analiz.py - Hassas belgeler için yerel AI analizi
import openai
import sys
from pathlib import Path
# LocalAI endpoint'i kullan, OpenAI değil
client = openai.OpenAI(
api_key="localai", # herhangi bir string olabilir
base_url="http://localhost:8080/v1"
)
def belge_analiz(dosya_yolu: str, analiz_tipi: str = "ozet") -> str:
belge = Path(dosya_yolu).read_text(encoding="utf-8")
promptlar = {
"ozet": "Aşağıdaki belgeyi 3-5 madde halinde özetle. Hukuki terimleri koru:",
"risk": "Aşağıdaki sözleşmedeki potansiyel riskleri ve sorunlu maddeleri belirle:",
"action": "Aşağıdaki belgede belirtilen görevleri ve son tarihleri listele:"
}
prompt = promptlar.get(analiz_tipi, promptlar["ozet"])
yanit = client.chat.completions.create(
model="mistral-7b",
messages=[
{
"role": "system",
"content": "Sen bir hukuk belgesi analisti asistanısın. Türkçe yanıt ver."
},
{
"role": "user",
"content": f"{prompt}nn---n{belge[:6000]}"
}
],
temperature=0.3,
max_tokens=500
)
return yanit.choices[0].message.content
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Kullanım: python3 dokuman_analiz.py dosya.txt [ozet|risk|action]")
sys.exit(1)
dosya = sys.argv[1]
tip = sys.argv[2] if len(sys.argv) > 2 else "ozet"
print(belge_analiz(dosya, tip))
Çalıştırma:
python3 dokuman_analiz.py /path/to/sozlesme.txt risk
Hiçbir veri dışarı çıkmaz. Sözleşme metni sadece kendi sunucunuzda işlenir.
Gerçek Dünya Senaryosu 2: İç Destek Botu
IT departmanı için self-hosted bir yardım masası botu. Çalışanların şirket içi süreçleri, VPN bağlantısı, yazıcı sorunları gibi konularda sorularını yanıtlıyor.
# Nginx ile LocalAI'yi reverse proxy arkasına al
cat > /etc/nginx/sites-available/localai << 'EOF'
upstream localai_backend {
server 127.0.0.1:8080;
keepalive 32;
}
server {
listen 443 ssl;
server_name ai.sirketiniz.local;
ssl_certificate /etc/ssl/certs/sirket.crt;
ssl_certificate_key /etc/ssl/private/sirket.key;
# Sadece iç ağdan erişim
allow 10.0.0.0/8;
allow 192.168.0.0/16;
deny all;
location /v1/ {
proxy_pass http://localai_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
}
EOF
nginx -t && systemctl reload nginx
LocalAI Performans Optimizasyonu
Thread ve Memory Ayarları
# /etc/systemd/system/localai.service içinde Environment değişkenleri
# Mevcut CPU çekirdek sayısına göre ayarla
# 8 çekirdekli sunucu için
Environment=GOMAXPROCS=8
Environment=LOCALAI_THREADS=6
# RAM optimizasyonu için model konfigürasyonunda
# /opt/localai/models/mistral-7b.yaml dosyasına ekle:
# mmap: true # Modeli RAM yerine diskten oku, daha az RAM kullanır
# low_vram: true # GPU VRAM kısıtlı ise
# numa: true # NUMA mimarili sunucularda performans artışı
GPU Hızlandırma Kontrolü
# NVIDIA GPU ile çalışıyor mu kontrol et
curl http://localhost:8080/v1/models | python3 -m json.tool
# LocalAI loglarında GPU kullanımını gör
journalctl -u localai -f | grep -i "cuda|gpu|ggml"
# Anlık GPU bellek kullanımı
nvidia-smi --query-gpu=memory.used,memory.free,utilization.gpu
--format=csv -l 2
Güvenlik Sertleştirmesi
LocalAI’yi production’da çalıştırıyorsanız birkaç kritik adım var.
API Anahtarı Koruması:
LocalAI’de API key doğrulaması environment variable ile aktif edilir.
# Systemd servis dosyasına ekle
Environment=API_KEY=gizli-api-anahtariniz-buraya
# Artık her istekte Authorization header zorunlu
curl -X POST http://localhost:8080/v1/chat/completions
-H "Authorization: Bearer gizli-api-anahtariniz-buraya"
-H "Content-Type: application/json"
-d '{"model": "mistral-7b", "messages": [{"role": "user", "content": "test"}]}'
Rate Limiting ve Monitoring:
# Nginx üzerinde rate limiting
# /etc/nginx/sites-available/localai içinde location bloğuna ekle
limit_req_zone $binary_remote_addr zone=localai:10m rate=10r/m;
location /v1/ {
limit_req zone=localai burst=20 nodelay;
proxy_pass http://localai_backend;
}
Firewall Kuralları:
# LocalAI sadece iç ağa açık olsun
ufw deny 8080
ufw allow from 10.0.0.0/8 to any port 8080
ufw allow from 192.168.0.0/16 to any port 8080
OpenAI Uyumlu Uygulamalar ile Entegrasyon
Bu belki de LocalAI’nin en güçlü özelliği. Mevcut OpenAI entegrasyonunuz varsa, sadece base URL değiştiriyorsunuz.
n8n ile entegrasyon: n8n workflow automation aracında OpenAI node’u kullanıyorsanız, credentials bölümünde base URL’i http://localai-sunucunuz:8080/v1 olarak ayarlayın. Tüm workflowlar olduğu gibi çalışır.
Continue.dev ile VS Code:
# ~/.continue/config.json
{
"models": [
{
"title": "Şirket İçi AI",
"provider": "openai",
"model": "mistral-7b",
"apiBase": "http://localhost:8080/v1",
"apiKey": "localai"
}
]
}
Geliştiricileriniz artık kod tamamlama, refactoring önerileri için şirket içi modeli kullanır. Kod dışarı çıkmaz.
İzleme ve Log Yönetimi
# LocalAI log seviyesini ayarla
# Systemd servis dosyasında:
Environment=DEBUG=false
Environment=LOG_LEVEL=info
# Günlük kullanım istatistikleri
journalctl -u localai --since "24 hours ago" |
grep "request completed" |
awk '{print $NF}' |
sort | uniq -c | sort -rn | head -20
# Prometheus metrikleri (LocalAI /metrics endpoint sunar)
curl http://localhost:8080/metrics | grep -E "^localai_"
Logrotate konfigürasyonu:
cat > /etc/logrotate.d/localai << 'EOF'
/var/log/localai/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
systemctl kill -s HUP localai.service
endscript
}
EOF
Hangi Model, Hangi Kullanım?
Model seçimi önemli. Her iş için her model uygun değil.
- Mistral 7B: Genel amaçlı, hızlı, Türkçe desteği orta düzey, başlangıç için ideal
- LLaMA 3 8B: Daha iyi anlama kabiliyeti, biraz daha yavaş, karmaşık analizler için
- Phi-3 Mini: Çok düşük kaynak tüketimi, basit görevler, edge deployment için
- Mixtral 8x7B: Yüksek kalite ama 48GB VRAM ister, sadece güçlü sunucularda
- CodeLlama: Kod odaklı görevler, developer araçları için özelleşmiş
Türkçe içerik için özellikle dikkat: Çoğu model İngilizce ağırlıklı eğitilmiş. Türkçe performans için ya Türkçe fine-tune modeller arayın ya da sistem prompt’unda açıkça “Türkçe yanıt ver” yazın.
Backup ve Disaster Recovery
# Model ve konfigürasyonları yedekle
# Modeller büyük, bunları ayrı yedekle
rsync -avz --progress
/opt/localai/models/*.yaml
backup-sunucu:/opt/backup/localai/configs/
# Modellerin hash'lerini sakla, tekrar indirmek için
find /opt/localai/models -name "*.gguf"
-exec sha256sum {} ; > /opt/localai/model-checksums.txt
Sonuç
LocalAI’yi production’a almak düşündüğünüzden daha kolay. OpenAI API uyumluluğu sayesinde mevcut araçlarınızı büyük değişiklik yapmadan kullanmaya devam edersiniz. Veri gizliliği artık bir tercih değil, zorunluluk haline geliyor.
Başlangıç için önerim şu: Önce Docker ile bir test ortamı kurun, Mistral 7B’yi çalıştırın, mevcut bir uygulamanızda base URL değişikliği yaparak test edin. İşe yaradığını gördükten sonra bare metal kuruluma geçin ve systemd ile production’a alın.
Donanım yatırımı var, evet. Ama orta ölçekli bir şirket için aylık API maliyetleri hesaplandığında, iyi bir sunucu 6-12 ayda kendini amorti eder. Üstüne veri gizliliği ve kontrolü bedava geliyor.
Hassas veri işleyen her şirketin bu seçeneği ciddi bir şekilde değerlendirmesi gerekiyor.
