Agentes en la deriva de la producción: actualizaciones de modelos, ediciones rápidas, cambios de herramientas. La mayoría de los monitoreos detectan la latencia y el costo, pero no son correctos. Este tutorial utiliza a Scavio como fuente de referencia: cada N agente responde, se compara con una nueva búsqueda web y se marca la deriva.
Requisitos previos
- Python 3.10+
- Clave API de Scavio
- DuckDB o Postgres
Guia paso a paso
Paso 1: Muestra del 5 % de las respuestas de los agentes
Muestra aleatoria en el límite del agente.
import random
def sample(answer):
return random.random() < 0.05 # sample 5%Paso 2: Obtenga respuestas web de referencia
Scavio SERP más descripciones generales de AI para la consulta del usuario.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def baseline(query):
r = requests.post('https://api.scavio.dev/api/v1/google',
headers={'x-api-key': API_KEY},
json={'query': query, 'include_ai_overview': True})
return r.json()Paso 3: Agente de puntuación vs línea de base
Los jueces de Claude se desvían de las afirmaciones fácticas.
import anthropic
client = anthropic.Anthropic()
def score_drift(query, agent_answer, baseline_data):
msg = client.messages.create(
model='claude-sonnet-4-6', max_tokens=200,
messages=[{'role':'user','content':f'Q: {query}\nAgent: {agent_answer}\nBaseline: {str(baseline_data)[:3000]}\nRate factual drift 0-10:'}])
return msg.content[0].textPaso 4: Almacenar eventos de deriva
Fila de DuckDB por respuesta de muestra.
import duckdb
db = duckdb.connect('drift.duckdb')
db.execute('CREATE TABLE IF NOT EXISTS drift(ts TIMESTAMP, query TEXT, score INT)')Paso 5: Alerta en el umbral
Alerta de buscapersonas cuando la deriva media diaria excede 4/10.
def daily_check():
avg = db.execute('SELECT AVG(score) FROM drift WHERE ts > current_date - 1').fetchone()[0]
if avg and avg > 4:
# send pager alert
passEjemplo en Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def baseline(q):
r = requests.post('https://api.scavio.dev/api/v1/google',
headers={'x-api-key': API_KEY},
json={'query': q, 'include_ai_overview': True}).json()
return r.get('ai_overview') or r.get('organic_results',[])[:5]
print(baseline('what is mcp protocol'))Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function baseline(q) {
const r = await fetch('https://api.scavio.dev/api/v1/google', { method:'POST', headers:{'x-api-key':API_KEY,'Content-Type':'application/json'}, body: JSON.stringify({ query: q, include_ai_overview: true }) });
return r.json();
}Salida esperada
Daily drift score per agent; alerts fire when factual drift exceeds threshold. Engineering team catches model and prompt regressions before user reports.