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
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
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.
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