Improve intent detection: keyword layer + better Gemini prompt
- Add detectarIntencionKeyword() with regex patterns in Colombian Spanish that runs before Gemini (instant, no API cost) - Gemini is now only called for ambiguous text - Improve Gemini prompt with real examples and informal Spanish - Replace generic "no entendí" with actionable buttons Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
a21675b12c
commit
e43fe4043f
@@ -58,25 +58,38 @@ class GeminiIntentService
|
||||
$promptExtra = ChatConfig::get('gemini_prompt_extra', '');
|
||||
|
||||
return <<<PROMPT
|
||||
Eres un clasificador de intenciones para una tienda de streaming (peliculas, series).
|
||||
Eres un clasificador de intenciones para SirPremium, una tienda colombiana de streaming (Netflix, Disney+, HBO, Spotify, etc.).
|
||||
Los usuarios escriben en español latinoamericano informal, con jerga colombiana y errores ortográficos.
|
||||
{$promptExtra}
|
||||
|
||||
Acciones validas (devuelve EXACTAMENTE una de estas en el campo "action"):
|
||||
- menu.principal (usuario quiere ver el menu, inicio, ayuda general)
|
||||
- servicios.listar (quiere ver servicios, planes, catalogo, que hay disponible)
|
||||
- promo.listar (quiere ver promociones, ofertas, descuentos)
|
||||
- recarga.iniciar (quiere recargar saldo, agregar dinero, cargar cuenta)
|
||||
- credenciales.listar (quiere ver sus credenciales, usuario, contrasena, cuenta, acceso)
|
||||
- historial.ver (quiere ver historial, compras anteriores, que ha comprado)
|
||||
- perfil.ver (quiere ver su perfil, sus datos, su informacion)
|
||||
- asesor.solicitar (quiere hablar con una persona, agente, asesor, humano, soporte)
|
||||
Acciones válidas — devuelve EXACTAMENTE una de estas:
|
||||
- menu.principal → saludo, "hola", "inicio", "volver", "menú", pedir ayuda general
|
||||
- servicios.listar → ver planes, catálogo, qué servicios hay, "quiero Netflix", "qué tienen", "cuánto vale", preguntar por precios
|
||||
- promo.listar → ver promociones, ofertas, combos, descuentos, "hay algo especial"
|
||||
- recarga.iniciar → recargar saldo, cargar dinero, "quiero poner saldo", "cómo recargo", "agregar plata", "depositar"
|
||||
- credenciales.listar → ver contraseña, cómo entrar, "no puedo acceder", "dame el usuario", "mis datos de Netflix", "cómo me conecto"
|
||||
- historial.ver → historial de compras, "qué he comprado", "mis pedidos", "mis servicios activos"
|
||||
- perfil.ver → ver perfil, mis datos personales, cambiar información
|
||||
- asesor.solicitar → hablar con persona, "quiero un asesor", "necesito ayuda de alguien", "soporte humano"
|
||||
|
||||
Ejemplos de clasificación:
|
||||
"hacer recarga" → recarga.iniciar
|
||||
"quiero recargar" → recarga.iniciar
|
||||
"cargar saldo" → recarga.iniciar
|
||||
"poner plata" → recarga.iniciar
|
||||
"ver planes" → servicios.listar
|
||||
"qué tienen de Netflix" → servicios.listar
|
||||
"hay promociones" → promo.listar
|
||||
"mis contraseñas" → credenciales.listar
|
||||
"no puedo entrar a mi cuenta" → credenciales.listar
|
||||
"hablar con alguien" → asesor.solicitar
|
||||
|
||||
Texto del usuario: "{$texto}"
|
||||
|
||||
Responde UNICAMENTE con un JSON valido, sin markdown, sin explicacion:
|
||||
Responde ÚNICAMENTE con JSON válido, sin markdown, sin explicación:
|
||||
{"action": "la_accion", "data": {}}
|
||||
|
||||
Si no puedes determinar la intencion con certeza, usa: {"action": "menu.principal", "data": {}}
|
||||
Si el texto es completamente ambiguo o irrelevante, usa: {"action": "menu.principal", "data": {}}
|
||||
PROMPT;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user