GNL
Karşılaştırma

GNL, kendin yazmak ve agent framework'leri

Aynı işi kurmanın üç yolu var: dayanıklılığı kendin yazarsın; tam bir agent framework'ü benimseyip dayanıklılığı üstüne eklersin; ya da zaten koşturduğun Vercel AI SDK agent döngüsünün üstüne oturan bir dayanıklılık katmanından başlarsın. GNL üçüncüsü — ve o çekirdeğin üstünde RAG, workflow ve dinamik agent ağlarını da taşır; her biri ayrı bir alt sistem değil, aynı journal'a yazılan ve yeniden oynatılabilen yetenekler. Bu sayfada hiçbir ürün adı geçmiyor. Hangi framework'ün size uyduğu ekibinize ve probleminize bağlı, ve adaylardan birinin yazdığı karşılaştırma bunun karara bağlanacağı yer değil — onlarınkini de okuyun. Yazmaya değer olan, gerçekten ayrışan eksen ve GNL'in bilerek yapmadığı şeyler.

Senin uygulamanAgent mantığın, prompt'ların, tool tanımlarınVercel AI SDKgenerateText / streamText / tool çağrı döngüsü — değişmezGNLjournal · sessiz tekrar yok · deterministik replay

GNL, Vercel AI SDK'yı değiştirmez — altına ince bir dayanıklılık şeridi olarak oturur.

Özellik matrisi

GNL'in çekirdek ayrımının en net görüldüğü eksenler — dayanıklılık, exactly-once ve deterministik replay — üzerinde üç yaklaşımı yan yana koyuyoruz. Orkestrasyon yüzeyindeki (RAG/workflow/network) pariteyi aşağıdaki "kapanan boşluklar" tablosunda ayrıca ele alıyoruz.

EksenKendin yazAgent framework'leriGNL
Dayanıklılık (crash → kaldığı yerden devam)Elle inşa edilir — checkpoint/state yönetimi sana aitNadiren çekirdek garanti — tarttığınız ürüne bakınÇekirdek garanti — her adım journal'a yazılır; senkron replikasyon altında ack'lenmiş 30/30 yazı canlı bir failover'dan sağ çıktı, arkasında 4.900+ test var
Aynı yan etkinin iki kez olmamasıIdempotency anahtarlarını kendin tasarlarsın — ve modelin aynı işi yeniden planladığını fark etmen gerekirNadiren çekirdek garanti — ve toolCallId'ye bakan her çözüm yeniden planlanan çağrıya kördürVarsayılan: toolCallId ile anahtarlı, çok-worker CAS yarış testleriyle kanıtlı. Opt-in `idempotency: 'args'` ile ARGÜMANLARLA anahtarlanır — model aynı işi yepyeni bir toolCallId ile yeniden planlasa bile tek kez çalışır (sahadaki baskın duplicate vakası)
Anlamca aynı işin tekrarı (hash’in kör olduğu yer)Yok — “ABC ürününü oluştur” iki farklı şekilde yazıldığında iki iş olurYok — bu eksende beyan edilmiş bir çekirdek garanti göremedikAday bulunur, karar deterministik alan karşılaştırmasıyla verilir; belirsizlik insana sorulur. Skor asla karar vermez — karar hiyerarşisi: deterministik > insan kapısı > olasılıksal. İki beyan da gerekmezse katman tamamen atıldır (opt-in)
Deterministik replay / time-travelGenelde yok — elle log/debugDeğişir — o framework'ün kendi araçlarına bağlıStudio'da timeline + time-travel replay
Edge-native boyutKendi bağımlılıklarına bağlıTam çatı (workflow/RAG/memory) — daha geniş yüzey32.4 KiB gzip çekirdek, soğuk başlatma maliyeti yok
BYO-DB (veri sende kalır)Neye yazdıysan odur — sende kalırDeğişir — o framework'ün kendi araçlarına bağlıSqlite/Postgres/Redis journal — veri her zaman sende
Telemetri / phone-homeYok (kendi kodun)Değişir — o framework'ün kendi araçlarına bağlıYok — ilke. B/C plan yalnızca imzalı AGREGE kullanım check-in'i yapar
Yönetişim (onay kuyruğu, denetim, retention/GDPR, policy, eval kapısı)Elle inşa edilirDeğişir — o framework'ün kendi araçlarına bağlıStudio ile kutudan çıkar

