paint-brush
Creemos un chatbot de atención al cliente utilizando RAG y la documentación de su empresa en OpenWebUIpor@hostkey
1,648 lecturas
1,648 lecturas

Creemos un chatbot de atención al cliente utilizando RAG y la documentación de su empresa en OpenWebUI

por Hostkey.com8m2024/07/09
Read on Terminal Reader

Demasiado Largo; Para Leer

OpenWebUI ofrece una oportunidad única para crear chatbots fascinantes y útiles incluso sin una amplia experiencia en codificación. En este artículo, compartiremos nuestro viaje para crear un chatbot de soporte técnico diseñado para ayudar a nuestro equipo de primera línea respondiendo las preguntas de los usuarios. Aquí te dejamos un resumen paso a paso de sus acciones.
featured image - Creemos un chatbot de atención al cliente utilizando RAG y la documentación de su empresa en OpenWebUI
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI es una plataforma de medios integral que presenta un conjunto de herramientas de inteligencia artificial: OpenAI, Ollama, Automatic1111, ComfyUI, Whisper API, entrenamiento de modelos personalizados, RAG basado en Langchain con ChromaDB, búsqueda híbrida BM25/web y más.


Si bien todo esto ha estado disponible durante algún tiempo, documentado e implementable con conocimientos de programación en Python, OpenWebUI ofrece una oportunidad única para crear chatbots fascinantes y útiles incluso sin una amplia experiencia en codificación.


En este artículo, compartiremos nuestro viaje para crear un chatbot de soporte técnico diseñado para ayudar a nuestro equipo de primera línea respondiendo las preguntas de los usuarios (y, eventualmente, convirtiéndonos en parte de nuestro equipo).


Alquile servidores GPU con implementación instantánea o un servidor con una configuración personalizada con tarjetas NVIDIA Tesla A100/H100 80Gb o A5000/A4000 de nivel profesional. También están disponibles servidores GPU con tarjetas gaming RTX4090.


Punto de partida

Contamos con documentación de usuario creada con Material para MkDocs. Esto da como resultado una estructura de directorio que contiene archivos .md con formato Markdown. También tenemos una configuración OpenWebUI y Ollama implementada con el modelo llama3-8b-instruct cargado.


Objetivos del proyecto:


  1. Desarrollar un chatbot personalizado: este chatbot interactuará con los usuarios y proporcionará información basada en nuestra documentación.
  2. Convertir la documentación a un formato adecuado para LLM: Necesitamos transformar nuestra documentación de Markdown a un formato que los LLM puedan procesar de manera eficiente para la generación aumentada de recuperación (RAG).
  3. Habilitar actualizaciones y adiciones de datos: el sistema debe permitir actualizaciones y adiciones continuas a la base de datos de vectores que contiene nuestra documentación.
  4. Centrarse en responder preguntas: el chatbot debe funcionar principalmente como un sistema de respuesta a preguntas y evitar participar en conversaciones no relacionadas con TI.
  5. Proporcione enlaces de fuentes: siempre que sea posible, el chatbot debe vincular a las fuentes de documentación originales para obtener la información proporcionada.
  6. Implementar filtrado de preguntas: Necesitamos la capacidad de configurar restricciones de preguntas para el chatbot. Por ejemplo, es posible que deseemos evitar que responda preguntas basadas en la ubicación geográfica.

Implementación ingenua

Nuestro intento inicial fue simplemente cargar nuestra documentación existente en su formato Markdown original y usar el modelo llama3 sin ninguna modificación. Los resultados, por decirlo suavemente, fueron decepcionantes:


Primero: Nuestros archivos Markdown contienen varios elementos como etiquetas de imágenes, notas al pie, bloques de código, formato en negrita y cursiva, enlaces internos y externos, íconos e incluso construcciones " ** " para botones. Todo este "ruido" adicional crea problemas al dividir la documentación en partes para su procesamiento.


Segundo: el modelo de transformadores de oraciones/todo MiniLM-L6-v2, que OpenWebUI usa de forma predeterminada para representar oraciones y párrafos en un espacio vectorial de 384 dimensiones (esencial para tareas RAG como agrupación y búsqueda semántica), está entrenado principalmente en inglés. . Nos gustaría que nuestro bot eventualmente también admita otros idiomas.


