Yapay zeka uygulama geliştirme alanı, toplu işlemden gerçek zamanlı tepkisel yapıya hızla kayıyor. Modern kurumsal ve tüketici uygulamalarında yapay zeka ajanları, tepki vermeden önce oturumun tamamen bitmesini bekleyemez. Akış verilerini işlemeli, sürekli etkileşimler boyunca durumu korumalı ve saniyenin altı geri bildirim sağlamalıdır. İşte bu noktada, TypeScript öncelikli bir yapay zeka ajan çerçevesi olan Mastra öne çıkıyor. Asenkron iş akışlarını ve WebSockets gibi gerçek zamanlı taşıma katmanlarıyla entegrasyonları yerel olarak destekleyerek Mastra, geliştiricilerin gerçekten canlı hissettiren olay odaklı ajanlar oluşturmasına olanak tanır.
Yapay Zeka Ajanları İçin Neden Olay Odaklı Mimari Önemlidir?
Geleneksel istek-yanıt modelleri, sohbet tabanlı yapay zeka veya veri yoğun izleme sistemleri için uygun değildir. Olay odaklı bir yaklaşım, ajanın ana iş parçacığını bloklamadan, yeni bir kullanıcı mesajı, sensör okuması veya finansal işlem gibi ayrık olaylara tepki vermesini sağlar. Tam çift yönlü iletişim kanalları sunan WebSockets ile birleştirildiğinde, olayın gerçekleşmesi ile ajanın eylemi arasındaki gecikme en aza indirgenir. Her milisaniyenin önemli olduğu canlı işlem botları, gerçek zamanlı müşteri desteği veya işbirlikçi kodlama asistanları gibi uygulamalar için bu durum kritik öneme sahiptir.
Mastra Ajanının Kurulumu
Mastra, araçları, istemleri ve mantığı beyan edici bir şekilde tanımlamanıza izin vererek yapay zeka ajanlarının oluşturulmasını basitleştirir. Başlamak için, çekirdek paketi yüklemeniz ve temel bir ajan yapısı kurmanız gerekir. Ajan, gelen WebSocket mesajlarını işleme ve bağlamsal yanıtlar üretme sorumluluğunu üstlenecektir.
import { createAgent } from 'mastra';
import { openai } from '@mastra/core/models';
export const realtimeAgent = createAgent({
name: 'Gerçek Zamanlı Destek Ajanı',
description: 'Gerçek zamanlı kullanıcı sorgularını işleyen bir ajan',
model: openai('gpt-4o'),
instructions: `
Yardımsever bir asistansınız.
Yanıtlarınız akış halinde olduğu için kısa tutun.
Detaylı cevaplar vermeden önce anlık kullanıcı niyetlerini onaylayın.
`,
tools: {
lookupOrder: async ({ orderId }) => {
// Hızlı bir veritabanı aramasını simüle et
return { status: 'işleniyor', tahminiSure: '2 gün' };
}
}
});
Mastra ile WebSocket Entegrasyonu
Bu kurulumun gücü, ajanı istemciye nasıl bağladığımızda yatmaktadır. Kalıcı bir bağlantıyı sürdürmek için bir WebSocket sunucusu kullanıyoruz. Bir mesaj geldiğinde, Mastra ajanını tetikleyerek yanıtını doğrudan sokete akış halinde geri gönderiyoruz. Bu, her etkileşim için HTTP bağlantılarını kapatıp yeniden açmanın getirdiği yükten kaçınmayı sağlar.
Aşağıda, WebSocket katmanını işlemek için Node.js ve ws kütüphanesini kullanan pratik bir örnek bulunmaktadır. Tokenlar oluşturuldukça istemciye göndermek için Mastra'nın akış yeteneklerini nasıl kullandığımıza dikkat edin.
import WebSocket, { WebSocketServer } from 'ws';
import { server } from 'http';
import { realtimeAgent } from './agent'; // Yukarıdaki yerden içe aktar
const server = http.createServer();
const wss = new WebSocketServer({ server });
wss.on('connection', (ws) => {
console.log('İstemci bağlandı');
ws.on('message', async (message) => {
try {
const userPrompt = message.toString();
// Gerçek zamanlı çıktı için Mastra'nın stream metodunu kullan
const stream = await realtimeAgent.stream(userPrompt);
// Parçalar geldikçe ilet
for await (const chunk of stream) {
if (chunk.type === 'text-delta') {
ws.send(JSON.stringify({
type: 'token',
content: chunk.text
}));
}
}
ws.send(JSON.stringify({ type: 'done' }));
} catch (error) {
console.error('Ajan hatası:', error);
ws.send(JSON.stringify({ type: 'error', message: 'Bir şeyler ters gitti' }));
}
});
ws.on('close', () => {
console.log('İstemci bağlantısı kesildi');
});
});
server.listen(8080, () => {
console.log('WebSocket sunucusu ws://localhost:8080 üzerinde çalışıyor');
});
Durum ve Eşzamanlılığın Yönetimi
Gerçek zamanlı senaryolarda, birden fazla mesaj art arda hızla gelebilir. Mastra ajanları varsayılan olarak her çağrıda durumdan bağımsızdır (stateless), ancak bellek modülleri veya harici durum depoları aracılığıyla bağlamı koruyabilirler. Yüksek eşzamanlılıklı WebSocket sunucuları için, her WebSocket bağlantısının belirli bir ajan bağlamına veya oturum kimliğine (session ID) eşlenmesini sağlamak kritiktir. Bu, kullanıcılar arasında veri sızıntısını önler ve "sohbet geçmişinin" belirli istemci bağlantısına doğru şekilde kapsamlı hale getirilmesini sağlar. Yukarıdaki örneği, WebSocket meta verilerinden sessionId'yi Mastra ajanının seçeneklerine geçirerek ilgili geçmiş etkileşimleri almak üzere genişletebilirsiniz.
Sonuç
Gerçek zamanlı yapay zeka ajanları oluşturmak, bir LLM'i bir veritabanına bağlamaktan fazlasını gerektirir; kalıcı bağlantıları ve akış verilerini işleyebilecek sağlam bir olay odaklı mimari talep eder. Mastra, ajan mantığını yönetmek için ideal soyutlama katmanını sağlarken, WebSockets düşük gecikmeli iletişim için taşıma mekanizmasını sunar. Bu teknolojileri birleştirerek geliştiriciler, dinamik ortamlarda üstün bir kullanıcı deneyimi sunan, dünyaya gerçek zamanlı tepki veren, tepkisel ve zeki uygulamalar oluşturabilir.