La integración de las capacidades de varios modelos de IA desbloquea una sinfonía de potencial, desde la automatización de tareas complejas que requieren múltiples habilidades como visión, habla, escritura y síntesis hasta mejorar los procesos de toma de decisiones. Sin embargo, orquestar estas colaboraciones presenta un desafío importante en la gestión de las relaciones y dependencias internas. Los enfoques lineales tradicionales a menudo se quedan cortos y luchan por gestionar las complejidades de diversos modelos y dependencias dinámicas.
Al traducir su flujo de trabajo de aprendizaje automático en un gráfico, obtiene una visualización de cómo cada modelo interactúa y contribuye al resultado general que combina el procesamiento del lenguaje natural, la visión por computadora y los modelos de habla. Con el enfoque de grafos, los nodos representan modelos o tareas, y los bordes definen dependencias entre ellos. Este mapeo basado en gráficos ofrece varias ventajas, identificando qué modelos dependen del resultado de otros y aprovechando el procesamiento paralelo para tareas independientes. Además, podemos ejecutar las tareas utilizando estrategias de navegación de gráficos existentes, como primero en amplitud o primero en profundidad, según las prioridades de la tarea.
El camino hacia una colaboración armoniosa entre los modelos de IA no está exento de obstáculos. Imagínese dirigir una orquesta donde cada individuo habla diferentes idiomas y los instrumentos operan de forma independiente. Este desafío refleja las brechas de comunicación al integrar diversos modelos de IA, lo que requiere un marco para gestionar las relaciones y qué modelos pueden recibir cada formato de entrada.
El enfoque de orquestación basado en gráficos abre puertas a posibilidades interesantes en varios dominios:
Tareas colaborativas para el descubrimiento de fármacos.
Los investigadores pueden acelerar el proceso de descubrimiento de fármacos con una secuencia de asistentes impulsados por IA, cada uno diseñado para una tarea específica, por ejemplo, utilizando una misión de descubrimiento de tres pasos. El primer paso implica un modelo de lenguaje que escanea una gran cantidad de datos científicos para resaltar posibles objetivos proteicos fuertemente vinculados a enfermedades específicas, seguido de un modelo de visión para explicar diagramas o imágenes complejos, proporcionando información detallada sobre las estructuras de las proteínas identificadas. Esta imagen es crucial para comprender cómo los posibles medicamentos podrían interactuar con la proteína. Finalmente, un tercer modelo integra información de los modelos de lenguaje y visión para predecir cómo los compuestos químicos podrían afectar a las proteínas objetivo, ofreciendo a los investigadores información valiosa para liderar el proceso de manera eficiente.
Varios desafíos surgirán durante la integración del modelo para entregar todo el proyecto. Extraer imágenes relevantes del contenido escaneado y alimentarlas al modelo de visión no es tan sencillo como parece. Se necesita un procesador intermedio entre el escaneo de texto y las tareas de visión para filtrar las imágenes relevantes. En segundo lugar, la tarea de análisis en sí debe combinar múltiples entradas: la salida del escaneo de datos, la explicación del modelo de visión y las instrucciones especificadas por el usuario. Esto requiere una plantilla para combinar la información para que el modelo de lenguaje la procese. Las siguientes secciones describirán cómo utilizar un marco de Python para manejar las relaciones complejas.
Generación de contenido creativo
La colaboración de modelos puede facilitar la creación de contenido interactivo mediante la integración de elementos como composición musical, animación y modelos de diseño para generar escenas animadas. Por ejemplo, en un enfoque de colaboración basado en gráficos, la primera tarea puede planificar una escena como un director y pasar la información para cada tarea de generación de música e imágenes. Finalmente, un modelo de animación utilizará el resultado de los modelos de arte y música para generar un video corto.
Para optimizar este proceso, pretendemos lograr la ejecución paralela de la generación de música y gráficos, ya que son tareas independientes. Por lo tanto, no es necesario que la música espere a que se completen los gráficos. Además, debemos abordar los diversos formatos de entrada mediante la tarea de animación. Si bien algunos modelos como Stable Video Diffusion funcionan solo con imágenes, la música se puede combinar mediante un posprocesador.
Estos ejemplos proporcionan sólo una idea del potencial de la teoría de grafos en la integración de modelos. El enfoque de integración de gráficos le permite adaptar múltiples tareas a sus necesidades específicas y desbloquear soluciones innovadoras.
Intelli es un módulo de Python de código abierto para orquestar flujos de trabajo de IA, aprovechando los principios de los gráficos a través de tres componentes clave:
- Agentes Al actuar como representantes de sus modelos de IA, usted define cada agente especificando su tipo (texto, imagen, visión o voz), su proveedor (openai, gemini, estabilidad, mistral, etc.) y la misión.
- Tareas son unidades individuales dentro de su flujo de trabajo de IA. Cada tarea aprovecha un agente para realizar una acción específica y aplica un preprocesamiento y posprocesamiento personalizado proporcionado por el usuario.
- Fluir une todo, orquestando la ejecución de sus tareas, adhiriéndose a las dependencias que ha establecido a través de la estructura gráfica. La gestión del flujo garantiza que las tareas se ejecuten de manera eficiente y en el orden correcto, permitiendo el procesamiento tanto secuencial como paralelo cuando sea posible.
El uso del componente de flujo para gestionar la relación de tareas como un gráfico proporciona varios beneficios al conectar varios modelos; sin embargo, para el caso de una sola tarea, esto podría ser excesivo y la llamada directa al modelo será suficiente.
Escalada: A medida que su proyecto crece en complejidad, agregar más modelos y tareas requiere actualizaciones de código repetitivas para tener en cuenta las discrepancias en el formato de los datos y la dependencia compleja. El enfoque gráfico simplifica esto al definir un nuevo nodo que representa la tarea, y el marco resuelve automáticamente las diferencias de entrada/salida para organizar el flujo de datos.
Adaptación dinámica: Con los enfoques tradicionales, los cambios para tareas complejas afectarán a todo el flujo de trabajo y requerirán ajustes. Al utilizar el flujo, se encargará de agregar, eliminar o modificar conexiones automáticamente.
Explicabilidad: El gráfico permite una comprensión más profunda de su flujo de trabajo de IA al visualizar cómo interactúan los modelos y optimizar la navegación de la ruta de las tareas.
Nota: el autor participó en el diseño y desarrollo del marco intelli. Es un proyecto de código abierto con licencia Apache.
Empezando
Primero, asegúrese de tener Python 3.7+, ya que Intelli aprovecha las últimas funciones de Python Asyncio e instale:
pip install intelli
Agentes: los ejecutores de tareas
Los agentes de Intelli están diseñados para interactuar con un modelo de IA específico. Cada agente incluye una capa de entrada unificada para acceder a cualquier tipo de modelo y proporciona un diccionario que permite pasar parámetros personalizados al modelo, como el tamaño máximo, la temperatura y la versión del modelo.
from intelli.flow.agents import Agent# Define agents for various AI tasks
text_agent = Agent(
agent_type="text",
provider="openai",
mission="write social media posts",
model_params={"key": OPENAI_API_KEY, "model": "gpt-4"}
)
Tareas: los componentes básicos
Las tareas representan unidades individuales de trabajo u operaciones que deben realizar los agentes e incluyen la lógica para manejar el resultado de la tarea anterior. Cada tarea puede ser una operación simple como generar texto o un proceso más complejo, como analizar el sentimiento de los comentarios de los usuarios.
from intelli.flow.tasks import Task
from intelli.flow.input import TextTaskInput# Define a task for text generation
task1 = Task(
TextTaskInput("Create a post about AI technologies"),
text_agent,
log=True
)
Procesadores: E/S sintonizadas
Los procesadores agregan una capa adicional de control al definir un preproceso personalizado para la entrada de la tarea y un posproceso para la salida. El siguiente ejemplo demuestra la creación de una función para acortar la salida de texto del paso anterior antes de llamar al modelo de imagen.
class TextProcessor:
@staticmethod
def text_head(text, size=800):
retupytrn text[:size]task2 = Task(
TextTaskInput("Generate image about the content"),
image_agent,
pre_process=TextProcessor.text_head,
log=True,
)
Flujo: especificar las dependencias
Flow traduce su flujo de trabajo de IA en un gráfico acíclico dirigido (DAG) y aprovecha la teoría de grafos para la gestión de dependencias. Esto le permite visualizar fácilmente las relaciones de tareas y optimizar el orden de ejecución de sus tareas.
from intelli.flow.flow import Flowflow = Flow(
tasks={
"title_task": title_task,
"content_task": content_task,
"keyword_task": keyword_task,
"theme_task": description_theme_task,
"image_task": image_task,
},
map_paths={
"title_task": ["keyword_task", "content_task"],
"content_task": ["theme_task"],
"theme_task": ["image_task"],
},
)
output = await flow.start()
map_paths dicta las dependencias de las tareas, guiando a Flow para organizar el orden de ejecución y garantizando que cada tarea reciba el resultado necesario de sus predecesoras.
Así es como Flow navega por los nodos:
- Mapeo del flujo de trabajo: Flow construye un DAG utilizando tareas como nodos y dependencias como bordes. Esta representación visual aclara la secuencia de ejecución de tareas y el flujo de datos.
- Clasificación topológica: el flujo analiza el gráfico para determinar el orden de ejecución óptimo. Se priorizan las tareas sin dependencias entrantes, lo que garantiza que cada tarea reciba las entradas necesarias de sus predecesoras antes de su ejecución.
- Ejecución de tareas: el marco itera a través de las tareas ordenadas y ejecuta cada una con la entrada correspondiente. Según el mapa de dependencia, las entradas pueden provenir de salidas de tareas anteriores y valores definidos por el usuario.
- Preparación de entrada: antes de la ejecución, la tarea aplica cualquier función de preprocesamiento definida para la tarea, modifica los datos de entrada según sea necesario y llama al agente asignado.
- Gestión de resultados: el agente devuelve un resultado, que se almacena en un diccionario con el nombre de la tarea como clave y se devuelve al usuario.
Para visualizar su flujo como un gráfico:
flow.generate_graph_img()
El uso de la teoría de grafos ha transformado los enfoques lineales tradicionales para orquestar modelos de IA al proporcionar una sinfonía de colaboración entre diversos modelos.
Marcos como Intelli traducen su flujo de trabajo en una representación visual, donde las tareas se convierten en nodos y las dependencias se asignan como bordes, creando una descripción general de todo su proceso para automatizar tareas complejas.
Este enfoque se extiende a diversos campos que requieren modelos colaborativos de IA, incluida la investigación científica, la automatización de decisiones comerciales y la creación de contenido interactivo. Sin embargo, una escala efectiva requiere un mayor refinamiento en la gestión del intercambio de datos entre los modelos.