Tercero: si bien llama3 es un modelo de instrucción, aún puede dirigirse a discusiones fuera de tema en lugar de centrarse en responder las consultas de los usuarios. Un modelo 70b podría ser más adecuado, pero requiere una GPU con 40 GB de memoria de vídeo, mientras que llama3-8b puede funcionar con una GPU con sólo 8 GB.

Si bien el tercer problema podría abordarse mediante la creación de un modelo personalizado (agente en la terminología OpenAI), los dos primeros requieren soluciones alternativas más importantes. Esto es lo que hemos encontrado hasta ahora.

Paso a paso: configurar el chatbot de soporte técnico en OpenWebUI

Primero, convertiremos la documentación a un formato adecuado para cargarla en nuestro sistema RAG (Retrieval Augmented Generation). Hemos creado un potente script bash llamado ai_text_generator para automatizar este proceso.


El script recorre todos los directorios de documentación y utiliza expresiones regulares dentro de sed, awk y perl para eliminar y reemplazar el marcado Markdown que RAG no necesita. Finalmente, agrega un enlace a la documentación original alojada en https://hostkey.com/documentation al final de cada documento.



Este script prepara meticulosamente su documentación para usar con un sistema RAG en OpenWebUI. Aquí un resumen paso a paso de sus acciones:


  • Generación de URL: Genera una URL completa para cada archivo de documentación.
  • Eliminación de marcas de imágenes: elimina todas las marcas de Markdown relacionadas con las imágenes.
  • Eliminación de anotaciones: elimina todas las anotaciones del texto. Formato de botones: transforma la sintaxis ** y ** de Markdown en [], formateándolos efectivamente como botones.
  • Eliminación de encabezado: elimina líneas que comienzan con ">", que probablemente se utilizan para crear un esquema o una tabla de contenido.
  • Eliminación de iconos: elimina cualquier marca o código de Markdown que represente iconos.
  • Formato de texto en negrita: elimina el formato de texto en negrita de Markdown.
  • Modificación de enlaces: elimina los enlaces internos y conserva los enlaces externos.
  • Formato de enlace de correo electrónico: reformatea los enlaces a direcciones de correo electrónico.
  • Normalización de espacios en blanco: elimina espacios adicionales al principio de cada línea hasta el primer carácter.
  • Conversión de fin de línea: convierte CRLF (finales de línea de Windows) al formato UNIX (LF).
  • Reducción de líneas vacías: Elimina líneas vacías consecutivas que superen uno.
  • Anexación de URL: agrega la URL generada al final de cada archivo procesado.


Después de ejecutar el script, el directorio ai_data contendrá un conjunto de archivos listos para cargar en el sistema RAG de OpenWebUI.