“Değişir”, bu eksenin baktığımız framework'lerde beyan edilmiş bir çekirdek garanti olmadığı anlamına gelir — üründen ürüne ve sürümden sürüme farklıdır. Bizim yazdığımız bir tabloya değil, tarttığınız ürünün kendi dokümantasyonuna bakın.

Orkestrasyon yüzeyi

Tam bir agent framework'ünden beklenen şeyler, aynı journal'ın üstünde — yani her biri kendi kuralları olan ayrı bir alt sistem değil, exactly-once ve yeniden oynatılabilir. Her satır kaynak koddaki adlandırılmış bir API'ye dayanır.

YetenekGNL APINot
Dinamik multi-agent routing (Supervisor/.network())createGnl networks: + runNetworkRouter kararları CAS ile journal'a donar → resume'da router çağrılmaz; maxIterations tavanı + zorunlu final.
Hazır scorer kütüphanesi@gnldev/evals — 8 scorerfaithfulness, hallucination, answerRelevancy, toxicity, bias, completeness, contextPrecision, toneConsistency — hepsi llmJudge sarar, journal-memoized.
Dataset & deney yönetimicreateDatasetsManagerİçerik-hash'li versiyon geçmişi, idempotent deney kaydı, compare (aggregate deltalar + regresyon/iyileşme).
GraphRAG (dolaylı-ilgi retrieval)@gnldev/rag — GraphRagBenzerlik-grafı üzerinden threshold/hops/decay; VectorStore drop-in → createRagTool içinde exactly-once.
Chunking + kalıcı vektör DBchunkText/chunkDocuments + PostgresVectorStorerecursive/markdown/character strateji, deterministik id#i; pgvector (HNSW/ivfflat) InMemory ile aynı arayüz.
Semantik tool-arama@gnldev/processors — toolSearchEmbedding ile topK tool seçimi; seçim journal'lı → resume'da embed koşmaz (always/minScore).
Adlandırılmış SSO sağlayıcılarıcreateAuth0Sso, createWorkOsSsoAuth0 (OIDC code + JWKS RS256) ve WorkOS; imza doğrulama merkezi, CSRF state kancası.
Adlandırılmış observability preset'leri@gnldev/otel — otlpPresetsLangfuse/LangSmith/Braintrust/Honeycomb/Datadog/Collector tek satır; + canlı mod (@gnldev/otel/live).
Redis storage adaptörü + dağıtık pubsub@gnldev/durable/redis — RedisStorageSET NX ile atomik CAS, native TTL cache; @gnldev/events ile iki-worker fan-out (gerçek Redis entegrasyon testli).

Kanıt — iddia değil, çalışan test

GNL'in exactly-once/deterministik replay iddiası laf değil; gerçek altyapı üzerinde sınandı.

Canlı failover testi — 30/30 yazı korundu

Senkron replikasyonlu gerçek Postgres primary-SIGKILL → promote senaryosunda 30/30 ack'li CAS yazısı korundu, exactly-once sürdü; yeni primary'de atomiklik 10 tur yarışla kanıtlandı (test/failover-real.test.ts).

Çok-worker CAS yarış testleri

CAS tek-bağlantı varsaymıyor; birden fazla instance aynı run'a yazmaya çalıştığında atomik kaldığı 13 senaryoyla doğrulandı (test/multi-worker.test.ts). Bulunan split-brain kenar durumu putIfMatch CAS'i ile KAPATILDI — gerçek PG+Redis üzerinde takeover yarışıyla doğrulandı.

4.900+ test / 548 dosya yeşil

548 dosyada 5.004 test geçiyor (ölçüm 14 Eyl 2026), gerçek Postgres ve Redis entegrasyonları dahil; her paket temiz typecheck ediyor. 65 test ve 5 dosya varsayılan olarak atlanıyor, çünkü suite’in varsayamayacağı bir ortam istiyorlar — aralarında canlı failover senaryosu da var; o, yeşil sayının parçası değil, ayrı ve tekrarlanabilir bir deney (docker compose + GNL_FAILOVER=1). Journal büyümesi karakterize edildi, uzun ömürlü çalıştırmalarda sıkıştırmayı rolloverRun çözüyor.

