Volver a la wiki

Servicio generateHyDE — Generador de Pasajes Hipotéticos

Resumen

generateHyDE(apiKey: string, question: string): Promise<string>

Genera un pasaje hipotético (2-4 frases) que respondería la pregunta del usuario, como si fuera un fragmento de documentación técnica. Utilizado por HyDE (Hypothetical Document Embeddings) para mejorar el recall del retrieval.


Firma y ubicación

Archivo: functions/api/mcp/handlers/archivo-core.ts

Línea: 641

Tipo: async function

export async function generateHyDE(apiKey: string, question: string): Promise<string>

Parámetros

NombreTipoPropósito
apiKeystringAPI key de Google AI Studio (p.ej. env.GOOGLE_AI_API_KEY)
questionstringPregunta del usuario (e.g., “¿Cómo configuro multi-tenancy?”)

Flujo interno

  1. Detección de idioma

    • Llama detectLanguage(question) (función auxiliar) → retorna 'es' o 'en'
    • Selecciona prompt del sistema en el idioma correspondiente
  2. Construcción del prompt

    • ES: “Escribe un breve pasaje hipotético de documentación (2-4 frases)…” → pide términología probable, detalles plausibles, sin disclaimers
    • EN: “Write a short hypothetical documentation passage (2-4 sentences)…” → análogo
    • Concatena pregunta a prompt
  3. Llamada a Gemma

    • URL: ${AI_STUDIO_BASE}/${SYNTHESIS_MODEL}:generateContent?key=${apiKey}
    • Modelo: SYNTHESIS_MODEL (típicamente gemini-1.5-flash o gemini-2.0-flash)
    • Timeout: 15 segundos (HYDE_TIMEOUT_MS)
    • Config generativa:
      • temperature: 1.0 (variación creativa)
      • topP: 0.95, topK: 64 (nucleus sampling)
      • maxOutputTokens: 220 (limita pasaje)
      • responseMimeType: "application/json" + responseSchema — fuerza JSON limpio, descarta scratchpad CoT de Gemma 4
  4. Parseo de respuesta

    • Extrae data.candidates[0].content.parts[0].text (raw JSON)
    • Sanitiza con sanitizeRawJson(raw) (elimina BOM, etc.)
    • Parsea JSON.parse(...) → { passage: string }
    • Retorna .trim() del pasaje
    • Fallback: si JSON falla (formato roto), retorna el texto crudo trimmed
  5. Manejo de errores

    • HTTP no 2xx: lanza Error("HyDE generation failed: HTTP ${status}")
    • JSON parse error: retorna texto crudo (no lanza)
    • Timeout (15s): la promesa se rechaza con AbortError

Salida

Tipo: Promise<string>

Valores típicos:


Decisiones de diseño

¿Por qué responseSchema + JSON?

¿Por qué temperature: 1.0?

¿Por qué timeout 15s?

¿Qué tan malvada es una “alucinación”?


Casos de uso

ScenarioComportamiento
Pregunta clara + API key válida + Gemma responde rápido✅ Retorna pasaje válido (100-200 chars)
Pregunta ambigua⚠️ Retorna pasaje plausible pero posiblemente incorrecto (mitigado por anclaje de pregunta)
API key inválida / Gemma no disponible❌ Lanza Error → buildQueryVec cae a fallback (embedding normal)
Timeout >15s❌ Rechaza promesa → buildQueryVec cae a fallback
Formato JSON roto⚠️ Retorna texto crudo trimmed (mejor que lanzar)

Dependencias

NombreFuentePropósito
detectLanguage(text)archivo-core.tsDetecta idioma (ES/EN) para prompt del sistema
sanitizeRawJson(raw)HelpersLimpia BOM/caracteres especiales de JSON
AI_STUDIO_BASEConstante envBase URL de Google AI Studio
SYNTHESIS_MODELConst exportNombre del modelo Gemma a usar
Fetch APICloudFlare WorkersHace llamada HTTP a Gemma
AbortSignal.timeout()JS stdImplementa timeout de 15s

Performance


Véase también

Subir