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=1environment variable’ını ayarla. Aynı anda birden fazla model bellekte tutulmasını engeller.
- Yavaş yanıt süreleri: GPU kullanımını doğrula,
nvidia-smiile GPU’nun gerçekten kullanıldığını gör. CPU ile çalışıyorsanOLLAMA_NUM_THREADdeğerini CPU çekirdeğine göre ayarla.
- API bağlantı hatası: Servisin çalıştığını
systemctl status ollamaile, port’un dinlendiğiniss -tlnp | grep 11434ile kontrol et.
- Türkçe karakter sorunu: API çağrılarında
Content-Type: application/json; charset=utf-8header’ını ekle ve JSON payload’ının UTF-8 encode edildiğinden emin ol.
- Model indirme takılıyor: Disk alanını
df -hile kontrol et. Modeller büyük olduğu için download sırasında yer biter./tmpdizinini 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.
