Resumen
AI agents generar text ese puede contiene outdated o fabricated claims. Este flujo de trabajo toma agent salida, extrae verifiable claims, searches for cada claim via Scavio, y flags statements ese contradict live resultados de busqueda. Catches hallucinations antes de they reach usuarios.
Desencadenador
After cada agent respuesta ese contiene factual claims.
Programación
Event-driven
Pasos del flujo de trabajo
Extraer Claims de Agent Salida
Analizar el agent's respuesta to identificar verifiable factual claims: prices, dates, company names, producto caracteristicas.
Search for Cada Claim
For cada claim, construct un consulta de busqueda y call Scavio API to encontrar actual datos.
Comparar Claim vs Search Datos
Verificar if el resultados de busqueda soporta, contradict, o son silent on el claim.
Marcar Contradictions
Mark claims ese contradict search datos as potential hallucinations. Include el contradicting fuente.
Return Verified Respuesta
Return el agent salida con inline annotations showing cual claims son verified, unverified, o contradicted.
Implementacion en 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']}")Implementacion en 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);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA