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.
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:
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.
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:
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.
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.
Haremos clic en el ícono de descarga al lado del campo Modelo de incrustación para descargarlo e instalarlo.
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.
Aquí hay algunos consejos importantes a tener en cuenta:
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.