Membuat sistem multi-agen

Aplikasi yang efektif dari model bahasa besar adalah agen yang didukung LLM. Agen adalah sistem yang dapat melakukan tugas kompleks dengan merencanakan cara membagi tugas menjadi tugas yang lebih kecil, dan (dengan bantuan panggilan alat) menjalankan tugas yang berinteraksi dengan resource eksternal seperti database atau bahkan perangkat fisik.

Berikut beberapa kutipan dari agen layanan pelanggan yang sangat sederhana yang dibuat menggunakan satu perintah dan beberapa alat:

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],
});

Arsitektur sederhana seperti yang ditampilkan di atas dapat memadai jika agen Anda hanya memiliki beberapa kemampuan. Namun, bahkan untuk contoh terbatas di atas, Anda dapat melihat bahwa ada beberapa kemampuan yang mungkin diharapkan pelanggan: misalnya, mencantumkan reservasi pelanggan saat ini, membatalkan reservasi, dan sebagainya. Saat Anda membuat lebih banyak alat untuk menerapkan kemampuan tambahan ini, Anda mulai mengalami beberapa masalah:

  • Makin banyak alat yang Anda tambahkan, makin banyak Anda meregangkan kemampuan model untuk menggunakan alat yang tepat untuk tugas dengan konsisten dan benar.
  • Beberapa tugas mungkin lebih baik ditayangkan melalui interaksi yang lebih terfokus antara pengguna dan agen, bukan melalui satu panggilan alat.
  • Beberapa tugas mungkin mendapatkan manfaat dari perintah khusus. Misalnya, jika agen Anda merespons pelanggan yang tidak puas, Anda mungkin ingin nadanya lebih profesional, sedangkan agen yang menyapa pelanggan pada awalnya dapat memiliki nada yang lebih ramah dan ringan.

Salah satu pendekatan yang dapat Anda gunakan untuk menangani masalah ini yang muncul saat membuat agen kompleks adalah dengan membuat banyak agen khusus dan menggunakan agen tujuan umum untuk mendelegasikan tugas kepada mereka. Genkit mendukung arsitektur ini dengan memungkinkan Anda menentukan perintah sebagai alat. Setiap perintah mewakili satu agen khusus, dengan serangkaian alat yang tersedia untuknya, dan agen tersebut pada gilirannya tersedia sebagai alat untuk satu agen orkestrasi Anda, yang merupakan antarmuka utama dengan pengguna.

Berikut adalah tampilan versi yang diperluas dari contoh sebelumnya sebagai sistem multi-agen:

// 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);