Los agentes de LLM que llaman a herramientas de búsqueda web a menudo consumen tokens excesivos porque los resultados de búsqueda sin procesar contienen títulos, fragmentos, URL, metadatos y funciones SERP que el agente no necesita. Pasar respuestas de búsqueda completas a una ventana de contexto de agente desperdicia tokens y dinero. Este tutorial muestra cómo comprimir los resultados de la búsqueda extrayendo solo los campos que el agente necesita, truncando fragmentos, deduplicando contenido y formateando los resultados como texto compacto. Creará una capa de compresión de búsqueda que reduzca el recuento de tokens entre un 60 % y un 80 % mientras mantiene alta la densidad de la información.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Un agente de LLM que utiliza herramientas de búsqueda
Guia paso a paso
Paso 1: Obtener resultados de búsqueda sin procesar
Consulta la API de Scavio y mide el recuento de tokens sin procesar de la respuesta completa.
import os, requests, json
API_KEY = os.environ["SCAVIO_API_KEY"]
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": "best CRM for startups 2026"})
raw = resp.json()
raw_size = len(json.dumps(raw))
print(f"Raw response: {raw_size} chars")Paso 2: Extraer sólo los campos esenciales
Reduzca la respuesta a solo los campos que necesita un agente: título, fragmento y URL.
def compress_results(data, max_results=5):
results = []
for r in data.get("organic_results", [])[:max_results]:
results.append({
"title": r.get("title", "")[:80],
"snippet": r.get("snippet", "")[:200],
"url": r.get("link", ""),
})
return results
compressed = compress_results(raw)
comp_size = len(json.dumps(compressed))
print(f"Compressed: {comp_size} chars ({100 - round(comp_size/raw_size*100)}% reduction)")Paso 3: Formatear como texto compacto para el contexto del agente
Convierta resultados estructurados a un formato de texto mínimo que utilice menos tokens que JSON.
def format_for_agent(results):
lines = []
for i, r in enumerate(results, 1):
lines.append(f"[{i}] {r['title']}")
lines.append(f" {r['snippet']}")
lines.append(f" {r['url']}")
return "\n".join(lines)
agent_text = format_for_agent(compressed)
print(f"Agent text: {len(agent_text)} chars")
print(agent_text[:500])Paso 4: Deduplicar resultados superpuestos
Elimine resultados casi duplicados que desperdician el contexto del agente con información redundante.
def deduplicate(results):
seen_domains = set()
unique = []
for r in results:
from urllib.parse import urlparse
domain = urlparse(r["url"]).netloc
if domain not in seen_domains:
seen_domains.add(domain)
unique.append(r)
return unique
deduped = deduplicate(compressed)
print(f"After dedup: {len(deduped)} results (was {len(compressed)})")Paso 5: Construya el contenedor de compresión
Combine todos los pasos de compresión en una única función que reemplace la llamada de búsqueda sin formato en su agente.
def agent_search(query, max_results=5):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": query})
compressed = compress_results(resp.json(), max_results)
deduped = deduplicate(compressed)
return format_for_agent(deduped)
result = agent_search("best CRM for startups 2026")
print(f"Final token-efficient output: {len(result)} chars")Ejemplo en Python
import os, requests, json
API_KEY = os.environ["SCAVIO_API_KEY"]
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": "best CRM for startups 2026"})
results = resp.json().get("organic_results", [])[:5]
for r in results:
print(f"{r['title'][:80]}\n {r.get('snippet', '')[:150]}")Ejemplo en JavaScript
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"},
body: JSON.stringify({platform: "google", query: "best CRM for startups 2026"})
});
const data = await r.json();
(data.organic_results || []).slice(0, 5).forEach(r =>
console.log(r.title.slice(0, 80), "\n ", (r.snippet || "").slice(0, 150))
);Salida esperada
A compressed text representation of search results that uses 60-80% fewer tokens than the raw JSON response while preserving all information an agent needs.