Çekirdekle başla. Gerisini ihtiyacın olunca al.
GNL, temelinden dayanıklı tam bir agent framework'ü. Hepsini kullanabilir ya da sadece çekirdeği mevcut agent'ına takabilirsin — ve birinden ötekine adım adım geçebilirsin.
Beş adım, hiçbiri yeniden yazma değil#
Her adım bir öncekinin verdiğini korur ve üstüne ekler. Herhangi birinde durabilirsin.
- Çekirdek —
generateTextyerinerunDurable: bir araç çağrısı asla iki kez çalışmaz, çöken koşu kaldığı yerden devam eder. - Kayıt —
createGnl: adıyla ajanlar, kendi kimliğinle adlanan iş (workKey), onu başlatan çağrıdan uzun yaşayan koşular, onaylar. - Sunucu —
createRestApi: her ajan için REST, OpenAPI ve server-sent events; yetkilendirme, limitler ve bütçelerle. - Studio — her koşu bir zaman çizelgesinde, zamanda yolculuk ve fork, onay kuyruğu, playground.
- Paketler — bellek, iş akışları, RAG, değerlendirme, MCP, işler, kanallar: her biri çekirdeğin garantilerini taşır.
1. Çekirdek, mevcut agent'ının içinde#
Argümanlar generateText'inkiler. Eklenen tek şey bu işin kimliği ve kendi veritabanındaki bir journal.
import { runDurable, gnlTool } from '@gnldev/durable';
import { SqliteStorage } from '@gnldev/durable/sqlite';
import { openai } from '@ai-sdk/openai';
import { tool } from 'ai';
import { z } from 'zod';
const storage = new SqliteStorage('runs.db');
const refund = gnlTool(
tool({
description: 'Refund an order',
inputSchema: z.object({ orderId: z.string() }),
execute: async ({ orderId }) => ({ refunded: orderId }),
}),
{ sideEffect: true, idempotency: 'args' },
);
const res = await runDurable({
runId: 'refund-order-42', // the id of THIS work — call again with it after a crash
journal: storage.runs,
model: openai('gpt-4o'),
tools: { refund },
prompt: 'Refund order 42',
});Çökmeden sonra aynı kimlikle tekrar çağır: biten adımlar journal'dan yeniden oynatılır, iade ikinci kez yapılmaz, yalnızca hiç bitmeyen kısım çalışır.
2. Kayıt: adıyla ajanlar, kendi kimliğinle iş#
Ajanı bir kez adlandır, her işi kendi kimliğinle — bir sipariş, bir talep — adlandır; motor koşuyu ondan türetir. Koşu artık onu başlatan çağrıdan ayrı yürür: kapanan bir sekme ya da kopan bir bağlantı okumayı bitirir, koşuyu değil.
import { createGnl } from '@gnldev/durable';
const config = {
storage,
agents: {
support: { model: openai('gpt-4o'), system: 'You handle refunds. Ask before you refund.', tools: { refund } },
},
};
const gnl = createGnl(config);
const r = await gnl.run('support', { workKey: 'order-42', prompt: 'Refund order 42', resourceId: 'customer-7' });3. Sunucu: her ajan HTTP üstünden#
Aynı config OpenAPI ve server-sent events'li bir REST API olur. Üretimde yetkilendirme olmadan açılmayı reddeder.
import { createRestApi } from '@gnldev/server';
import { roleAuth } from '@gnldev/auth';
import { serve } from '@hono/node-server';
const api = createRestApi(config, {
title: 'Support agents',
auth: roleAuth({ client: { token: process.env.GNL_CLIENT_TOKEN } }),
});
serve({ fetch: api.fetch, port: 3000 }); // POST /agents/support/run, /agents/support/stream, /openapi.jsonExpress, Fastify, Koa, Nest ya da Next.js'te: REST API sayfası.
4. Studio: izle, onayla, zamanda geri git#
Studio aynı journal'ı okur: her koşu bir zaman çizelgesinde, onay bekleyen çağrılar, zamanda yolculuk ve fork, ve config'indeki ajanları çalıştıran bir playground.
npx gnl studio --config gnl.config.ts # Studio + the playground for the agents in your config5. Paketler: ihtiyacın olanı al#
Her paket diğerleriyle birlikte de tek başına da çalışır; eklediği bir araç ya da adım çekirdeğinki gibi journal'a yazılır — çökmeden sonra yeniden oynatılır, asla iki kez çalışmaz.
- @gnldev/memory — konuşma geçmişi, çalışma belleği, hatırlama
- @gnldev/workflow — yeniden denemeli çok adımlı süreçler
- @gnldev/rag — belgelerinden cevaplar
- @gnldev/evals — ölçülen kalite ve CI'da bir kapı
- @gnldev/mcp — MCP üstünden dış araçlar
- @gnldev/queue — arka plan işleri, zamanlamalar ve olaylar
- @gnldev/channels — Slack ve Telegram'da ajanlar
- @gnldev/client — tipli istemci ve React hook'ları
npm create gnl@latest my-agent 2.–4. adımları tek seferde kurar.Kaynaklar#
Bu sayfadaki örnekler depoda, derlenmiş paketlere karşı tip kontrolünden geçiyor: docs/CORE-TO-FRAMEWORK.md