Gradio ile Streamlit: Model Demosu mu, Veri Uygulaması mı?
Karşılaştırma

Gradio ile Streamlit: Model Demosu mu, Veri Uygulaması mı?

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

Gradio bir Python fonksiyonunu girdi ve çıktı bileşenleriyle web arayüzüne dönüştürmeye odaklanır; Streamlit ise sayfayı yukarıdan aşağı okunan bir betik gibi kurar ve her etkileşimde betiği yeniden çalıştırır. Seçimi belirleyen, kurduğunuz şeyin bir model demosu mu yoksa çok adımlı bir veri uygulaması mı olduğudur.

Bir bakışta

  1. Gradio'nun çıkış noktası fonksiyondur, Streamlit'inki betiktir. Gradio'da girdi ve çıktı bileşenleri fonksiyonun argümanlarına ve dönüş değerlerine bağlanır; Streamlit'te sayfa, betiğin satır sırasıyla oluşur.
  2. Streamlit her etkileşimde betiğin tamamını baştan çalıştırır. Bu yüzden pahalı hesaplar önbelleğe alınmalı, kalıcı değerler oturum durumunda tutulmalıdır.
  3. İki araçla da sohbet arayüzü kurulur, ama yol farklıdır. Gradio hazır bir sohbet sınıfı sunar; Streamlit'te sohbet giriş ve mesaj öğeleriyle akış elle kurulur.
  4. Hızlı paylaşım Gradio'nun güçlü yanıdır. Gradio, yerelde çalışan bir demo için dışarıdan erişilebilen bir genel bağlantı üretebilir; bu bağlantı kurumsal veriyle kullanılmadan önce güvenlik açısından değerlendirilmelidir.
  5. Kalıcı iç araç ve pano için Streamlit'in betik modeli daha doğaldır. Filtreler, tablolar ve grafiklerle çok adımlı bir analiz ekranı Streamlit'te düz Python akışıyla okunur.

Ortak zemin: Python bilen birinin web arayüzü kurması

Gradio da Streamlit de aynı sorunu çözer: bir makine öğrenmesi modelini, dil modeli çağrısını ya da veri analizini HTML, CSS ve JavaScript yazmadan tarayıcıda çalışan bir arayüze dönüştürmek. Gradio kendini, makine öğrenmesi modelleri, API'ler ya da herhangi bir Python fonksiyonu için hızlıca demo ya da web uygulaması kurmayı sağlayan açık kaynak bir Python paketi olarak tanımlar. Streamlit de Python betiğini doğrudan etkileşimli bir uygulamaya çevirir.

İkisinde de geliştirici yalnız Python yazar, bileşenler (metin kutusu, kaydırıcı, dosya yükleme, tablo, grafik) hazır gelir ve uygulama yerelde tek komutla ayağa kalkar. Bu yüzden iki araç da ön yüz geliştirmeyle uğraşmak istemeyen veri bilimciler, yapay zeka mühendisleri ve analistler için prototip aşamasında doğal bir seçimdir.

Ayrıldıkları yer, arayüzü nasıl düşündükleridir. Gradio arayüzü bir fonksiyonun etrafına kurulan girdi ve çıktı kutuları olarak görür. Streamlit ise sayfayı, yukarıdan aşağı okunan ve her etkileşimde baştan çalışan bir betik olarak görür. İki araç arasındaki farkların neredeyse hepsi bu iki zihinsel modelden doğar.

