Voltar as noticias
Agentes que Diagnostiquem, Planejem e Consultem uma Saga Distribuída
Agentic SEOAltaEN

Agentes que Diagnostiquem, Planejem e Consultem uma Saga Distribuída

Dev.to - MCP·13 de abril de 2026

Nos posts anteriores, eu configurei o LangChain4j e conectei agentes de IA a 5 microsserviços via MCP. A parte de infraestrutura foi feita. Agora para os agentes reais, a parte que me fez repensar como abordo operações em sistemas distribuídos.

Eu construí 3 agentes, cada um com um gatilho diferente e um trabalho diferente. Nenhum deles são chatbots. Eles são trabalhadores em segundo plano e interfaces de consulta que usam LLMs para raciocinar sobre dados reais do sistema.

Agente 1: OperationsAgent (Auto-Diagnóstico em Caso de Falha)

Gatilho: consumidor Kafka no tópico notify-ending (apenas quando status = FAIL)
Trabalho: Descobrir por que uma saga falhou, encontrar incidentes passados semelhantes, escrever um relatório de diagnóstico
Armazenamento: pgvector (embeddings) + PostgreSQL (tabela de diagnósticos)

Este foi o primeiro agente que construí, e é o que mais me surpreendeu.

Como Funciona

Cada saga, seja ela bem-sucedida ou falha, termina com um evento notify-ending no Kafka. Meu agente escuta esse tópico:

@KafkaListener(
    topics = "${spring.kafka.topic.notify-ending}",
    groupId = "ai-agent-group")
public void onSagaEnded(String payload) {
    Event event = objectMapper.readValue(payload, Event.class);

    // Vetoriza TODOS os eventos, constrói a base histórica
    String historyText = buildHistoryText(event);
    vectorize(event, historyText);

    // Diagnostica apenas falhas
    if (event.getStatus() == FAIL) {
        diagnose(event, historyText);
    }
}

Duas coisas acontecem aqui. Primeiro, cada evento é vetorizado, convertido em um embedding e armazenado no pgvector. Isso constrói uma base de conhecimento ao longo do tempo. Em segundo lugar, as falhas são diagnosticadas.

O Pipeline RAG

O diagnóstico usa RAG. Antes de perguntar qualquer coisa ao LLM, eu busco por incidentes passados semelhantes:

private String findSimilarIncidents(String historyText) {
    var queryEmbedding = embeddingModel.embed(historyText).content();
    var results = embeddingStore.search(
        EmbeddingSearchRequest.builder()
            .queryEmbedding(queryEmbedding)
            .maxResults(3)
            .minScore(0.75)
            .build());

    if (results.matches().isEmpty())
        return "Nenhum incidente semelhante encontrado na história.";

    return results.matches().stream()
        .map(m -> "--- Incidente semelhante (pontuação=" +
            String.format("%.2f", m.score()) + ") ---\n" + m.embedded().text())
        .collect(Collectors.joining("\n\n"));
}

O modelo de embedding é Ollama’s nomic-embed-text. Funciona localmente e não custa nada. O armazenamento vetorial é pgvector no PostgreSQL. Nada exótico.

Então eu construo um prompt com a história da saga + contexto RAG e passo para o agente:

private void diagnose(Event event, String historyText) {
    String ragContext = findSimilarIncidents(historyText);
    String prompt = """
        SAGA FALHOU, DIAGNOSTIQUE
        OrderId: %s | TransactionId: %s
        Status final: %s | Valor total: R$ %.2f

        HISTÓRICO DA SAGA:
        %s

        INCIDENTES SEMELHANTES (RAG):
        %s
        """.formatted
Contexto Triplo Up

A implementação de agentes de IA para diagnóstico em sistemas distribuídos pode revolucionar a forma como as empresas brasileiras gerenciam operações. Com a automação de diagnósticos, as empresas podem reduzir o tempo de inatividade e melhorar a eficiência operacional. Isso é especialmente relevante em um mercado cada vez mais competitivo.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.