bib_eval_retrieval: Harness A/B de retrieval
Descripción
MCP tool que compara variantes de retrieval (baseline = chunks enteros vs trim = recortado a frases) sobre un golden set de preguntas. Aisla el retrieval (no llama LLM salvo synthesize=true) y devuelve métricas reproducibles.
Esquema MCP
name: bib_eval_retrieval
inputs:
- questions?: string[] # Golden set. Si faltan, usa ultimas 15 de oraculo_queries
- variants?: ('baseline'|'trim')[]
- top_k?: number (default 5, max 20)
- trim_threshold?: number (default 0.38)
- trim_window?: number (default 1)
- synthesize?: boolean (default false) - Sintetiza respuesta por variante si true
- source_type?: string
- app?: string
output: {summary, results[]}
Output
{
summary: {
questions: 15,
top_k: 5,
trim_threshold: 0.38,
trim_window: 1,
avg_tokens_baseline: 650,
avg_tokens_trim: 480,
token_reduction_pct: 26,
avg_overlap_vs_baseline: 0.82
},
results: [
{
question: "cómo funciona multi-tenancy",
variants: {
baseline: {
chunk_ids: [12, 45, 67],
top_score: 0.897,
tokens: 720,
tokens_before: 720
},
trim: {
chunk_ids: [12, 45, 67],
top_score: 0.897,
tokens: 520,
tokens_before: 720,
overlap_vs_baseline: 1.0
}
}
},
...
]
}
Golden set automático
Si no se pasan questions:
- Query
oraculo_queriesúltimas 15 preguntas únicas. - Filtrar por length > 8 (descartar ruido).
Métricas clave
| Métrica | Fórmula | Significado |
|---|---|---|
token_reduction_pct | (1 - trim_tokens / baseline_tokens) × 100 | Ahorro de tokens (%) |
overlap_vs_baseline | intersect(trim_ids, baseline_ids) / baseline_ids.length | Coherencia de chunks (0-1) |
avg_tokens_baseline/trim | Media de tokens por pregunta | Costo real |
Uso típico
# Medir baseline vs trim estándar
{"tool": "bib_eval_retrieval", "arguments": {}}
# Calibrar threshold sin redesploy
{"tool": "bib_eval_retrieval", "arguments": {
"trim_threshold": 0.42,
"trim_window": 2,
"synthesize": false
}}
# Con sintetización (más caro)
{"tool": "bib_eval_retrieval", "arguments": {
"synthesize": true,
"top_k": 10
}}
Decisión de Fase 3
Datos para validar si small-to-big puro merece implementarse:
- Token reduction > 20%? (Línea: avg_tokens_trim).
- Overlap > 70%? (Conserva coherencia).
- Respuestas igual de buenas? (Si
synthesize=true, revisar answers).
Si sí a 1-3 → proceder Fase 3.
Notas
- Determinismo: Mismo golden set + threshold → mismo output.
- Costo: ~5s para 15 preguntas (sin sintetización).
- Golden set actualizado vivo:
oraculo_queriescrece con cada pregunta real → harness siempre con datos frescos.
Véase también
- [[feature—biblioteca—arcrift-sentence-trimming]]
- [[entity—functions—service—retrieve]]