Ollama, Llama 3, Phi-3, Gemma 2 ve Mistral gibi büyük dil modellerini yerel makinenizde veya kendi sunucunuzda çalıştırmanızı sağlar. API key gerekmez, veri dışarı çıkmaz ve internet bağlantısı olmadan kullanılabilir.
Kurulum ve Model İndirme
# Windows/Mac/Linux: ollama.com/download
# Temel komutlar
ollama pull llama3.1 # Meta Llama 3.1 8B
ollama pull phi3 # Microsoft Phi-3 Mini (3.8B — hafif, hızlı)
ollama pull gemma2 # Google Gemma 2 9B
ollama pull nomic-embed-text # Embedding modeli
ollama list # indirilen modeller
ollama run llama3.1 # interaktif test
ollama serve # API sunucusunu başlat (varsayılan: localhost:11434)
.NET Entegrasyonu
// dotnet add package Microsoft.Extensions.AI.Ollama
using Microsoft.Extensions.AI;
// IChatClient — Microsoft.Extensions.AI soyutlaması
IChatClient chatClient = new OllamaChatClient(
new Uri("http://localhost:11434"),
"llama3.1");
var yanit = await chatClient.CompleteAsync("C# async/await nasıl çalışır?");
Console.WriteLine(yanit.Message.Text);
// Streaming
await foreach (var chunk in chatClient.CompleteStreamingAsync("Bana bir haiku yaz"))
Console.Write(chunk.Text);
// Embedding
IEmbeddingGenerator<string, Embedding<float>> embedder =
new OllamaEmbeddingGenerator(
new Uri("http://localhost:11434"),
"nomic-embed-text");
var vektor = await embedder.GenerateEmbeddingVectorAsync("Test metni");
Console.WriteLine($"Boyut: {vektor.Length}");
DI Kaydı
// Program.cs — geliştirme: Ollama, production: OpenAI/Azure
if (builder.Environment.IsDevelopment())
{
builder.Services.AddSingleton<IChatClient>(
new OllamaChatClient(new Uri("http://localhost:11434"), "llama3.1"));
}
else
{
builder.Services
.AddOpenAIClient(opts => opts.ApiKey = config["OpenAI:ApiKey"]!)
.AddChatClient("gpt-4o");
}
// Servislerde aynı arayüz
public class IcerikServisi(IChatClient chatClient)
{
public async Task<string> OzetleAsync(string metin) =>
(await chatClient.CompleteAsync($"Özetle: {metin}")).Message.Text ?? "";
Docker Compose ile Kurulum
# docker-compose.yml
services:
ollama:
image: ollama/ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu] # GPU varsa
webapi:
build: .
ports:
- "8080:8080"
environment:
- Ollama__BaseUrl=http://ollama:11434
- Ollama__Model=llama3.1
depends_on:
- ollama
volumes:
ollama_data:
Model Seçim Rehberi
// Model seçimi — VRAM ve kullanım senaryosuna göre
// phi3 (3.8B): 4GB RAM — basit görevler, hızlı yanıt
// llama3.1:8b (8B): 8GB RAM — genel amaç, Türkçe destek
// llama3.1:70b (70B): 48GB RAM — GPT-4 kalitesine yakın
// gemma2 (9B): 8GB RAM — kod görevleri
// nomic-embed-text: yalnızca embedding, 768 boyut
// ChatOptions ile parametreler
var secenekler = new ChatOptions
{
Temperature = 0.7f, // yaratıcılık (0=deterministik, 1=yaratıcı)
MaxOutputTokens = 2048
};
var yaraticiYanit = await chatClient.CompleteAsync(
"Kısa bir hikaye yaz", secenekler);
Performans İpuçları
// 1. Modeli önceden yükle — ilk istek gecikmesini önle
var isitmaSorusu = await chatClient.CompleteAsync("Merhaba");
// 2. Bağlam penceresini yönet — büyük bağlam = yavaş
var kısaGecmis = konusmaGecmisi.TakeLast(10).ToList();
// 3. Streaming kullan — kullanıcı hemen içerik görür
await foreach (var token in chatClient.CompleteStreamingAsync(soru))
Console.Write(token.Text);
Ollama, yapay zeka uygulamalarını veri gizliliği ve maliyet kontrolüyle geliştirmenin pratik yoludur. Microsoft.Extensions.AI soyutlaması sayesinde geliştirmede Ollama, production'da OpenAI veya Azure kullanmak tek satır DI değişikliği ile mümkündür.