A continuación, necesitamos agregar un nuevo modelo a OpenWebUI para trabajar con nuestra base de datos de vectores de documentos y Ollama LLM. Este modelo debería admitir un tono más informal, 'tú' (ты), no solo en inglés. Estamos planeando agregar soporte para otros idiomas como el turco en el futuro.


  1. Para comenzar, iremos al Panel de administración - Configuración - Documentos . En el campo Modelo de incrustación , seleccionaremos frase-transformers/all-MiniLM-L12-v2 . Hemos probado todos los modelos recomendados de esta lista (https://www.sbert.net/docs/sentence_transformer/pretrained_models.html) y descubrimos que este es el que mejor se adapta.

  2. Haremos clic en el ícono de descarga al lado del campo Modelo de incrustación para descargarlo e instalarlo.

  3. Inmediatamente, configuraremos los parámetros de RAG:

    • Top K = 10: Esto significa que el sistema considerará los 10 documentos más relevantes al generar una respuesta.

    • Tamaño de fragmento = 1024: los documentos se dividirán en fragmentos de 1024 tokens para su procesamiento.

    • Superposición de fragmentos = 100: Habrá una superposición de 100 tokens entre fragmentos consecutivos.



Después de eso, puedes dirigirte a la sección Espacio de trabajo - Documentos y cargar nuestra documentación. Es una buena idea darle una etiqueta de colección específica (en nuestro caso, hostkey_en) para que sea más fácil conectarse al modelo o a las solicitudes de API más adelante.



A continuación, crearemos un modelo personalizado para nuestro chatbot. Para hacer esto, regresaremos al Espacio de trabajo - Modelos y haremos clic en el ícono más.


Le daremos un nombre a nuestro chatbot y seleccionaremos el modelo base (en nuestro caso, llama3-latest).


Luego, definiremos el mensaje del sistema. Esto es lo que le dice al chatbot cómo verse y comportarse. Describe su función, sus limitaciones y los resultados deseados.


Este es el mensaje del sistema que hemos diseñado para nuestro chatbot de soporte técnico:


You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.


If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.


Provide short step-by-step instructions and external links


Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.


Example of answer: " User: How can I cancel my server?


Bot:


You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:

- Go to the "Billing" tab in the specific server management menu.

- Click the [Cancel service] button.

- Describe the reason for the cancellation and select its type.

- Click the [Confirm termination] button.


Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.


You can cancel the service cancellation request in the Billing tab using the [Revoke] button.

Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.


See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "


A continuación, conectaremos la colección de documentos necesarios. En la sección Conocimiento , haremos clic en el botón Seleccionar documentos y elegiremos la colección que necesitamos según su etiqueta.


Alquile servidores GPU con implementación instantánea o un servidor con una configuración personalizada con tarjetas NVIDIA Tesla A100/H100 80Gb o A5000/A4000 de nivel profesional. También están disponibles servidores GPU con tarjetas gaming RTX4090.



También necesitamos configurar algunos parámetros adicionales ocultos en la pestaña Parámetros avanzados . Al hacer clic en Mostrar se revelarán estas configuraciones. Estableceremos la temperatura en 0,3 y la longitud del contexto en 4089.



Finalmente, hacemos clic en Guardar y actualizar para crear nuestro modelo de chatbot de soporte técnico personalizado.


¡Y ahí lo tienes! Nuestro chatbot está listo para trabajar y atender las solicitudes de los usuarios. Es educado, paciente y está disponible las 24 horas, los 7 días de la semana.

Consejos para trabajar con RAG en OpenWebUI

Aquí hay algunos consejos importantes a tener en cuenta:

  1. Si está trabajando con una gran cantidad de documentos en RAG, se recomienda encarecidamente instalar OpenWebUI con soporte para GPU (rama open-webui:cuda).
  2. Cualquier modificación al modelo de incrustación (cambio, carga, etc.) requerirá que vuelva a indexar sus documentos en la base de datos vectorial. No es necesario cambiar los parámetros de RAG.
  3. Al agregar o eliminar documentos, acceda siempre a su modelo personalizado, elimine la colección de esos documentos y vuelva a agregarlos. De lo contrario, es posible que su búsqueda no funcione correctamente o sea significativamente menos efectiva. Si su bot proporciona respuestas incorrectas pero la documentación con la información necesaria aparece en la lista en la parte inferior, es probable que este sea el problema.
  4. Si bien OpenWebUI reconoce varios formatos para crear RAG (pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt), se recomienda cargar documentos como texto sin formato para un rendimiento óptimo.
  5. Si bien la búsqueda híbrida puede mejorar los resultados, consume muchos recursos y puede aumentar significativamente los tiempos de respuesta (20-30-40 segundos o más) incluso en una GPU potente. Este es un problema conocido y los desarrolladores están trabajando en una solución.



Ahora que hemos probado el chatbot, el siguiente paso es integrarlo al sistema de chat existente de nuestra empresa. OpenWebUI ofrece una API y puede funcionar como proxy de Ollama, agregando sus propias características únicas. Sin embargo, todavía falta la documentación, lo que hace que la integración sea un desafío.


Al examinar el código y el historial de confirmaciones, hemos obtenido algunas ideas sobre cómo estructurar las solicitudes de API, pero todavía no funciona como se esperaba. Logramos llamar al modelo personalizado, pero sin la funcionalidad RAG.

Estamos esperando ansiosamente las funciones prometidas por los desarrolladores en las próximas versiones, incluido RAG, búsqueda web y ejemplos y descripciones detalladas.


El proceso de prueba también reveló algunas inconsistencias y redundancias en nuestra documentación. Esto presenta una oportunidad para mejorar el rendimiento del chatbot y mejorar la claridad y precisión generales de nuestra documentación.


Alquile servidores GPU con implementación instantánea o un servidor con una configuración personalizada con tarjetas NVIDIA Tesla A100/H100 80Gb o A5000/A4000 de nivel profesional. También están disponibles servidores GPU con tarjetas gaming RTX4090.