AGENTE DE IA PARA SOPORTE AL USUARIO

0
fa 14 hores
17 vistes
Professional
Español
#artificialintelligence #engineering #plaudere
Mostrar menys
Mostrar més
Antecedentes
Con el lanzamiento de ChatGPT, sentí que la tecnología había alcanzado un punto de inflexión para quienes desarrollamos aplicaciones. Un sistema capaz de organizar grandes cantidades de texto y permitir la comunicación en lenguaje natural es, sin duda, un hito tecnológico del siglo XXI.
Mientras seguía estas noticias, trabajaba en la programación de este sitio web y me preguntaba si existía una forma de aplicar estas tendencias a una web "tradicional" construida de forma individual. Soy consciente de que forzar la tecnología en un servicio que no la necesita no es una buena práctica; por ello, busqué un problema específico en Plaudere que un modelo de lenguaje pudiera resolver. Tras un breve período de reflexión y conversaciones con colegas, identifiqué que la dificultad para usar la web y la comprensión de su propósito fundamental eran dos dificultades típicas de los usuarios que podrían resolverse usando modelos de lenguaje.
Navegando entre restricciones: Cloud vs. Local
Para abordar la aplicación de modelos de lenguaje en el sitio web, investigué el estado del arte de la IA Generativa. Aunque existen muchos modelos disponibles, estos suelen tener costes asociados por llamadas a sus APIs. En la etapa inicial de Plaudere, mi objetivo era construir capacidades propias sin depender de terceros, siempre que una solución local fuera viable. No tiene sentido utilizar un modelo masivo y costoso si uno pequeño puede cumplir con los requisitos. Así, comencé a buscar en Hugging Face modelos open-source compatibles con Node.js.
Exploré varios modelos intentando mantener el servicio dentro de los límites de 3GB de RAM y 3vCPUs. Probé Flan-T5, TinyLlama, Llama y GPT-2. La mayoría excedía los 3GB una vez cargados en memoria o generaban errores de Node.js al combinarse con los procesos propios de la web, una frustración común en el desarrollo.
Después de varios intentos, el único modelo que funcionó fue Qwen 1.5 0.5B (desarrollado por Alibaba Cloud). Es extremadamente eficiente: requiere menos de 3GB de RAM y 3vCPUs. Con aproximadamente 500 millones de parámetros, se clasifica como un Small Language Model (SLM). A pesar de su tamaño, maneja una ventana de contexto de 25,000 palabras. Utiliza una arquitectura de transformer decoder-only y soporta 12 idiomas, siendo el inglés uno de sus puntos más fuertes.
Antes de decidirme por Qwen, investigué arquitecturas de procesamiento de lenguaje natural (NLP) más antiguas. Aunque eficientes, carecían de la fluidez del lenguaje natural y la capacidad de entender el contexto o la conjugación. Los modelos basados en transformers han dejado obsoletas esas arquitecturas de preguntas y respuestas (Q&A) basadas en NLP.
La solución: Arquitectura desacoplada con FastAPI y Qwen 1.5
El siguiente paso estratégico fue migrar el modelo Qwen a un servicio independiente de FastAPI. Al separar el SLM del servidor web, evitamos conflictos de memoria. Esta API dedicada se activa cuando el usuario realiza una consulta; el sitio web espera la respuesta remota y, si no hay más actividad, el servicio entra en modo de espera para ahorrar recursos del servidor.
Implementación del Contexto (RAG)
Para integrar el modelo, añadimos un chat emergente que envía el prompt del usuario al servidor. Definimos tres casos de uso para el soporte:
- Ayuda general del sitio web.
- Consultas sobre artículos creados en la plataforma.
- Información sobre usuarios (solo si estos la han compartido).
Aunque Qwen acepta 25,000 palabras, procesar tal volumen en 3GB de RAM es inviable. Para solucionar esto, implementé el concepto de Retrieval-Augmented Generation (RAG). En lugar de enviar todo el texto, utilizo Fuse.js para localizar las oraciones más relevantes que coincidan con la consulta del usuario. Si no hay una coincidencia específica, el sistema extrae un resumen y lo usa como contexto para una respuesta general del modelo. Esto minimiza el volumen de datos enviados al SLM.
El modelo recibe el prompt "aumentado" por este contexto. Esto evita que el modelo simplemente "adivine" la siguiente palabra basándose en su conocimiento general; en su lugar, fundamenta su respuesta en el contenido proporcionado. Una limitación actual de esta configuración es que la FastAPI no procesa preguntas simultáneas, sino que las gestiona en una cola de espera.
Conclusiones y hoja de ruta
El objetivo inicial de proporcionar mejores herramientas para entender la web se ha sido superado. La clave de los buenos resultados reside en la calidad del contexto. Aunque el modelo ocasionalmente presenta "alucinaciones" o errores factuales básicos (propios de un SLM frente a un LLM masivo), responde con éxito basándose en la información de soporte.
Nuestros objetivos futuros incluyen:
- Reducir alucinaciones migrando a versiones más recientes de Qwen.
- Enriquecer las respuestas de la IA incluyendo imágenes y videos.
- Refinar las reglas de contexto para el contenido generado por usuarios.
- Garantizar la consistencia multilingüe para que la IA responda en el mismo idioma de la interfaz.
Este proyecto ha sido fundamental para experimentar con GenAI bajo restricciones reales de hardware, aplicando la metodología RAG para que un modelo responda sobre un contexto que nunca vio en su entrenamiento original.