Modern yapay zeka uygulamaları genellikle güvenilirlik konusunda zorlanır. Büyük Dil Modelleri (LLM'ler) yaratıcılık ve muhakeme konusunda üstün olsa da, doğaları gereği olasılıksal ve durum bilgisi (stateless) yoktur. Birden fazla LLM çağrısını, harici API isteklerini ve insan döngüsü onaylarını zincirlediğinizde karmaşıklık patlama yapar. Tek bir ağ zaman aşımı veya geçici bir API hatası, sisteminizin tutarsız bir durumda kalmasına ve "zombi" araçların oluşmasına neden olabilir; bunlar hesaplama maliyeti öder ancak hiçbir değer üretmez.
Burada deterministik orkestrasyon kritik hale gelir. Yapay zekanın olasılıksal gücünü, Temporal gibi iş akışı motorlarının deterministik garantileriyle birleştirerek, dayanıklı, izlenebilir ve doğru olan araç sistemleri oluşturabilirsiniz. Bu yazı, Temporal Workflows kullanarak sağlam AI araçlarının nasıl mimari olarak tasarlanacağını incelemektedir.
Naif Aracı Zincirlerindeki Sorunlar
Naif bir uygulamada, bir araç şu adımları sırasıyla yürütebilir:
- Kullanıcı niyetini getir.
- Analiz için LLM'yi çağır.
- Bir veritabanını sorgula.
- Üçüncü taraf bir API'yi çağır.
- Bir yanıt gönder.
4. adım bir ağ kesintisi nedeniyle başarısız olursa, geleneksel bir mikroservis sonsuz kez yeniden deneme yapabilir veya tamamen başarısız olabilir; bu da veri tutarsızlığına yol açar. Daha da önemlisi, yürütme geçici olduğu için, aracın kaldığı yerden devam etmesi için gereken bağlamı kaybedersiniz. Standart bir HTTP isteği akışını kolayca "duraklatıp devam ettiremezsiniz". Temporal, her etkinlik yürütmesinin durumunu kalıcı deposuna kaydederek bu sorunu çözer; böylece iş akışı, başarısızlıktan önceki haliyle tam olarak yeniden oluşturulabilir.
Temel Kavramlar: Etkinlikler ve İş Akışları
Temporal'de, araç mantığınız iki ayrı bileşene ayrılır:
- İş Akışları (Workflows): Kontrol düzlemi. Bunlar, mantık akışını (döngüler, koşullar, yeniden denemeler) tanımlayan deterministik, uzun süre çalışan kod birimleridir. Saf deterministik olmaları gerekir; yani içlerinde doğrudan rastgele sayılar, tarihler veya ağ çağrılarına izin verilmez.
- Etkinlikler (Activities): Yürütme düzlemi. Bunlar, LLM'yi çağırma, veritabanını sorgulama veya e-posta gönderme gibi belirsiz görevleri gerçekleştiren asıl çalışanlardır. Etkinlikler kısa ömürlüdür ve başarısız olabilirler.
Pratik Uygulama
Python kullanarak basit bir araştırma aracının nasıl yapılandırılacağına bakalım. Veri getiren, bunu bir LLM üzerinden işleyen ve yeniden denemeleri zarifçe yöneten bir iş akışı tanımlayacağız.
from temporalio.worker import Worker
from temporalio.activity import activity
from temporalio.workflow import workflow, define, current_datetime
from pydantic import BaseModel
import httpx
# Belirsiz etkinliği tanımla
@activity.defn
async def fetch_context_data(url: str) -> dict:
async with httpx.AsyncClient() as client:
response = await client.get(url)
response.raise_for_status()
return response.json()
# LLM işleme etkinliğini tanımla
@activity.defn
async def llm_generate_summary(context: dict) -> str:
# OpenAI veya yerel LLM'yi çağırma mantığı
return "Bağlama dayalı oluşturulan özet..."
# Deterministik iş akışını tanımla
@workflow.defn
class ResearchAgentWorkflow:
@workflow.run
async def run(self, query_url: str) -> str:
# Adım 1: Başarısızlık durumunda otomatik yeniden deneme ile veriyi getir
data = await workflow.execute_activity(
fetch_context_data,
query_url,
retry=workflow.Retry(max_attempts=3)
)
# Adım 2: LLM ile işle
summary = await workflow.execute_activity(
llm_generate_summary,
data,
schedule_to_close_timeout=timedelta(minutes=5)
)
return summary
Bu örnekte, fetch_context_data başarısız olursa, Temporal bunu otomatik olarak 3 kez yeniden dener. Başarısızlık devam ederse, iş akışı insan döngüsü etkinliğine geçecek şekilde yapılandırılabilir veya bir yöneticiye bildirim gönderilebilir. Temel avantaj şudur: Çalışan (worker) çevrimiçi hale geldiğinde, Tempolar geçmiş olaylarını yeniden oynatarak iş akışı durumunu yeniden oluşturur; böylece llm_generate_summary yalnızca veri başarıyla getirildikten sonra çağrılır.
Determinizmin Faydaları
İş akışlarında determinizmi zorlayarak şu avantajları elde edersiniz:
- Dayanıklılık: Aracınız sunucu yeniden başlatmalarına, dağıtımlara ve ağ kesintilerine dayanır.
- Hata Ayıklanabilirlik: Tempolar, aracın yaşam döngüsündeki her adımın tam durumunu görebileceğiniz bir arayüz sağlar; bu da bir aracın neden takıldığını hata ayıklamayı kolaylaştırır.
- Karmaşıklık Yönetimi: Dağıtık kilitleri veya veritabanı durumunu manuel olarak yönetmeden paralel dallar, alt iş akışları ve çocuk iş akışları dahil olmak üzere karmaşık durum makineleri uygulayabilirsiniz.
Sonuç
AI araçları oluşturmak yalnızca istem mühendisliği (prompt engineering) yapmak değildir; aynı zamanda yazılım mühendisliğidir. Araçlarınız işlemler için daha kritik hale geldikçe, güvenilirlik ihtiyacı hayati önem kazanır. Tempolar, deterministik orkestrasyon için omurga sağlar; geliştiricilerin yapay zeka mantığına odaklanmasına, motorun ise dayanıklılık, yeniden deneme mantığı ve durum yönetimi karmaşıklığını ele almasına olanak tanır. Bu deseni benimseyerek, kırılgan ve geçici betikleri, dayanıklı ve üretim seviyesinde otonom sistemlere dönüştürürsünüz.