Desarrollo de un flujo de avisos
Importante
Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
El flujo de avisos es una herramienta de desarrollo diseñada para simplificar todo el ciclo de desarrollo de aplicaciones de inteligencia artificial con tecnología de modelos de lenguaje grandes (LLM). El flujo de avisos proporciona una solución completa que simplifica el proceso de creación de prototipos, experimentación, iteración e implementación de las aplicaciones de inteligencia artificial.
Con el flujo de avisos, puede hacer lo siguiente:
- Orquestar flujos ejecutables con LLM, avisos y herramientas de Python mediante un grafo visualizado.
- Probar, depurar e iterar por los flujos con facilidad.
- Crear variantes de avisos y comparar su rendimiento.
En este artículo, aprenderá a crear y desarrollar su primer flujo de avisos en Inteligencia artificial de Azure Studio.
Requisitos previos
- Si aún no tiene un proyecto de Azure AI Studio, primero debe crearlo.
- El flujo de avisos requiere una sesión de proceso. Si no tiene un entorno de ejecución, puede crear uno en Inteligencia artificial de Azure Studio.
- Necesita un modelo implementado.
Creación y desarrollo del flujo de solicitudes
Puede crear un flujo mediante la clonación de los ejemplos disponibles en la galería o bien hacerlo desde cero. Si ya tiene archivos de flujo en un recurso compartido de archivos o en el entorno local, también puede importarlos para crear un flujo.
Para crear un flujo de avisos desde la galería en Inteligencia artificial de Azure Studio:
Inicie sesión en Inteligencia artificial de Azure Studio y seleccione el proyecto.
En el menú contraíble de la izquierda, seleccione Flujos de avisos.
Seleccione + Create (+ Crear).
En el icono Flujo estándar, seleccione Crear.
En la página Crear un nuevo flujo, escriba un nombre de carpeta y, a continuación, seleccione Crear.
Se abre la página de creación del flujo de avisos. Ahora, puede empezar a crear el flujo. De manera predeterminada, verá un flujo de ejemplo. Este flujo de ejemplo tiene nodos para las herramientas de LLM y Python.
Nota:
La vista de grafo es solo para visualización. Muestra la estructura del flujo que va a desarrollar. No puede editar la vista de grafo directamente, pero puede acercar, alejar y desplazarse. Puede seleccionar un nodo en la vista de grafo para resaltarlo y navegar al nodo en la vista de edición de herramientas.
Opcionalmente, puede agregar más herramientas al flujo. Las opciones de herramientas visibles son LLM, Aviso y Python. Para ver más herramientas, seleccione + Más herramientas.
Seleccione una conexión e implementación en el editor de herramientas de LLM.
Seleccione Ejecutar para ejecutar el flujo.
El estado de ejecución del flujo se muestra como En ejecución.
Una vez completada la ejecución de flujo, seleccione Ver salidas para ver los resultados del flujo.
Puede ver el estado y la salida de la ejecución de flujo en la sección Salidas.
Creación del flujo
Cada flujo se representa mediante una carpeta que contiene un archivo "flow.dag.yaml", archivos de código fuente y carpetas del sistema. Puede agregar nuevos archivos, editar los archivos existentes y eliminar archivos. También puede exportar los archivos al entorno local o importarlos desde el entorno local.
Además de la edición directa del nodo en la vista plana, también puede activar el botón de alternancia Modo de archivo sin formato y seleccionar el nombre del archivo para editarlo en la pestaña de abrir archivo.
Entrada y salida del flujo
La entrada del flujo son los datos que se pasan al flujo en su conjunto. Para definir el esquema de entrada, especifique el nombre y el tipo. Establezca el valor de entrada de cada entrada para probar el flujo. Puede hacer referencia a la entrada del flujo más adelante en los nodos del flujo mediante la sintaxis ${input.[input name]}
.
La salida del flujo son los datos generados por el flujo en su conjunto, y resume los resultados de la ejecución de flujo. Puede ver y exportar la tabla de salida una vez que se complete la ejecución de flujo o la ejecución por lotes. Para definir el valor de salida del flujo, haga referencia a la salida de un solo nodo del flujo mediante la sintaxis ${[node name].output}
o ${[node name].output.[field name]}
.
Vincular nodos
Al hacer referencia a la salida del nodo, puede vincular los nodos de forma conjunta. Por ejemplo, puede hacer referencia a la salida del nodo de LLM en la entrada del nodo de Python, para que el nodo de Python pueda consumir la salida del nodo de LLM y, en la vista de grafo, puede ver que los dos nodos están vinculados de forma conjunta.
Habilitación del control condicional en el flujo
El flujo de avisos no solo ofrece una manera simplificada de ejecutar el flujo, sino que también aporta una característica eficaz para los desarrolladores, el control condicional, que permite a los usuarios establecer condiciones para la ejecución de cualquier nodo de un flujo.
En su núcleo, el control condicional proporciona la capacidad de asociar cada nodo de un flujo a una configuración de activación. Esta configuración es básicamente una instrucción "when" que determina cuándo se debe ejecutar un nodo. La eficacia de esta característica se materializa cuando tiene flujos complejos en los que la ejecución de determinadas tareas depende del resultado de las tareas anteriores. Con el control condicional, puede configurar los nodos específicos para que se ejecuten solo cuando se cumplan las condiciones especificadas.
Específicamente, puede establecer la configuración de activación de un nodo si selecciona el botón Activar configuración en la tarjeta del nodo. Puede agregar la instrucción "when" y establecer la condición.
Para establecer las condiciones, haga referencia a la entrada del flujo o a la salida del nodo. Por ejemplo, puede establecer la condición ${input.[input name]}
como valor específico o ${[node name].output}
como valor específico.
Si no se cumple la condición, se omite el nodo. El estado del nodo se muestra como "Omitido".
Prueba del flujo
Puede probar el flujo de dos maneras:
- Ejecutando un único nodo.
- Para ejecutar un único nodo, seleccione el icono Ejecutar en el nodo en la vista aplanada. Una vez completada la ejecución, puede comprobar rápidamente el resultado en la sección de salida del nodo.
- Ejecutando todo el flujo.
- Para ejecutar todo el flujo, seleccione el botón Ejecutar situado en la parte superior derecha.
Visualización del resultado y el seguimiento de pruebas (versión preliminar)
Para la ejecución global del flujo, después de ejecutar el flujo, puede ver el estado de ejecución en el banner de ejecución. A continuación, puede seleccionar Ver seguimiento para ver el seguimiento para comprobar el resultado y observar la ejecución del flujo, donde puede ver la entrada y salida de todo el flujo y cada nodo, junto con información más detallada para la depuración. Está disponible durante la ejecución y una vez completada la ejecución.
Descripción de la vista de seguimiento
El tipo de seguimiento de un flujo de avisos se designa como Flujo. Dentro de la vista de seguimiento, se puede observar la secuencia clara de las herramientas que se usan para la orquestación de flujo.
Cada intervalo de nivel 2 bajo la raíz del flujo representa un nodo en el flujo, ejecutado en forma de llamada de función, por lo que el tipo de intervalo se identifica como Función. Puede ver la duración de cada ejecución de nodo en el árbol de intervalos.
En el árbol de intervalos, las llamadas LLM se identifican fácilmente como el intervalo de LLM. Proporcionan información sobre la duración de la llamada LLM y el costo del token asociado.
Al seleccionar un intervalo, puede ver la información detallada en el lado derecho. Incluye información de entrada y salida, JSON sin formato y excepción, todos los cuales son útiles para la observación y depuración.
Nota:
En el SDK del flujo de avisos, definimos varios tipos de intervalo, incluidos los de LLM, Función, Inserción, Recuperación y Flujo. Y el sistema crea automáticamente intervalos con información de ejecución en atributos y eventos designados.
Para obtener más información sobre los tipos de intervalo, consulte Intervalo de seguimiento.
Una vez completada la ejecución del flujo, para comprobar los resultados, puede seleccionar el botón Ver resultados de pruebas para comprobar todos los registros de ejecución históricos de una lista. De forma predeterminada, se muestran los registros de ejecución creados en los últimos 7 días. Puede seleccionar el Filtro para cambiar la condición.
También puede seleccionar el Nombre del registro de ejecución para ver la información detallada en la vista de seguimiento.
Desarrollo de un flujo de chat
El flujo de chat está diseñado para el desarrollo de aplicaciones conversacionales, compila las funcionalidades del flujo estándar y proporciona una mayor capacidad para las entradas/salidas de chat y la administración del historial de chat. Con el flujo de chat, puede crear fácilmente un bot de chat que controle la entrada y salida del chat.
En la página de creación del flujo de chat, el flujo de chat se etiqueta con "chat" para distinguirlo del flujo estándar y del flujo de evaluación. Para probar el flujo de chat, seleccione el botón "Chat" para activar un cuadro de chat para la conversación.
Entrada y salida de chat, e historial de chat
Los elementos más importantes que diferencian un flujo de chat de un flujo estándar son Entrada de chat, Historial de chat y Salida de chat.
- Entrada de chat: se refiere a los mensajes o consultas enviados por los usuarios al bot de chat. Controlar eficazmente las entradas del chat es crucial para el éxito de una conversación, ya que implica comprender las intenciones del usuario, extraer la información relevante y desencadenar las respuestas adecuadas.
- Historial de chat: es el registro de todas las interacciones entre el usuario y el bot de chat, incluidas tanto las entradas del usuario como las salidas generadas por la IA. Mantener el historial de chat es esencial para hacer un seguimiento del contexto de la conversación y garantizar que la IA pueda generar respuestas contextualmente relevantes.
- Salida de chat: se refiere a los mensajes generados por la IA que se envían al usuario en respuesta a sus entradas. La generación de salidas de chat contextualmente apropiadas y que fomenten la interacción es vital para que la experiencia del usuario sea positiva.
Un flujo de chat puede tener varias entradas, pero el historial de chat y la entrada de chat son obligatorias en el flujo de chat.
En la sección de entradas del flujo de chat, una entrada de flujo se puede marcar como entrada de chat. Después, puede rellenar el valor de la entrada de chat si escribe en el cuadro de chat.
El flujo de avisos puede ayudar al usuario a administrar el historial de chat. El valor
chat_history
de la sección Entradas está reservado para representar el Historial de chat. Todas las interacciones en el cuadro de chat, incluidas las entradas de chat del usuario, las salidas de chat generadas y las entradas y salidas de otros flujos, se almacenan de forma automática en el historial de chat. El usuario no puede establecer manualmente el valor dechat_history
en la sección Entradas. Está estructurado como una lista de entradas y salidas:[ { "inputs": { "<flow input 1>": "xxxxxxxxxxxxxxx", "<flow input 2>": "xxxxxxxxxxxxxxx", "<flow input N>""xxxxxxxxxxxxxxx" }, "outputs": { "<flow output 1>": "xxxxxxxxxxxx", "<flow output 2>": "xxxxxxxxxxxxx", "<flow output M>": "xxxxxxxxxxxxx" } }, { "inputs": { "<flow input 1>": "xxxxxxxxxxxxxxx", "<flow input 2>": "xxxxxxxxxxxxxxx", "<flow input N>""xxxxxxxxxxxxxxx" }, "outputs": { "<flow output 1>": "xxxxxxxxxxxx", "<flow output 2>": "xxxxxxxxxxxxx", "<flow output M>": "xxxxxxxxxxxxx" } } ]
Nota:
La capacidad de guardar o administrar automáticamente el historial de chat es una característica de la página de creación al realizar pruebas en el cuadro de chat. Para las ejecuciones por lotes, es necesario que los usuarios incluyan el historial de chat en el conjunto de datos de la ejecución por lotes. Si no hay ningún historial de chat disponible para las pruebas, simplemente establezca el valor de chat_history en una lista vacía []
dentro del conjunto de datos de la ejecución por lotes.
Creación de avisos con el historial de chat
La incorporación del historial de chat a los avisos es esencial para crear respuestas de bot de chat atractivas y que reconozcan el contexto. En los avisos, puede hacer referencia a chat_history
para recuperar interacciones pasadas. Esto le permite hacer referencia a entradas y salidas anteriores para crear respuestas contextualmente relevantes.
Use la gramática for-loop del lenguaje Jinja para enumerar una lista de entradas y salidas de chat_history
.
{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}
Prueba con el cuadro de chat
El cuadro de chat proporciona una manera interactiva de probar el flujo de chat simulando una conversación con el bot de chat. Para probar el flujo de chat mediante el cuadro de chat, siga estos pasos:
- Seleccione el botón "Chat" para abrir el cuadro de chat.
- Escriba las entradas de prueba en el cuadro de chat y presione Entrar para enviarlos al bot de chat.
- Revise las respuestas del bot de chat para asegurarse de que son contextualmente adecuadas y precisas.
- Vea el seguimiento específico para observar y depurar rápidamente.