Ölçüt ölçüt Gradio ve Streamlit

  • Ölçüt: Temel soyutlama. Gradio: fonksiyon ve ona bağlı girdi ile çıktı bileşenleri; Interface sınıfında bileşen sayısı fonksiyonun argümanlarına ve dönüş değerlerine uymak zorundadır. / Streamlit: betiğin kendisi; her çağrı sayfaya bir öğe ekler.
  • Ölçüt: Etkileşim modeli. Gradio: bir olay (düğmeye basma, değer değişimi) ilgili fonksiyonu tetikler. / Streamlit: ekranda bir şeyin güncellenmesi gerektiğinde betiğin tamamı yukarıdan aşağı yeniden çalışır; bileşene bağlı geri çağırma varsa önce o yürür.
  • Ölçüt: Yerleşim kontrolü. Gradio: hızlı demo için Interface, özel yerleşim ve çok adımlı veri akışı için Blocks. / Streamlit: sütunlar, sekmeler, kenar çubuğu ve kapsayıcılarla betik sırası içinde yerleşim.
  • Ölçüt: Sohbet arayüzü. Gradio: sohbet arayüzü kurmak için tasarlanmış hazır ChatInterface sınıfı. / Streamlit: sohbet girişi ve sohbet mesajı kapsayıcısı gibi öğelerle akış elle kurulur; akış hâlinde gelen metni daktilo etkisiyle yazan bir öğe de vardır.
  • Ölçüt: Durum ve performans. Gradio: durum, fonksiyonlar arasında açıkça taşınır. / Streamlit: anahtar verilen her bileşen otomatik olarak oturum durumuna eklenir; pahalı hesaplar önbellek dekoratörüyle saklanmazsa her yeniden çalıştırmada tekrar yapılır.
  • Ölçüt: Paylaşım ve programatik erişim. Gradio: başlatırken genel bir paylaşım bağlantısı üretilebilir, model yerel bilgisayarda çalışmaya devam eder; Python ve JavaScript istemcileriyle her Gradio uygulaması programla sorgulanabilir. / Streamlit: uygulama bir sunucuda yayımlanarak paylaşılır.

Özetle Gradio, bir modelin girdisini ve çıktısını göstermek için en kısa yolu sunar; Streamlit ise birden çok adım, filtre ve görselleştirme içeren uygulamalarda okunaklı bir akış sağlar.

Şekil 1

Gradio fonksiyonu sarar, Streamlit betiği yeniden çalıştırır

GradioStreamlit
Temel soyutlamaFonksiyon ve girdi/çıktı bileşenleriYukarıdan aşağı okunan betik
Etkileşimde ne olurİlgili fonksiyon tetiklenirBetiğin tamamı yeniden çalışır
Özel yerleşimBlocks ileSütun, sekme ve kapsayıcılarla
Sohbet arayüzüHazır ChatInterface sınıfıSohbet öğeleriyle elle kurulur
Hızlı paylaşımGenel paylaşım bağlantısıSunucuda yayımlama
Kaynak: Sayfa içeriği; Gradio ve Streamlit resmî belgelerinden derlendi.Mindset Institute

Aynı iş iki araçta: belge özetleyici demo

Bir ekibin, şirket içi raporları özetleyen bir dil modeli çağrısını yöneticilere göstermek istediğini düşünün. Elinde metni alıp özet döndüren bir ozetle fonksiyonu var.

Gradio'da bu fonksiyon doğrudan arayüze sarılır:

import gradio as gr demo = gr.Interface(fn=ozetle, inputs="text", outputs="text") demo.launch()

Metin kutusu fonksiyonun argümanına, çıktı kutusu dönüş değerine bağlanır. Ekip daha sonra rapor türü seçimi, örnek girdiler ve yan yana karşılaştırma isterse Blocks'a geçer.

Streamlit'te aynı iş betiğin akışı olarak yazılır:

import streamlit as st metin = st.text_area("Rapor metni") if st.button("Özetle"): st.write(ozetle(metin))

Kullanıcı düğmeye bastığında betik baştan çalışır; düğme bu çalışmada basılı görüldüğü için özet yazılır. Ekip ardından rapor listesini veritabanından çeken bir seçim kutusu, özet geçmişini gösteren bir tablo ve kenar çubuğunda filtreler eklemek isterse Streamlit'te bunlar betiğe yeni satırlar olarak girer. Burada dikkat edilecek nokta, veritabanı sorgusunun önbellek dekoratörüyle saklanması ve özet geçmişinin oturum durumunda tutulmasıdır; aksi hâlde her tıklamada sorgu yeniden çalışır ve geçmiş kaybolur.

Demo bir modelin ne yaptığını göstermekse Gradio daha az kodla sonuca varır. Ekran bir iş akışına dönüşüyorsa Streamlit'in betik düzeni okunaklılığı korur.

Streamlit'in yeniden çalıştırma modeli neden önemli?

Streamlit'te en sık yapılan hata, betiği sıradan bir Python programı gibi düşünmektir. Streamlit belgelerine göre ekranda bir şeyin güncellenmesi gerektiğinde, yani kaynak kod değiştiğinde ya da kullanıcı bir bileşenle etkileşime girdiğinde, betiğin tamamı yukarıdan aşağı yeniden çalışır. Bu, kodu basit tutar ama bedeli vardır: büyük bir modeli yüklemek, uzun bir sorgu çalıştırmak ya da bir API'yi çağırmak her etkileşimde tekrarlanabilir.

