Ollama Kullanarak Local'de AI Model Çalıştırma

Yapay zeka (AI) modellerini local bir makinede çalıştırmak, hem gizlilik hem de maliyet açısından pek çok avantaj sunar. Son zamanlarda, Ollama adlı araç sayesinde büyük dil modellerini (LLM) local olarak çalıştırmak oldukça kolaylaştı. Peki, C# geliştiricileri olarak bu gücü nasıl kullanabiliriz?

Bu yazıda, Ollama'nın ne olduğunu, nasıl kurulduğunu ve C# ile nasıl entegre edileceğini detaylı bir şekilde ele alacağız. Ayrıca, bir örnek proje üzerinden, C# ile Ollama API’sini nasıl kullanabileceğinizi göstereceğiz.

Ollama Nedir?

Ollama, açık kaynaklı büyük dil modellerini (LLaMA, Mistral, Gemma, Codellama vb.) local olarak çalıştırmak için kullanılan bir araçtır. LLM’leri bir docker konteyneri gibi kurup başlatmanıza, ardından HTTP API üzerinden sorgulamanıza imkân tanır.

Temel özellikleri:

  • Komut satırından model indirme ve başlatma

  • REST API ile kolay entegrasyon

  • LLM’leri GPU veya CPU üzerinde çalıştırabilme

  • Offline çalışma desteği

Kurulum

Ollama’yı kurmak oldukça basit. Resmi web sitesinden sisteminize uygun kurulum dosyasını indirip yükleyebilirsiniz.

Örneğin macOS veya Windows için:

# Windows veya macOS Terminal
ollama run llama2

Bu komut, llama2 modelini indirir ve çalıştırır. Ardından Ollama, varsayılan olarak http://localhost:11434 adresinden bir REST API sunar.


C# ile Ollama API’yi Kullanmak

Ollama, REST tabanlı bir API sunduğu için C# ile kolayca entegre edilebilir. HttpClient kullanarak modelleri sorgulayabilir, sonuçları işleyebilirsiniz.

API Örneği

Ollama’ya bir istek göndermek için aşağıdaki endpoint kullanılır:

POST http://localhost:11434/api/generate

Gönderilecek JSON:

{
  "model": "llama2",
  "prompt": "What is the capital of France?"
}

 

C# Kod Örneği

.NET Core konsol uygulamasıyla bu isteği gönderelim:

using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        var requestBody = new
        {
            model = "llama2",
            prompt = "What is the capital of France?"
        };

        var json = JsonSerializer.Serialize(requestBody);
        var content = new StringContent(json, Encoding.UTF8, "application/json");

        var response = await client.PostAsync("http://localhost:11434/api/generate", content);
        var responseString = await response.Content.ReadAsStringAsync();

        Console.WriteLine("Response:\n" + responseString);
    }
}

Bu kod, llama2 modelini çağırarak Paris cevabını içeren bir yanıt döndürecektir.

 

JSON Yanıtını İşlemek

Ollama, yanıtı streaming formatında döner. Yani, yanıt tek bir JSON değil; satır satır akan bir JSON dizisidir. Her satır şu yapıya benzer: 

{"response":"Paris","done":true}

Bu yüzden yanıtı satır satır işleyerek her bir parçayı birleştirmeniz gerekir.

C# ile örnek işleme:

using var reader = new StreamReader(await response.Content.ReadAsStreamAsync());

string? line;
while ((line = await reader.ReadLineAsync()) != null)
{
    var obj = JsonSerializer.Deserialize<JsonElement>(line);
    var token = obj.GetProperty("response").GetString();
    Console.Write(token);
}

Gelişmiş Kullanım: Fonksiyon Çağrıları ve Bellek

Ollama’nın bazı modelleri, fonksiyon çağrıları ve kontekst belleği gibi gelişmiş özellikleri destekler. Örneğin, önceki konuşmaları hatırlatarak daha doğal diyaloglar kurabilirsiniz.

Bunun için messages dizisi kullanılır:

{
  "model": "llama2",
  "messages": [
    {"role": "user", "content": "Merhaba, adın ne?"},
    {"role": "assistant", "content": "Ben bir yapay zeka modeliyim."},
    {"role": "user", "content": "Ne iş yaparsın?"}
  ]
}

Gerçek Hayat Uygulaması: Chatbot

Basit bir C# chatbot örneği yapmak mümkün. Kullanıcıdan metin alıp, Ollama’dan yanıt döndüren bir terminal uygulaması:

while (true)
{
    Console.Write("Kullanıcı: ");
    var prompt = Console.ReadLine();

    var requestBody = new
    {
        model = "llama2",
        prompt = prompt
    };

    var json = JsonSerializer.Serialize(requestBody);
    var content = new StringContent(json, Encoding.UTF8, "application/json");

    var response = await client.PostAsync("http://localhost:11434/api/generate", content);
    var responseString = await response.Content.ReadAsStringAsync();

    Console.WriteLine("Ollama: " + responseString);
}

Bu yapı, basit bir terminal chatbot'un temellerini atar. Geliştirerek GUI, sesli giriş/çıkış ya da web arayüzü ekleyebilirsiniz.

Performans ve Optimizasyon

Cihazınızda bir GPU varsa, Ollama modellerini GPU üzerinde çalıştırarak ciddi performans kazancı elde edebilirsiniz. Ancak CPU ile çalışmak da mümkündür — sadece biraz daha yavaş olabilir.

Ayrıca, daha hafif modeller (örneğin Mistral veya TinyLLaMA) düşük donanımlı cihazlarda bile oldukça iyi çalışır.

Sonuç

Ollama, büyük dil modellerini local olarak çalıştırmak için mükemmel bir çözümdür. C# geliştiricileri, basit HTTP istekleriyle bu gücü uygulamalarına entegre edebilir. İster bir terminal chatbot’u ister bir masaüstü uygulama geliştirin, local LLM'ler sayesinde veri gizliliği ve düşük gecikme gibi avantajlardan faydalanabilirsiniz.

Bu yazıda, Ollama'nın ne olduğunu, nasıl kurulacağını ve C# ile nasıl kullanılacağını adım adım gösterdik. Bir sonraki adımda, bu sistemi bir web API ile entegre edip, externall'lara hizmet veren bir mikroservise dönüştürmeyi düşünebilirsiniz. 

 

Add comment