@oliverlessa/gemini-agent-lib
Version:
Uma biblioteca NodeJS para criar agentes de IA com Gemini LLM
60 lines (48 loc) • 2.52 kB
JavaScript
const debug = require('./debug').create('gemini-agent-lib:orchestrator:sequential');
class SequentialAgentChain {
constructor(agents) {
if (!Array.isArray(agents) || agents.length === 0) {
throw new Error("SequentialAgentChain precisa de um array de agentes não vazio.");
}
this.agents = agents;
}
async run(initialInput) {
let currentInput = initialInput;
let stepResults = []; // Para armazenar os resultados de cada agente (opcional, para debug ou logging)
debug("--- Iniciando Cadeia Sequencial de Agentes ---");
for (let i = 0; i < this.agents.length; i++) {
const agent = this.agents[i];
debug(`**Agente ${i + 1}: ${agent.role} - Iniciando tarefa... **`);
// Suporte para formatadores de tarefa personalizados
let agentTask;
if (agent.taskFormatter && typeof agent.taskFormatter === 'function') {
// Usar formatador personalizado se disponível
agentTask = agent.taskFormatter(currentInput, agent);
} else if (agent.enableGoogleSearch === true) {
// Caso especial para Google Search
agentTask = `"${currentInput}"`;
} else {
// Comportamento padrão - manter o comportamento original
agentTask = currentInput;
}
agent.task = agentTask; // Define a tarefa formatada para o agente
try {
const output = await agent.executeTask();
debug(`**Agente ${i + 1}: ${agent.role} - Tarefa Concluída.**`);
debug(`Saída do Agente ${i + 1}: %o`, output);
stepResults.push({
agentRole: agent.role,
input: currentInput,
output: output
}); // Armazena o resultado do passo
currentInput = output; // A saída do agente atual se torna a entrada para o próximo agente
} catch (error) {
console.error(`Erro ao executar Agente ${i + 1} (${agent.role}) na cadeia sequencial:`, error);
return `Erro na cadeia de agentes no Agente ${i + 1} (${agent.role}): ${error.message}`; // Propaga o erro
}
}
debug("--- Cadeia Sequencial de Agentes Concluída ---");
return currentInput; // Retorna a saída final do último agente da cadeia
}
}
module.exports = SequentialAgentChain;