Yerel Yapay Zeka Asistanınızı Oluşturun: Python, Flask ve Ollama ile Akıllı Sohbet Uygulaması

Hiç kendi bilgisayarınızda çalışan, internete ihtiyaç duymadan size cevap veren ve hatta sizin için güncel haberleri araştırabilen bir yapay zeka asistanınız olsun istemez misiniz? Ollama’nın gücü ve Python’ın esnekliği birleştiğinde, bu hayal gerçeğe dönüşüyor. Yerel Büyük Dil Modellerini (LLM) sadece bir terminal ekranına hapsetmek yerine, onları modern bir web arayüzüyle buluşturup gerçek dünyayla etkileşime geçirmek mümkün.

Sadece Bir Sohbet Robotu Değil, Bir “Yapay Zeka Ajanı”

Bu proje, standart bir sohbet arayüzünün ötesine geçerek bir Yapay Zeka Ajanı (AI Agent) mantığıyla çalışır. Çoğu LLM, eğitim verileriyle sınırlıdır ve güncel olaylar hakkında bilgi sahibi değildir. Ancak bu uygulamada kullandığımız “Araç Çağırma” (Tool Calling) yeteneği sayesinde model, kendi sınırlarını aşabiliyor.

Uygulamanın temel özellikleri şunlar:

  • Sınırları Aşan Bilgi: Tavily API entegrasyonu sayesinde model, bilmediği konularda internette arama yapabiliyor.
  • Anlık Veri Erişimi: CoinGecko API ile kripto para piyasalarını anlık olarak takip edebiliyor.
  • Gerçek Zamanlı Deneyim: Sunucu Taraflı Olaylar (SSE) kullanarak, yanıtların kelime kelime akmasını (streaming) sağlıyor; bu da kullanıcı deneyimini çok daha doğal hale getiriyor.
  • Tam Gizlilik: Model yerel sunucunuzda (Ollama) çalıştığı için verileriniz dışarıya çıkmıyor.

Kodun Anatomisi

Uygulamanın kalbi, ollama_helpers.py dosyasında yer alan ajan döngüsünde atıyor. Geleneksel LLM etkileşimleri “soru sor $\rightarrow$ cevap al” şeklinde ilerlerken, burada daha karmaşık bir süreç işliyor.

1. Araçların Tanımlanması

Modelin hangi araçları kullanabileceğini anlaması için ona bir “menü” sunuyoruz. TOOLS listesinde, her fonksiyonun adı, ne işe yaradığı ve hangi parametreleri aldığı (JSON şemasıyla) detaylandırılır.

2. Ajan Döngüsü (The Tool Loop)

chat_with_tools fonksiyonu, modelin yanıtını sürekli izleyen bir jeneratördür. Süreç şöyle işler:

  • Model bir yanıt üretir.
  • Eğer model yanıtın içinde bir tool_calls (araç çağrısı) isteği gönderirse, Python bunu yakalar.
  • İlgili fonksiyon (web_search veya get_crypto_price) çalıştırılır ve sonuçlar alınır.
  • Bu sonuçlar “ara bilgi” olarak tekrar modele gönderilir.
  • Model, bu bilgileri sentezleyerek kullanıcıya nihai, güncel ve doğru cevabı verir.

3. SSE ile Akışlı Yanıtlar

Kullanıcının modelin “düşünme” sürecini görmesi ve yanıtın anlık gelmesi için text/event-stream MIME tipi kullanılır. Bu sayede HTTP bağlantısı açık tutulur ve her yeni token üretildiğinde anında tarayıcıya iletilir.

# Ollama'dan gelen akışı SSE formatına dönüştüren basit bir yapı
def sse(data):
    """Bir sözlüğü SSE veri satırı olarak formatlar."""
    return "data: " + json.dumps(data) + "\n\n"

# chat_with_tools içinde tokenlar böyle akar:
if token:
    full_content += token
    yield sse({"token": token})

Nasıl Çalıştırılır?

Sistemi ayağa kaldırmak için şu adımları izleyin:

1. Altyapıyı Hazırlayın

Öncelikle Ollama‘yı indirin ve kurun. Ardından terminalden sunucuyu başlatın ve bir model indirin:

ollama serve
ollama pull llama3.2

2. Bağımlılıkları Yükleyin

Gerekli kütüphaneleri kurun:

pip install flask requests

3. API Anahtarlarını Yapılandırın

Kök dizinde bir .env dosyası oluşturun ve Tavily API anahtarınızı ekleyin:

TAVILY_API_KEY=your_api_key_here

4. Uygulamayı Başlatın

python ollama_chat_app.py

Ardından tarayıcınızdan http://localhost:8117 adresine gidin.

Ne Öğrendik?

Bu proje ile modern yapay zeka uygulamalarının temel taşlarını deneyimledik:

  • Yerel LLM Dağıtımı: Gizliliğin ön planda olduğu yerel modellerle çalışma.
  • Function Calling (Fonksiyon Çağırma): Statik bir modelle dinamik bir ajan arasındaki farkı gördük.
  • SSE (Server-Sent Events): Uzun süren YZ yanıtlarını kullanıcıya akıcı bir şekilde sunma tekniği.
  • API Orkestrasyonu: Farklı servisleri (Ollama, Tavily, CoinGecko) tek bir merkezde birleştirme.

Kaynaklar ve Sonraki Adımlar

Eğer bu yapıyı daha da geliştirmek isterseniz, şunları deneyebilirsiniz:

  • Bellek Yönetimi: Konuşma geçmişini yerel bir veritabanında (SQLite vb.) saklayarak kalıcı hafıza eklemek.
  • Yeni Araçlar: Kendi yerel dosyalarınızı okuyabilen veya e-posta gönderebilen yeni fonksiyonlar tanımlamak.
  • RAG Entegrasyonu: Yerel belgeleriniz üzerinden sorgulama yapabilen bir sistem (Retrieval Augmented Generation) kurmak.

Ahmet Aksoy

Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.

python, ollama, yapay zeka, flask, ai agents, yerel llm, programlama, tool calling, sse, web scraping, başlangıç seviyesi, orta seviye

Leave a Reply

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