Volver a la wiki

Handler MCP bib_ask — Biblioteca (archivo.ts)

Descripción

handleAsk es la función principal del tool MCP bib_ask, definida en functions/api/mcp/handlers/archivo.ts. Orquesta el flujo completo de pregunta-respuesta de la Biblioteca: desde la recepción de la query hasta la síntesis con Gemini y el archivado del resultado.

Es el handler que activa el Help Widget de CreaRack Pro cuando un usuario hace una pregunta.


Firma y parámetros de entrada

async function handleAsk(
  args: Record<string, unknown>,
  env: Env
): Promise<string>
Argumento (args.*)TipoRequeridoDescripción
questionstring✅Pregunta del usuario
mode'help' | 'tutor'❌Modo de respuesta. Default: 'help'
source_typestring❌Filtro por tipo de fuente en vector search
categorystring❌Filtro por categoría
tagstring❌Filtro por tag
limitnumber❌Número máximo de chunks a recuperar

Flujo de ejecución

Modo help (default)

handleAsk(args)
  │
  ├─ [guard] question requerida
  ├─ [guard] GOOGLE_AI_API_KEY
  ├─ [guard] env.AI (Workers AI binding)
  │
  ├─ embedTexts([question])          → vector embedding de la query
  ├─ searchChunks(embedding, filters) → chunks relevantes de la wiki (D1)
  │
  ├─ synthesizeAnswer(apiKey, question, chunks, 'help')
  │     ├─ buildHelpPrompts(question, chunks, lang)
  │     └─ Gemini REST API call
  │
  ├─ utility hit → registro en D1
  └─ return JSON { answer, sources, model, chunks_used, duration_ms, archive, mode }

Modo tutor (early return)

handleAsk(args)
  │
  ├─ [guard] question requerida
  ├─ [guard] GOOGLE_AI_API_KEY
  │
  ├─ [EARLY RETURN si mode === 'tutor']
  │     ├─ synthesizeAnswer(apiKey, question, [], 'tutor')
  │     │     ├─ buildTutorPrompts(question, lang)
  │     │     └─ Gemini REST API call
  │     └─ return JSON { answer, sources: [], mode: 'tutor', archive: { attempted: false, reason: 'tutor-mode' } }
  │
  └─ [flujo help no se ejecuta]

Diferencias clave del modo tutor:


Respuesta JSON

{
  answer: string,          // markdown — respuesta al usuario
  sources: ChunkMatch[],   // chunks usados como grounding ([] en tutor)
  model: string,           // modelo Gemini utilizado
  chunks_used: number,     // 0 en tutor
  duration_ms: number,     // latencia de síntesis
  archive: {
    attempted: boolean,
    reason?: string,       // 'tutor-mode' | otros
  },
  mode: 'help' | 'tutor',
}

Dependencias de entorno

Binding / SecretModo helpModo tutor
env.GOOGLE_AI_API_KEY✅ obligatorio✅ obligatorio
env.AI (Workers AI)✅ obligatorio❌ no requerido
D1 (vector search + archivado)✅ necesario❌ no accedido

Notas de implementación


Historial relevante

CommitCambio
86c9ac4Añade modo tutor con early return; refactoriza synthesizeAnswer en archivo-core.ts

Véase también

Subir