Una aplicación potente de los modelos de lenguaje grandes son los agentes potenciados por LLM. Un agente es un sistema que puede llevar a cabo tareas complejas mediante la planificación de cómo dividirlas en tareas más pequeñas y (con la ayuda de las llamadas a herramientas) ejecutar tareas que interactúan con recursos externos, como bases de datos o incluso dispositivos físicos.
Estos son algunos extractos de un agente de atención al cliente muy simple creado con una sola instrucción y varias herramientas:
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],
});
Una arquitectura simple como la que se muestra más arriba puede ser suficiente cuando tu agente solo tiene algunas capacidades. Sin embargo, incluso en el ejemplo limitado anterior, puedes ver que hay algunas funciones que los clientes probablemente esperarían: por ejemplo, mostrar las reservas actuales del cliente, cancelar una reserva, etcétera. A medida que compilas cada vez más herramientas para implementar estas funciones adicionales, comienzas a encontrar algunos problemas:
- Cuantas más herramientas agregues, más ampliarás la capacidad del modelo para usar la herramienta correcta para el trabajo de forma coherente y correcta.
- Es posible que algunas tareas se realicen mejor a través de un intercambio más enfocado entre el usuario y el agente, en lugar de una sola llamada a la herramienta.
- Algunas tareas podrían beneficiarse de una instrucción especializada. Por ejemplo, si tu agente responde a un cliente disconforme, es posible que quieras que su tono sea más profesional, mientras que el agente que saluda al cliente inicialmente puede tener un tono más amigable y alegre.
Un enfoque que puedes usar para abordar estos problemas que surgen cuando se compilan agentes complejos es crear muchos agentes especializados y usar un agente de propósito general para delegarles tareas. Genkit admite esta arquitectura, ya que te permite especificar instrucciones como herramientas. Cada instrucción representa un solo agente especializado, con su propio conjunto de herramientas disponibles, y esos agentes, a su vez, están disponibles como herramientas para tu único agente de orquestación, que es la interfaz principal con el usuario.
A continuación, se muestra cómo se vería una versión expandida del ejemplo anterior como un sistema de varios agentes:
// 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);