Agentik AI iş akışları, genellikle büyük dil modelleri (LLM) tarafından üretilen kodların çalıştırılmasını içerir. Bu kodlar, veri görselleştirmeleri oluşturmak gibi görevleri yerine getirmek için kullanılır. Ancak, bu kodlar, girdi enjeksiyonu ve geri dönen kodlardaki hatalardan doğan riskleri azaltmak için temizlenmeli ve güvenli bir ortamda çalıştırılmalıdır. Python’u düzenli ifadeler ve kısıtlı çalışma zamanları ile temizlemek yetersizdir ve sanallaştırma ile hiper yönetici izolasyonu, geliştirme ve kaynak açısından yoğun bir süreçtir.
Bu yazıda, WebAssembly (Wasm) kullanarak işletim sistemi ve kullanıcı izolasyonu sağlamak için tarayıcı kumandasından nasıl faydalanabileceğinizi ele alacağız. Bu yöntem, uygulamanızın güvenliğini artırırken önemli maliyetler olmadan avantajlar sunar.
Agentik Araç Kullanımını Güvence Altına Alma
LLM uygulama gelişimindeki son evrimlerden biri, LLM’nin çağrabileceği ve yanıtını kullanabileceği araçların (fonksiyonlar, uygulamalar veya API’ler) ortaya çıkmasıdır. Örneğin, uygulama belirli bir konumun hava durumunu öğrenmek istiyorsa, bir hava durumu API’sini çağırabilir ve sonuçları uygun bir yanıt oluşturmak için kullanabilir.
Python kodu çalıştırma, LLM uygulamalarını genişletmek için güçlü bir araçtır. LLM’ler, Python kodu yazmada yeteneklidir ve bu kodları çalıştırarak veri görselleştirme gibi daha karmaşık iş akışlarını gerçekleştirebilirler. Python fonksiyon çağrıları ile genişletildiklerinde, metin tabanlı bir LLM, kullanıcılar için görüntü çizimleri oluşturma yeteneğine sahip olur. Ancak, LLM tarafından üretilen Python’un dinamik olarak analiz edilmesi ve amacına uygun hale getirilmesi zor olduğundan, uygulama güvenliği açısından daha geniş riskler ortaya çıkabilir. Eğer LLM tarafından üretilen Python kodunu çalıştırıyorsanız, bu yazı sizin için uygundur.
Agent İş Akışının Yapılandırılması
En basit agentik iş akışında, LLM, sonunda eval
fonksiyonuna geçireceğiniz Python kodunu üretebilir. Örneğin, plotly ile bir çubuk grafik oluşturmak için python kodunu üret
içerikli bir istem, import plotly.graph_objects as gonnfig = go.Figure(data=go.Bar(x=["A", "B", "C"], y=[10, 20, 15]))nfig.update_layout(title="Çubuk Grafik Örneği")
şeklinde bir yanıt dönebilir. Bu kod, kullanıcının isteminin analizine göre eval
ile çalıştırılarak grafik oluşturulabilir.
Adım 1’de, kullanıcı uygulamaya istemini iletir. Adım 2’de, uygulama LLM’ye ek istem bağlamı ve geliştirme sağlar. Adım 3’te, LLM, araç çağıran ajanın çalıştıracağı kodu döner. Adım 4’te, bu kod, sunucuda çalıştırılır ve Adım 5’te kullanıcıya grafik olarak döner.
Dikkat edilmesi gereken bir diğer önemli nokta, eval
işleminin Adım 4’te sunucuda gerçekleştirildiğidir ve bu bir güvenlik riskidir. Sunucu, uygulama ve kullanıcılar için bu riski azaltmak için kontroller uygulamak akıllıca olacaktır. En basit uygulama katmanında gerçekleştirilecek kontroller genellikle yeterli değildir ve genellikle aşılabilir. Örneğin, bir düzenli ifade os
çağrılarını hariç tutmaya çalışsa da, subprocess
gibi başka yollarla o fonksiyonlara ulaşmanın yollarını gözden kaçırabilir.
Daha sağlam bir çözüm, LLM tarafından üretilen Python’un yalnızca Firecracker gibi bir mikro sanal makinede çalıştırılması olabilir; ancak bu, kaynak ve mühendislik açısından yoğun bir süreçtir. Alternatif olarak, çalıştırmayı kullanıcının tarayıcısına kaydırmayı düşünebilirsiniz. Tarayıcılar, web sayfası kodunu ve betiklerini kullanıcının altyapısından izole etmek için kumanda kullanır. Tarayıcı kumandası, web sayfalarının yerel dosya sistemlerine erişim sağlamasını engelleyerek veya izinsiz olarak kameraları görüntülemesini engelleyerek çalışır.
Tarayıcıda Python Kullanımı
Pyodide, CPython’un Wasm’a taşınması ile oluşturulmuş bir kumanda olarak, mevcut JavaScript sanal makineleri içinde kullanılabilir. Bu, Python’u istemci tarafında çalıştırmamıza olanak tanır ve böylece tarayıcı kumandasında yer alan tüm güvenlik avantajlarından yararlanırız.
Uygulamayı, Pyodide çalışma zamanı ve LLM tarafından üretilen kod ile birlikte HTML sunacak şekilde tasarlayarak, uygulama geliştiricileri çalıştırmayı kullanıcının tarayıcılarına kaydırabilirler. Bu, güvenli bir kumanda kullanarak kullanıcılar arasında herhangi bir çapraz etkiyi önler.
Bu mimaride temel fark, uygulamanın aracı sunucu yerine kullanıcının tarayıcıda görüntüleyeceği HTML’yi döndürmesidir. Kullanıcı, HTML’yi tarayıcısında görüntülediğinde, Pyodide LLM tarafından sağlanan Python kodunu kumanda içerisinde çalıştırır ve görselleştirmeyi oluşturur.
Bu değişiklik, genellikle LLM tarafından üretilen kodun gözlemlenmesi için minimal değişiklikler gerektirir, çünkü LLM tarafından üretilen kod genellikle statik bir HTML belgesine şablon olarak yerleştirilir. Örneğin, aşağıdaki fonksiyon, LLM tarafından sağlanan kodu alır ve çalıştırma için hazırlar.
window.runCode = async (LLMCode) => {
try {
console.log('Kod yürütme süreci başlatılıyor...');
const pyodide = await initPyodide();
const wrappedCode = [
'import plotly.graph_objects as go',
'import json',
'try:',
' ' + LLMCode.replace(/\n/g, '\n '),
' if "fig" in locals():',
' plotJson = fig.to_json()',
' else:',
' raise Exception("Yürütmeden sonra \'fig\' değişkeni bulunamadı")',
'except Exception as e:',
' print(f"Python yürütme hatası: {str(e)}")',
' raise'
].join('\n');
await executeCode(pyodide, wrappedCode);
...
Python bağımlılıklarınız varsa (örneğin Plotly), istemci tarafı JavaScript’te micropip ile bunları yükleyebilirsiniz. Micropip, PyPI’den python tekerleklerini destekler ve birçoğu C uzantıları içerir.
await pyodide.loadPackage("micropip");
const micropip = pyodide.pyimport("micropip");
await micropip.install('plotly');
Wasm ile Uygulama Güvenliğini Artırma
LLM’nin zararlı bir kod döndürdüğü bir senaryoyu düşünün. Bu, girdi enjeksiyonu ya da hata sonucunda gerçekleşebilir. En basit agentik iş akışında, eval
çağrısı, uygulamanın tehlikeye girmesine neden olur ve bu, muhtemelen ana işletim sistemini ve diğer kullanıcıları etkileyebilir.
Ancak, Wasm akışını uyguladıktan sonra, iki olasılık karşılaşabilirsiniz. İlk olarak, uygulama, zararlı Python kodunun dar kapsamlı Pyodide çalışma zamanında yürütülememesi nedeniyle bir hata verebilir (örneğin, eksik bir bağımlılık). İkinci olarak, kod çalıştırılırsa, bu, tarayıcı kumandası ile kısıtlanır ve potansiyel etkiler son derece sınırlı olur.
Her iki durumda da, Pyodide kullanmak, sorgulayan kullanıcı için güvenlik kontrollerini artırır ve uygulama kaynakları ile komşu kullanıcılara olan riski azaltır.
Başlayın
LLM tarafından üretilen Python’u WebAssembly ile kumanda altına almak, mevcut istem ve mimarilere minimal değişiklik gerektirir. Hesaplama gereksinimlerini azaltarak maliyet açısından etkilidir ve hem ana bilgisayar hem de kullanıcı izolasyonu sağlayarak uygulama ve kullanıcıların güvenliğini artırır. Bu, düzenli ifadelerden ya da kısıtlı Python kütüphanelerinden daha sağlamdır ve konteynerler veya sanal makinelerden daha hafif bir çözümdür.
Agentik iş akışlarınızda güvenliğinizi artırmak için Wasm ile başlamaya yönelik örnekleri görmek için bu örneği GitHub’da inceleyebilirsiniz. AI ajansları ve agentik iş akışları hakkında daha fazla bilgi edinmek için kaynaklara göz atabilirsiniz.