- Soy EmplIAdo
- Posts
- RAG Lite para soporte: de PDFs a un widget con citas verificables
RAG Lite para soporte: de PDFs a un widget con citas verificables
Menos tiempo de respuesta, menos errores: un flujo reproducible para que tus agentes (o tus usuarios) reciban respuestas con links, ancla y fecha al material oficial.
Leer en nuestro sitio web / Tiempo de lectura para hoy: 10 minutos
Join 400,000+ executives and professionals who trust The AI Report for daily, practical AI updates.
Built for business—not engineers—this newsletter delivers expert prompts, real-world use cases, and decision-ready insights.
No hype. No jargon. Just results.
¡Hola!
Hoy te traemos una guía práctica, paso a paso, para que tu equipo monte en 60–90 minutos un RAG Lite que responda FAQs con citas verificables desde tus PDFs y artículos de ayuda, y lo publique como widget en la web o help center.
La fórmula es simple: recuperar lo relevante de tu corpus → generar la respuesta solo con esa evidencia → mostrar las citas para que cualquiera las compruebe. Nada de infra pesada: un índice local o gestionado, un modelo de embeddings sólido, un LLM de tu elección y un microservicio.
Al final tendrás un widget que responde con “lo que dice la documentación”, no “lo que cree la IA”.
Tu RAG Lite en 7 pasos (60–90 min)

