GPT
Este documento detalla el flujo de trabajo para integrar un asistente de OpenAI con sistemas externos, gestionando conversaciones y automatizando acciones mediante herramientas personalizadas.
Resumen Funcional
Este flujo de trabajo está diseñado para manejar interacciones complejas entre un asistente de OpenAI y un sistema externo, con el objetivo de procesar y gestionar mensajes de usuario, realizar llamadas a herramientas externas, y devolver respuestas en un contexto de conversación continuo.
Inicio del Proceso: El flujo comienza con la verificación de la existencia de un hilo de conversación previo. Si se encuentra un hilo existente, se reutiliza; de lo contrario, se crea uno nuevo para mantener la coherencia de la conversación.
Envío del Mensaje del Usuario: Una vez establecido el hilo, el mensaje del usuario se envía a OpenAI a través de la API, permitiendo que el asistente lo procese en el contexto del hilo activo.
Creación de una Ejecución: Se crea una "ejecución" (run) dentro del hilo, lo que permite al asistente procesar el mensaje del usuario y llevar a cabo las acciones necesarias según el flujo de trabajo configurado.
Sondeo de Cambios de Estado: El sistema realiza un sondeo continuo para monitorear el estado de la ejecución hasta que se complete o se requiera una acción adicional.
Enrutamiento de Herramientas: Si la ejecución requiere acciones adicionales, como consultas a APIs externas (para obtener información del cliente, departamentos, temas, o crear tickets), estas herramientas se llaman y sus resultados se integran en la conversación.
Recuperación del Último Mensaje: Una vez que la ejecución se ha completado, se recupera el último mensaje generado por OpenAI para ser utilizado en la respuesta final al usuario.
Finalización: El proceso culmina con la presentación de la respuesta final al usuario, cerrando así el ciclo de la conversación.
Este flujo de trabajo está diseñado para ser robusto y modular, permitiendo la integración de diversas funcionalidades externas mediante herramientas personalizadas, mientras mantiene la coherencia en las interacciones del asistente de OpenAI dentro de un hilo de conversación continuo.

