Contexto cerrado
El backend carga el artículo en el servidor y lo pasa como único contexto. Si la respuesta no está, lo dice.
Un piloto de IA útil y barato: el lector pregunta en su idioma, el modelo responde únicamente con el contenido del artículo y el equipo ve qué preguntas se quedan sin respuesta.
La idea era probar IA en el blog sin montar un chatbot genérico que inventara respuestas sobre el producto ni disparara la factura de la API.
Requisitos de producción, no de demo: respuestas en el idioma del lector, preguntas fuera de tema, consentimiento, control de costes, registro anónimo para detectar huecos de contenido y un CTA suave tras una respuesta útil.
Lo que parecía obvio y no era. Descartar bien ahorra días de trabajo en la dirección equivocada.
Más coste y más superficie de error para un piloto. El artículo actual ya es el contexto correcto.
Manipulable. El servidor obtiene el artículo por ID.
Solo se permite la ruta del asistente.
El backend carga el artículo en el servidor y lo pasa como único contexto. Si la respuesta no está, lo dice.
Contexto recortado, salida limitada, caché de 24 h por pregunta, límite por IP hasheada y tope diario global con interruptor.
Tabla propia sin IP, usuario ni cookies. El texto de la pregunta solo se guarda con consentimiento de analítica.
Pantalla en el admin con preguntas sin respuesta y exportación CSV: ideas de artículos que salen de los lectores.
Excepción de autenticación solo para la ruta del asistente; el resto de la REST API sigue cerrada.
Un plugin independiente sugiere textos alternativos con un modelo de visión y no toca el alt real hasta que una persona lo confirma.
Fragmentos simplificados y sin datos del cliente, para que se vea el enfoque técnico real.
add_filter( 'rest_authentication_errors', function ( $result ) {
$route = $GLOBALS['wp']->query_vars['rest_route'] ?? '';
if ( str_starts_with( $route, '/site/v1/ask' ) ) {
return true; // público, con su propio rate limit
}
return $result; // el resto sigue exigiendo autenticación
}, 99 );$key = 'ask_' . md5( $post_id . '|' . mb_strtolower( trim( $question ) ) );
if ( $cached = get_transient( $key ) ) return $cached; // caché 24 h
if ( ip_rate_limited( hash( 'sha256', $ip . AUTH_SALT ) ) ) return error_429();
if ( daily_budget_exceeded() ) return error_503(); // tope global
$context = mb_substr( wp_strip_all_tags( get_post_field( 'post_content', $post_id ) ), 0, 12000 );UI de chat pero sin memoria de conversación: coste plano y caché útil.
Nunca en la base de datos ni en el front. Cada entorno con la suya.
El plugin no depende de un proveedor concreto.
| Indicador | Antes | Después | Contexto |
|---|---|---|---|
| Contexto del modelo | Conocimiento general | Solo el artículo | detecta fuera de tema |
| Gasto máximo | Sin límite | Tope diario | caché + límite por IP |
| Datos personales en logs | — | Ninguno | texto con consentimiento |
| Alt text con IA | — | 100 % revisado | nada sin confirmación |
En un piloto de IA lo difícil no es llamar al modelo, sino los límites, la privacidad y que alguien pueda aprovechar lo que pasa.
Está limitado al artículo y se le indica que diga cuándo algo no aparece. Reduce mucho el riesgo.
Depende del tráfico, pero con caché, límites y tope diario el máximo queda fijado de antemano.
Sí; el proveedor se elige en los ajustes.
Si ya tienes un WordPress en producción, reviso el contexto y te digo con honestidad si lo que necesitas es desarrollo, SEO técnico, rendimiento o automatización.
Empezar un proyecto