1) Curación de corpus (10–15 min)
Qué incluir (orden de prioridad):
Políticas y Términos (PDF/HTML) firmados por legal/compliance.
Artículos de ayuda / tutoriales del help center.
Procedimientos internos (si harás un widget interno).
Reglas rápidas:
Conserva una sola versión por documento (agrega
version
yeffective_date
).Divide PDFs largos en secciones lógicas (capítulo → sección → subsección).
Normaliza nombres:
area/tipo/título_vAÑO-MES-DIA.ext
(ej.:soporte/politicas/envios_v2025-08-20.pdf
).Excluye foros/comentarios: útil para señales secundarias, no para el claim principal.
2) Indexación + chunking + metadatos (10–15 min)
Tamaños recomendados (texto general):
Chunk: 500–800 tokens
Solape: 80–120 tokens (para no cortar definiciones)
source_url, source_title, doc_type, author_org, effective_date (AAAA-MM-DD), version, lang, page, section_id, section_title, hash
Tips:
Extrae encabezados H1/H2/H3 como
section_title
.Para PDFs, guarda
page
y un ancla (#s-123
) que apunte a la sección.Deduplica con
hash
(evita indexar el mismo párrafo 3 veces).Si tu help center está en HTML, conserva IDs de encabezado para enlaces profundos.
3) Prompt seguro (política de “no inventes”) (5 min)
Eres un asistente de soporte. Responde solo con información presente en las FUENTES recuperadas.
Si la evidencia es insuficiente, responde exactamente: “No encontrado en la documentación disponible.”
Devuelve citas en formato:
url, título, ancla/sección, fecha
.Si la consulta es de temas sensibles (ver lista), deriva a humano y no generes contenido.
Responde en español claro, con viñetas si conviene, y un resumen de 1–2 líneas al inicio.
Plantilla de prompt de usuario (interno):
Pregunta: {query} Contexto del cliente (opcional): {context} Devuelve:
Resumen (1–2 líneas)
Respuesta detallada (máx. 8 bullets o 4–6 oraciones)
Citas: lista de objetos [{url, titulo, ancla, fecha, cita_textual≤25 palabras}]
Política aplicada: {normal | sensible→derivar}
4) Respuesta con citas (url + ancla + fecha) (10 min)
Formato de salida sugerido (JSON para tu frontend):
{
"summary": "Tu pedido se puede cancelar gratis dentro de 2 horas.",
"answer": [
"Puedes cancelar sin costo dentro de 2 horas posteriores a la compra.",
"Si el estado es 'En preparación', contacta a soporte para verificar."
],
"citations": [
{
"url": "https://help.tu-marca.com/envios#cancelaciones",
"titulo": "Política de envíos y cancelaciones",
"ancla": "#cancelaciones-tempranas",
"fecha": "2025-08-20",
"cita": "Las cancelaciones sin costo aplican durante las primeras 2 horas."
},
{
"url": "https://tu-marca.com/legales/terminos#compras",
"titulo": "Términos y Condiciones",
"ancla": "#compras-y-cancelaciones",
"fecha": "2025-06-01",
"cita": "El reembolso depende del estado del pedido."
}
],
"guardrail": "normal"
}
UI: muestra las citas como chips debajo de la respuesta; al hacer clic, abre el ancla exacta (no la portada del PDF).
5) Guardarraíles: temas sensibles → “derivar a humano” (5–10 min)
Lista mínima (adáptala):
Datos personales (documentos, tarjetas, credenciales)
Precios especiales / descuentos confidenciales
Asuntos legales / reclamaciones formales
Salud/seguridad (si aplica a tu producto)
Fraude, abuso, actividad sospechosa
“Este tema requiere revisión humana. Ya escalé tu caso y te contactamos en breve.”
sensible=true
o el score de confianza < 0.7 → responde lo de arriba Registra el motivo y quién recibe el caso (columna owner_escalado
en la base).
6) Embebido como widget (JS/snippet) + registro de consultas (15–20 min)
[Web/Help Center] ──(fetch)──> [/api/rag/answer] │ [Retriever (vector/BM25)] │ [LLM (con prompt seguro)] │ [Logger (consultas+citas)]
Snippet HTML/JS base (pegable):
<!-- Botón flotante --> <div id="rag-bubble">¿Necesitas ayuda?</div> <div id="rag-panel" hidden> <div id="rag-messages"></div> <form id="rag-form"> <input id="rag-input" placeholder="Escribe tu pregunta..." /> <button>Enviar</button> </form> </div> <script> const API = "/api/rag/answer"; const bubble = document.getElementById("rag-bubble"); const panel = document.getElementById("rag-panel"); const form = document.getElementById("rag-form"); const input = document.getElementById("rag-input"); const msgs = document.getElementById("rag-messages");
bubble.onclick = () => panel.hidden = !panel.hidden;
form.onsubmit = async (e) => { e.preventDefault(); const q = input.value.trim(); if(!q) return; add("user", q); input.value = ""; add("bot", "Pensando…");
const res = await fetch(API, {
method: "POST", headers: {"Content-Type":"application/json"},
body: JSON.stringify({ query: q })
}).then(r=>r.json());
msgs.lastChild.remove(); // quita "Pensando…"
add("bot", render(res));
log(q, res); // registra para KPIs
};
function add(role, html){ const div = document.createElement("div"); div.className = role; div.innerHTML = html; msgs.appendChild(div); msgs.scrollTop = msgs.scrollHeight; }
function render(r){ const ans = Array.isArray(r.answer) ? r.answer.join("<br>") : r.answer; const chips = (r.citations||[]).map(c => <a target="_blank" href="${c.url}${c.ancla||''}" class="cite"> ${c.titulo} (${c.fecha}) </a>).join(" "); return <p><strong>${r.summary||""}</strong></p><p>${ans||""}</p><div class="cites">${chips}</div>; }
async function log(q, r){ try { await fetch("/api/rag/log", { method:"POST", headers:{"Content-Type":"application/json"}, body: JSON.stringify({ q, r, ts: Date.now() }) }); } catch(e){} } </script> <style> #rag-bubble{position:fixed;right:16px;bottom:16px;padding:10px 14px; background:#111;color:#fff;border-radius:999px;cursor:pointer;z-index:9999;} #rag-panel{position:fixed;right:16px;bottom:64px;width:360px;max-height:60vh; background:#fff;border:1px solid #ddd;border-radius:12px;overflow:auto; box-shadow:0 10px 30px rgba(0,0,0,.1);z-index:9999;padding:12px;} #rag-messages{display:flex;flex-direction:column;gap:8px;max-height:50vh;overflow:auto;} .user{align-self:flex-end;background:#eef;padding:8px 10px;border-radius:10px;} .bot{align-self:flex-start;background:#f7f7f8;padding:8px 10px;border-radius:10px;} .cite{display:inline-block;margin:6px 6px 0 0;padding:4px 8px;border-radius:999px; background:#eef;text-decoration:none;font-size:12px} </style>
Registro de consultas (para KPIs): en /api/rag/log
guarda {q, r.summary, r.citations.length, guardrail, duration_ms, escalado}
.
7) KPIs y revisión (10 min)
Mide semanalmente (por canal y por tema):
% respuestas con ≥1 cita (objetivo: ≥95%).
Tiempo de resolución (p75): < 30 s.
Tasa de escalado a humano (baja con el tiempo; 15–30% al inicio es normal).
Deflexión: consultas resueltas en widget / tickets totales.
Top 10 huecos (consultas con “No encontrado”): backlog para documentación.
Apéndice — Buenas prácticas y mejoras
A) Recuperación que funciona
Híbrida: BM25/keyword + vectorial; reordena con reranker si puedes.
Reescritura de consulta (query expansion) con cuidado: no agregues términos que no estén en la intent.
Filtros por metadatos:
lang
,version
,effective_date >= hoy
.
B) Calibración y honestidad
Exige confianza por chunk (promedia/top-k) y refleja en el UI un badge “Confianza media”.
Si la confianza <0.7 → abstención + follow-up (“¿Puedes compartir la URL/pedido?”).
C) Ciclo de mejora continuo
Reindexa cambios de docs a diario.
Rotula malas respuestas (botón “Esto no ayuda”) y revisa cada 48–72 h.
Genera tests de regresión: 20–50 queries frecuentes con respuesta esperada + citas.
Plantillas listas (copiar/pegar)
Ninguna respuesta sale sin al menos 1 cita con URL + ancla + fecha. Si no hay evidencia, el bot devuelve “No encontrado en la documentación disponible.” y sugiere el artículo más cercano.
2) Lista de sensibles (ejemplo):datos personales, contraseñas, tarjetas, descuentos confidenciales, reclamaciones legales, fraude/abuso
. → Derivar a humano.
“Evalúa estas 30 preguntas reales. Mide: (a) ¿respondió? (b) ¿citó? (c) ¿fue preciso según la fuente? (d) ¿necesitaba humano? Devuelve una tabla con OK/KO, tiempo y enlace.”
4) Checklist de entrega del widget:
Corpus depurado + versiones.
Índice con chunks 500–800 + solape.
Prompt seguro activo.
UI con citas clicables a ancla.
Guardarraíles y ruta de escalado.
Registro en
/api/rag/log
.Tablero con KPIs.
Cronograma sugerido (90 min)
00:00–00:15 Curar corpus y nombrar versiones.
00:15–00:30 Indexar, chunkear y etiquetar metadatos.
00:30–00:35 Activar prompt seguro.
00:35–00:55 Integrar endpoint
/api/rag/answer
y widget.00:55–01:15 Probar 20 preguntas reales + pulir guardarraíles.
01:15–01:30 Abrir logging/KPIs y publicar.
DE NUESTROS SOCIOS.
Los Mejores Prompts del Mercado.

