Objetivos y presupuesto del proyecto
Coste máx. / lead
0,05 €
~1.800 tokens promedio
Latencia objetivo
<3s
p95 endpoint /score-lead
Unidades de trabajo
5
cada una independiente y verificable
Tiempo estimado total
75 min
3 sesiones · 2 fases de eval
Bucle Eval-First
Criterios de finalización definidos ANTES de escribir código
1. Definir Evals
Eval de capacidad: clasificar 50 leads de test.
Eval de regresión: v1 no empeora.
Eval de regresión: v1 no empeora.
2. Baseline
v1 accuracy: 71 %.
p95 latencia: 4,2 s.
Fallos capturados.
p95 latencia: 4,2 s.
Fallos capturados.
3. Implementar
Agente ejecuta unidades 1-5 con criterios de done.
4. Re-evaluar
v2 accuracy: 89 %.
p95 latencia: 1,8 s.
Regresión: 0 fallos.
p95 latencia: 1,8 s.
Regresión: 0 fallos.
| Eval | Métrica | Baseline v1 | Target v2 | Resultado v2 | Estado |
|---|---|---|---|---|---|
| capability-01 | Accuracy clasificación leads | 71 % | ≥ 85 % | 89 % | ✓ PASS |
| capability-02 | Latencia p95 /score-lead | 4,2 s | ≤ 3 s | 1,8 s | ✓ PASS |
| capability-03 | Coste por lead (tokens) | — | ≤ 2.000 tok | 1.740 tok | ✓ PASS |
| regression-01 | Leads "calientes" no clasificados como "frío" | 3 fallos / 50 | 0 fallos | 0 fallos | ✓ PASS |
| regression-02 | Webhook Slack enviado si caliente | N/A (no existía) | 100 % entrega | 100 % | ✓ PASS |
| regression-03 | Compatibilidad API v1 (sin breaking changes) | — | 0 breaking | 0 breaking | ✓ PASS |
Descomposición en unidades de 15 min
1
Esquema Pydantic + endpoint FastAPI
Riesgo: tipado incorrecto en campos opcionales
15 min
2
Agente de enriquecimiento (Clearbit)
Riesgo: rate-limit API / fallback incompleto
15 min
3
Prompt de scoring + parser de salida
Riesgo: salida no parseable / categorías ambiguas
15 min
4
Persistencia Supabase + manejo de errores
Riesgo: conflictos de clave duplicada en upsert
15 min
5
Webhook Slack + test de integración end-to-end
Riesgo: doble envío por reintentos del webhook
15 min
Haiku (3 unidades)
Sonnet (2 unidades)
Opus (arquitectura inicial)
Enrutado de modelos por complejidad
Haiku 3
Esquema Pydantic, prompt de clasificación, transformaciones boilerplate, parser de salida JSON, upsert Supabase
Coste estimado: ~0,0008 € / lead · 600 tokens
Sonnet 4
Agente de enriquecimiento Clearbit con fallback, lógica de webhook idempotente, test de integración
Coste estimado: ~0,012 € / tarea · 1.100 tokens
Opus 4
Arquitectura inicial (sesión 0): decisión de separar enriquecimiento del scoring, invariantes de idempotencia en Supabase
Coste estimado: ~0,045 € / sesión · 2.400 tokens (una sola vez)
Seguimiento de coste por tarea
Arquitectura (Opus)
Opus 4
2.400 tok
0,045 €
Unidad 1: FastAPI endpoint
Haiku 3
580 tok
0,001 €
Unidad 2: Enriquecimiento
Sonnet 4
1.120 tok
0,013 €
Unidad 3: Prompt scoring
Haiku 3
620 tok
0,001 €
Unidad 4: Supabase upsert
Haiku 3
490 tok
0,001 €
Unidad 5: Webhook Slack + e2e
Sonnet 4
980 tok
0,011 €
Total implementación (una vez)
0,072 €
Coste en producción por lead procesado
0,014 € / lead
✓ Dentro del presupuesto máximo de 0,05 € / lead · Ahorro del 72%
Estrategia de sesiones
Sesión 0 — Arquitectura
Opus 4 define la arquitectura, invariantes y criterios de done. Se captura en ARCHITECTURE.md antes de implementar.
→ Iniciar sesión nueva. Compactar al finalizar.
Sesión 1 — Unidades 1-3
FastAPI endpoint + enriquecimiento + scoring. Unidades acopladas al mismo módulo core; se ejecutan en sesión continua.
→ Continuar sesión entre unidades 1-3.
Sesión 2 — Unidades 4-5
Persistencia Supabase + webhook Slack. Transición de fase: iniciar sesión limpia para evitar contexto contaminado.
→ Sesión nueva. Inyectar ARCHITECTURE.md como contexto.
Sesión 3 — Evals finales
Re-ejecutar capability-01/02/03 + regression-01/02/03. Comparar deltas con baseline v1.
→ Compactar después de confirmar PASS en todos los evals.
Escalado a Opus (si necesario)
Solo si Sonnet/Haiku fallan con un gap de razonamiento claro (ej. invariante de idempotencia en webhook). No escalar por errores de sintaxis.
→ Escalación justificada por log de reintentos.
Foco de revisión humana (código IA)
!
Idempotencia del webhook Slack
Riesgo de doble envío en reintentos. Verificar que el agente añadió clave de deduplicación (lead_id + scored_at hash).
!
Asunciones de autenticación en Supabase
Confirmar que el agente usa service_role solo en backend, nunca expuesto en cliente. Revisar RLS policies.
~
Edge cases en enriquecimiento Clearbit
Emails personales (gmail/hotmail) sin datos de empresa. El fallback debe retornar un score conservador, no fallar el endpoint.
~
Acoplamiento oculto con CRM v1
Revisar que el endpoint v2 no modifica la tabla leads_raw usada por el sistema v1 en paralelo.
✓
Estilo y formato de código
Delegado a ruff + black (CI). No gastar ciclos de revisión humana en esto.
✓
Nombrado de variables y docstrings
No priorizar en revisión. El agente sigue las convenciones del proyecto automáticamente.
Artefacto generado — score_lead.py (fragmento)
# Generado por Claude Haiku (unidad 3) · Revisado por humano
from pydantic import BaseModel
from anthropic import Anthropic
import hashlib
client = Anthropic()
SCORING_PROMPT = """
Clasifica el lead en: frio | tibio | caliente.
Empresa: {company} Cargo: {role}
Señales de intención: {intent_signals}
Responde solo JSON: {{"score": "...", "razón": "..."}}
"""
async def score_lead(lead: LeadInput) -> LeadScore:
enriched = await enrich_company(lead.email)
# Haiku: clasificación de bajo coste
response = client.messages.create(
model="claude-haiku-3-5",
max_tokens=150,
messages=[{
"role": "user",
"content": SCORING_PROMPT.format(**enriched)
}]
)
result = parse_score(response.content[0].text)
await upsert_supabase(lead.id, result)
if result.score == "caliente":
dedup_key = hashlib.md5(
f"{lead.id}:{result.scored_at}".encode()
).hexdigest()
await notify_slack(result, dedup_key)
return result
# Tokens usados: 147 input + 38 output = 185 tok / lead
# Coste: 0.00037 USD · Latencia p95: 0.8 s
Métricas de implementación
Reintentos necesarios
0
todas las unidades: primer intento
Escalaciones a Opus
0
Haiku/Sonnet suficientes
Cobertura de tests
94 %
pytest · 48 assertions
Breaking changes v1
0
compatibilidad total
Principios aplicados en este proyecto
Eval-First
15-min units
Model routing
Session compaction
Cost tracking
Regression evals
Human review: invariants
No style-review
Skill utilizada
ingenieria-agentica
CULTIVA IA · IA-Ingenieria-MLOps