Capítulo 7

Agentic RAG

Quando o RAG básico não é suficiente: agentes autônomos que decidem o que buscar, como buscar e como refinar a resposta.

⚠️ Quando RAG Simples Não É Suficiente

  • Perguntas compostas que exigem múltiplos passos de reasoning
  • Necesidade de buscar em bases diferentes (vetorial + SQL + web)
  • Contexto muito longo que não cabe em uma única chamada
  • Perguntas que exigem cálculo ou agregação de dados
  • Cenários onde o modelo precisa pedir clarification

🏗️ Arquitetura Agentic RAG

UserAGENTE MENTOR(Orquestrador)PlanejaFERRAMENTAS🔍 SemanticSearch🌐 WebSearch🗄️ Database🧮 CalculatorRefinaRESPOSTA FINAL

🤖 Sistema Multi-Agent (Beer and Code)

O Planner IA 2026 usa 3 agentes especializados, cada um com seu próprio system prompt, tools e base de conhecimento:

🎓

Agente Mentor

Orquestrador: coordena os outros agentes, decide quando buscar mais contexto ou refinar a resposta.

role: orchestrator
💻

Agente Técnico

Responde dúvidas técnicas de código, arquitetura, patterns e boas práticas.

role: code_expert
🎯

Agente Estratégico

Ajuda com planejamento, metas, roadmap e decisões de projeto.

role: strategy
🧠

Agente Comportamental

Ajuda com aspectos comportamentais, comunicação e dinâmica de equipe.

role: behavioral

🔧 Tools (Ferramentas) no Laravel

app/Agents/Tools/SemanticSearchTool.php
<?php
class SemanticSearchTool
{
    public function name(): string
    {
        return "string">'semantic_search';
    }

    public function description(): string
    {
        return 'Busca informações em artigos do sistema 
usando busca semântica. Use quando precisar 
responder perguntas sobre conceitos técnicos.';
    }

    public function execute(array $params): array
    {
        $query = $params["string">'query'] ?? "string">'';
        $limit = $params["string">'limit'] ?? 3;

        $results = app(RetrievalService::class)
            ->search($query, $limit);

        return [
            "string">'results' => $results->map(fn($r) => [
                "string">'content' => $r->chunk,
                "string">'source' => $r->title,
                "string">'score' => round($r->similarity, 3),
            ])->toArray(),
            "string">'count' => $results->count(),
        ];
    }
}