AI Agent

Documentação técnica do projeto de portfólio com Node.js, n8n e Supabase.

EN

Demo

Fluxo real da interface de chat na aplicação atualmente publicada.

Demo do app AI Agent mostrando interação no chat e respostas

Visão Geral

O AI Agent é um projeto de portfólio com agente de IA geral e interface de chat. A aplicação envia prompts para um fluxo n8n via webhook e devolve a resposta em uma UX simples e direta. Interações e metadados podem ser persistidos no Supabase para observabilidade.

Arquitetura

UI (public/) -> POST /api/agent -> middleware rate-limit -> controller -> service -> webhook n8n
                          \-> saveInteractionLog -> Supabase
UI (public/) -> GET /api/agent/metrics -> controller -> agregação Supabase (fallback: runtime)

API

POST /api/agent

Envia uma mensagem para o assistente.

{
  "message": "Explique este timeout"
}

GET /health

{ "ok": true }

GET /api/agent/metrics

Retorna métricas do dashboard via Supabase (ou fallback em memória quando indisponível).

{
  "ok": true,
  "totalExecutions": 12842,
  "criticalErrors": 12,
  "avgResponseTimeMs": 248,
  "durationSampleSize": 500,
  "source": "supabase"
}

Variáveis de Ambiente

PORT=3000
N8N_WEBHOOK_URL=https://your-n8n-instance/webhook/agent
SUPABASE_URL=https://.supabase.co
SUPABASE_SERVICE_ROLE_KEY=
SUPABASE_TABLE=agent_messages

# Política de retry para 429 do n8n
N8N_RETRY_MAX=2
N8N_RETRY_BASE_DELAY_MS=800

# Rate limit da API (por IP)
RATE_LIMIT_WINDOW_MS=60000
RATE_LIMIT_MAX_REQUESTS=20
RATE_LIMIT_BLOCK_MS=30000

# Janela de amostragem de métricas
METRICS_SAMPLE_LIMIT=500

Setup Local

  1. Instalar dependências: npm install
  2. Configurar .env a partir de .env.example
  3. Executar aplicação: npm run dev
  4. Acessar http://localhost:3000

Tabela no Supabase

create table if not exists public.agent_messages (
  id bigserial primary key,
  created_at timestamptz not null default now(),
  message text,
  response_body jsonb,
  ok boolean not null default false,
  error_message text
);

Resolução de Problemas

Mudanças Recentes