Taint guard'ın nedensel kanıtı — 2/5 → 0/N

Aynı model, aynı prompt-injection senaryosu: guard kapalıyken saldırgana para transferi 5 denemenin 2'sinde gerçekleşiyor; guard açıkken (block veya taintGuardian) hiç gerçekleşmiyor (gnl-eval, ölçüm 2026-08-29).

8 farklı runtime'da doğrulandı

Aynı HTTP/Studio handler'ı Hono, node:http, Express, Fastify, Koa, Nest, Bun ve Deno üzerine gerçekten mount edilip ayakta kaldığı test edildi (server-matrix, ölçüm 2026-08-29).

Yük altında doğrusala yakın ölçekleme

PM2 cluster + gerçek Postgres + SSE altında 1 worker 24,5 tur/sn'den 4 worker'da 87,3 tur/sn'ye (3,38×), 8 worker'da 135,8 tur/sn'ye çıktı; 600 eşzamanlı rezervasyon denemesinde tam 200 rezervasyon ve 200 defter satırı oluştu, fazlası olmadı (performance-test, ölçüm 2026-08-29).

BYO-DB: SQLite'tan Postgres'e tek satır

Aynı agent kodu, npm'den gerçek bir paket olarak kurulup (symlink değil) SQLite ve Postgres storage arasında yalnızca tek satır değiştirilerek çalıştırıldı (trial-sqlite/trial-pg, ölçüm 2026-08-29).

Framework'lerin yapıp GNL'in yapmadıkları

Dürüstlük tek yönlü değil. Bunlardan birine ihtiyacınız varsa doğru araç tam bir agent framework'üdür, onu kullanın — bunlar ya bilerek kapsam dışı, ya da henüz yapılmadı:

Ses (Voice: TTS/STT)

Konuşma giriş/çıkışı. Birçok framework'te yerleşik; GNL bunu kapsam dışı bırakıyor.

Kanallar (Slack/WhatsApp)

Hazır Slack/WhatsApp türü kanal entegrasyonları. GNL bunları bilerek atlıyor — uygulamanızın altında duran bir katman, kanallar zaten uygulamanızın işi.

No-code / görsel agent editörü

Görsel, sürükle-bırak agent editörü. GNL kod-öncelikli, böyle bir şey sunmuyor.

~16 storage adaptörü

Depolama arka ucu çeşitliliği. GNL'de 4 tane var (InMemory/SQLite/Postgres/Redis); bazı framework'ler çok daha fazlasını sunuyor. Garanti dördünde de aynı, ama seçenek aralığı dar.

ClickHouse observability adaptörü

ClickHouse gibi gözlemlenebilirlik arka uçları için doğrudan adaptör. GNL adlandırılmış hazır ayarlarla OTLP/OTel üzerinden gidiyor — çoğuna ulaşıyor, ama doğrudan adaptör yok.

GNL ne DEĞİLDİR

Beklentiyi netleştirmek konumlanmanın parçası — GNL'in kapsamadığı alanlar:

Framework değiştirici değil

Vercel AI SDK'nın agent döngüsünü sarar; yerine geçmez, generateText/streamText'i değiştirmez.

No-code / görsel builder değil

GNL kod-öncelikli bir katmandır. Durable RAG (@gnldev/rag), workflow ve agent ağları artık kutudan çıkar — ama no-code agent editörü, ses ya da hazır sohbet kanalları sağlamaz.

Telemetri/analitik platformu değil

Phone-home yok; ilke olarak hiçbir çalışma verisi ya da içerik GNL'e gönderilmez.

Zorunlu barındırma değil

Journal kendi veritabanınızda kalır — GNL veriyi asla barındırmaz.

Yerine değil, altına

GNL'in ayırt edici değeri exactly-once ve deterministik replay çekirdeğidir. Üstündeki orkestrasyon yüzeyi, o garantilerin uygulamanın tamamına ulaşması için var — hâlihazırda memnun kullandığınız bir şeyin yerini aldığı iddiası için değil.

Yığınını değiştirme — üstüne dayanıklılık ekle.

Dokümanları oku