Mehragentensysteme erstellen

Eine leistungsstarke Anwendung von Large Language Models sind LLM-gestützte Agenten. Ein Agent ist ein System, das komplexe Aufgaben ausführen kann, indem es plant, wie Aufgaben in kleinere unterteilt werden, und (mithilfe von Toolaufrufen) Aufgaben ausführt, die mit externen Ressourcen wie Datenbanken oder sogar physischen Geräten interagieren.

Hier sind einige Auszüge aus einem sehr einfachen Kundenservicemitarbeiter, der mit einem einzigen Prompt und mehreren Tools erstellt wurde:

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

Eine einfache Architektur wie die oben gezeigte kann ausreichen, wenn Ihr Bot nur wenige Funktionen hat. Selbst in diesem begrenzten Beispiel oben sehen Sie, dass es einige Funktionen gibt, die Kunden wahrscheinlich erwarten würden: z. B. die aktuellen Buchungen des Kunden aufzulisten oder eine Buchung zu stornieren. Je mehr Tools Sie zur Implementierung dieser zusätzlichen Funktionen erstellen, desto mehr Probleme treten auf:

  • Je mehr Tools Sie hinzufügen, desto schwieriger wird es für das Modell, das richtige Tool für die Aufgabe konsistent und korrekt zu verwenden.
  • Einige Aufgaben lassen sich am besten durch einen gezielten Austausch zwischen Nutzer und Kundenservicemitarbeiter erledigen, anstatt durch einen einzelnen Tool-Aufruf.
  • Für einige Aufgaben kann ein spezieller Prompt hilfreich sein. Wenn Ihr Kundenservicemitarbeiter beispielsweise auf einen unzufriedenen Kunden reagiert, sollte er einen eher sachlichen Ton anschlagen, während der Kundenservicemitarbeiter, der den Kunden zuerst begrüßt, einen freundlicheren und lockeren Ton haben kann.

Eine Möglichkeit, diese Probleme beim Erstellen komplexer Bots zu beheben, besteht darin, viele spezialisierte Bots zu erstellen und Aufgaben mit einem allgemeinen Bot zu delegieren. Genkit unterstützt diese Architektur, indem Sie Prompts als Tools angeben können. Jeder Prompt steht für einen einzelnen spezialisierten Agenten mit eigenen Tools. Diese Agenten sind wiederum als Tools für den einzelnen Orchestration-Agenten verfügbar, der die primäre Schnittstelle zum Nutzer ist.

So könnte eine erweiterte Version des vorherigen Beispiels als Multi-Agenten-System aussehen:

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