Paso 1: Búsqueda del hilo existente para la conversación
Este fragmento de código se encarga de buscar un hilo de conversación existente en la base de datos asociado al conversationId del evento actual.
Búsqueda en la tabla: Utiliza la tabla
ThreadsTablepara buscar registros que tengan unconversationIdque coincida con el del evento. Se utiliza un filtro para esta búsqueda y se limita el resultado a un solo registro.Asignación del ID del hilo: Si se encuentra un hilo correspondiente, se asigna su
threadIda la variableworkflow.thread_id. Si no se encuentra ningún hilo (por ejemplo, si es la primera vez que se procesa esta conversación),workflow.thread_idquedará indefinido.
Este proceso es crucial para mantener la continuidad en las conversaciones, permitiendo que el asistente interactúe de manera coherente dentro de un mismo hilo o conversación.
Paso 2: Crear thread si no se encuentra en la tabla
Este fragmento de código maneja la creación de un nuevo hilo de conversación en caso de que no se haya encontrado uno existente.
Verificación de la existencia de un hilo: Se comprueba si
workflow.thread_ides nulo o indefinido, lo que indicaría que no se encontró un hilo existente.Preparación de datos y configuración para la solicitud de creación de hilo: Se preparan los datos y la configuración necesarios para realizar una solicitud HTTP POST a la API de OpenAI para crear un nuevo hilo.
Envío de la solicitud para crear un nuevo hilo: Se realiza la solicitud HTTP mediante
axiospara crear el nuevo hilo en la API de OpenAI.Almacenamiento del ID del nuevo hilo en
workflow.thread_id: Una vez creada, el ID del nuevo hilo se guarda en la variableworkflow.thread_idpara futuras referencias.Creación de un nuevo registro en la tabla: Finalmente, se guarda un nuevo registro en la tabla
ThreadsTable, asociando el ID del hilo recién creado con elconversationIddel evento, asegurando la persistencia de la conversación.
Paso 3: Enviar el Mensaje del Usuario al Hilo en la API de OpenAI
Este código realiza el envío del mensaje del usuario al hilo correspondiente en la API de OpenAI. A través de una solicitud HTTP POST, se asegura de que el contenido del mensaje del usuario se añada al hilo identificado por workflow.thread_id. Esto permite que la conversación con el asistente se mantenga dentro del mismo contexto, facilitando respuestas coherentes y relevantes por parte del asistente.
Paso 4: Crear una Ejecución para un Asistente de OpenAI Usando Axios
Este código crea una "ejecución" (run) en el contexto de un hilo existente usando la API de OpenAI.
Inicialización: Se establece
workflow.required_actioncomo un objeto vacío, preparando el flujo de trabajo para recibir nuevas acciones.Creación de la ejecución: Se realiza una solicitud HTTP POST a la API de OpenAI para crear una nueva ejecución dentro del hilo identificado por
workflow.thread_id. La solicitud incluye elassistant_id, que identifica al asistente específico que va a ejecutar la acción.Asignación del ID de la ejecución: El ID de la nueva ejecución, que se recibe en la respuesta de la API, se asigna a
workflow.run_id, permitiendo que el flujo de trabajo siga manejando esta ejecución en los siguientes pasos.
Esta ejecución es esencial para permitir que el asistente de OpenAI procese y responda en el contexto del hilo de conversación actual.
Paso 5: Sondeo para Cambios de Estado y Determinación del Siguiente Paso
Esta execución debe ir en un nodo propio.
Este paso implementa un sondeo continuo para verificar el estado de la ejecución (run) hasta que esta se complete o requiera una acción.
Definición de la función asíncrona: La función
waitTillRunCompleterealiza sondeos periódicos para obtener el estado actual de la ejecución asociada al hilo.Sondeo del estado: Dentro de un bucle
while, se envía una solicitud HTTP GET para verificar el estado actual de la ejecución. Dependiendo del estado (queued,in_progress,requires_action, etc.), se decide si continuar esperando o terminar el sondeo.Manejo de la respuesta: Si el estado es
queuedoin_progress, la función espera 1500 milisegundos antes de realizar otra verificación. Si el estado esrequires_action, se guarda la acción requerida enworkflow.required_action. Si no se requiere acción, se limpia esta variable.Finalización del sondeo: El bucle se detiene una vez que la ejecución ya no está en progreso, y se ha determinado si requiere una acción o si se ha completado.
Este proceso es fundamental para sincronizar el flujo de trabajo con el estado de la ejecución, permitiendo tomar decisiones basadas en el estado actual del proceso en OpenAI.
Paso 6: Herramienta de Enrutamiento
Este paso implementa una herramienta de enrutamiento que maneja diversas llamadas a funciones API relacionadas con clientes, departamentos, temas, y creación de tickets. Además, se encarga de gestionar las llamadas a estas funciones, formatear los resultados y enviarlos a la API de OpenAI.
Definición de Funciones de Herramientas: Varias funciones (
get_client,get_departments,get_topics,createTicket) interactúan con APIs externas para obtener información o realizar acciones específicas, como la creación de un ticket.Registro de Herramientas: Se registra un conjunto de herramientas en el objeto
registeredToolspara que puedan ser llamadas dinámicamente.Manejo de Llamadas a Herramientas: La función
handleToolCallsprocesa cada llamada a herramienta, ejecuta la función correspondiente y formatea la salida.Envío de Salidas a la API de OpenAI: Las salidas de las herramientas formateadas se envían a OpenAI para ser utilizadas en el contexto del asistente.
Paso 7: Recuperar el Último Mensaje desde la API de OpenAI
Este paso se encarga de recuperar el último mensaje generado por el asistente de OpenAI después de que la ejecución haya finalizado.
Solicitud GET para recuperar mensajes: Se realiza una solicitud HTTP GET para obtener todos los mensajes asociados al hilo (
workflow.thread_id). La API devuelve un array con los mensajes, de los cuales se extraerá el más reciente.Extracción del contenido del mensaje: El contenido del último mensaje (más reciente) se extrae del array de datos que devuelve la API. Este contenido se guarda en la variable
workflow.responsepara su uso posterior en el flujo de trabajo.
Este paso es crucial para obtener la respuesta final generada por el asistente en el contexto del hilo de conversación, lo que permite que la respuesta sea utilizada o presentada al usuario en la siguiente etapa del flujo de trabajo.
Last updated