Ollama, Llama, LangChain ve Docker ile Lokal ChatGPT

Günümüzde yapay zeka modelleri ve dil tabanlı uygulamalar, hem bireysel kullanıcılar hem de işletmeler için devrim niteliğinde fırsatlar sunuyor. Ancak, bu güçlü araçları kullanırken veri gizliliği ve maliyet gibi önemli zorluklarla karşılaşabiliyoruz. İşte tam bu noktada, Ollama, Llama ve LangChain gibi açık kaynaklı çözümler devreye giriyor. Bu blog yazısında, Docker ile kolayca kurup çalıştırabileceğiniz bir lokal ChatGPT çözümünü adım adım inceleyeceğiz. Kendi donanımınızda Llama modelini nasıl çalıştıracağınızı, Ollama’nın avantajlarını ve LangChain ile bu modeli nasıl özelleştirip güçlendirebileceğinizi öğreneceksiniz. Yazının sonunda token harcamadan verimizi dışarı göndermeden kendi lokal llm’mimizden portakal rengindeki akvaryum balığımıza üç adet isim önerisi alacağız.

Öncelikle docker-compose ile ollama ve open-webui konteynerlarını ayağa kaldıracağız.

docker-compose ile ollama ve open-webui’ı ayağa kaldıralım. docker-compose.yaml dosyasındaki ollama ve open-webui konteynerleri, yerel bir yapay zeka model sunucusu ve bir web kullanıcı arayüzü sunmak için.

services:
  ollama:
    volumes:
      - ollama:/root/.ollama
    container_name: ollama
    ports:
      - 11434:11434
    pull_policy: always
    tty: true
    restart: unless-stopped
    image: ollama/ollama:0.4.2

  open-webui:
    image: ghcr.io/open-webui/open-webui:git-fe19f12
    container_name: open-webui
    volumes:
      - open-webui:/app/backend/data
    depends_on:
      - ollama
    ports:
      - 3000:8080
    environment:
      - 'OLLAMA_BASE_URL=http://ollama:11434'
      - 'OLLAMA_HOST=ollama:11434'
      - 'WEBUI_SECRET_KEY='
    extra_hosts:
      - host.docker.internal:host-gateway
    restart: unless-stopped

volumes:
  ollama: {}
  open-webui: {}

Ollama, yerel olarak çalışan bir yapay zeka model sunucusudur. Bu servis, istemcilerden gelen istekleri (örneğin, bir dil modeli ile etkileşim) işler ve yanıt döner. Bu, özellikle yapay zeka uygulamalarınızı bulut yerine kendi altyapınızda çalıştırmak istediğinizde faydalıdır.  open-webui, Ollama gibi bir yapay zeka model sunucusuyla etkileşim kurmanıza olanak tanıyan bir web tabanlı kullanıcı arayüzüdür. Kullanıcılar, tarayıcıları üzerinden yapay zeka modelleriyle etkileşim kurabilir, sorgular gönderebilir ve sonuçları görüntüleyebilir.

Up docker-compose Up:

docker-compose up -d

Download Llama 3.2

docker exec -it ollama ollama run llama3.2

Ollama sunucusu üzerinden bir çok modeli indirebilir ve kullanabiliriz. Bu örneğimizde popüler bir tane olan llama’yı kullanıyoruz.

ollama shell’den çıkmak için >>> /bye

Ollama Web-UI

Bu http://localhost:3000 adresi tarayıcınıza girin. Open-webui karşınıza gelecektir.
Kayıt (Sign-up) olun. Doğrulama falan istemeyecektir. Aynı kullanıcı ile oturum açın (login).
Şekil-1: ollama web ui sign-up

Select Model

Yukarıda ollama komutlarıyla llama’yı indirdiğimiz için karşımıza model olarak llama3.2 geldi. Başka modeller indirmiş olsaydık onlar da gelecekti. Dilerseniz open-webui üzerinden de bu indirmeleri yapabilirsiniz. Sol alt köşede kullanıcıya tıklayında Settings -> Models

Şekil-2: Selecting Model from ollama Web UI

Promt’a Hi yazın ve cevabı bekleyin. Merak etmeyin cevap biraz geç gelecektir. Bu sizin alıştığınız Milyar dolarlık ChatGPT değil 🙂 Ucuz etin yahnisini yiyoruz.

Şimdi python diliyle kullanalım. Burada langchain devreye giriyor.

LangChain, yapay zeka (AI) ve büyük dil modelleri (LLM’ler) ile çalışan uygulamalar geliştirmek için kullanılan bir framework’dür. Bu araç, dil modellerini daha işlevsel hale getirerek kullanıcıların karmaşık yapay zeka uygulamaları oluşturmasını kolaylaştırır.

Python Virtual Environment

conda create -n langchain python==3.12

conda activate langchain

Gerekli python paketlerini kurma

python -m pip install langchain-ollama langchain_community

ChatOllama ile balık isimleri önerisi alma

from langchain_ollama import ChatOllama

def generate_pet_name():
    llm = ChatOllama(model="llama3.2",
                 base_url="http://localhost:11434")
    name = llm.invoke("I have a aquarium fish orange color and I want a cool name for it. I need three cool names. ")
    return name

if __name__ == "__main__":
    print(generate_pet_name())

Run main.py

python main.py
  • Output
content="That sounds like a fun task! Based on the vibrant orange color of your aquarium fish, here are three cool name suggestions:\n\n1. **Tangerine**: This name is inspired by the citrus fruit that's known for its bright orange hue. It's a unique and catchy name that suits a bold and energetic fish.\n2. **Garuda**: In Hindu mythology, Garuda is a mythical bird with vibrant orange feathers. This name would be perfect for a fish that stands out in its tank with its striking coloration.\n3. **Pumpkin Spice**: This name is inspired by the popular fall flavor, but also references the warm, golden tones of your fish's orange color. It's a playful and whimsical name that's sure to bring a smile to your face.\n\nI hope one of these names catches your eye (or should I say, scales)!" additional_kwargs={} response_metadata={'model': 'llama3.2', 'created_at': '2024-12-29T18:17:27.188396614Z', 'done': True, 'done_reason': 'stop', 'total_duration': 62256226645, 'load_duration': 155994570, 'prompt_eval_count': 47, 'prompt_eval_duration': 6564000000, 'eval_count': 175, 'eval_duration': 55534000000, 'message': Message(role='assistant', content='', images=None, tool_calls=None)} id='run-dbc1027b-d706-4067-8ff2-508d5fe6de86-0' usage_metadata={'input_tokens': 47, 'output_tokens': 175, 'total_tokens': 222}

Token harcamadan verimizi dışarı göndermeden kendi lokal llm’mimizden akvaryum balığına isim önerisi almayı başardık.

Başka bir yazıda görüşünceye dek Prompting Full Throttle 🙂

Kapak görseli: Photo by Florian van Duyn on Unsplash

Yazar Hakkında
Toplam 181 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

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

×

Bir Şeyler Ara