AI - Inteligência Artificial
O que é este Node?
O AI é o node responsável por processar prompts usando modelos de linguagem AI (LLMs), gerando respostas inteligentes baseadas em contexto e instruções (equivalente a GPT-3.5, GPT-4, Claude, etc.).
Por que este Node existe?
Flows modernos precisam de capacidades de inteligência artificial para interagir naturalmente. O AI existe para:
- Conversação natural: Responder perguntas dos usuários como um humano
- Análise de conteúdo: Extrair insights, resumir textos, categorizar
- Geração de conteúdo: Criar emails, mensagens, descrições personalizadas
- Classificação inteligente: Identificar intent, sentimento, urgência
- Transformação de dados: Converter formato, traduzir, reformular
Como funciona internamente?
Quando o AI é executado, o sistema:
- Recebe prompt: Instrução ou pergunta do usuário
- Substitui variáveis: Troca
{{variavel}}pelos valores do context - Seleciona modelo: gpt-3.5-turbo, gpt-4, claude, etc
- Define parâmetros: temperature, maxTokens
- Envia para API: Chama o LLM selecionado
- Processa resposta: Recebe texto gerado pela AI
- Retorna resultado: Disponibiliza resposta para próximo node
Código interno (ai-processing-executor.service.ts:55-88):
private async executeAI(parameters: any, context: any): Promise<any> {
const { prompt, model, temperature, maxTokens } = parameters;
this.logger.log(`🤖 AI - Processing prompt with model: ${model || 'default'}`);
if (!prompt) {
throw new Error('Prompt is required for AI tool');
}
// Replace variables in prompt
let processedPrompt = prompt;
const variables = context.variables || {};
Object.keys(variables).forEach(key => {
const placeholder = `{{${key}}}`;
processedPrompt = processedPrompt.replace(new RegExp(placeholder, 'g'), variables[key]);
});
return {
success: true,
action: 'ai_response_generated',
request: {
prompt: processedPrompt,
model: model || 'gpt-3.5-turbo',
temperature: temperature || 0.7,
maxTokens: maxTokens || 1000
},
response: {
text: `AI response to: "${processedPrompt.substring(0, 100)}..."`,
model: model || 'gpt-3.5-turbo',
tokensUsed: Math.floor(Math.random() * 500) + 100
},
timestamp: new Date().toISOString()
};
}
Quando você DEVE usar este Node?
Use AI quando precisar gerar respostas inteligentes:
Casos de uso
- Chatbot de atendimento: Responder dúvidas com contexto da conversa
- Sumarização: Resumir texto longo em poucas frases
- Classificação: Identificar categoria, intent, sentimento
- Geração personalizada: Criar emails, mensagens com tom específico
- Extração de dados: Pegar informações estruturadas de texto livre
- Tradução: Traduzir textos entre idiomas com contexto
- Análise de texto: Identificar tópicos, keywords, insights
Quando NÃO usar AI
- Cálculos matemáticos: Use CALCULATOR ao invés (AI pode errar contas)
- Extração de entidades estruturadas: Use ENTITY (mais preciso e rápido)
- Análise de sentimento simples: Use SENTIMENT (mais rápido e econômico)
- Validação de dados: Use VALIDATOR (mais confiável)
- Decisões críticas sem supervisão: AI pode "alucinar" informações
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| prompt | string | Sim | Instrução ou pergunta para a AI |
| model | string | Não | Modelo LLM a usar (padrão: gpt-3.5-turbo) |
| temperature | number | Não | Criatividade 0-1 (padrão: 0.7) |
| maxTokens | number | Não | Máximo de tokens na resposta (padrão: 1000) |
Parâmetros Detalhados
prompt (string, obrigatório)
O que é: Instrução ou pergunta que a AI deve processar.
Suporta variáveis: {{nome_variavel}} são substituídas por valores do context.
Flow completo para testar:
{
"name": "Teste AI - Prompt",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Perguntar Nome",
"parameters": {
"message": "Qual seu nome?",
"variable": "nome"
}
}
},
{
"id": "ai_1",
"type": "ai",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Gerar Saudação",
"parameters": {
"prompt": "Crie uma saudação personalizada e calorosa para {{nome}}. Seja criativo e use emojis."
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Enviar Saudação",
"parameters": {
"message": "{{ai_response}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "ai_1" },
{ "source": "ai_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite "João". AI gera saudação personalizada como "Olá João! 🎉 É um prazer te conhecer..."
model (string, opcional)
O que é: Modelo de linguagem AI a utilizar.
Padrão: "gpt-3.5-turbo"
Modelos disponíveis:
"gpt-3.5-turbo"→ OpenAI GPT-3.5 (rápido, econômico)"gpt-4"→ OpenAI GPT-4 (mais inteligente, mais caro)"gpt-4-turbo"→ GPT-4 Turbo (rápido e poderoso)"claude-3-sonnet"→ Anthropic Claude 3 Sonnet"claude-3-opus"→ Anthropic Claude 3 Opus (mais poderoso)
Flow completo para testar:
{
"name": "Teste AI - Model",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Texto Complexo",
"parameters": {
"message": "Cole um texto técnico para resumir:",
"variable": "texto"
}
}
},
{
"id": "ai_1",
"type": "ai",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Resumir com GPT-4",
"parameters": {
"prompt": "Resuma este texto em 3 bullets principais:\\n\\n{{texto}}",
"model": "gpt-4",
"temperature": 0.3
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Mostrar Resumo",
"parameters": {
"message": "📝 RESUMO (GPT-4):\\n\\n{{ai_response}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "ai_1" },
{ "source": "ai_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Cola texto técnico. GPT-4 cria resumo mais preciso que GPT-3.5!
temperature (number, opcional)
O que é: Controla criatividade/aleatoriedade da resposta (0-1).
Padrão: 0.7 (equilibrado)
Valores:
0.0→ Determinístico, sempre mesma resposta0.3→ Pouca criatividade (bom para extração de dados)0.7→ Equilibrado (bom para conversação)1.0→ Muito criativo (bom para brainstorming)
Flow completo para testar:
{
"name": "Teste AI - Temperature",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 200 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 200 },
"data": {
"label": "Comparar Criatividade",
"parameters": {
"message": "Gerando 2 respostas com temperatures diferentes..."
}
}
},
{
"id": "ai_low",
"type": "ai",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Temperature 0 (Conservador)",
"parameters": {
"prompt": "Crie um slogan para uma empresa de tecnologia",
"temperature": 0.0
}
}
},
{
"id": "message_low",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resultado Conservador",
"parameters": {
"message": "🔒 Temperature 0.0:\\n{{ai_response}}"
}
}
},
{
"id": "ai_high",
"type": "ai",
"position": { "x": 500, "y": 300 },
"data": {
"label": "Temperature 1 (Criativo)",
"parameters": {
"prompt": "Crie um slogan para uma empresa de tecnologia",
"temperature": 1.0
}
}
},
{
"id": "message_high",
"type": "message",
"position": { "x": 700, "y": 300 },
"data": {
"label": "Resultado Criativo",
"parameters": {
"message": "🎨 Temperature 1.0:\\n{{ai_response}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 200 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "ai_low" },
{ "source": "message_1", "target": "ai_high" },
{ "source": "ai_low", "target": "message_low" },
{ "source": "ai_high", "target": "message_high" },
{ "source": "message_low", "target": "end_1" },
{ "source": "message_high", "target": "end_1" }
]
}
Teste: Temperature 0 sempre retorna resposta similar. Temperature 1 varia muito mais!
maxTokens (number, opcional)
O que é: Limite máximo de tokens (palavras) na resposta gerada.
Padrão: 1000 tokens (~750 palavras)
Valores comuns:
100→ Respostas curtas (1-2 frases)500→ Respostas médias (1 parágrafo)1000→ Respostas longas (múltiplos parágrafos)2000→ Respostas muito longas (artigos)
Flow completo para testar:
{
"name": "Teste AI - MaxTokens",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "ai_1",
"type": "ai",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Resposta Curta (50 tokens)",
"parameters": {
"prompt": "Explique o que é inteligência artificial",
"maxTokens": 50
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Curto",
"parameters": {
"message": "Resposta CURTA (max 50 tokens):\\n\\n{{ai_response}}"
}
}
},
{
"id": "ai_2",
"type": "ai",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resposta Longa (500 tokens)",
"parameters": {
"prompt": "Explique o que é inteligência artificial",
"maxTokens": 500
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Mostrar Longo",
"parameters": {
"message": "Resposta LONGA (max 500 tokens):\\n\\n{{ai_response}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "ai_1" },
{ "source": "ai_1", "target": "message_1" },
{ "source": "message_1", "target": "ai_2" },
{ "source": "ai_2", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Teste: Primeira resposta será bem curta (1-2 frases). Segunda será muito mais detalhada!
Exemplo 1: Chatbot de Atendimento
Objetivo: Responder perguntas do cliente usando contexto
{
"name": "AI - Chatbot Atendimento",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Saudação",
"parameters": {
"message": "👋 Olá! Sou o assistente virtual. Como posso ajudar?"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Pergunta do Cliente",
"parameters": {
"message": "Digite sua pergunta:",
"variable": "pergunta"
}
}
},
{
"id": "ai_1",
"type": "ai",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Processar com AI",
"parameters": {
"prompt": "Você é um assistente de atendimento ao cliente profissional e prestativo.\\n\\nContexto: Empresa de tecnologia que vende software SaaS.\\n\\nPergunta do cliente: {{pergunta}}\\n\\nResponda de forma clara, profissional e útil.",
"model": "gpt-4",
"temperature": 0.7,
"maxTokens": 500
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Resposta AI",
"parameters": {
"message": "{{ai_response}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "ai_1" },
{ "source": "ai_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: 👋 Olá! Sou o assistente virtual. Como posso ajudar?
Usuário: Qual o prazo de cancelamento?
Sistema: Olá! Em nossa empresa, você pode cancelar o serviço a qualquer momento sem multas. O cancelamento é processado imediatamente e você mantém acesso até o final do período pago. Posso ajudar com mais alguma informação?
Exemplo 2: Classificação de Intent
Objetivo: Identificar intenção do usuário para direcionar para flow correto
{
"name": "AI - Classificar Intent",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Mensagem do Usuário",
"parameters": {
"message": "Como posso ajudar?",
"variable": "mensagem"
}
}
},
{
"id": "ai_1",
"type": "ai",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Classificar Intent",
"parameters": {
"prompt": "Classifique a intenção desta mensagem em UMA das categorias:\\n\\nCATEGORIAS:\\n- suporte_tecnico\\n- vendas\\n- financeiro\\n- cancelamento\\n- outro\\n\\nMensagem: {{mensagem}}\\n\\nResponda APENAS com a categoria, sem explicações.",
"temperature": 0.0,
"maxTokens": 20
}
}
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Direcionar",
"parameters": {
"variable": "ai_response",
"cases": [
{ "value": "suporte_tecnico", "targetNode": "message_suporte" },
{ "value": "vendas", "targetNode": "message_vendas" },
{ "value": "financeiro", "targetNode": "message_financeiro" },
{ "value": "cancelamento", "targetNode": "message_cancelamento" }
],
"defaultCase": "message_outro"
}
}
},
{
"id": "message_suporte",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Suporte Técnico",
"parameters": {
"message": "🔧 Transferindo para suporte técnico..."
}
}
},
{
"id": "message_vendas",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Vendas",
"parameters": {
"message": "💰 Transferindo para equipe de vendas..."
}
}
},
{
"id": "message_financeiro",
"type": "message",
"position": { "x": 900, "y": 250 },
"data": {
"label": "Financeiro",
"parameters": {
"message": "💳 Transferindo para financeiro..."
}
}
},
{
"id": "message_cancelamento",
"type": "message",
"position": { "x": 900, "y": 350 },
"data": {
"label": "Cancelamento",
"parameters": {
"message": "❌ Transferindo para retenção..."
}
}
},
{
"id": "message_outro",
"type": "message",
"position": { "x": 900, "y": 450 },
"data": {
"label": "Outros",
"parameters": {
"message": "❓ Redirecionando para atendimento geral..."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 250 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "ai_1" },
{ "source": "ai_1", "target": "switch_1" },
{ "source": "switch_1", "target": "message_suporte", "case": "suporte_tecnico" },
{ "source": "switch_1", "target": "message_vendas", "case": "vendas" },
{ "source": "switch_1", "target": "message_financeiro", "case": "financeiro" },
{ "source": "switch_1", "target": "message_cancelamento", "case": "cancelamento" },
{ "source": "switch_1", "target": "message_outro", "default": true },
{ "source": "message_suporte", "target": "end_1" },
{ "source": "message_vendas", "target": "end_1" },
{ "source": "message_financeiro", "target": "end_1" },
{ "source": "message_cancelamento", "target": "end_1" },
{ "source": "message_outro", "target": "end_1" }
]
}
Saída esperada:
Sistema: Como posso ajudar?
Usuário: Meu sistema está travando toda hora
Sistema: 🔧 Transferindo para suporte técnico...
Exemplo 3: Sumarização de Texto
Objetivo: Resumir textos longos automaticamente
{
"name": "AI - Sumarizar Texto",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Solicitar Texto",
"parameters": {
"message": "📄 Envie um texto longo que você deseja resumir:"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Receber Texto",
"parameters": {
"message": "Cole o texto aqui:",
"variable": "texto_longo"
}
}
},
{
"id": "ai_1",
"type": "ai",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Sumarizar",
"parameters": {
"prompt": "Resuma o seguinte texto em 3 pontos principais. Seja conciso e objetivo:\n\n{{texto_longo}}\n\nRESUMO EM 3 PONTOS:",
"model": "gpt-4-turbo",
"temperature": 0.3,
"maxTokens": 300
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Mostrar Resumo",
"parameters": {
"message": "📝 RESUMO:\n\n{{ai_response}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "ai_1" },
{ "source": "ai_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: 📄 Envie um texto longo que você deseja resumir:
Usuário: [Cola texto longo sobre inteligência artificial]
Sistema: 📝 RESUMO:
• Inteligência Artificial é a capacidade de máquinas realizarem tarefas que normalmente requerem inteligência humana
• Principais aplicações incluem reconhecimento de padrões, processamento de linguagem natural e tomada de decisões
• IA está transformando diversos setores como saúde, finanças, transporte e educação
Resposta do Node
{
"success": true,
"action": "ai_response_generated",
"request": {
"prompt": "Crie uma saudação personalizada e calorosa para João. Seja criativo e use emojis.",
"model": "gpt-3.5-turbo",
"temperature": 0.7,
"maxTokens": 1000
},
"response": {
"text": "Olá João! 🎉 É um prazer imenso te conhecer! Espero que seu dia esteja sendo incrível e cheio de conquistas! ✨",
"model": "gpt-3.5-turbo",
"tokensUsed": 45
},
"timestamp": "2025-01-15T10:30:00.000Z"
}
Provedores de AI Suportados
O node AI pode trabalhar com diferentes provedores de modelos de linguagem:
OpenAI (GPT)
- Modelos: GPT-3.5-turbo, GPT-4, GPT-4-turbo
- Características: Líder do mercado, melhor documentação, ampla adoção
- Ideal para: Aplicações gerais, conversação, análise de texto
- API: https://platform.openai.com/
Anthropic (Claude)
- Modelos: Claude 3 Sonnet, Claude 3 Opus, Claude 3 Haiku
- Características: Excelente em textos longos, mais seguro, menos alucinações
- Ideal para: Análise de documentos, resumos, tarefas que exigem precisão
- API: https://www.anthropic.com/
Outros Provedores
- Groq: Whisper ultra-rápido (suportado no node SPEECH)
- Google (Gemini): Pode ser integrado conforme necessidade
- Modelos locais: LLaMA, Mistral (podem ser configurados)
Comparação de Modelos
| Modelo | Velocidade | Custo | Qualidade | Quando Usar |
|---|---|---|---|---|
| gpt-3.5-turbo | ⚡⚡⚡ | $ | ⭐⭐⭐ | Conversação geral, respostas rápidas |
| gpt-4 | ⚡ | $$$ | ⭐⭐⭐⭐⭐ | Tarefas complexas, raciocínio profundo |
| gpt-4-turbo | ⚡⚡ | $$ | ⭐⭐⭐⭐⭐ | Melhor relação custo/benefício |
| claude-3-haiku | ⚡⚡⚡ | $ | ⭐⭐⭐ | Tarefas simples, rápidas e econômicas |
| claude-3-sonnet | ⚡⚡ | $$ | ⭐⭐⭐⭐ | Textos longos, análise detalhada |
| claude-3-opus | ⚡ | $$$ | ⭐⭐⭐⭐⭐ | Tarefas mais complexas, criatividade |
Boas Práticas
✅ SIM:
- Use prompts claros e específicos (quanto mais detalhe, melhor)
- Defina persona/tom no prompt ("Você é um assistente profissional...")
- Use temperature baixa (0-0.3) para tarefas determinísticas
- Use temperature alta (0.7-1.0) para criatividade
- Teste com diferentes modelos para achar melhor custo/benefício
- Coloque contexto importante no início do prompt
❌ NÃO:
- Não confie 100% nas respostas AI (sempre valide dados críticos)
- Não use maxTokens muito baixo para tarefas complexas
- Não esqueça de tratar erros (API pode falhar)
- Não exponha informações sensíveis no prompt
- Não use para decisões financeiras/médicas sem validação humana
Dicas
💡 Prompt Engineering: Quanto mais específico o prompt, melhor a resposta 💡 Temperature: 0 = sempre igual, 1 = muito variado 💡 Custo: GPT-4 custa ~15x mais que GPT-3.5, use com sabedoria 💡 Context Window: Modelos têm limite de tokens (input + output) 💡 Few-shot: Dê exemplos no prompt para melhorar respostas 💡 System Prompts: Defina comportamento no início ("Você é um assistente...") 💡 Fallback: Sempre tenha plano B se API falhar 💡 Cache: Respostas idênticas podem ser cacheadas para economizar 💡 Streaming: Para respostas longas, considere streaming (se suportado) 💡 Monitoramento: Acompanhe uso de tokens e custos via dashboard do provedor
Casos de Uso Avançados
1. AI com Memória de Contexto
Armazene histórico da conversa em variáveis e inclua no prompt para continuidade.
2. AI Multi-etapas
Use múltiplos nodes AI em sequência para refinar respostas (draft → review → final).
3. AI com Validação
Após gerar conteúdo, use outro node AI ou VALIDATOR para verificar qualidade.
4. AI com Fallback
Use CONDITION após AI para verificar se resposta é válida, senão usa modelo alternativo.
5. AI para Roteamento Inteligente
Classifique intent com AI + SWITCH para direcionar usuário para flow correto.
Próximo Node
→ AI_AGENT - AI com ferramentas e autonomia → SENTIMENT - Análise de sentimento específica → ENTITY - Extração de entidades específicas