GNL 0.17: erken aşamada ve hızlı ilerliyor — API'ler sürümden sürüme değişebilirBize katıl

GNL
Core · Ücretsiz@gnldev/durable

Ç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.

  1. Çekirdek — generateText yerine runDurable: bir araç çağrısı asla iki kez çalışmaz, çöken koşu kaldığı yerden devam eder.
  2. Kayıt — createGnl: adıyla ajanlar, kendi kimliğinle adlanan iş (workKey), onu başlatan çağrıdan uzun yaşayan koşular, onaylar.
  3. Sunucu — createRestApi: her ajan için REST, OpenAPI ve server-sent events; yetkilendirme, limitler ve bütçelerle.
  4. Studio — her koşu bir zaman çizelgesinde, zamanda yolculuk ve fork, onay kuyruğu, playground.
  5. 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.

agent.ts
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.

gnl.config.ts
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.

server.ts
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.json

Express, 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 config

5. 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.

İpucu
Sıfırdan mı başlıyorsun? 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