Si estás planeando construir herramientas de IA, esperamos que nuestras experiencias sean tan útiles para ti como lo han sido para nosotros.
Iteraciones y lecciones aprendidas
Ya habíamos estado utilizando un asistente de IA interno codificado de manera rígida durante un tiempo, pero era complicado de iterar y demasiado complejo para que nuestros colegas de PM pudieran interactuar con él. Si querías ajustar la lógica de la IA, mejorar un mensaje o simplemente veías una posible mejora en la eficiencia, tenías que sumergirte en el código. En general, era una buena pieza de ingeniería, pero inaccesible para quienes más podrían beneficiarse de ella.
El Asistente de IA
El asistente de IA de n8n tiene tres casos de uso:
- Depuración de errores de usuario
- Responder preguntas en lenguaje natural en un formato de chat
- Ayudar a los usuarios a configurar credenciales
En el backend, contamos con dos grandes fuentes vectoriales que componen una base de datos interna de conocimiento (KB) – una es nuestra documentación y la otra es el Foro de n8n. Instruimos a nuestro asistente para que lea la documentación primero, para evitar alucinaciones, y luego acudir al Foro para obtener más información.
Configuramos nuestros datos en fragmentos, cada uno guardado con contexto para que el asistente pueda entender qué parte de un documento está leyendo y el contexto más amplio a su alrededor. Por supuesto, automatizamos flujos de trabajo en n8n para raspar la documentación tres veces por semana y actualizar la base de datos. Al mismo tiempo, también extraemos del Foro preguntas que tienen respuestas correspondientes y las acoplamos en la KB. Bebiendo nuestra propia champán 😉
Tanto el Servicio de IA como nuestra instancia interna donde residen los flujos de trabajo tienen entornos de desarrollo y producción, para que podamos trabajar en ellos sin cambiar directamente las versiones de producción.
Componentes principales del asistente
- Frontend de n8n: Todos los mensajes enviados por los usuarios desde la barra lateral de chat del asistente se envían primero a nuestro Servicio de IA, que es un servicio web separado alojado internamente.
- Servicio de IA: Maneja la autenticación de las solicitudes entrantes y llama al webhook de n8n también con autenticación, asegurando que el flujo de trabajo acepte solo solicitudes del Servicio de IA.
- Flujos de trabajo del Asistente: Aloja en nuestra instancia interna. Hay un flujo de trabajo principal (Gateway) que acepta llamadas webhook y redirige a un agente específico, basado en el modo de usuario.
En el funcionamiento interno tenemos cuatro agentes distintos que manejan los casos de uso del asistente. Elegimos esta configuración porque cada caso de uso requiere diferentes contextos de entrada y herramientas. Cuando un usuario inicia el asistente, dirigimos la solicitud usando el nodo Switch de n8n a uno de los cuatro agentes. El único inconveniente de este enfoque es que, una vez que un agente ha comenzado un chat con un usuario, no puede cambiar a otro agente mientras está en sesión, por lo que el usuario debe comenzar de nuevo.
Depuración de errores de usuario
- Asistente de errores genéricos: Se inicia cuando los usuarios hacen clic en el botón Preguntar Asistente desde el panel de salida del nodo cuando hay un error en el nodo. Este agente está especializado en depurar errores de nodos, tiene contexto sobre el error y acceso a documentación y respuestas del foro de n8n.
- Asistente de errores en el nodo de código: Especializado en depurar errores en el nodo de Código. Este agente se inicia cuando los usuarios hacen clic en el botón Preguntar Asistente desde el panel de salida del nodo cuando hay un error en el nodo de Código. Tiene contexto sobre el código del usuario y acceso a la documentación de n8n. Además de responder preguntas, este agente también puede sugerir cambios de código y aplicarlos al nodo abierto si el usuario así lo elige.
Respuestas a preguntas en lenguaje natural en formato de chat
- Agente de soporte: Responde a las solicitudes de los usuarios cuando abren un chat y comienzan a hacer preguntas. Este agente tiene contexto sobre lo que los usuarios están viendo actualmente (flujo de trabajo y nodos) y tiene acceso a la documentación y respuestas del foro de n8n.
Ayuda para configurar credenciales
- Asistente de credenciales: Se inicia cuando los usuarios hacen clic en el botón Preguntar Asistente desde el modal de credenciales. Este agente tiene contexto sobre el nodo actual de los usuarios y las credenciales que quieren configurar, y tiene acceso a la documentación de n8n.
Implementación
Una de las cosas más complicadas al trabajar con IA es que las respuestas que produce pueden ser completamente inesperadas. Pregunta algo de una manera, y obtendrás una respuesta correcta. Cambia algo tan pequeño como un nombre o número en el mensaje, y podrías acabar con una respuesta completamente diferente.
Para mitigar esto, comenzamos de manera pequeña, probando un agente en un mensaje de usuario como “¿por qué estoy viendo esto?”. Rápidamente nos dimos cuenta de que necesitábamos proporcionar más contexto porque el asistente no digería necesariamente lo que estaba en la pantalla del usuario antes de buscar en la KB. Así que creamos una herramienta de “información sobre el flujo de trabajo”, que permite al asistente recopilar información sobre un flujo de trabajo específico.
Ahora, cuando los usuarios preguntan algo sobre su flujo de trabajo, o por qué están viendo algo específico sin explicarlo, el asistente puede usar la herramienta de “información sobre el flujo de trabajo” para extraer el error o el proceso del contexto que está en la pantalla del usuario. Hoy en día, nuestro chat de soporte brinda respuestas precisas al observar los esquemas que el usuario está viendo y utilizándolo como parte de su búsqueda.
IA para evaluar IA
Guardamos ejecuciones, por lo que todos nuestros rastros están disponibles directamente en n8n, lo que significa que tenemos un conjunto fantástico de rastros internos para evaluar pruebas y cambios en los mensajes. Dado que tenemos un rico conjunto de datos de rastros, pensamos: ‘¿por qué no usar IA para acelerar el proceso de iteración?’ y desplegamos un LLM para juzgar las respuestas que nuestro LLM estaba produciendo.
Sin embargo, cometimos un error al dar las mismas instrucciones tanto al Asistente como al Juez: hacer respuestas útiles, accionables y breves. Esto resultó en que el Juez calificara cada respuesta perfectamente. Así que iteramos un poco en el marco.
Internamente, tenemos un proyecto de validación personalizado configurado en LangSmith donde podemos ejecutar el Asistente contra diferentes solicitudes de muestra de nuestros rastros y obtener una puntuación sobre la calidad de la respuesta. Esto nos permite probar diferentes mensajes y modelos rápidamente. Tomó mucha experimentación llegar a un marco que funcione de manera confiable, y por supuesto, cada vez que cambiamos algo, tenemos que probarlo. Pero ahora tenemos casi 50 casos de uso y podemos probar más precisamente cómo nuestros cambios están mejorando o disminuyendo la calidad de las respuestas.
Hoy en día, el Juez LLM recibe un mensaje de usuario y la salida del Asistente, y juzga y califica la salida contra un conjunto de instrucciones, como ‘¿debería incluirse X?, ¿es esta una alta prioridad?, ¿es esta salida accionable?’. Hasta ahora, la calidad parece ser un poco mejor que nuestro antiguo modelo.
Lecciones aprendidas
El retraso de tiempo está bien
Algo que nos dimos cuenta temprano es que a los usuarios no les importa esperar unos segundos por respuestas útiles. Asumimos que un agente que tardara 10 segundos en transmitir una respuesta sería una barrera para la adopción, pero no lo es en absoluto. Así que, a pesar de que hemos notado un ligero aumento en los tiempos de respuesta, no hemos visto una disminución en la resolución de errores.
Iterar, iterar, iterar
Como ingenieros, a menudo nos basamos en nuestras corazonadas en el código: puedes ver dónde hacer ajustes y ver cómo responde el programa. Pero con IA, puedes intentar hacer la misma pregunta de diferente manera y terminar con una respuesta completamente diferente. Y a veces cambias un mensaje y resulta que se valida un caso de uso, pero empeora otros tres.
La IA es mucho menos determinista, y la forma en que evalúas y evolucionas las respuestas que estás obteniendo debe abordarse con una mentalidad diferente. La prueba y error se convirtió en la nueva norma para nosotros mientras iterábamos sobre cada aspecto de nuestro asistente para ver qué funcionaba. Si bien esto requería una inversión de tiempo, en última instancia valió la pena porque ahora tenemos respuestas de alta calidad, y los tiempos de respuesta siguen mejorando.
Ser abiertos más allá del código
Somos ingenieros y, sinceramente, fue un desafío cambiar nuestra perspectiva de ingeniería para pasar de trabajar en código a trabajar en flujos de trabajo. Este proyecto cambió completamente nuestra forma de ver los enfoques de bajo código: fue mucho más fácil construir y migrar nuestro asistente de IA de lo que habíamos imaginado y estamos realmente impresionados con el éxito que ha tenido este proyecto en un conjunto de datos tan grande.
¿Qué sigue?
Las noticias se difundieron rápidamente sobre nuestro nuevo asistente de IA, y el equipo de soporte de n8n ya está aprovechando la KB y los flujos de trabajo de IA que construimos para ver si pueden mejorar la calidad y velocidad de sus respuestas.
Ahora estamos buscando cómo podemos aumentar las capacidades de nuestro asistente de IA con el tiempo, como ser capaces de construir un flujo de trabajo a partir de un mensaje. Y porque hemos configurado todo en n8n, también podemos experimentar fácilmente con diferentes LLM para acciones auxiliares. Además, estamos considerando introducir otro Agente de IA a los cuatro que actualmente estamos ejecutando, para que los usuarios puedan cambiar de agentes mientras están en sesión.
0 Comments