Tek ajanla başladık. Süreç orada durdu.
Kurumsal bir sürece dil modelini (LLM) ilk bağladığımızda tasarım neredeyse kaçınılmaz görünüyordu: tek bir ajan, elinde bir dizi araç. Gelen evrakı okusun, şirket hafızasında arasın, riski puanlasın, kaydı atsın. Demo’da çalıştı. Canlıda aynı ajan hem bağlamı kaybetti, hem yetkisiz yazmayı denedi, hem de hata verdiğinde “ajan düştü” dışında bir iz bırakmadı.
Bu yazı bir ürün duyurusu değil. Çoklu-ajan orkestrasyonu diye bir şey inşa ettiğimiz için değil; tek döngülü bir ajanın gerçek iş sürecinde kırıldığı yerleri gördüğümüz için yazıldı. Soru “ajan yaptık mı?” değildi. Soru şuydu: bu süreçte kim okur, kim önerir, kim yazar, kim durdurur — ve bunlar aynı elde olursa ne bozulur?
Karar kaydı
Orkestratör (orchestrator) bir dil modeli değildir. Ajanlar işçidir. Graf, durum ve kapı deterministik bir iş akışı motorundadır. Modeli karar verici sanmak, ağ katmanında her paketi aynı birimin yorumlamasına bırakmaya benzer.
// demo'da çalışır
while (ajan.aracCagrisiVar()) {
// oku, ara, yaz — aynı el
await herhangiAraciCalistir(ajan.sonCagri)
baglam.mesajlar.ekle(ajan.sonCagri)
}
// yeniden deneme = tüm turu baştan
catch {
bastanOynat(baglam)
}Canlıda kırılan yer, model değil topolojiydi
İlk üretim denememiz evrak hattıydı: sözleşme veya teklif gelir, sınıflandırılır, şirket kılavuzuna karşı aranır, risk skoru çıkar, insan bakar, kurumsal kaynak planlama sistemine (ERP) kayıt düşer. Bunu tek bir “HukukRiski” ajanına yükledik. Model yeterince iyiydi. Mimari değildi.
Kırılma, sohbet botunun “yanlış cevap vermesi” değildi. Kırılma, okuma ile yazmanın, arama ile kararın, yeniden deneme ile yan etkinin aynı turda karışmasıydı. Dört sınıf hata tekrar tekrar geldi:
Bağlam kirlendi
Aynı döngü hem evrak metnini, hem kurumsal hafıza parçalarını, hem araç cevaplarını taşıyordu. Uzun süreçte ajan, orijinal maddeyi değil son araç çıktısını ‘gerçek’ sanıyordu.
Yazma yetkisi okuma ile aynı eldeydi
PDF okuyan ajan, kurumsal kaynak planlama sistemine de kayıt atabiliyordu. Sistem talimatına ‘yalnızca onaydan sonra yaz’ demek, üretimde bir politika değildir; bir ricadır.
Hata tek cümleydi
Operasyon ‘ajan düştü’ görüyordu. Çıkarıcı mı zaman aşımına uğradı, vektör arama mı boş döndü, yazma mı güvenli tekrar edilebilir değildi — ayırt edilemiyordu.
Paralel iş sıraya giriyordu
Sınıflandırma ile kurumsal hafıza araması birbirine bağlı değildi. Tek döngü onları art arda koşturduğu için evrak hattı gereksiz yere uzuyordu.
Zinciri baştan oynatma ≠ grafı çalıştır · yalnızca «çıkar» düğümü
Hukuk ve operasyonun sorduğu soru da buradan çıktı: “Bu maddeyi düşük risk sayan kim?” Cevap kırk mesajlık bir sohbet dökümü olmamalı. Cevap; hangi düğümün, hangi kanıtla, hangi kapıdan geçerek öneri ürettiği olmalı. Tek ajanlı döngü bunu üretmez — çünkü süreç yoktur, tur vardır.
Bunu hangi iş akışlarında gördük
Ajanı her yere koymadık. Kırılma, yapay zekanın “konuştuğu” yerde değil, işin geri alınamadığı yerde görünür oldu. Üç hat, aynı mimari kararı zorladı:
01 · Gelen PDF / e-posta eki
Evrak ve sözleşme hattı
Neden tek ajan yetmedi. Sınıflandırma, şirket kılavuzu araması ve risk skoru ayrı uzmanlık. Kayıt ise geri alınamaz.
Ne yaptık. Çıkarıcı ve arayıcı paralel; değerlendirici skor üretir; insan kapısı açılmadan uygulayıcı kaynak planlama sistemine dokunmaz.
02 · Sipariş olayı
Sipariş–stok–bildirim
Neden tek ajan yetmedi. Stok kilidi, fatura ve bildirim aynı sohbet turunda ‘halledilince’ çift satış ve kayıp iz oluştu.
Ne yaptık. Ajan önerir; kilit ve yazma, olay hattındaki güvenli tekrar edilebilir servislere düşer.
03 · Form, ağ kancası (webhook), istisna
Onaylı operasyon otomasyonu
Neden tek ajan yetmedi. İstisna oranı düşük ama maliyeti yüksek. Tek ajan, istisnayı ‘çözülmüş’ diye kapatıyordu.
Ne yaptık. Otonom yol mutlu patikadır. Eşik altı skor veya politika ihlali kapıya düşer.
Ortak desen aynıydı: süreç birden fazla uzmanlık istiyor, adımların bir kısmı paralel koşabilir, bir kısmı geri alınamaz. Bu üç özellik bir aradaysa tek ajan “yetenekli asistan” olmaktan çıkar; yetkisi fazla, izi zayıf bir operatör olur.
Ne değiştirdik: ajanları değil, grafı tasarladık
Geçiş, yeni bir “çoklu ajan ürünü” eklemek değildi. Tek döngüyü bir durum makinesine indirdik. Dil modelleri düğüm oldu. Orkestratör; hangi düğümün çalışacağını, hangisinin paralel açılım (fan-out) yapacağını, hangisinin kapıya düşeceğini bilen deterministik katman oldu.
export const evrakGirisi = graf({
cikar: { sonra: [] },
siniflandir: { sonra: ["cikar"], paralel: true },
ara: { sonra: ["cikar"], paralel: true },
degerlendir: { sonra: ["siniflandir", "ara"] },
kapi: { sonra: ["degerlendir"], tip: "insan" },
uygula: { sonra: ["kapi"], araclar: ["kaynak.yaz"] },
})Rol ayrımı, sistem talimatı ayrımı değil
Ajanları “sen hukukçusun, sen arşivcisin” diye isimlendirmek yetmez. Ayırım, araç yüzeyindedir. Arayıcının (retriever) yazma istemcisi yoktur. Uygulayıcının (actor) arama istemcisi yoktur. Değerlendirici dış dünyayı görmez; yalnızca önceki düğümlerin şemalı çıktısını görür.
| Rol | İş | Yapabilir | Yapamaz |
|---|---|---|---|
| Orkestratör | Graf ve durum | Düğüm, zaman aşımı, yeniden deneme. | Araç çağırmaz, skor üretmez. |
| Arayıcı | Kurumsal hafıza | Vektör arama. Salt okunur. | Kaynak planlama veya müşteri yönetimi yazma. |
| Çıkarıcı | Yapılandırma | Şema: taraf, tutar, tip. | Risk kararı, kayıt. |
| Değerlendirici | Öneri | Kanıt + şema → skor. | Dış sisteme yazmaz. |
| Uygulayıcı | Dar yazma | Açık kapı + imzalı veri paketi. | Arama yapmaz, yeniden deneme seçmez. |
Paralel çalışma, “daha çok ajan” demek değil
Paralel açılım yalnızca bağımsız düğümlerde açılır. Evrak hattında sınıflandırma ile kurumsal hafıza araması (RAG) birbirini beklemez; ikisi de çıkarıcının şemasını bekler. Değerlendirici ikisini birden görmeden skor üretmez. Paralellik bir performans ipucu değil, veri bağımlılığı grafının sonucudur.
Bağımlılık grafı
Paralel olanı ölçeriz; tahmin etmeyiz.
Düğüm yeniden denemesi
Kırılan yer yeniden çalışır, zincir değil.
Durum makinesi
Tur değil, adım. Her adımın sahibi var.
Güvenlik kapıları sistem talimatının içinde durmaz
Tek ajanlı tasarımda güvenlik, sistem talimatına (prompt) yazılan bir cümleydi. Üretimde bu cümle, aracın varlığı kadar güçlüdür. Araç duruyorsa ajan bir gün onu çağırır. Bu yüzden kapıyı modele anlatmadık; grafın düğümü yaptık.
01 Politika kapısı
bu ajan × bu araç × bu kimlik
02 Güven eşiği
skor ≥ 0,86 ve kanıt var
03 İnsan kapısı
geri alınamayan yazma
Politika kapısı
Bu ajan, bu araç, bu kimlik, bu veri paketi. Arayıcının yazma istemcisi yoktur. Kontrol sistem talimatında değil, araç katmanındadır.
Güven eşiği
Değerlendirici skor ve gerekçe üretir. Eşik altında veya kanıt boşsa akış insan düğümüne düşer. ‘Emin değilim ama yine de yaz’ yolu kapalıdır.
İnsan kapısı
Para, hukuki bağ, stoğa kilit, müşteriye giden bildirim. Geri alınamayan her adım insan onaylı bir düğümdür (HITL).
const yetkiler = {
arayici: { oku: ["hafiza"], yaz: [] },
uygulayici: { oku: [], yaz: ["kaynak.yaz"] },
} as const
function araciDogrula(ajan: AjanKimligi, arac: AracKimligi, kapi: Kapi) {
if (!izinli(ajan, arac)) throw new PolitikaReddi(ajan, arac)
if (yazmaMi(arac) && kapi !== "acik") throw new KapiKapali()
}Veri tarafında da aynı kural geçerli. Şirket evrakı genel amaçlı modellerin eğitimine gitmez; orkestrasyon izole ağda, doğrulamalı erişimle yürür. Arayıcı kurumsal hafızayı görür, uygulayıcı görmez. “Ajanın her şeyi görsün ki daha zeki olsun” talebi, tam da tek döngünün bizi soktuğu tuzaktı.
Ne değişti, ne değişmedi
Sonuç, “otonom iş gücü piyasaya sürüldü” cümlesi değil. Operasyonun gördüğü şey daha sade: hata artık bir düğümde duruyor, yazma artık bir kapıdan geçiyor, karar artık iz bırakıyor.
Düğüme özel yeniden deneme
Son yazmanın zaman aşımı, tüm evrak zincirini yeniden koşturmaz.
Salt okunur arayıcı
Arama ajanının yazma istemcisi olmadığı için ‘yanlışlıkla kayıt’ sınıfı kapandı.
İzlenebilir karar
Denetimde sohbet dökümü değil; hangi düğüm, hangi kanıt, hangi kapı görünür.
Paralel alt graf
Bağımsız sınıflandırma ve kurumsal hafıza araması, evrak hattında duvar saatini kıstı.
async function dugumuCalistir(dugum: Dugum, baglam: CalismaBaglami) {
try {
return await dugum.calistir(baglam)
} catch (hata) {
if (yenidenDenenebilir(hata) && baglam.deneme < dugum.azamiDeneme) {
return dugumuCalistir(dugum, arttir(baglam))
}
baglam.iz.basarisiz(dugum.id, hata)
throw hata // tüm grafı baştan oynatma
}
}Çoklu ajan her yere gerekmez
Bir sıkça sorulan sorular botu, tek bir kurumsal hafıza ajanı ile durabilir. Tek adımlı sınıflandırma, bir model çağrısıdır. Çoklu-ajan orkestrasyonu; karışık okuma/yazma, paralel uzmanlık ve geri alınamayan yan etki aynı süreçte biriktiğinde maliyetini öder. Aksi halde graf, demo’daki tek ajan kadar gereksiz karmaşa olur — yalnızca daha pahalı.
// SSS + kurumsal hafıza → tek ajan yeter
if (!akis.yazmaVar && !akis.paralelVar) {
return tekAjan(akis)
}
// karışık okuma/yazma + insan kapısı → graf
return graf(akis.dugumler)Öğrendiğimiz şey ürün adı değil, bir ayrım: modeli zeki tut, yetkiyi dar tut, süreci görünür tut. Orkestrasyon bu üçünün aynı anda durduğu yerdir. Ajan sayısı hedef değildir; hedef, hangi adımın otonom, hangisinin kapılı olduğunu dürüstçe çizebilmektir.
Açık kaynak örnekKozmoz-Inovasyon/evrak-orkestrasyonuBu yazıdaki evrak hattının temel, çalıştırılabilir hali. Dil modeli anahtarı gerekmez; grafı, kapıyı ve düğüme özel yeniden denemeyi yerelde koşturabilirsiniz.