Agent Frameworks

Mastra برای پخش داده‌های بلادرنگ: ساخت عامل‌های رویدادمحور با یکپارچه‌سازی WebSocket

منظر توسعه برنامه‌های هوش مصنوعی به سرعت از پردازش دسته‌ای به پاسخ‌دهی بلادرنگ تغییر می‌کند. در برنامه‌های مدرن سازمانی و مصرف‌کننده، عامل‌های هوش مصنوعی نمی‌توانند برای واکنش نشان دادن، صبر کنند تا یک نشست کامل به پایان برسد. آن‌ها باید داده‌های پخش‌شونده را پردازش کرده، وضعیت را در طول تعاملات پیوسته حفظ کنند و بازخورد زیر یک ثانیه ارائه دهند. اینجاست که Mastra، یک چارچوب عامل هوش مصنوعی مبتنی بر TypeScript، می‌درخشد. با پشتیبانی بومی از جریان‌های کاری ناهمگام و یکپارچه‌سازی با لایه‌های انتقال بلادرنگ مانند WebSocket، Mastra به توسعه‌دهندگان امکان می‌دهد عامل‌های رویدادمحوری بسازند که واقعاً زنده به نظر می‌رسند.

چرا معماری رویدادمحور برای عامل‌های هوش مصنوعی اهمیت دارد؟

مدل‌های سنتی درخواست-پاسخ برای هوش مصنوعی گفتگویی یا سیستم‌های پایش داده‌محور نامناسب هستند. یک رویکرد رویدادمحور به عامل اجازه می‌دهد تا به رویدادهای گسسته - مانند یک پیام جدید کاربر، یک خوانش حسگر یا یک تیک مالی - بدون مسدود کردن رشته اصلی واکنش نشان دهد. وقتی با WebSocket ترکیب شود که کانال‌های ارتباطی تمام‌دوبلکس را فراهم می‌کنند، تأخیر بین وقوع رویداد و اقدام عامل به حداقل می‌رسد. این برای برنامه‌هایی مانند ربات‌های معاملات زنده، پشتیبانی مشتری بلادرنگ یا دستیاران کدنویسی مشارکتی که در آن‌ها هر میلی‌ثانیه اهمیت دارد، حیاتی است.

راه‌اندازی عامل Mastra

Mastra با امکان تعریف ابزارها، پرامپت‌ها و منطق به صورت اعلانی، ایجاد عامل‌های هوش مصنوعی را ساده می‌کند. برای شروع، باید بسته اصلی را نصب کرده و یک ساختار عامل پایه را راه‌اندازی کنید. عامل مسئول پردازش پیام‌های WebSocket ورودی و تولید پاسخ‌های زمینه‌ای خواهد بود.

import { createAgent } from 'mastra';
import { openai } from '@mastra/core/models';

export const realtimeAgent = createAgent({
  name: 'Realtime Support Agent',
  description: 'An agent that processes real-time user queries',
  model: openai('gpt-4o'),
  instructions: `
    You are a helpful assistant. 
    Keep your responses concise as they are being streamed.
    Acknowledge immediate user intents before providing detailed answers.
  `,
  tools: {
    lookupOrder: async ({ orderId }) => {
      // Simulate a fast database lookup
      return { status: 'processing', estimatedTime: '2 days' };
    }
  }
});

یکپارچه‌سازی WebSocket با Mastra

قدرت این تنظیم در نحوه اتصال عامل به کلاینت نهفته است. ما از یک سرور WebSocket برای حفظ یک اتصال پایدار استفاده می‌کنیم. وقتی پیامی دریافت می‌شود، ما عامل Mastra را فعال می‌کنیم تا پاسخ خود را مستقیماً به سوکت پخش کند. این کار از سربار بستن و باز کردن مجدد اتصالات HTTP برای هر تعامل جلوگیری می‌کند.

در زیر یک مثال عملی با استفاده از Node.js و کتابخانه ws برای مدیریت لایه WebSocket آورده شده است. توجه کنید که چگونه از قابلیت‌های پخش Mastra استفاده می‌کنیم تا توکن‌ها به محض تولید به کلاینت ارسال شوند.

import WebSocket, { WebSocketServer } from 'ws';
import { server } from 'http';
import { realtimeAgent } from './agent'; // Import from above

const server = http.createServer();
const wss = new WebSocketServer({ server });

wss.on('connection', (ws) => {
  console.log('Client connected');

  ws.on('message', async (message) => {
    try {
      const userPrompt = message.toString();
      
      // Use Mastra's stream method for real-time output
      const stream = await realtimeAgent.stream(userPrompt);

      // Forward chunks as they arrive
      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('Agent error:', error);
      ws.send(JSON.stringify({ type: 'error', message: 'Something went wrong' }));
    }
  });

  ws.on('close', () => {
    console.log('Client disconnected');
  });
});

server.listen(8080, () => {
  console.log('WebSocket server running on ws://localhost:8080');
});

مدیریت وضعیت و هم‌زمانی

در سناریوهای بلادرنگ، ممکن است چندین پیام به سرعت پشت سر هم دریافت شوند. عامل‌های Mastra به طور پیش‌فرض برای هر فراخوانی بی‌وضعیت هستند، اما می‌توانند از طریق ماژول‌های حافظه یا مخازن وضعیت خارجی زمینه را حفظ کنند. برای سرورهای WebSocket با هم‌زمانی بالا، حیاتی است که اطمینان حاصل شود هر اتصال WebSocket به یک زمینه عامل یا شناسه نشست خاص نگاشت می‌شود. این کار از نشت داده بین کاربران جلوگیری می‌کند و اطمینان می‌بخشد که "تاریخچه گفتگو" به درستی به اتصال کلاینت خاص محدود می‌شود. می‌توانید مثال بالا را با عبور دادن sessionId از متادیتای WebSocket به گزینه‌های عامل Mastra برای بازیابی تعاملات گذشته مرتبط گسترش دهید.

نتیجه‌گیری

ساخت عامل‌های هوش مصنوعی بلادرنگ بیشتر از صرفاً اتصال یک LLM به یک پایگاه داده نیاز دارد؛ این کار به یک معماری رویدادمحور قوی نیاز دارد که بتواند اتصالات پایدار و داده‌های پخش‌شونده را مدیریت کند. Mastra لایه انتزاعی ایده‌آل را برای مدیریت منطق عامل فراهم می‌کند، در حالی که WebSocket مکانیزم انتقال را برای ارتباط با تأخیر کم فراهم می‌کند. با ترکیب این فناوری‌ها، توسعه‌دهندگان می‌توانند برنامه‌های پاسخگو و هوشمندی ایجاد کنند که در بلادرنگ به جهان واکنش نشان می‌دهند و تجربه کاربری برتری را در محیط‌های پویا ارائه می‌دهند.

Share: