Ollama ile Türkçe Dil Modeli Kullanımı

Yerel yapay zeka modellerini kendi sunucunda çalıştırmak artık hayal değil. Ollama bu işi inanılmaz derecede kolaylaştırıyor ve Türkçe dil modelleriyle birleşince gerçekten kullanışlı bir araç seti ortaya çıkıyor. Bu yazıda Ollama kurulumundan başlayıp Türkçe destekli modelleri production ortamında nasıl kullanacağını, API entegrasyonlarını ve pratik otomasyon senaryolarını ele alacağız.

Ollama Nedir ve Neden Önemli?

Ollama, büyük dil modellerini (LLM) yerel makinende veya sunucunda çalıştırmana olanak tanıyan açık kaynaklı bir araç. Docker’ın container yönetimini ne kadar kolaylaştırdığını düşün, Ollama da LLM yönetimini aynı şekilde soyutluyor. ollama pull, ollama run, ollama list gibi komutlarla modelleri dakikalar içinde indirip çalıştırabiliyorsun.

Türkçe dil modelleri için bu özellikle kritik. OpenAI veya Anthropic’in API’larını kullanmak veri gizliliği açısından sorunlu olabiliyor, özellikle kurumsal ortamlarda müşteri verilerini veya iç dokümanları işlerken. Kendi sunucunda çalışan bir model, hem maliyet hem de gizlilik açısından büyük avantaj sağlıyor.

Sistem Gereksinimleri ve Kurulum

Ollama’yı çalıştırmak için minimum gereksinimlere bakalım:

  • RAM: Minimum 8GB, 7B modeller için 8-16GB, 13B modeller için 16-32GB
  • Depolama: Modeller büyük oluyor, 7B model yaklaşık 4-5GB yer kaplıyor
  • GPU: NVIDIA CUDA veya Apple Silicon için opsiyonel ama performansı ciddi artırıyor
  • İşletim Sistemi: Linux, macOS ve Windows destekleniyor

Linux’a kurulum için resmi script’i kullanmak en pratik yol:

# Resmi kurulum scripti
curl -fsSL https://ollama.com/install.sh | sh

# Kurulumu doğrula
ollama --version

# Servis durumunu kontrol et
systemctl status ollama

Eğer script’e güvenmiyorsan (ki güvenlik bilinçli bir sysadmin olarak normal) manuel kurulum yapabilirsin:

# Binary'yi manuel indir
curl -L https://ollama.com/download/ollama-linux-amd64 -o ollama
chmod +x ollama
sudo mv ollama /usr/local/bin/

# Systemd servis dosyası oluştur
sudo tee /etc/systemd/system/ollama.service > /dev/null <<EOF
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"

[Install]
WantedBy=default.target
EOF

# Kullanıcı oluştur ve servisi başlat
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama
sudo systemctl daemon-reload
sudo systemctl enable --now ollama

Türkçe Destekli Modeller

Ollama’nın model kütüphanesinde Türkçe destekli birkaç model var. Bunları test edip karşılaştıralım:

# Türkçe için önerilen modelleri indir
# Llama3 oldukça iyi Türkçe anlıyor
ollama pull llama3.1:8b

# Mistral da iyi bir seçenek
ollama pull mistral:7b

# Phi-3 Microsoft'un hafif ama yetenekli modeli
ollama pull phi3:medium

# Gemma2 Google'ın açık modeli
ollama pull gemma2:9b

# Mevcut modelleri listele
ollama list

Modeli indirdikten sonra hemen test edebilirsin:

# Doğrudan Türkçe ile konuş
ollama run llama3.1:8b "Merhaba! Bana kısaca Linux dosya sistemi hiyerarşisini açıklar mısın?"

# Veya interaktif modda başlat
ollama run llama3.1:8b

Modelfile ile Özel Türkçe Asistan Oluşturma

Ollama’nın en güçlü özelliklerinden biri Modelfile sistemi. Bu sayede sistem promptu tanımlayıp Türkçe odaklı özel bir asistan oluşturabilirsin:

# Modelfile oluştur
cat > /opt/ollama/Modelfile.turkish-sysadmin << 'EOF'
FROM llama3.1:8b

# Türkçe sistem yöneticisi asistanı
SYSTEM """
Sen deneyimli bir Linux sistem yöneticisisin. Kullanıcılarla her zaman Türkçe konuşursun.
Teknik soruları net, anlaşılır ve pratik şekilde yanıtlarsın.
Komut örnekleri verirken mutlaka açıklama eklersin.
Güvenlik konusunda hassassın ve her zaman en iyi pratikleri önerirsin.
Yanıtlarını maddeler halinde organize edersin.
"""

PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 4096

TEMPLATE """{{ if .System }}<|system|>
{{ .System }}<|end|>
{{ end }}{{ if .Prompt }}<|user|>
{{ .Prompt }}<|end|>
<|assistant|>
{{ end }}{{ .Response }}<|end|>
"""
EOF

# Özel modeli oluştur
ollama create turkish-sysadmin -f /opt/ollama/Modelfile.turkish-sysadmin

# Test et
ollama run turkish-sysadmin "nginx'in 502 Bad Gateway hatası nasıl debug edilir?"

REST API Kullanımı

Ollama varsayılan olarak http://localhost:11434 adresinde bir REST API sunuyor. Bu API sayesinde uygulamalarına entegre edebilir, script’lerden çağırabilirsin:

# Basit bir istek at
curl -s http://localhost:11434/api/generate 
  -H "Content-Type: application/json" 
  -d '{
    "model": "llama3.1:8b",
    "prompt": "Linux'ta disk kullanımını kontrol etmek için hangi komutları kullanırsın?",
    "stream": false
  }' | jq '.response'

# Chat formatında istek
curl -s http://localhost:11434/api/chat 
  -H "Content-Type: application/json" 
  -d '{
    "model": "llama3.1:8b",
    "messages": [
      {
        "role": "system",
        "content": "Sen bir Linux sistem yöneticisi asistanısın ve Türkçe yanıt veriyorsun."
      },
      {
        "role": "user",
        "content": "Sunucumda memory leak var gibi görünüyor. Nasıl araştırmalıyım?"
      }
    ],
    "stream": false
  }' | jq '.message.content'

Pratik Senaryo: Log Analizi Otomasyonu

İşte gerçek dünyadan bir senaryo. Sunucu loglarını otomatik olarak Ollama’ya göndererek Türkçe analiz raporu oluşturan bir script yazalım:

#!/bin/bash
# /usr/local/bin/log-analyzer.sh

OLLAMA_URL="http://localhost:11434/api/generate"
MODEL="turkish-sysadmin"
LOG_FILE="/var/log/nginx/error.log"
REPORT_DIR="/var/reports/log-analysis"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p "$REPORT_DIR"

# Son 100 satır logu al ve temizle
LOG_CONTENT=$(tail -100 "$LOG_FILE" | grep -v "^$" | head -50)

# Prompt hazırla
PROMPT="Aşağıdaki Nginx error log kayıtlarını analiz et ve Türkçe olarak şunları söyle:
1. En kritik hatalar neler?
2. Hangi IP adresleri sorun çıkarıyor?
3. Acil müdahale gerektiren bir durum var mı?
4. Önerilen çözümler neler?

LOG KAYITLARI:
$LOG_CONTENT"

# JSON payload oluştur
PAYLOAD=$(jq -n 
  --arg model "$MODEL" 
  --arg prompt "$PROMPT" 
  '{model: $model, prompt: $prompt, stream: false}')

# Ollama'ya gönder ve raporu kaydet
echo "Log analizi yapılıyor..."
RESPONSE=$(curl -s -X POST "$OLLAMA_URL" 
  -H "Content-Type: application/json" 
  -d "$PAYLOAD")

ANALYSIS=$(echo "$RESPONSE" | jq -r '.response')

# Rapor dosyasına yaz
cat > "$REPORT_DIR/analysis_$DATE.txt" << EOF
LOG ANALİZ RAPORU
Tarih: $(date)
Kaynak: $LOG_FILE
==========================================

$ANALYSIS
==========================================
EOF

echo "Rapor oluşturuldu: $REPORT_DIR/analysis_$DATE.txt"

# Eğer kritik hata varsa bildirim gönder
if echo "$ANALYSIS" | grep -qi "kritik|acil|tehlike"; then
  echo "KRİTİK HATA TESPİT EDİLDİ - Sistem yöneticisi bilgilendirildi"
  # Buraya mail veya Slack bildirimi eklenebilir
  mail -s "Kritik Log Uyarısı - $(hostname)" [email protected] < "$REPORT_DIR/analysis_$DATE.txt"
fi

Ollama’yı Ağda Açmak ve Güvence Altına Almak

Birden fazla sunucunun tek bir Ollama instance’ına erişmesi gerekiyorsa, servisi ağda açman gerekiyor. Ama bunu yaparken güvenliği ihmal etme:

# Ollama'yı tüm arayüzlerde dinle
# /etc/systemd/system/ollama.service.d/override.conf oluştur
sudo mkdir -p /etc/systemd/system/ollama.service.d/
sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
EOF

