RAG + ML

Pricing Intelligence

Sistema de consulta de preços com RAG otimizado, threshold adaptativo, request coalescing e cache multi-tier para respostas sub-segundo.

95%
Precisão
<100ms
Cache Hit
80%
Cache Rate
3072d
Embedding Dim

O Problema

Consultas de preço em clínicas são complexas: pacientes perguntam usando nomes diferentes ("raio-x", "radiografia", "rx dental"), com erros de digitação, e esperam respostas instantâneas. RAG tradicional falha em:

  • Matching fuzzy de nomes de procedimentos
  • Múltiplos itens na mesma pergunta ("quanto custa limpeza e clareamento?")
  • Latência aceitável sob carga (thundering herd)

A Solução

Pricing Fast Lane

Bypass otimizado que detecta intenção de preço e executa busca direta, sem passar pelo loop completo do agent:

# Fast Lane Flow
semantic_routing → pricing_fast_lane → format_response
# vs Normal Flow
semantic_routing → structured_analysis → agent → tools → format

Adaptive Threshold v2

Threshold de similaridade dinâmico baseado nas características da query:

  • Query curta (&lt;3 palavras): threshold mais baixo (0.75)
  • Query com números: threshold ajustado para abbreviations
  • Query multi-item: threshold relaxado + diversificação
  • LLM override: modelo pode sugerir threshold específico

Request Coalescing

Múltiplas requests para o mesmo procedimento são agrupadas em uma única busca:

Quando múltiplas requests chegam para a mesma query:

  1. 1. Primeira request adquire lock e computa resultado
  2. 2. Requests subsequentes aguardam (com timeout)
  3. 3. Resultado é compartilhado entre todas
  4. 4. Cache é populado para próximas requests

🏗️ Arquitetura de Cache

┌─────────────────────────────────────────────────────────────┐
│                     PRICING QUERY                           │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  L1: In-Memory Cache (per-instance)                         │
│  TTL: 60s | Key: normalized_query_hash                      │
└─────────────────────────┬───────────────────────────────────┘
                          │ MISS
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  L2: Redis Intelligent Cache (shared)                       │
│  TTL: 300s | Key: exam_names_signature                      │
│  + Request Coalescing Lock                                  │
└─────────────────────────┬───────────────────────────────────┘
                          │ MISS
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  Semantic Search (pgvector + HNSW)                          │
│  - Embeddings: text-embedding-3-large (3072d)               │
│  - Reranking: BM25 + semantic score fusion                  │
│  - Alias map: fuzzy match recovery                          │
└─────────────────────────────────────────────────────────────┘

🔑 Cache Key Inteligente

Em vez de hash da query bruta (que falha com variações), usamos assinatura semântica baseada nos itens detectados:

❌ Cache Key Tradicional
hash("how much does cleaning cost?") ≠
hash("price of dental cleaning")
✅ Cache Key Semântica
signature(["cleaning"]) ==
signature(["cleaning"])

Stack Técnico

pgvectorHNSW Indextext-embedding-3-largeRedisBM25CeleryFastAPI