Aperçu
Les agents IA génèrent du texte pouvant contenir des affirmations obsolètes ou inventées. Ce workflow prend la sortie de l'agent, extrait les affirmations vérifiables, recherche chaque affirmation via Scavio et signale les déclarations qui contredisent les résultats de recherche en direct. Il détecte les hallucinations avant qu'elles n'atteignent les utilisateurs.
Déclencheur
Après chaque réponse de l'agent contenant des affirmations factuelles.
Planification
Piloté par événements
Étapes du workflow
Extraire les affirmations de la sortie de l'agent
Analyser la réponse de l'agent pour identifier les affirmations factuelles vérifiables : prix, dates, noms d'entreprise, caractéristiques de produits.
Rechercher chaque affirmation
Pour chaque affirmation, construire une requête de recherche et appeler l'API Scavio pour trouver les données actuelles.
Comparer l'affirmation aux données de recherche
Vérifier si les résultats de recherche soutiennent, contredisent ou ne disent rien sur l'affirmation.
Signaler les contradictions
Marquer les affirmations qui contredisent les données de recherche comme hallucinations potentielles. Inclure la source contradictoire.
Retourner la réponse vérifiée
Retourner la sortie de l'agent avec des annotations en ligne indiquant quelles affirmations sont vérifiées, non vérifiées ou contredites.
Implémentation Python
import requests, os, json, re
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
def search_claim(claim: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": claim, "country_code": "us"},
timeout=10,
)
data = resp.json()
return {
"results": len(data.get("organic_results", [])),
"ai_overview": data.get("ai_overview", {}).get("text", ""),
"top_snippet": data.get("organic_results", [{}])[0].get("snippet", "") if data.get("organic_results") else "",
}
def verify_agent_output(output: str, claims: list) -> list:
"""Verify extracted claims against live search data."""
verifications = []
for claim in claims:
search_data = search_claim(claim)
status = "unverified"
if search_data["results"] == 0:
status = "no_data"
elif claim.lower() in search_data["ai_overview"].lower() or claim.lower() in search_data["top_snippet"].lower():
status = "supported"
else:
status = "check_manually"
verifications.append({
"claim": claim,
"status": status,
"source_snippet": search_data["top_snippet"][:150],
})
return verifications
# Example: verify agent claims
agent_output = "Scavio offers 250 free credits per month and charges $0.005 per credit."
claims = ["Scavio 250 free credits per month", "Scavio $0.005 per credit"]
results = verify_agent_output(agent_output, claims)
for r in results:
print(f"[{r['status'].upper()}] {r['claim']}")Implémentation JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function searchClaim(claim) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:claim, country_code:'us'})});
const d = await r.json();
return {results:(d.organic_results||[]).length, aiOverview:d.ai_overview?.text||'', topSnippet:(d.organic_results||[])[0]?.snippet||''};
}
async function verifyAgentOutput(claims) {
const verifications = [];
for (const claim of claims) {
const s = await searchClaim(claim);
let status = 'unverified';
if (s.results === 0) status = 'no_data';
else if (s.aiOverview.toLowerCase().includes(claim.toLowerCase()) || s.topSnippet.toLowerCase().includes(claim.toLowerCase())) status = 'supported';
else status = 'check_manually';
verifications.push({claim, status, sourceSnippet:s.topSnippet.slice(0,150)});
}
return verifications;
}
const results = await verifyAgentOutput(['Scavio 250 free credits per month', 'Scavio $0.005 per credit']);
for (const r of results) console.log('['+r.status.toUpperCase()+'] '+r.claim);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA