Mevcut yapay zeka mühendisliği dalgası "LLM tabanlı yönlendirmelerle" domine ediliyor. Bu yaklaşım cazip görünse de, son derece kırılgandır. Karmaşık bir iş akışında bir sonraki adımı bir LLM'e bırakmak belirsizlik, gecikme ve öngörülemez maliyetler doğurur. Üretim seviyesindeki sistemler, özellikle finans, sağlık veya lojistik gibi alanlarda, determinizm bir özellik değil, bir gerekliliktir.
Bu yazıda, olasılıksal yönlendirmeyi durum makinesi orkestrasyonu ile nasıl değiştireceğimizi keşfediyoruz. Ajanları sonlu durum makinesinde (FSM) açık düğümler olarak ele alarak, yürütme yolları üzerinde tam kontrol sağlar, tekrarlanabilirliği garanti eder ve hata ayıklamayı basitleştiririz.
Neden Durum Makineleri LLM Yönlendirmesinden Üstündür
Görevleri yönlendirmek için bir LLM kullandığınızda, aslında modeli bir karar ağacı gibi davranmaya zorluyorsunuz. Bu yaklaşım birkaç kritik sorundan muzdariptir:
- Belirsizlik (Non-Determinism): Aynı girdi, farklı çalıştırmalarda farklı yürütme yolları üretebilir.
- Bilişsel Yük: Model, bir sonraki adımı karar vermek için ihtiyaç duymadığı bağlamı ayrıştırmak için token israf eder.
- Hata Ayıklama Kabusu: Karar olasılıksal bir çıktının içinde gömülü olduğunda, belirli bir dalın neden seçildiğini izlemek zordur.
Durum makinesi orkestrasyonu, akış mantığını ajan mantığından ayırır. Durum maklesi etkileşim kurallarını belirlerken, ajanlar (LLM'ler, deterministik betikler veya harici API'ler olsun) asıl işi gerçekleştirir. Bu mimari, geleneksel yazılım mühendisliği en iyi uygulamalarını yansıtarak ajan tabanlı sistemlere yapısal bütünlük kazandırır.
Deterministik Bir İş Akışının Uygulanması
Güçlü bir durum makinesini, durumlar için Python'un yerleşik enum modülünü ve geçişler için bir yönlendirici (dispatcher) kullanarak uygulayabiliriz. Aşağıda, bir müşteri desteği triyaj sistemi için pratik bir örnek bulunmaktadır.
import enum
from typing import Dict, Any
class SupportState(enum.Enum):
INITIAL = "initial"
TICKET_CREATED = "ticket_created"
ESCALATED = "escalated"
RESOLVED = "resolved"
class SupportOrchestrator:
def __init__(self):
self.state = SupportState.INITIAL
self.context: Dict[str, Any] = {}
def handle_request(self, request: str) -> str:
# Adım 1: Niyeti hafif bir sınıflandırıcı veya anahtar kelime eşleşmesi kullanarak belirleyin
# Bu, bir LLM çağrısına kıyasla deterministiktir
if "urgent" in request.lower():
self.state = SupportState.ESCALATED
return self.escalate_process()
elif "refund" in request.lower():
self.state = SupportState.TICKET_CREATED
return self.create_ticket_process()
else:
self.state = SupportState.RESOLVED
return self.resolve_process()
def escalate_process(self) -> str:
# Bir insan temsilciye yönlendirme mantığı
return "Kıdemli destek ekibine yönlendiriliyor."
def create_ticket_process(self) -> str:
# Veritabanı girişi oluşturma mantığı
return "İade talebi bileti oluşturuldu."
def resolve_process(self) -> str:
return "Talep otomatik olarak çözüldü."
Durum Düğümleri Olarak LLM'lerin Entegrasyonu
Durum makineleri LLM'lere olan ihtiyacı ortadan kaldırmaz; onları sadece kısıtlar. Bir LLM, belirli bir durum içinde yanıt oluşturmak veya varlıkları çıkarmak için kullanılabilir, ancak bir sonraki duruma geçiş modele değil, kod tarafından yönetilir.
Örneğin, ticket_created durumundan sonra, bir yanıt taslağı oluşturmak için bir LLM tetikleyebilirsiniz. Ancak, RESOLVED veya ESCALATED durumuna geçme kararı, LLM'e "Sence bir sonraki ne olmalı?" diye sormak yerine, açık kriterlere (örneğin, duygu analizi skoru < -0.5) dayanmalıdır.
Sonuç
Deterministik çoklu ajan iş akışları oluşturmak, bir zihniyet değişikliği gerektirir. Yapay zekaya akışı karar vermesi yerine, akışı biz tanımlar ve yapay zekaya bu akış içinde belirli görevleri yerine getirmesini söyleriz. Durum makinesi orkestrasyonundan yararlanarak geliştiriciler, hem daha güvenilir ve maliyet etkin hem de denetlemesi ve bakımı daha kolay sistemler inşa edebilir. Endüstriyel güçteki yapay zeka çağında determinizm, güvenin temelidir.