Pular para o conteúdo principal

API — Assistente IA

Para quem é esta página

Engenheiros front-end e back-end. Para estratégia de IA, veja Arquitetura — IA.

Endpoints

MétodoPathDescrição
POST/api/v1/assistente/conversasIniciar conversa (com ou sem contexto de processo)
POST/api/v1/assistente/conversas/{id}/mensagensEnviar mensagem — resposta via SSE
GET/api/v1/assistente/conversas/{id}Buscar conversa
GET/api/v1/assistente/conversas/{id}/mensagensHistórico
POST/api/v1/assistente/conversas/{id}/encerrarEncerrar conversa
GET/api/v1/assistente/conversasHistórico do usuário

SSE — Server-Sent Events

A resposta do assistente é transmitida token a token via SSE:

// Cliente JavaScript
const source = new EventSource('/api/v1/assistente/conversas/{id}/mensagens', {
headers: { Authorization: `Bearer ${token}` }
});

source.addEventListener('token', (e) => {
const { content } = JSON.parse(e.data);
appendToChat(content); // adiciona token a token na UI
});

source.addEventListener('done', (e) => {
const { message_id, tokens_prompt, latencia_ms } = JSON.parse(e.data);
source.close();
});

source.addEventListener('error', (e) => {
const { code, message } = JSON.parse(e.data);
showError(message);
source.close();
});

Eventos SSE:

EventoDadosQuando
token{ "content": "texto parcial" }A cada token gerado
done{ "message_id", "tokens_prompt", "tokens_completion", "latencia_ms" }Geração concluída
error{ "code": "CAR-030", "message": "..." }Erro durante geração
heartbeat{}A cada 15s para manter conexão
Configuração de servidor

Ao usar SSE, configure o Nginx para não fazer buffer da resposta:

proxy_buffering off;
X-Accel-Buffering: no;

Iniciar Conversa com Contexto do Processo

POST /api/v1/assistente/conversas
{
"processo_id": "uuid-do-processo-ativo"
}

Com processo_id, o assistente tem acesso ao status, documentos e pendências do processo e pode dar respostas personalizadas como "Seu documento de matrícula foi validado, mas ainda falta o CCIR."

Escalonamento Humano

Quando o assistente detecta frustração ou pergunta fora do domínio, publica evento EscalonamentoTriggered que notifica o analista responsável. O usuário recebe: "Vou conectar você com um analista. Aguarde."