إنشاء أنظمة متعددة الوكلاء

من التطبيقات الفعّالة للنماذج اللغوية الكبيرة هي موظّفو الدعم المستندون إليها. الوكيل هو نظام يمكنه تنفيذ مهام معقّدة من خلال التخطيط لكيفية تقسيم المهام إلى مهام أصغر، وتنفيذ المهام (بمساعدة طلبات أدوات) التي تتفاعل مع موارد خارجية، مثل قواعد البيانات أو حتى الأجهزة المادية.

في ما يلي بعض المقتطفات من موظّف خدمة عملاء بسيط جدًا تم إنشاؤه باستخدام طلب واحد وعدة أدوات:

const menuLookupTool = ai.defineTool(
  {
    name: 'menuLookupTool',
    description: 'use this tool to look up the menu for a given date',
    inputSchema: z.object({
      date: z.string().describe('the date to look up the menu for'),
    }),
    outputSchema: z.string().describe('the menu for a given date'),
  },
  async (input) => {
    // Retrieve the menu from a database, website, etc.
    // ...
  }
);

const reservationTool = ai.defineTool(
  {
    name: 'reservationTool',
    description: 'use this tool to try to book a reservation',
    inputSchema: z.object({
      partySize: z.coerce.number().describe('the number of guests'),
      date: z.string().describe('the date to book for'),
    }),
    outputSchema: z
      .string()
      .describe(
        "true if the reservation was successfully booked and false if there's" +
          ' no table available for the requested time'
      ),
  },
  async (input) => {
    // Access your database to try to make the reservation.
    // ...
  }
);
const chat = ai.chat({
  model: gemini15Pro,
  system:
    "You are an AI customer service agent for Pavel's Cafe. Use the tools " +
    'available to you to help the customer. If you cannot help the ' +
    'customer with the available tools, politely explain so.',
  tools: [menuLookupTool, reservationTool],
});

يمكن أن تكون بنية بسيطة مثل تلك الموضّحة أعلاه كافية عندما يكون لدى موظّف الدعم بضع إمكانات فقط. ومع ذلك، حتى في المثال المحدود أعلاه، يمكنك ملاحظة أنّ هناك بعض الإمكانات التي يتوقعها العملاء على الأرجح: مثلاً، إدراج الحجوزات الحالية للعميل وإلغاء حجز، وما إلى ذلك. وعندما تنشئ المزيد من الأدوات لتنفيذ هذه الإمكانات الإضافية، تبدأ في مواجهة بعض المشاكل:

  • وكلما أضفت المزيد من الأدوات، زادت قدرة النموذج على استخدام الأداة المناسبة للمهمة بشكلٍ منتظم وصحيح.
  • قد يكون من الأفضل تنفيذ بعض المهام من خلال تبادل الرسائل بين المستخدم وموظّف الدعم بدلاً من إجراء مكالمة واحدة باستخدام الأداة.
  • قد تستفيد بعض المهام من طلب مخصّص. على سبيل المثال، إذا كان العميل يشعر بالاستياء، قد يكون من الأفضل أن يكون أسلوب الردّ من العميل أكثر احترافية، في حين يمكن للموظف الذي يرحّب بالعميل في البداية استخدام أسلوب أكثر ودية وبساطة.

من بين الأساليب التي يمكنك استخدامها للتعامل مع هذه المشاكل التي تنشأ عند إنشاء روبوتات ذكية معقدة هو إنشاء العديد من الروبوتات الذكية المتخصّصة واستخدام روبوت ذكي لأغراض عامة لتفويض المهام إليهم. تتيح لك أداة Genkit استخدام هذه البنية من خلال السماح لك بتحديد طلبات المساعدة كأدوات. يمثّل كل طلب وكيلاً واحدًا متخصّصًا يمتلك مجموعة من الأدوات المتاحة له، وتتوفّر هذه الأدوات بدورها كأدوات لوكيل التنسيق الوحيد الذي يمثّل الواجهه primary الأساسية مع المستخدم.

في ما يلي الشكل الذي قد يبدو عليه نظام متعدّد الوكلاء في نسخة موسّعة من المثال السابق:

// Define a prompt that represents a specialist agent
const reservationAgent = ai.definePrompt(
  {
    name: 'reservationAgent',
    description: 'Reservation Agent can help manage guest reservations',
    tools: [reservationTool, reservationCancelationTool, reservationListTool],
  },
  '{{role "system"}} Help guests make and manage reservations'
);

// Or load agents from .prompt files
const menuInfoAgent = ai.prompt('menuInfoAgent');
const complaintAgent = ai.prompt('complaintAgent');

// The triage agent is the agent that users interact with initially
const triageAgent = ai.definePrompt(
  {
    name: 'triageAgent',
    description: 'Triage Agent',
    tools: [reservationAgent, menuInfoAgent, complaintAgent],
  },
  `{{role "system"}} You are an AI customer service agent for Pavel's Cafe.
  Greet the user and ask them how you can help. If appropriate, transfer to an
  agent that can better handle the request. If you cannot help the customer with
  the available tools, politely explain so.`
);
// Start a chat session, initially with the triage agent
const chat = ai.chat(triageAgent);