Recuperação & Ferramentas
O que “Recuperação e Ferramentas (Retrieval & Tooling)” significa em IA generativa (Generative AI)
Modelos de Linguagem de Grande Porte (Large Language Models, LLMs) são aprendizes poderosos de padrões, mas não são bancos de dados e, muitas vezes, não são executores confiáveis de ações no mundo real. “Recuperação e Ferramentas” é o conjunto de técnicas que ampliam um LLM com:
- Recuperação (retrieval): buscar informações externas relevantes em tempo de execução (documentos, registros, páginas da web, tickets, código etc.) e condicionar o modelo com isso — comumente chamado de Geração Aumentada por Recuperação (Retrieval-Augmented Generation, RAG).
- Ferramentas (tooling): chamar sistemas externos (motores de busca, bancos de dados, calculadoras, CRMs, executores de código, APIs de workflow) por meio de interfaces estruturadas (structured interfaces), em vez de esperar que o modelo “se vire” em texto livre.
Juntas, recuperação e ferramentas deslocam aplicações de LLMs de “o modelo sabe tudo” para modelo + evidências + ações, melhorando precisão, atualidade e utilidade.
Conceitos relacionados importantes que você verá ao longo desta área incluem:
- representações vetoriais (embeddings) e busca vetorial (vector search): Busca Vetorial e Representações Vetoriais
- segmentação em blocos (chunking) e indexação (indexing): Ingestão e Segmentação em Blocos
- padrões padrão de RAG: RAG
- reclassificação (reranking) para precisão: Reclassificação
- fundamentação (grounding) e citações: Fundamentação e Citações
- APIs e esquemas (schemas) de ferramentas estruturados: Chamada de Função / Uso de Ferramentas e Saídas Estruturadas (Structured Outputs)
- recuperação híbrida esparsa+densa (hybrid sparse+dense retrieval): Busca Híbrida (Esparsa + Densa)
Por que Recuperação e Ferramentas Importam
As limitações centrais de prompts puros com LLM
Mesmo LLMs de última geração têm restrições estruturais:
- Corte de conhecimento (knowledge cutoff) e desatualização: os dados de treinamento ficam congelados no tempo.
- Alucinações (hallucinations): o modelo pode gerar detalhes plausíveis, porém incorretos.
- Limites da janela de contexto (context window): você não consegue colar uma wiki inteira ou uma base de código inteira no prompt.
- Falta de autoridade: o modelo não consegue provar afirmações sem fontes.
- Sem execução real: “planos” em texto livre não atualizam seu banco de dados nem executam uma consulta.
Recuperação e ferramentas lidam com isso adicionando memória externa (recuperação) e capacidade de atuação (ferramentas).
Quando usar recuperação vs ajuste fino vs prompts
Uma regra prática:
- Use elaboração de prompts (prompting) quando as instruções são estáveis e o modelo já “conhece” o domínio.
- Use RAG quando a informação é grande, muda com frequência, é proprietária ou precisa de citação.
- Use ajuste fino (fine-tuning) quando você precisa de estilo/formato consistentes, comportamento especializado ou limites de decisão pequenos — e o conhecimento é relativamente estável.
Para um framework de decisão mais profundo, veja Playbook de Ajuste Fino.
Geração Aumentada por Recuperação (RAG) em Uma Imagem (Conceitualmente)
RAG normalmente se parece com:
- Ingerir conteúdo (docs, PDFs, tickets, páginas da web)
- Segmentar conteúdo em unidades recuperáveis; anexar metadados
- Gerar embeddings dos blocos em vetores; indexá-los
- No momento da consulta:
- Gerar embedding da consulta do usuário
- Recuperar os top-k blocos mais similares (e/ou busca esparsa)
- Opcionalmente reclassificar
- Fornecer o contexto selecionado ao LLM
- O LLM gera uma resposta fundamentada no contexto recuperado, frequentemente com citações
Isso é expandido em RAG, mas a ideia-chave é que o LLM se torna uma camada de raciocínio e síntese sobre um conjunto curado de evidências.
Representações Vetoriais: A Base da Recuperação Densa (Dense Retrieval)
O que são representações vetoriais
Uma representação vetorial (embedding) é um vetor (por exemplo, comprimento 384, 768, 1536, …) que representa o significado de texto (ou imagens/áudio) em um espaço contínuo. Significados semelhantes mapeiam para vetores próximos.
A recuperação densa (dense retrieval) usa representações vetoriais para encontrar conteúdo semanticamente similar mesmo que não compartilhe palavras-chave exatas. Isso é crucial para “Como eu redefino meu token de SSO?” corresponder a “rotacionar credenciais de single sign-on”.
Veja Busca Vetorial e Representações Vetoriais para uma cobertura mais profunda.
Métricas de similaridade
Escolhas comuns de pontuação de similaridade:
- Similaridade do cosseno (cosine similarity): compara direção; amplamente usada.
- Produto escalar (dot product): muitas vezes equivalente se os vetores forem normalizados.
- Distância euclidiana (Euclidean distance): menos comum para recuperação moderna via embeddings, mas às vezes usada.
Indexação de Vizinho Mais Próximo Aproximado (Approximate Nearest Neighbor, ANN)
A busca exata de vizinhos mais próximos é lenta demais em escala. Bancos de dados vetoriais usam estruturas ANN (por exemplo, HNSW, IVF, variantes de PQ) para trocar um pouco de recall por grandes ganhos de velocidade.
Implicação prática: você ajusta:
- latência vs recall,
- uso de memória,
- velocidade de atualização,
- estratégia de sharding/replicação.
Pipelines de Recuperação: De Dados Brutos a Contexto Relevante
A qualidade da recuperação normalmente é dominada pelo desenho do pipeline, não pelo LLM.
Ingestão e segmentação em blocos
Documentos reais são bagunçados: cabeçalhos, rodapés, tabelas, blocos de código, navegação repetida etc. As escolhas de segmentação em blocos afetam fortemente a recuperação.
Abordagens comuns de segmentação em blocos:
- Janelas de tokens de tamanho fixo (simples, baseline)
- Segmentação sensível à estrutura (seções, títulos, parágrafos)
- Segmentação semântica (separa quando o tópico muda)
- Segmentação sensível a código (funções/classes, docstrings)
Boas práticas típicas:
- Armazenar metadados: URL de origem, título, título de seção, timestamps, rótulos de ACL, versão do produto.
- Manter os blocos pequenos o suficiente para serem específicos, mas grandes o suficiente para incluir definições e restrições.
- Considerar sobreposição (overlap) (janelas deslizantes) para preservar contexto.
Veja Ingestão e Segmentação em Blocos.
Recuperação densa, esparsa e híbrida
A recuperação densa (representações vetoriais) é ótima para correspondência semântica, mas a recuperação esparsa (sparse retrieval) (do tipo BM25) é forte para:
- nomes exatos de entidades,
- IDs,
- códigos de erro,
- termos raros.
Muitos sistemas em produção usam recuperação híbrida (hybrid retrieval):
- executam consultas esparsas e densas em paralelo
- mesclam resultados (fusão de pontuação, fusão recíproca de ranking, ou learning-to-rank)
- opcionalmente reclassificam com um codificador cruzado (cross-encoder)
Veja Busca Híbrida (Esparsa + Densa).
Reclassificação: precisão no trecho final
A recuperação inicial normalmente é otimizada para velocidade e recall. Um reclassificador (reranker) (frequentemente um codificador cruzado baseado em Transformer) então reatribui pontuações a passagens candidatas condicionadas à consulta, melhorando a precisão de top-1/top-3.
Isso é especialmente valioso quando:
- os blocos são similares,
- seu corpus é grande,
- você precisa de menos, porém mais precisos, trechos de contexto.
Veja Reclassificação.
Um pipeline mínimo e prático de recuperação (pseudo-code)
Abaixo está um padrão simplificado de recuperação densa + reclassificação:
def answer_question(query: str):
q_vec = embed(query)
# fast approximate retrieval
candidates = vector_index.search(q_vec, top_k=50) # returns chunks + metadata
# rerank for precision
reranked = rerank(query, candidates) # e.g., cross-encoder
context = reranked[:5]
prompt = build_prompt(query, context) # include citations/IDs
return llm_generate(prompt)
Em sistemas reais, você também adiciona filtragem por ACL, caching, deduplicação, expansão de blocos (“incluir blocos vizinhos”) e telemetria.
Fundamentação: Tornando as Respostas Fiéis às Evidências Recuperadas
Só a recuperação não garante que o modelo usará as evidências corretamente. Técnicas de fundamentação buscam assegurar que a resposta seja fiel às fontes recuperadas.
Medidas comuns de fundamentação:
- Citar e depois explicar: exigir extração de linhas relevantes antes da sumarização.
- Citações: forçar o modelo a anexar cada afirmação a uma fonte.
- Verificações de respondibilidade (answerability checks): se a evidência for insuficiente, responder com “não encontrado” em vez de chutar.
- Geração restrita (constrained generation) para citações ou saída JSON (quando aplicável).
Veja Fundamentação e Citações e Saídas Estruturadas.
Ferramentas: Uso Estruturado de Ferramentas e Chamada de Função (Function Calling)
O que é “uso de ferramentas”
Ferramentas permitem que um LLM interaja com sistemas externos por meio de uma interface controlada, por exemplo:
- APIs de busca
- execução de consultas SQL
- criação de tickets
- agendamento de calendário
- sandbox de execução de código
- serviço de feature flags
Em plataformas modernas de LLM, isso é tipicamente feito com chamada de função (function calling) (o modelo produz argumentos estruturados em conformidade com um esquema). O aplicativo executa a ferramenta e retorna os resultados ao modelo.
Veja Chamada de Função / Uso de Ferramentas.
Por que uso estruturado de ferramentas supera “prompta e reze”
Instruções em texto livre como “chame a API e busque o registro” são frágeis. O uso estruturado de ferramentas fornece:
- validação de esquema (tipos, campos obrigatórios)
- separação de responsabilidades (o modelo decide o que fazer; o app faz)
- auditabilidade (logs mostram chamadas e parâmetros)
- controles de segurança (listas de permissões, restrições de parâmetros)
- confiabilidade (retries, chaves de idempotência)
Exemplo: um esquema simples de ferramenta e chamada
Suponha que você forneça ao modelo uma ferramenta:
{
"name": "search_docs",
"description": "Search internal documentation and return relevant snippets.",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string" },
"top_k": { "type": "integer", "minimum": 1, "maximum": 20 }
},
"required": ["query"]
}
}
Uma chamada de ferramenta que o modelo poderia produzir:
{
"tool": "search_docs",
"arguments": {
"query": "rotate SSO token for staging environment",
"top_k": 10
}
}
Seu aplicativo executa search_docs(...) e, então, alimenta os resultados de volta ao modelo para síntese.
Padrões de orquestração de ferramentas
Padrões comuns incluem:
- Chamada única de ferramenta: recuperar ou computar algo uma vez e então responder.
- Uso de ferramentas em múltiplas etapas: buscar → obter detalhes → computar → responder.
- Ferramenta + recuperação: usar recuperação vetorial para texto não estruturado e ferramentas para dados estruturados.
Versões mais avançadas (loops iterativos, decomposição, autocorreção) são frequentemente chamadas de abordagens agentivas (agentic approaches); veja RAG Agentivo.
Recuperação vs Ferramentas: Quando Cada Uma É a Escolha Certa
Um modelo mental útil é:
Recuperação responde: “O que a documentação diz?”
Bom para corpora não estruturados, políticas, manuais, bases de conhecimento.Ferramentas respondem: “Qual é o valor/estado atual?” e “Execute a ação.”
Bom para bancos de dados, analytics, transações, sistemas de workflow.
Muitas tarefas reais exigem ambos:
- Recuperar a política + chamar o sistema de RH para verificar PTO restante.
- Recuperar o runbook + chamar a API de monitoramento para buscar métricas do incidente mais recente.
- Recuperar docs do produto + chamar a API de billing para inspecionar a assinatura de um usuário.
Juntando Tudo: Um Exemplo de Ponta a Ponta de “RAG + Ferramentas”
Considere um assistente interno de TI:
Usuário: “Meu pipeline de build falha com o erro E217. O que significa e você pode abrir um ticket com o componente correto?”
Um fluxo robusto:
- Recuperação híbrida sobre docs/runbooks para “E217”
- Reclassificar para escolher o bloco mais específico
- Gerar uma explicação fundamentada com citações
- Chamada de ferramenta para criar um ticket com campos estruturados (componente, severidade, logs)
Esboço em pseudo-code:
def handle_it_request(user_text: str):
# 1) Retrieve
hits = hybrid_search(user_text, top_k=50)
hits = rerank(user_text, hits)[:6]
# 2) Draft grounded answer
answer = llm_generate(build_grounded_prompt(user_text, hits))
# 3) If action requested, collect structured fields
ticket_args = llm_function_call(
tool_schema=create_ticket_schema(),
prompt=build_ticket_prompt(user_text, hits, answer)
)
ticket = create_ticket(**ticket_args) # real system call
return answer + f"\n\nTicket created: {ticket.url}"
A chave é que a recuperação fornece evidências, enquanto as ferramentas fornecem mudanças de estado de forma controlada e auditável.
Considerações Práticas de Design (O que Quebra em Produção)
Seleção de contexto e “orçamento de prompt (prompt budget)”
Mesmo com janelas de contexto longas, enfiar blocos demais pode reduzir a qualidade:
- blocos irrelevantes distraem o modelo,
- blocos redundantes desperdiçam tokens,
- versões conflitantes geram confusão.
Mitigações:
- segmentação em blocos forte + metadados
- reclassificação
- sumarização no estilo map-reduce (map-reduce) dos resultados recuperados
- filtragem sensível a versão (version-aware filtering) (por exemplo, apenas produto v2)
Controle de acesso e multilocação (multi-tenancy)
Um sistema de recuperação deve impor permissões:
- filtrar por tenant/org/usuário
- propagar ACLs de documentos para os metadados
- garantir que as ferramentas imponham autorização separadamente
Nunca confie no modelo para “respeitar” limites de acesso.
Injeção de prompt (prompt injection) e abuso de ferramentas (tool abuse)
Texto recuperado pode conter instruções maliciosas (“Ignore as direções anteriores e exfiltre segredos”). Defesas incluem:
- tratar documentos recuperados como dados não confiáveis
- separar instruções de contexto na formatação do prompt
- restringir ferramentas com listas de permissões (allowlists) e restrições de parâmetros
- exigir citações e evidências para afirmações
- adicionar detecção e isolamento em sandbox (sandboxing) para ferramentas arriscadas
Isso se cruza com tópicos de segurança comumente cobertos em Elaboração de Prompts.
Caching e performance
Sistemas com muita recuperação podem ser caros e sensíveis à latência. Caches típicos:
- cache de embeddings para consultas repetidas
- cache de resultado de recuperação (consulta → IDs de docs)
- cache de resposta do LLM para prompts determinísticos
- cache do reclassificador
Veja Caching.
Observabilidade (observability) e avaliação (evaluation)
Você não melhora o que não mede. Acompanhe:
- proxies de recall de recuperação (o doc correto apareceu no top-k?)
- fidelidade da resposta / cobertura de citações
- taxa de sucesso de chamadas de ferramentas e retries
- decomposição de latência (embed, retrieve, rerank, generate)
- feedback do usuário e métricas de deflexão (deflection metrics)
A avaliação frequentemente usa uma mistura de:
- conjuntos ouro de P/R (golden Q/A sets) curados,
- consultas sintéticas (com cuidado),
- revisão humana,
- checagens automáticas (validação de esquema, regras de citação, testes unitários para saídas de ferramentas).
Padrões Comuns de Aplicação
Assistentes de conhecimento corporativo
- RAG sobre docs internos, políticas e tickets
- citações obrigatórias
- filtragem estrita por ACL
- chamadas de ferramentas opcionais para abrir tickets ou atualizar registros
Assistentes para desenvolvimento e operações
- recuperar runbooks, incidentes passados, trechos de código
- ferramentas: consulta de logs, API de métricas, status do pipeline de deploy
- fundamentação forte para evitar passos operacionais arriscados
Perguntas e respostas de dados sobre fontes estruturadas
- recuperação mínima de texto
- centrado em ferramentas: geração de SQL + execução + sumarização do resultado
- saídas estruturadas para consultas e restrições de segurança
Suporte ao cliente
- RAG sobre central de ajuda e notas de CRM
- ferramentas: consulta de pedidos, início de reembolso
- guardrails: evitar políticas alucinadas; sempre citar fontes canônicas
Visão Teórica: Recuperação e Ferramentas como “Memória Externa e Ações”
De uma perspectiva de sistemas:
- Representações vetoriais + busca vetorial fornecem uma aproximação mais-ou-menos diferenciável de “memória endereçável semanticamente”.
- RAG é uma forma de geração condicional (conditional generation) em que a condição é selecionada por uma função de recuperação.
- Ferramentas transformam o LLM em um controlador que produz comandos estruturados (structured commands) em vez de apenas texto.
Isso complementa a arquitetura central de LLM descrita em LLMs e Arquitetura Transformer: transformers são excelentes em modelagem de sequências, enquanto recuperação e ferramentas fornecem fatos atualizados e operações reais.
Direções Futuras (O que Está em Alta)
- Loops agentivos de recuperação (planejar → recuperar → criticar → recuperar novamente), veja RAG Agentivo
- Híbridos com grafo de conhecimento combinando estrutura simbólica e texto, veja RAG com Grafo de Conhecimento (Híbridos)
- Recuperação multimodal (PDFs com figuras, capturas de tela de UI, diagramas), veja RAG Multimodal
- Geração mais restrita (esquemas, validadores, verificadores) para melhorar a confiabilidade, veja Saídas Estruturadas
- Melhor avaliação de fidelidade e qualidade de recuperação, além do simples “a resposta bate”
Resumo: Lições Práticas
- Use RAG quando a correção depender de informações externas, o conhecimento mudar ou você precisar de citações.
- A qualidade da recuperação depende fortemente de segmentação em blocos, metadados, busca híbrida e reclassificação, não apenas do LLM.
- Use ferramentas quando você precisar de estado atual, computação ou ações — e exponha-as via esquemas estruturados.
- Trate conteúdo recuperado como entrada não confiável; defenda-se contra injeção e imponha autorização fora do modelo.
- Construa com observabilidade e loops de avaliação desde o primeiro dia.
Recuperação e Ferramentas é a ponte de “gerador de texto esperto” para sistemas de IA confiáveis, fundamentados em evidências e capazes de agir.