Streamlit Nasıl Çalışır?
Streamlit'in çalışma prensibi üç adıma dayanır. İlk adımda normal bir Python betiğine widget komutları eklenir: başlık, grafik, buton, kaydırıcı veya dosya yükleyici gibi bileşenlerin her biri tek satır Python kodudur. İkinci adımda terminalde `streamlit run app.py` çalıştırılır; Streamlit yerel bir Tornado tabanlı web sunucusu açar ve uygulamayı tarayıcıda 8501 portunda gösterir. Üçüncü adım reaktif çalışma modelidir: kullanıcı bir slider'ı hareket ettirdiğinde ya da butona tıkladığında betik baştan sona yeniden çalışır ve arayüz anlık güncellenir. Bu yaklaşım callback fonksiyonu veya olay dinleyicisi yazma zorunluluğunu tamamen kaldırır. Kod dosyası kaydedildiğinde uygulama otomatik yenilendiği için düzenle-gör döngüsü saniyeler düzeyine iner. Yeniden çalıştırma modelinin maliyetini dengelemek için `st.cache_data` (veri sonuçları) ve `st.cache_resource` (model ve bağlantı nesneleri) dekoratörleri kullanılır; `st.fragment` ile sayfanın yalnızca ilgili parçası, `st.session_state` ile de oturum boyunca korunması gereken değişkenler yönetilir.
Temel Bileşenler ve Özellikler
bar-chart Veri Görselleştirme
Matplotlib, Plotly, Altair, Bokeh ve Vega-Lite entegrasyonuyla tek satırda grafik; Pandas DataFrame'leri otomatik olarak sıralanabilir, filtrelenebilir tabloya dönüşür.
sliders Etkileşimli Widget'lar
Slider, buton, çok seçimli liste, dosya yükleyici, kamera girişi ve `st.data_editor` dahil 30'dan fazla hazır bileşen; hepsi tek fonksiyon çağrısıyla eklenir.
message-circle Sohbet (Chat) API'si
`st.chat_message()` ve `st.chat_input()` ile LLM sohbet arayüzü; `st.write_stream()` token token akan yanıtları ChatGPT benzeri biçimde gösterir.
database Session State ve Önbellek
`st.session_state` oturum boyunca değişken saklar; `st.cache_data` ve `st.cache_resource` pahalı sorgu ve model yüklemelerini tekrar tekrar çalıştırmaktan kurtarır.
cloud Community Cloud
GitHub reposundaki uygulamayı ücretsiz buluta dağıtır; URL paylaşımıyla anında erişim. Kurumsal tarafta Streamlit in Snowflake ile veri ambarı içinde yayın yapılır.
layout Çok Sayfalı Uygulama
`pages/` klasörü veya `st.navigation()` + `st.Page()` API'siyle çok sayfalı yapı; kenar çubuğu navigasyonu otomatik oluşur.
Yapay Zeka Projelerinde Kullanım Alanları
- check_circle LLM Sohbet Arayüzleri: OpenAI, Anthropic Claude veya LangChain üzerine kurulu chatbot ve soru-cevap uygulamaları; chat bileşenleriyle 30-40 satırda çalışan arayüz.
- check_circle RAG ve Belge Arama Uygulamaları: Chroma, Pinecone veya pgvector gibi vektör veritabanlarıyla entegre belge yükleme, semantik arama ve kaynak gösterimli cevap arayüzleri.
- check_circle Model Demo Uygulamaları: Görüntü sınıflandırma, nesne tespiti ve duygu analizi modellerinin paydaşlara sunulan etkileşimli demoları; dosya yükleyici ile canlı test.
- check_circle Veri Keşif ve Analiz Panelleri: Veri kümesini yükle, filtrele, görselleştir; keşifsel veri analizi (EDA) iş akışını Jupyter'den paylaşılabilir bir uygulamaya taşır.
- check_circle Model İzleme Panoları: Doğruluk, F1 skoru, kayıp eğrisi ve veri kayması metriklerinin canlı takibi; MLOps hattına hafif bir izleme arayüzü ekler.
- check_circle Ajan (Agent) Prototipleri: LangGraph veya CrewAI ile kurulan çok adımlı ajanların ara adımlarını `st.status` ve `st.expander` ile görünür kılan test arayüzleri.
Streamlit ve Alternatifleri: Gradio, Dash, NiceGUI
Streamlit'in en yakın rakipleri Gradio, Dash ve NiceGUI'dir. Gradio, tek bir ML modeli için hızlı demo kurmada daha minimal bir API sunar ve Hugging Face Spaces ile doğal entegrasyona sahiptir; model kartı demolarında ilk tercih genellikle odur. Streamlit ise çok sayfalı uygulama, veri panosu ve karmaşık iş akışlarında belirgin biçimde güçlüdür. Dash (Plotly), yalnızca tetiklenen callback'leri çalıştıran mimarisiyle yüksek trafikte daha verimlidir ve kurumsal üretim panolarında yaygındır; karşılığında geliştirme hızı ve öğrenme eğrisi Streamlit'in gerisindedir. NiceGUI, Vue tabanlı bileşenleriyle daha esnek yerleşim isteyenlere hitap eder ama ekosistemi küçüktür. Flask ve FastAPI tam kontrol sunar fakat ön yüz için HTML/CSS/JavaScript gerektirir. Pratik ayrım şudur: tekil model demosu için Gradio, veri uygulaması ve LLM prototipi için Streamlit, ölçekli üretim panosu için Dash veya özel React ön yüzü mantıklı seçimdir.
Performans, Ölçekleme ve Üretim Kullanımı
Streamlit'in her etkileşimde betiği yeniden çalıştıran modeli, yüksek eşzamanlı kullanıcı sayısında darboğaza dönüşebilir; tek bir Streamlit süreci pratikte onlarca eşzamanlı kullanıcıyı rahat taşır, binlerce kullanıcı için yatay ölçekleme gerekir. Doğru desenlerle bu sınır büyük ölçüde yönetilebilir: pahalı veri sorguları `st.cache_data`, model ve veritabanı bağlantıları `st.cache_resource` ile önbelleğe alınır; sık güncellenen bölümler `st.fragment` ile sayfanın kalanından ayrılır. Dağıtım seçenekleri geniştir: ücretsiz Streamlit Community Cloud, Docker imajıyla Kubernetes veya herhangi bir VPS, Hugging Face Spaces ve kurumsal veri tarafında Streamlit in Snowflake. Ters proxy (Nginx) arkasında birden çok replika çalıştırıp yapışkan oturum (sticky session) kullanmak yaygın üretim desenidir. Kimlik doğrulama için 1.42 ile gelen yerleşik `st.login()` OpenID Connect (Google, Microsoft Entra, Okta) akışını destekler; bu, iç araçlarda ayrı auth katmanı kurma ihtiyacını azaltır.
Örnek: 25 Satırda LLM Chatbot
Streamlit'in çekiciliğini en iyi somut bir örnek gösterir. Aşağıdaki iskelet, akan yanıtlı bir sohbet uygulamasının tamamıdır: ```python import streamlit as st from openai import OpenAI st.title("Şirket İçi Asistan") client = OpenAI() if "messages" not in st.session_state: st.session_state.messages = [] for m in st.session_state.messages: with st.chat_message(m["role"]): st.markdown(m["content"]) if prompt := st.chat_input("Sorunuzu yazın"): st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("assistant"): stream = client.chat.completions.create( model="gpt-4.1-mini", messages=st.session_state.messages, stream=True, ) reply = st.write_stream(stream) st.session_state.messages.append({"role": "assistant", "content": reply}) ``` Aynı iskelet model adını değiştirerek Claude, Gemini veya yerel bir Ollama modeliyle de çalışır. Konuşma geçmişi `st.session_state` içinde tutulur, yanıt `st.write_stream` ile token token akar.
Sık Sorulan Sorular
- check_circle Streamlit ücretsiz mi?: Evet. Kütüphane Apache 2.0 lisanslı açık kaynaktır ve Streamlit Community Cloud'da herkese açık uygulamalar ücretsiz barındırılır. Ücretli kısım, kurumsal dağıtım için Snowflake içindeki yönetilen ortamdır.
- check_circle Streamlit üretim ortamı için uygun mu?: Orta ölçekli iç araçlar ve panolar için evet; önbellekleme, fragment ve yatay ölçeklemeyle onbinlerce görüntülenme taşınabilir. Binlerce eşzamanlı kullanıcılı halka açık ürünlerde Dash veya FastAPI + React gibi mimariler daha uygundur.
- check_circle Streamlit ile Gradio arasındaki fark nedir?: Gradio tek modelin girdi-çıktı demosunu en az kodla kurar ve Hugging Face Spaces ile bütünleşiktir. Streamlit çok sayfalı uygulama, pano ve serbest yerleşim gerektiren işlerde güçlüdür. Model kartı demosu için Gradio, veri uygulaması için Streamlit tercih edilir.
- check_circle Streamlit'te çok sayfalı uygulama nasıl yapılır?: İki yol vardır: `pages/` klasörüne Python dosyaları eklemek (her dosya otomatik sayfa olur) veya `st.navigation()` + `st.Page()` API'siyle sayfaları, başlıkları ve erişim mantığını kodla tanımlamak. İkinci yöntem 1.36'dan beri önerilen yaklaşımdır.
- check_circle Streamlit uygulaması nasıl deploy edilir?: En hızlı yol GitHub reposunu Streamlit Community Cloud'a bağlamaktır; birkaç dakikada canlı URL alınır. Alternatifler: Docker ile Kubernetes veya VPS, Hugging Face Spaces, kurumsal veride Streamlit in Snowflake. Varsayılan port 8501'dir.
- check_circle Streamlit hangi Python sürümlerini destekler?: Güncel Streamlit sürümleri Python 3.9 ve üzeriyle çalışır; 3.13 desteği mevcuttur. Kurulum `pip install streamlit`, çalıştırma `streamlit run app.py` komutuyla yapılır.