@oliverlessa/gemini-agent-lib
Version:
Uma biblioteca NodeJS para criar agentes de IA com Gemini LLM
132 lines (95 loc) • 5.13 kB
Markdown
# Gerenciamento de Dependências entre Agentes no AutoGenOrchestrator
Este documento explica como o `AutoGenOrchestrator` gerencia dependências entre agentes, garantindo que eles sejam acionados na ordem correta quando a tarefa de um agente depende da saída de outro.
## Visão Geral
O sistema de dependências permite que o orquestrador:
1. Identifique quais sub-tarefas dependem de outras
2. Ordene a execução das sub-tarefas para respeitar essas dependências
3. Passe os resultados de sub-tarefas anteriores como contexto para sub-tarefas dependentes
## Como Funciona
### 1. Definição de Dependências no Plano
Durante a fase de planejamento, o orquestrador instrui o LLM a identificar dependências entre sub-tarefas. Cada sub-tarefa recebe:
- Um identificador único (`id`)
- Um array de dependências (`dependsOn`) que lista os IDs de outras sub-tarefas das quais ela depende
Exemplo de plano com dependências:
```json
{
"subTasks": [
{
"id": "task1",
"taskDescription": "Pesquisar informações sobre IA generativa",
"agentRole": "Pesquisador",
"agentObjective": "Coletar informações atualizadas sobre IA generativa",
"agentTaskPrompt": "Pesquise e liste os principais modelos de IA generativa atuais",
"enableGoogleSearch": true,
"dependsOn": [] // Não depende de nenhuma outra tarefa
},
{
"id": "task2",
"taskDescription": "Analisar tendências com base nas informações coletadas",
"agentRole": "Analista",
"agentObjective": "Identificar padrões e tendências nos dados coletados",
"agentTaskPrompt": "Analise as informações sobre modelos de IA generativa e identifique tendências",
"enableGoogleSearch": false,
"dependsOn": ["task1"] // Depende da tarefa 1
}
]
}
```
### 2. Ordenação Topológica
O orquestrador usa um algoritmo de ordenação topológica para determinar a sequência correta de execução das sub-tarefas:
1. Constrói um grafo direcionado onde cada nó é uma sub-tarefa
2. Adiciona arestas de uma sub-tarefa para todas as sub-tarefas que dependem dela
3. Calcula o grau de entrada de cada nó (número de dependências)
4. Inicia com nós de grau zero (sem dependências)
5. Remove um nó, diminui o grau de seus vizinhos, e adiciona à fila os novos nós de grau zero
6. Repete até processar todos os nós ou detectar um ciclo
```
Exemplo de Grafo:
task1 → task2 → task4
↓
task3
```
Ordem de execução: `task1` → `task2` → `task3` → `task4`
### 3. Passagem de Contexto
Quando uma sub-tarefa depende de outras, o orquestrador:
1. Recupera os resultados das sub-tarefas das quais ela depende
2. Adiciona esses resultados ao prompt da sub-tarefa atual
3. Permite que o agente use essas informações para executar sua tarefa
Exemplo de prompt com contexto de dependência:
```
Analise as informações sobre modelos de IA generativa e identifique tendências.
**Resultados de Tarefas Anteriores:**
--- Resultado da Tarefa task1 ---
Os principais modelos de IA generativa atuais são:
1. GPT-4 (OpenAI): Modelo multimodal capaz de processar texto e imagens...
2. Claude 3 (Anthropic): Focado em diálogo seguro e útil...
3. Gemini (Google): Modelo multimodal com capacidades avançadas...
...
```
### 4. Detecção de Ciclos
O sistema detecta ciclos de dependência (quando A depende de B, B depende de C, e C depende de A) e emite um aviso. Quando um ciclo é detectado, o sistema usa a ordem original das sub-tarefas no plano.
## Como Usar
Para aproveitar o sistema de dependências, basta formular a tarefa de forma que as dependências sejam claras:
```javascript
const userTask = `
Crie um artigo técnico sobre Inteligência Artificial Generativa seguindo estas etapas:
1. Primeiro, pesquise e liste os principais modelos de IA generativa atuais.
2. Em seguida, com base nos modelos identificados, analise as tendências.
3. Depois, usando as tendências identificadas, faça previsões sobre o futuro.
4. Por fim, com base em toda a análise anterior, elabore um artigo técnico completo.
Observe que cada etapa depende da anterior, então é importante seguir a ordem correta.
`;
const orchestrator = new AutoGenOrchestrator({...});
const resultado = await orchestrator.orchestrateTask(userTask);
```
## Dicas para Formular Tarefas com Dependências
1. **Seja explícito sobre a ordem**: Indique claramente quando uma etapa depende de outra
2. **Use numeração sequencial**: Enumere as etapas para indicar a ordem
3. **Use frases de conexão**: "Com base em", "Utilizando os resultados de", "A partir das informações anteriores"
4. **Mencione explicitamente dependências**: "Esta etapa depende da anterior"
## Limitações Atuais
- Não há execução paralela de sub-tarefas independentes
- Ciclos de dependência são detectados mas não resolvidos automaticamente
- Dependências complexas (AND/OR) não são suportadas diretamente
## Exemplo Completo
Veja o arquivo `test-auto-gen-orchestrator-dependencies.js` para um exemplo completo de como usar o sistema de dependências entre agentes.