Çözüm iki araçtır. Pahalı ve aynı girdiyle aynı sonucu veren hesaplar önbellek dekoratörüyle işaretlenir; böylece yeniden çalıştırmada atlanır. Kullanıcıya özgü ve etkileşimler boyunca korunması gereken değerler (sohbet geçmişi, seçili kayıt, sayaçlar) oturum durumunda tutulur. Anahtar verilen her bileşen zaten oturum durumuna otomatik eklenir.

Gradio'da bu sorun daha az görünür, çünkü yalnız tetiklenen fonksiyon çalışır. Buna karşılık Gradio'da birden çok fonksiyon arasında durum taşımak, Blocks içinde açıkça tasarlanması gereken bir iştir.

Şekil 2

Streamlit'te her tıklama betiği baştan çalıştırır

  1. Kullanıcı bileşenle etkileşirDüğmeye basar, değer değiştirir.
  2. Varsa geri çağırma çalışırBileşene bağlı fonksiyon betikten önce yürür.
  3. Betik yukarıdan aşağı çalışırTüm satırlar yeniden yürütülür.
  4. Önbellekteki sonuçlar kullanılırDekoratörlü pahalı hesaplar atlanır.
  5. Oturum durumu okunur, sayfa çizilirKalıcı değerler korunarak ekran güncellenir.
Kaynak: Sayfa içeriği; Streamlit temel kavramlar belgesinden.Mindset Institute

Hangi durumda hangisi?

Gradio'yu seçin: • Amaç bir modelin girdisini ve çıktısını göstermekse (görüntü sınıflandırma, metin üretimi, ses yazıya çevirme). • Sohbet arayüzlü bir dil modeli ya da yapay zeka ajanı demosu hızla kurulacaksa. • Demoyu başka bir uygulamanın programla çağırması gerekiyorsa; Gradio'nun Python ve JavaScript istemcileri bunu sağlar. • Uygulama Hugging Face Spaces'te barındırılacaksa; Gradio belgeleri Spaces'i Gradio uygulamalarını barındırmak için en popüler yer olarak anar.

Streamlit'i seçin: • Ekran birden çok adım, filtre, tablo ve grafik içeren bir iç araç ya da analiz panosuysa. • Ekipte veri analistleri betik yazarak çalışıyor ve kodun okunaklı kalması önemliyse. • Uygulama, model çıktısını iş verisiyle birleştiren ve oturum boyunca durum tutan bir akışa dönüşecekse.

İkisi birlikte de kullanılabilir: model ekibi modeli Gradio ile test eder ve bir uç nokta olarak sunar, iş birimi için kurulan Streamlit panosu bu uç noktayı çağırır. Önemli olan, prototip aracının kalıcı ürün mimarisine dönüşüp dönüşmeyeceğine baştan karar vermektir.

Paylaşım ve güvenlik: demo bağlantısı kurumsal veriye açılmadan önce

Gradio'da başlatma sırasında paylaşım seçeneği açıldığında, uygulama yerel bilgisayarda çalışmaya devam ederken dışarıdan erişilebilen bir genel bağlantı üretilir. Bu, toplantıda bir modeli göstermek için çok pratiktir; ama bağlantıyı alan herkes uygulamaya ve dolayısıyla arkasındaki modele ve veriye erişir. Kurumsal belgelerle çalışan bir demoda bu seçenek kullanılmadan önce kimlik doğrulama, erişim kaydı ve hangi verinin modele gittiği netleştirilmelidir.

Streamlit'te paylaşım, uygulamanın bir sunucuda yayımlanmasıyla olur; bu da erişim kontrolünü kurumun kendi altyapısına ya da seçtiği barındırma hizmetine bırakır. Her iki durumda da dil modeli çağrılarında kullanılan API anahtarları koda yazılmamalı, ortam değişkeni ya da gizli bilgi yönetimiyle verilmelidir.

Prototipten ürüne geçerken iki araçta da aynı sorular sorulur: kaç kullanıcı aynı anda çalışacak, uzun süren model çağrıları nasıl kuyruğa alınacak, hata durumunda kullanıcı ne görecek. Bu sorular yanıtlanmadan yayımlanan demo, iyi bir prototipken kırılgan bir ürüne dönüşebilir.

Bu araçları Mindset programlarında nerede çalışırsınız

Python ile Yapay Zeka Ajanları Geliştirme Eğitimi, tek ve çoklu ajanlı sistemler kurup araçlarla donatma, RAG ile geliştirme ve uygulama projesi aşamalarını içerir; ajanın davranışını bir arayüzle gösterip test etmek isteyen geliştiriciler için Gradio ya da Streamlit tercihi bu aşamada somutlaşır.

