Um aplicativo poderoso de modelos de linguagem grandes são agentes com LLM. Um agente é um sistema que pode realizar tarefas complexas planejando como dividi-las em tarefas menores e (com a ajuda da chamada de ferramenta) executar tarefas que interagem com recursos externos, como bancos de dados ou até dispositivos físicos.
Confira alguns trechos de um agente de atendimento ao cliente muito simples criado usando uma única solicitação e várias ferramentas:
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],
});
Uma arquitetura simples, como a mostrada acima, pode ser suficiente quando o agente tem apenas alguns recursos. No entanto, mesmo no exemplo limitado acima, é possível ver que há alguns recursos que os clientes provavelmente esperam: por exemplo, listar as reservas atuais do cliente, cancelar uma reserva e assim por diante. À medida que você cria mais e mais ferramentas para implementar esses recursos adicionais, começa a encontrar alguns problemas:
- Quanto mais ferramentas você adicionar, maior será a capacidade do modelo de usar a ferramenta certa para o trabalho de forma consistente e correta.
- Algumas tarefas podem ser melhor atendidas por meio de uma troca mais focada entre o usuário e o agente, em vez de uma única chamada de ferramenta.
- Algumas tarefas podem se beneficiar de uma solicitação especializada. Por exemplo, se o agente estiver respondendo a um cliente insatisfeito, talvez seja melhor que o tom seja mais profissional, enquanto o agente que cumprimenta o cliente inicialmente pode ter um tom mais amigável e descontraído.
Uma abordagem que você pode usar para lidar com esses problemas que surgem ao criar agentes complexos é criar muitos agentes especializados e usar um agente de uso geral para delegar tarefas a eles. O Genkit oferece suporte a essa arquitetura, permitindo que você especifique comandos como ferramentas. Cada comando representa um único agente especializado, com um conjunto de ferramentas disponível. Esses agentes estão disponíveis como ferramentas para o único agente de orquestração, que é a interface principal com o usuário.
Confira como uma versão expandida do exemplo anterior pode parecer como um sistema multiagente:
// 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);