sudo systemctl daemon-reload
sudo systemctl restart ollama

# Nginx reverse proxy ile güvence altına al
# /etc/nginx/sites-available/ollama
sudo tee /etc/nginx/sites-available/ollama << 'EOF'
upstream ollama_backend {
    server 127.0.0.1:11434;
}

server {
    listen 443 ssl;
    server_name ai.sirket.com;

    ssl_certificate /etc/ssl/certs/ai.sirket.com.crt;
    ssl_certificate_key /etc/ssl/private/ai.sirket.com.key;

    # IP tabanlı erişim kontrolü
    allow 10.0.0.0/8;
    allow 172.16.0.0/12;
    deny all;

    location / {
        proxy_pass http://ollama_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;
    }
}
EOF

sudo ln -s /etc/nginx/sites-available/ollama /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

GPU Desteği ile Performans Artırma

NVIDIA GPU’n varsa performansı dramatik biçimde artırabilirsin:

# NVIDIA Container Toolkit kurulu olduğundan emin ol
nvidia-smi

# GPU bellek kullanımını izle
watch -n 2 nvidia-smi

# Ollama GPU kullanımını doğrula
ollama run llama3.1:8b "Merhaba" &
sleep 5
nvidia-smi | grep -E "GPU|MiB"

# GPU katman sayısını ayarla (tüm modeli GPU'ya yükle)
# Modelfile'da veya environment variable olarak
export OLLAMA_NUM_GPU=99

# Birden fazla GPU varsa
export CUDA_VISIBLE_DEVICES=0,1

Python ile Türkçe NLP Pipeline Oluşturma

Ollama’nın Python kütüphanesi ile daha karmaşık işlemler yapabilirsin:

#!/usr/bin/env python3
# /opt/scripts/turkish_nlp_pipeline.py

import ollama
import json
import sys
from datetime import datetime

def analyze_turkish_text(text: str, task: str = "genel") -> dict:
    """Türkçe metin analizi yap"""
    
    task_prompts = {
        "ozet": f"Aşağıdaki metni 3-5 cümleyle özetle:nn{text}",
        "duygu": f"Aşağıdaki metnin duygusal tonunu analiz et (olumlu/olumsuz/nötr) ve gerekçeni açıkla:nn{text}",
        "anahtar": f"Aşağıdaki metinden en önemli 5 anahtar kelimeyi çıkar:nn{text}",
        "genel": f"Aşağıdaki metni analiz et:nn{text}"
    }
    
    prompt = task_prompts.get(task, task_prompts["genel"])
    
    response = ollama.chat(
        model="llama3.1:8b",
        messages=[
            {
                "role": "system",
                "content": "Sen Türkçe doğal dil işleme konusunda uzman bir yapay zeka asistanısın. Her zaman Türkçe yanıt verirsin."
            },
            {
                "role": "user",
                "content": prompt
            }
        ]
    )
    
    return {
        "task": task,
        "timestamp": datetime.now().isoformat(),
        "input_length": len(text),
        "result": response['message']['content']
    }

def batch_process(texts: list, task: str) -> list:
    """Toplu metin işleme"""
    results = []
    for i, text in enumerate(texts):
        print(f"İşleniyor: {i+1}/{len(texts)}", file=sys.stderr)
        result = analyze_turkish_text(text, task)
        results.append(result)
    return results

if __name__ == "__main__":
    # Örnek kullanım
    test_metinler = [
        "Bugün sunucularımızda ciddi bir performans sorunu yaşadık. Disk I/O değerleri normalin çok üzerindeydi.",
        "Yeni güvenlik yamalarını başarıyla uyguladık ve tüm sistemler stabil çalışıyor.",
    ]
    
    print("Türkçe Metin Analizi Başlıyor...")
    sonuclar = batch_process(test_metinler, "duygu")
    
    for sonuc in sonuclar:
        print(f"n{'='*50}")
        print(f"Görev: {sonuc['task']}")
        print(f"Sonuç:n{sonuc['result']}")
        print('='*50)

Model Performansını İzleme ve Optimizasyon

Production ortamında model performansını takip etmek kritik:

#!/bin/bash
# /usr/local/bin/ollama-monitor.sh
# Ollama servis ve model performans izleme

check_ollama_health() {
    HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:11434/api/tags)
    if [ "$HTTP_CODE" -eq 200 ]; then
        echo "[OK] Ollama servisi çalışıyor"
        return 0
    else
        echo "[HATA] Ollama servisi yanıt vermiyor!"
        systemctl restart ollama
        return 1
    fi
}