Generative NLP ve Açık Kaynak Büyük Dil Modelleri Uygulamaları ise açık kaynak modellerle çalışma, ince ayar ve modelleri yerelde ya da bulutta çalıştırma konularını kapsar; kendi modelini çalıştıran bir ekibin onu kullanıcıya hangi arayüzle açacağı sorusu burada gündeme gelir.

Resmî kaynaklardan bilgiler

Gradio'nun tanımı ve temel sınıflarıMakine öğrenmesi modeli, API ya da Python fonksiyonu için demo veya web uygulaması kurmayı sağlayan açık kaynak Python paketi; Interface (demo), Blocks (özelleştirilebilir yerleşim ve veri akışı) ve ChatInterface (sohbet arayüzü) sınıflarıkaynak
Gradio paylaşım bağlantısı ve istemcilerPaylaşım seçeneğiyle genel bir bağlantı üretilir, model yerel bilgisayarda çalışmaya devam eder; Python ve JavaScript istemcileriyle Gradio uygulamaları programla sorgulanabilir; Hugging Face Spaces Gradio uygulamalarının en popüler barındırma yeri olarak anılırkaynak
Streamlit yürütme modeliEkranda bir şey güncellenmesi gerektiğinde betiğin tamamı yukarıdan aşağı yeniden çalışır; geri çağırma betikten önce çalışır; anahtar verilen her bileşen oturum durumuna eklenir; önbellek dekoratörü pahalı hesapları yeniden çalıştırmada atlatırkaynak
Streamlit sohbet öğeleriSohbet girişi, sohbet mesajı kapsayıcısı, uzun süren işler için durum kapsayıcısı ve akışı daktilo etkisiyle yazan öğekaynak

Bilgiler resmî kaynaklarla doğrulandığı tarihte günceldir; değişiklik olabilir.

İlgili Mindset programı

Python ile Yapay Zekâ Ajanları (AI Agent) Geliştirme Eğitimi

Sık sorulanlar

Sık sorulan sorular

Gradio ile kurulan uygulama yalnız demo için mi uygundur?

Hayır. Gradio'nun Interface sınıfı makine öğrenmesi modelleri için demo kurmaya odaklansa da Blocks yaklaşımı özelleştirilebilir yerleşim ve veri akışıyla web uygulaması tasarlamaya izin verir. Yine de çok sayfalı, rol bazlı yetkilendirme gerektiren kurumsal bir uygulama için arayüz katmanını ayrı bir web çatısıyla kurmak çoğu zaman daha sürdürülebilir olur.

Streamlit'te sohbet geçmişi neden her mesajda kayboluyor?

Çünkü betik her etkileşimde baştan çalışır ve sıradan bir liste değişkeni her seferinde yeniden oluşturulur. Mesajlar oturum durumunda bir liste olarak tutulmalı, her çalıştırmada bu listedeki mesajlar sohbet mesajı kapsayıcısıyla yeniden çizilmeli, yeni mesaj sohbet girişinden alınıp listeye eklenmelidir. Dil modelinden akış hâlinde gelen yanıt için akışı daktilo etkisiyle yazan öğe kullanılabilir.

Gradio uygulamasını başka bir sistemden programla çağırabilir miyim?

Evet. Gradio'nun Python istemcisi ve JavaScript istemcisi, çalışan herhangi bir Gradio uygulamasını programla sorgulamayı sağlar. Arayüz tanımlanırken uç noktaya bir ad verilerek çağrı daha okunaklı hâle getirilebilir. Bu özellik, model ekibinin Gradio ile yayımladığı bir demoyu iş biriminin otomasyonlarına ya da başka bir uygulamaya bağlamayı kolaylaştırır; erişim yetkisi yine ayrıca düşünülmelidir.

Hangisini öğrenmek daha kolaydır?

İkisi de temel Python bilen biri için kısa sürede kullanılabilir. Tek fonksiyonluk bir demo için Gradio genellikle daha az satırla sonuç verir. Streamlit'in betik mantığı başta daha doğal gelir, ama yeniden çalıştırma modeli, önbellek ve oturum durumu anlaşılmadan büyüyen uygulamalar yavaşlar ve beklenmedik davranır. Hangisi seçilirse seçilsin, olay ve durum yönetimini erkenden öğrenmek sonraki sorunları azaltır.