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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir