Le problème
Les agents multi-étapes qui effectuent des recherches web accumulent de grandes charges de contexte. Un agent de recherche qui effectue 5 recherches génère 15 à 30 Ko de résultats de recherche. Lorsqu'ils sont transmis à l'étape suivante de l'agent, ce contexte peut faire déborder la fenêtre de contexte ou évincer un contexte antérieur important (historique de conversation, invites système, définitions d'outils). L'agent commence à perdre le fil de sa tâche car les résultats de recherche évincént les instructions de tâche.
La solution Scavio
Construisez un pont de contexte qui compresse les résultats de recherche entre les étapes de l'agent à l'aide d'une sérialisation JSON structurée. Après chaque étape de recherche, extrayez uniquement les champs dont l'étape suivante a besoin (titres+liens pour la citation, extraits pour le raisonnement, prix pour la comparaison) et jetez le reste. Stockez les résultats complets dans un fichier JSON sidecar pour une récupération si des données détaillées sont nécessaires ultérieurement.
Avant
Avant le pont de contexte, la fenêtre de contexte de l'agent de recherche se remplissait après 3 recherches. À l'étape 5, le contexte antérieur de la conversation était tronqué et l'agent oubliait ses instructions de tâche initiales.
Après
Après la mise en place du pont, le contexte de recherche est compressé d'environ 5 Ko par recherche à environ 300 octets de faits clés extraits. L'agent conserve une pleine conscience de la tâche sur plus de 10 étapes de recherche, les résultats complets étant disponibles dans le stockage sidecar pour une récupération à la demande.
À qui cela s'adresse
Développeurs d'agents créant des workflows de recherche multi-étapes qui atteignent les limites de la fenêtre de contexte. Équipes optimisant les performances des agents en réduisant le contexte non pertinent transmis entre les étapes de raisonnement.
Avantages clés
- Réduction de 90 % de la taille du contexte de recherche entre les étapes de l'agent
- L'agent conserve la conscience de la tâche sur de nombreuses itérations de recherche
- Résultats complets conservés dans le stockage sidecar pour une récupération détaillée
- Extraction configurable par étape : ne transmettre que les champs dont l'étape suivante a besoin
- Fonctionne avec tout framework d'agent prenant en charge les appels d'outils
Exemple Python
import requests
import json
from pathlib import Path
API_KEY = "your_scavio_api_key"
def search_and_compress(query: str, platform: str = "google", extract_fields: list[str] = None) -> dict:
"""Search and return compressed results for agent context."""
if extract_fields is None:
extract_fields = ["title", "snippet", "link"]
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query},
timeout=15,
)
res.raise_for_status()
data = res.json()
# Store full results in sidecar
sidecar_path = Path(f"/tmp/search_sidecar_{hash(query)}.json")
sidecar_path.write_text(json.dumps(data, indent=2))
# Compress for agent context
compressed = []
for r in data.get("organic", [])[:5]:
entry = {k: r.get(k, "") for k in extract_fields if k in r}
compressed.append(entry)
return {
"query": query,
"result_count": len(compressed),
"results": compressed,
"sidecar": str(sidecar_path),
}
def bridge_for_comparison(query_a: str, query_b: str) -> dict:
"""Search two queries, return only price/title for comparison step."""
a = search_and_compress(query_a, "amazon", ["title", "price"])
b = search_and_compress(query_b, "amazon", ["title", "price"])
return {"comparison": {"a": a, "b": b}}
result = search_and_compress("best search api 2026", "google", ["title", "link"])
print(f"Compressed: {len(json.dumps(result))} bytes vs ~5000 bytes full")
for r in result["results"]:
print(f" {r['title']}")Exemple JavaScript
const API_KEY = "your_scavio_api_key";
import { writeFileSync } from "fs";
async function searchAndCompress(query, platform = "google", fields = ["title", "snippet", "link"]) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform, query }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
const data = await res.json();
// Store full results in sidecar
const sidecarPath = `/tmp/search_sidecar_${query.replace(/\s/g, "_")}.json`;
writeFileSync(sidecarPath, JSON.stringify(data, null, 2));
// Compress for context
const compressed = (data.organic ?? []).slice(0, 5).map((r) => {
const entry = {};
for (const f of fields) if (r[f] !== undefined) entry[f] = r[f];
return entry;
});
return { query, resultCount: compressed.length, results: compressed, sidecar: sidecarPath };
}
const result = await searchAndCompress("best search api 2026", "google", ["title", "link"]);
console.log(`Compressed: ${JSON.stringify(result).length} bytes`);
for (const r of result.results) console.log(` ${r.title}`);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
Amazon
Recherche de produits avec prix, notes et avis
Communauté, publications et commentaires imbriqués de n'importe quel subreddit