O RAG estático não consegue responder “o que aconteceu esta semana”. Adicionar uma etapa de busca web ao vivo com uma Google Search API fundamenta seu LLM em fontes atuais e citáveis. Aqui está o padrão, usando a serp.cheap.
A arquitetura
user query
→ SERP API search (top N results) ← live, fresh
→ fetch the result pages
→ chunk + embed on the fly
→ retrieve most relevant chunks
→ LLM answers, citing the source URLs
Passo 1 — busque fontes atuais
import requests
def web_sources(query, n=5, gl="us"):
data = requests.post(
"https://api.serp.cheap/v1/search",
headers={"X-API-Key": "YOUR_KEY"},
json={"q": query, "gl": gl},
timeout=30,
).json()
return [
{"title": r["title"], "url": r["link"], "snippet": r.get("snippet", "")}
for r in data["organic"][:n]
]
Passo 2 — busque e divida em chunks
Busque cada url, extraia o texto principal e divida em chunks de ~500 tokens. (Use seu loader/splitter existente — por exemplo, trafilatura + um text splitter.)
Passo 3 — gere embeddings, recupere, gere a resposta
Gere embeddings dos chunks, recupere os top-k para a consulta e os passe ao modelo com uma instrução para citar as URLs das fontes. Como as fontes vieram da SERP ao vivo, a resposta reflete o que as páginas autoritativas dizem atualmente.
Por que uma SERP API barata importa aqui
O RAG dispara uma busca a cada consulta. A $0.0006 por busca fresca (metade em cache), a serp.cheap mantém o custo de recuperação por resposta insignificante — e consultas idênticas recorrentes batem no cache automaticamente.
Caminho rápido só com snippets
Para uma fundamentação leve você pode pular a busca das páginas e alimentar o modelo diretamente com os títulos + snippets da SERP — uma chamada de API, sem crawling. É mais barato e geralmente suficiente para respostas factuais rápidas.