CreaRack-SL

MCP Tool: bib_ask — Búsqueda semántica en corpus de wiki

Descripción

bib_ask es un MCP Tool que ejecuta búsqueda semántica sobre el corpus de wiki (páginas bib_wiki_pages) usando embeddings vectoriales. Responde preguntas naturales consultando la base de conocimiento de CreaRack Pro.

Firma

async function handleAsk(
  args: {
    question: string;
    source_type?: 'doc' | 'endpoint' | 'model' | 'schema';
    app?: string;
    user_facing?: boolean;
  },
  env: Env,
): Promise<string>

Parámetros

ParámetroTipoObligatorioDescripción
questionstring✓Pregunta en lenguaje natural sobre CreaRack Pro
source_type'doc' | 'endpoint' | 'model' | 'schema'-Filtrar resultados por tipo de fuente
appstring-Filtrar resultados por app Django (ej: racks, monitoring)
user_facingboolean-[v2.1+] Si true, restringe búsqueda a páginas de ayuda de usuario (product=‘crearack’ o sin marcar). Excluye documentación técnica/interna. Default: false (acceso total). Solo usado por Help Widget; staff y Oráculo siempre ven todo el corpus.

Flujo interno

  1. Embedding: Transforma question a vector denso usando embeddings de Anthropic (Claude Haiku).
  2. Búsqueda vectorial: Consulta tabla bib_wiki_chunks (Valkey cache) para encontrar chunks similares.
  3. Filtros: Aplica filtros opcionales por source_type y app.
  4. Corpus Help Widget: Si user_facing=true, realiza over-fetch (20 chunks) y luego filtra contra tabla bib_wiki_pages (product = ‘crearack’ o NULL), retornando solo 5 matches de ayuda real.
  5. Construcción de respuesta: Sintetiza chunks relevantes con Claude Sonnet en un párrafo coherente.

Fuentes de datos

  • Tabla primaria: bib_wiki_pages (metadatos: slug, título, product, status, etc.)
  • Chunks vectoriales: bib_wiki_chunks (contenido fragmentado + embeddings)
  • Modelo LLM: Anthropic Claude Sonnet (síntesis) + Haiku (embeddings)
  • Cache: Valkey (búsqueda vectorial rápida)

Casos de uso

Casouser_facingResultado esperado
Usuario pulsando Help Widget en interfaztrue5 páginas de ayuda/tutoriales (product=‘crearack’). Sin docs internas
Staff técnico / Oráculo consultando corpusomitir / false5 mejores matches de TODO el corpus (incluyendo docs técnicas, internas)

Cambios recientes (v2.1, commit@44fec40)

  • Nuevo parámetro user_facing: Separación de corpus Help Widget vs. staff/técnico.
  • Función filterUserFacing(): Valida matches contra whitelist de páginas públicas.
  • Over-fetch + filter: Para Help Widget, fetch 20 chunks y filtra a 5 user-facing.

Implementación

Handler: functions/api/mcp/handlers/archivo.ts (función handleAsk)
Tool definition: functions/api/mcp/tools.ts (schema en array TOOLS)
Entorno: Cloudflare Workers (edge runtime, acceso a D1/Valkey)

Véase también

  • [[concept—biblioteca—wiki]]
  • [[concept—saas—multi-tenancy]]
  • [[entity—functions—tool—bib-search-nodes]]
  • [[entity—functions—handler—archivo]]
  • [[entity—functions—schema—env]]