Con God Of Prompts encontrarás los mejores prompts para todo lo que quieras y crear tus mejores órdenes para que ChatGPT y otras plataformas de IA funcionen para ti.
Ventas, productividad, ideas… todo lo tienes con God of Prompts.
Abre tu cuenta y te impresionarás de todo lo que hay dentro.
Puedes abrir tu cuenta gratis, pero si decides adquirir uno de los planes Premium usa este cupón y obtén 10% de descuento: INNOVAITE
Pásate a la membresía Pro de Soy EmplIAdo
En la membresía Pro de Soy EmplIAdo, no solo te damos las lecciones:
Te entregamos prompts optimizados y listos para usar en GPT-5 para cada paso de esta guía.
Te mostramos en video cómo configurar integraciones con WhatsApp, Sheets, CRMs y más.
Te damos acceso a una comunidad privada para resolver dudas y compartir casos de éxito.
Si esta guía te parece útil, imagina lo que podrías lograr con instrucciones personalizadas y soporte directo.
La modalidad gratuita continúa, pero la PRO multiplica tu productividad. Únete aquí.
|
ATENCIÓN A ESTO
La IA no llegó para reemplazarte, llegó a multiplicarte
El enfoque híbrido es el único que funciona.
A partir de hoy todo será diferente. Y aquí es donde entra nuestro aliado Anik Singal, investor y autor de best-sellers.
Anik no solo probó esta visión… la llevó al extremo. Creó clones digitales de sí mismo, montó un ejército de IA, y con eso alcanzó 30M+ vistas al mes, escribió libros en días y escaló negocios sin dolores de crecimiento.
Hoy lanza su libro gratuito, el que consigues haciendo click en la imagen de arriba, donde abre TODO este sistema: Una investigación útil no es la más larga: es la más reproducible.
El futuro no espera. Nosotros tampoco.
Cuando soporte responde con evidencia, sube la confianza y baja el retrabajo. Un RAG Lite bien armado no intenta “ser creativo”; encuentra, cita y resume.
Empieza hoy con el corpus que ya tienes, monta el widget, mide % de respuestas con cita y tiempo de resolución, y convierte los “No encontrado” en tu backlog de documentación.
Ese es el ciclo que, sprint a sprint, convierte tu help center en un verdadero sistema experto de la marca.
Soy EmplIAdo
Tú diriges, la IA ejecuta.
Arthur quiere conocer tu opinión del Boletín de hoy. |
Iniciar Sesión o Suscríbete para participar en las encuestas. |
Reply