- IA
- RAG
- Ingeniería
RAG para atención al cliente: cómo lograr que las respuestas de la IA sean realmente precisas
Un LLM por sí solo se inventa respuestas plausibles. La generación aumentada por recuperación (RAG) apoya a la IA en tu propio contenido. Así lo hace AskAIs, paso a paso.
Equipo de AskAIs
7 min de lectura
Pregúntale a un LLM por sí solo «¿cómo restablezco mi contraseña?» y obtendrás una respuesta plausible que probablemente sea incorrecta: otro botón, otro flujo, otra URL. RAG (generación aumentada por recuperación) lo resuelve poniendo en el prompt los fragmentos adecuados de tu propio contenido antes de que el modelo responda.
El proceso de un vistazo
Tres etapas: ingesta, recuperación y generación.
1. Ingesta
- Sube archivos PDF, DOCX, TXT, Markdown, CSV o JSON, rastrea tu sitio web o añade pares de pregunta y respuesta en Training.
- Un proceso en segundo plano extrae el texto y lo divide en fragmentos de unos 2000 caracteres (aproximadamente 500 tokens), con un solapamiento de 200 caracteres. Cada par de pregunta y respuesta queda como un solo fragmento.
- Cada fragmento se convierte en un embedding con
text-embedding-3-small(1536 dimensiones). - Los fragmentos se guardan en PostgreSQL con la extensión
pgvectory un índice HNSW para la distancia de coseno.
2. Recuperación
Cuando el mensaje de un visitante necesita datos, generamos el embedding de sus mensajes recientes y hacemos una búsqueda por distancia de coseno en los fragmentos del espacio de trabajo. Los saludos y la charla trivial se saltan este paso. Una versión simplificada de la consulta:
-- Simplified. The real query also checks that the document is
-- ready, enabled, in date and visible on the visitor's platform.
SELECT c.id, c.content,
1 - (c.embedding <=> $1::vector) AS similarity
FROM knowledge_chunks c
WHERE c.tenant_id = $2
ORDER BY c.embedding <=> $1::vector
LIMIT $3; -- 3 × top-K candidates, re-ranked afterwardsObtenemos el triple de candidatos de los que necesitamos, los reordenamos, descartamos los que quedan por debajo del umbral de similitud (alrededor de 0,3), nos quedamos con dos fragmentos como máximo por documento y pasamos al modelo los cinco mejores (por defecto).
3. Generación
Los fragmentos se añaden al prompt del sistema dentro de un bloque de referencia delimitado. Se le indica al modelo que trate ese bloque como datos y no como instrucciones, que use solo las referencias que responden a la pregunta y que no invente datos del producto que no estén ahí.
Si un visitante pregunta por un dato del producto y no se encuentra nada relevante, ni siquiera se llama al modelo: se le dice al visitante que esa información no está disponible, y el chat pasa a una persona, salvo que el traspaso automático esté desactivado.
Cómo mantener bajos los costos
Tres cosas hacen que una base de conocimientos grande sea asequible:
- Caché de embeddings: el mismo texto de búsqueda obtiene el mismo embedding. La clave es el nombre del modelo más un hash SHA-1 del texto, y se guarda en Redis durante 24 horas.
- Caché de prompts: con los modelos Claude, la solicitud pide a Anthropic que guarde el prompt en caché, y OpenAI guarda en caché los prompts largos automáticamente. El bloque de referencia cambia en cada respuesta, así que se beneficia sobre todo la parte fija del prompt.
- Omisión por umbral: si ningún fragmento supera el umbral, no se añade nada al prompt.
Cuando RAG no es suficiente
RAG resuelve bien las preguntas del tipo «¿cómo hago…?». No puede responder «¿dónde está mi pedido?», porque esos datos no están en tus documentos.
Para eso, AskAIs tiene Custom tools: describes un endpoint HTTP de tu propio sistema, como pedidos, reservas o inventario, y la IA puede llamarlo mientras redacta la respuesta. Las preguntas generales se responden con tu conocimiento, las personales con tus sistemas, y el resto pasa a tu equipo.