Volver a la wiki

Handler MCP: wiki_enrich_related

Propósito

Enriquecer el campo related[] (referencias semánticas a otras páginas wiki) de una o más páginas wiki usando candidatos basados en embeddings semánticos. Utiliza Vectorize (Workers AI) para buscar pages temáticamente relevantes.

Firma y entrada

async function wikiEnrichRelated(
  args: {
    limit?: number,           // máx páginas a procesar (defecto 10, cap 50)
    dry_run?: boolean,        // si true, solo reporta sin escribir (defecto true)
    where?: string,           // cláusula WHERE SQL para filtrar targets (defecto: 'status = "active"')
    actor?: string,           // quién dispara la pasada; por defecto 'agent-enrich' (usado en el log de coste)
  },
  db: D1Database,
  env: Env
): Promise<string>

Args:

Dependencias del entorno (Env):

Lógica principal

Para cada página target (t en targets):

  1. Embed y search:

    • Vectoriza el título (t.title) con embedTexts(env.AI, [t.title]).
    • Busca chunks wiki similares: searchChunks(env, vec, 18, { sourceType: 'doc' }).
    • Extrae slugs únicos del sourcePath de cada chunk (regex: /^(?:src\/content\/)?wiki\/(.+?)\.md$/).
    • Evita duplicar el slug de la propia página (seen Set).
  2. Validación en DB:

    • Consulta bib_wiki_pages para obtener slug + title de candidatos válidos (status=‘active’).
    • Limita a MAX_CANDIDATES=25 primeros.
  3. Selección final (Haiku):

    • Si hay candidatos, llama a Haiku con el título + candidatos.
    • Haiku elige 2-4 candidatos mejores (criterio: relevancia temática + complementariedad).
    • Retorna suggested: [{ slug, title }, ...].
  4. Escritura (solo si dry_run=false):

    • Actualiza D1: línea related: en el YAML front-matter del MD.
    • Refresca sección ”## Véase también”.

Registro de coste (bib_wiki_log)

Desde el 10-09-2026 (commit b7bfcf74, #169 — hallazgo del verificador en Opus de la regeneración del Atlas, ficha ws3), cada pasada de wiki_enrich_related deja una fila en bib_wiki_log. Antes era la única tool de la wiki que gastaba IA (llamadas a Haiku) sin dejar rastro de coste, a diferencia de wiki_curator_review, bib_run_drift_check_batch o wiki_lint_contradictions, que sí lo hacían.

Respuesta

{
  "processed": 5,
  "applied": 2,
  "dry_run": true,
  "cost_usd": 0.00034,
  "total_tokens": 1240,
  "results": [ ... ]
}

Véase también

Subir