check_model_response_time() {
    local MODEL=$1
    local START_TIME=$(date +%s%N)
    
    curl -s http://localhost:11434/api/generate 
      -H "Content-Type: application/json" 
      -d "{"model": "$MODEL", "prompt": "Merhaba", "stream": false}" 
      -o /dev/null
    
    local END_TIME=$(date +%s%N)
    local ELAPSED=$(( (END_TIME - START_TIME) / 1000000 ))
    
    echo "[PERFORMANS] $MODEL yanıt süresi: ${ELAPSED}ms"
    
    if [ "$ELAPSED" -gt 30000 ]; then
        echo "[UYARI] Yanıt süresi 30 saniyeyi aştı!"
    fi
}

check_disk_usage() {
    local MODEL_DIR="/usr/share/ollama/.ollama/models"
    local USAGE=$(du -sh "$MODEL_DIR" 2>/dev/null | cut -f1)
    echo "[DEPOLAMA] Model dizini kullanımı: $USAGE"
    
    local AVAILABLE=$(df -h "$MODEL_DIR" | awk 'NR==2 {print $4}')
    echo "[DEPOLAMA] Kullanılabilir alan: $AVAILABLE"
}

# Ana izleme döngüsü
echo "=== Ollama Sistem Raporu - $(date) ==="
check_ollama_health
check_model_response_time "llama3.1:8b"
check_disk_usage

# Çalışan modelleri listele
echo -e "n[MODELLER] Mevcut modeller:"
ollama list | awk 'NR>1 {print "  -", $1, "("$3$4")"}'

Bu script’i cron’a ekleyerek düzenli raporlama yapabilirsin:

# Her 5 dakikada bir çalıştır
echo "*/5 * * * * root /usr/local/bin/ollama-monitor.sh >> /var/log/ollama-monitor.log 2>&1" 
  | sudo tee /etc/cron.d/ollama-monitor

Yaygın Sorunlar ve Çözümleri

Ollama kullanırken karşılaşacağın tipik sorunlar:

  • Model yüklenmiyor: /usr/share/ollama/.ollama/ dizininin yazma iznine sahip olduğunu kontrol et. ls -la /usr/share/ollama/ komutuyla kontrol edebilirsin.
  • Out of Memory hatası: Daha küçük model kullan veya OLLAMA_MAX_LOADED_MODELS=1 environment variable’ını ayarla. Aynı anda birden fazla model bellekte tutulmasını engeller.
  • Yavaş yanıt süreleri: GPU kullanımını doğrula, nvidia-smi ile GPU’nun gerçekten kullanıldığını gör. CPU ile çalışıyorsan OLLAMA_NUM_THREAD değerini CPU çekirdeğine göre ayarla.
  • API bağlantı hatası: Servisin çalıştığını systemctl status ollama ile, port’un dinlendiğini ss -tlnp | grep 11434 ile kontrol et.
  • Türkçe karakter sorunu: API çağrılarında Content-Type: application/json; charset=utf-8 header’ını ekle ve JSON payload’ının UTF-8 encode edildiğinden emin ol.
  • Model indirme takılıyor: Disk alanını df -h ile kontrol et. Modeller büyük olduğu için download sırasında yer biter. /tmp dizinini de kontrol et.

Sonuç

Ollama ile Türkçe dil modeli çalıştırmak artık gerçekten olgun bir teknoloji haline geldi. Birkaç yıl önce bu kadar büyük modelleri yerel olarak çalıştırmak hayal bile edilemezdi, şimdi ise bir curl komutuyla kurulup dakikalar içinde Türkçe sorulara yanıt veriyor.

Production’da kullanırken dikkat etmen gereken birkaç nokta var: Model seçimini gerçek workload’a göre yap, küçük başla ve ihtiyaç arttıkça büyü. GPU yatırımı bu iş için gerçekten mantıklı, A100 satın alamasan bile ikinci el Quadro kartları bile ciddi fark yaratıyor. Güvenlik tarafını asla ihmal etme, Nginx reverse proxy ve IP kısıtlaması minimum gereksinim olmalı.

Türkçe NLP için en iyi sonuçları sistem promptunu iyi yazarak alıyorsun. Modele ne yapmasını istediğini, hangi dili kullanmasını istediğini ve hangi formatta yanıt vermesini beklediğini açıkça söyle. Bu basit ama etkili bir pratik.

Log analizi, dokümantasyon oluşturma, iç destek chatbotu, kod review otomasyonu gibi sysadmin iş akışlarına entegre ettiğinde Ollama gerçek değerini gösteriyor. Denemek için en iyi zaman şimdi.

Bir yanıt yazın

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