El equipo Astro construyó secretamente el mejor framework de agentes de IA
BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술
Transcript
00:00:00Este es Flu, un framework de código abierto para crear agentes de IA hecho por el equipo detrás de Astro,
00:00:04que básicamente toma lo que hace Cloud Code como entorno y lo hace 100% programable.
00:00:09Así que funciones como habilidades, herramientas y sandboxes están soportadas desde el primer momento,
00:00:13para que puedas crear un entorno de agente completo y desplegarlo en cualquier lugar con solo unas líneas de TypeScript.
00:00:19Pero, ¿por qué el equipo de Astro decidiría construir un framework para entornos de agentes en primer lugar?
00:00:23¿Y cuál es ese truco genial que puedes hacer con los sandboxes que permite ejecutar agentes mucho más barato?
00:00:28Suscríbete y averigüémoslo.
00:00:33Flu fue construido por el cofundador de Astro, y curiosamente,
00:00:36ellos no se propusieron construir un framework para entornos de agentes.
00:00:39Fred y el equipo crearon Flu para ejecutar flujos de trabajo de IA dentro del propio repositorio de GitHub de Astro.
00:00:44Pero cuando otro ingeniero de Amplitude lo tuvo en sus manos,
00:00:47el equipo se dio cuenta de que esta es una herramienta a la que cualquier agente podría tener acceso,
00:00:51lo cual en realidad tiene sentido si lo piensas.
00:00:53Quiero decir, echemos un vistazo a Cloud Code, por ejemplo.
00:00:55Debajo de la terminal o de la interfaz de chat de usuario hay un entorno,
00:00:58así que soporta herramientas personalizadas de servidores MCP, lee archivos Cloud MD,
00:01:02tiene soporte para sandboxes y soporte para habilidades reutilizables.
00:01:05Esto y mucho, mucho más permite que el modelo haga un trabajo real,
00:01:08lo cual Flu te puede dar en solo unas pocas líneas de código.
00:01:11Hace esto al estar construido sobre Pi, que es un entorno de agente minimalista en sí mismo,
00:01:16lo mismo sobre lo que está construido OpenClaw,
00:01:18y envuelve un framework real alrededor del núcleo de agente de Pi.
00:01:21Flu en realidad hace algo inteligente con los sandboxes para ayudarte a ejecutarlos mucho más barato,
00:01:25de lo cual hablaré un poco más tarde.
00:01:26Pero si volvemos al ejemplo de Cloud Code,
00:01:28se asume que hay un humano detrás del volante dirigiendo al agente,
00:01:31lo cual suele ser el caso.
00:01:33Pero Flu no tiene esa misma limitación.
00:01:35Con Flu, puedes construir agentes como Cloud Code que requieren intervención humana,
00:01:38pero también puedes construir flujos de trabajo que no requieren un humano en absoluto,
00:01:42lo cual es útil para procesos agenticos que son muy específicos
00:01:44y no necesitan cambiar tanto.
00:01:46Ahora, podrías estar pensando,
00:01:47esto suena muy similar a algo como Mastra o el SDK de IA de Vercel,
00:01:52y hablaré de las diferencias un poco más adelante.
00:01:54De hecho, las diferencias serán mucho más claras si hacemos una demostración sencilla.
00:01:57Así que sigamos adelante y hagamos eso.
00:01:58Para empezar, tendrás que instalar el runtime de Flu,
00:02:01que es sobre lo que tu agente se importa y se ejecuta,
00:02:04y luego tendrás que instalar la CLI de Flu,
00:02:06que compila y sirve a tu agente.
00:02:08También tendrás que configurar una clave de API de uno de los muchos proveedores que soporta Pi.
00:02:13Para esta demo, sin embargo, voy a usar Anthropic,
00:02:15y luego tendrás que ejecutar flu init con los objetivos,
00:02:18lo que crea un archivo de configuración de flu para que la CLI sepa cómo empaquetar tu proyecto.
00:02:22Puedes elegir entre Node o Cloudflare,
00:02:24y hablaré de las diferencias en solo un segundo.
00:02:26Pero ya he hecho estos pasos,
00:02:27así que echemos un vistazo a cómo se ven estos archivos.
00:02:30Aquí están los archivos típicos que obtienes de un proyecto vacío de bun,
00:02:33y algunos de estos archivos ni siquiera se usan.
00:02:35Si echamos un vistazo a index.ts, esto no se va a usar para nada.
00:02:38Tampoco el archivo readme,
00:02:39pero lo que realmente se va a usar es este archivo flu config.ts,
00:02:42que usa V detrás de escena,
00:02:45la CI para usar Node en lugar de Cloudflare.
00:02:47Y la diferencia es que Node usa un servidor HTTP sobre HONO,
00:02:51y Cloudflare desplegará tu proyecto en un worker
00:02:53con un objeto duradero para persistencia.
00:02:55Ahora, después de haber hecho esos pasos,
00:02:56tendrás que crear un nuevo directorio,
00:02:57ya sea uno de agentes o uno de flujos de trabajo.
00:03:00Revisaremos los flujos de trabajo un poco más tarde,
00:03:01pero por ahora, comencé con un agente simple,
00:03:03que contiene el código de la documentación.
00:03:05Y esto básicamente establece un modelo
00:03:06y añade algunas instrucciones,
00:03:08que se añaden al prompt del sistema.
00:03:09Y eso es todo.
00:03:10Eso es todo lo que necesitas para crear un agente flu básico.
00:03:13Veámoslo en acción.
00:03:14Para ejecutarlo, podemos usar flu connect,
00:03:15que construye y ejecuta el agente.
00:03:17Y estamos haciendo coincidir el nombre de nuestro archivo TS,
00:03:20que es hello world,
00:03:21antes de darle una ID de instancia,
00:03:22que podría ser cualquiera.
00:03:24Así que incluso podría ser un local uno, dos, tres.
00:03:25Pero esto es útil si tienes muchos agentes ejecutándose
00:03:27y cada agente puede tener su propia ID única.
00:03:29Esto también es útil para desplegar en Cloudflare
00:03:31porque esta ID se asigna a su propia instancia de objeto duradero.
00:03:35Así que ahora si pulsamos enter,
00:03:36podemos ver que carga la configuración,
00:03:38lee el objetivo y ejecuta el agente que ha encontrado.
00:03:40Ahora no tenemos un archivo MD del agente,
00:03:42pero si lo tuviéramos, usaría eso.
00:03:43Y ahora ha construido los agentes en este archivo server.mjs
00:03:46y nos ha dado la capacidad de introducir un prompt.
00:03:48Así que puedo decir algo como, dame una broma al azar.
00:03:50Y aquí podemos ver que el agente empieza a pensar,
00:03:52responde, así que transmite su ciclo de vida.
00:03:54Luego me da una broma, me pide otra.
00:03:57Pero luego aquí abajo, imprime el JSON final,
00:03:59que comprende el texto,
00:04:00así como algunos tokens de entrada y salida,
00:04:02el costo de todo el prompt
00:04:03y el modelo que se utilizó.
00:04:05Por supuesto, podríamos seguir hablando con este agente,
00:04:06pero por ahora, voy a cerrarlo.
00:04:08Y ese es un ejemplo de cómo construir un agente básico con Flu.
00:04:11Hagamos algo un poco más complicado.
00:04:13Construyamos un flujo de trabajo para ayudar a generar algunos títulos
00:04:15para este video de YouTube.
00:04:16Y para hacer eso, de nuevo, estamos creando un agente
00:04:18con algunas instrucciones más complejas.
00:04:20Y esta vez sí que tenemos una habilidad.
00:04:23Así que la habilidad se importa aquí con un atributo de importación de habilidad.
00:04:26Y aquí, fíjate que ya no estamos exportando el agente en sí,
00:04:29sino que esta vez estamos exportando una función llamada run.
00:04:31Y lo que esto hace es inicializar el agente
00:04:34para el flujo de trabajo y luego abre una sesión en el entorno.
00:04:36Ahora, lo que sucede después es bastante interesante.
00:04:38Así que aquí, lo que está pasando es que estamos obteniendo la ruta
00:04:41del payload, que se estableció aquí
00:04:43en este tipo de contexto de flujo.
00:04:44Así que si cambiamos el nombre aquí a archivo,
00:04:46obtendríamos un error de tipo.
00:04:47Y aquí está obteniendo el archivo,
00:04:49al que he llamado script,
00:04:50y pasándolo como un prompt.
00:04:52Así que todo esto tendrá sentido
00:04:53si echamos un vistazo a las instrucciones de aquí,
00:04:55que le estamos diciendo que estudie el script
00:04:57y me dé 10 títulos de YouTube clickbait
00:04:59usando la habilidad de puntuación de título para clasificarlos.
00:05:01Así que veamos si esto funciona.
00:05:02Pero antes de hacerlo,
00:05:03quiero que sea obvio que los flujos de trabajo
00:05:04están en el directorio de flujo de trabajo
00:05:06y las habilidades están en el directorio de habilidades
00:05:08desde la raíz del proyecto.
00:05:09Y para ejecutar este flujo de trabajo,
00:05:10necesitamos ejecutar flu run con el nombre de nuestro flujo de trabajo.
00:05:13En mi caso, es YT titles,
00:05:14seguido del objetivo y el payload JSON,
00:05:16que es la ruta para este script.
00:05:18Así que si pulsamos enter,
00:05:19veremos que obtenemos una ID de flujo de trabajo.
00:05:21Y aquí está haciendo algo un poco extraño.
00:05:23De hecho, está buscando la habilidad,
00:05:25a pesar de que la he especificado antes.
00:05:27Y ahora en este razonamiento,
00:05:27me está diciendo que no hay archivos en el sistema de archivos.
00:05:30¿Por qué hace eso?
00:05:31Así que por defecto,
00:05:32flu ejecuta agentes en un sandbox usando solo bash.
00:05:35Todo a lo que tiene acceso es a la descripción de la habilidad,
00:05:37que ha sido registrada por aquí,
00:05:39pero no tiene acceso a ninguno de estos archivos
00:05:42relacionados con la habilidad.
00:05:43Y la habilidad en sí, si echamos un vistazo,
00:05:44ejecuta un script de Python usando bash
00:05:47para encontrar una puntuación precisa al estilo vidIQ
00:05:50para un título de YouTube.
00:05:51Así que para arreglar eso,
00:05:52voy a importar local desde flu runtime node,
00:05:54que le dice a flu que ejecute el agente en mi sistema local
00:05:57para que tenga acceso a todos mis archivos
00:05:59y pueda ejecutar scripts de Python.
00:06:01Si te preocupa la seguridad,
00:06:02explicaré cómo puedes evitar esto
00:06:03más adelante en el video.
00:06:04Pero también vamos a cambiar
00:06:05el directorio de trabajo actual a la habilidad
00:06:07dentro del directorio de habilidades de este proyecto.
00:06:10Para que flu no tenga que buscar
00:06:11para encontrar los archivos exactos que necesita.
00:06:13Y ahora cuando ejecuto este flujo de trabajo,
00:06:15podemos ver que flu lee inmediatamente el archivo MD de habilidad
00:06:17y es capaz de generar los 10 títulos clickbait
00:06:20con una puntuación para cada uno de ellos.
00:06:21Ahora, si no quieres darle a tu agente
00:06:22acceso de flujo de trabajo a tu sistema local,
00:06:25lo que podrías hacer en su lugar
00:06:26es crear una herramienta personalizada desde el archivo de Python.
00:06:28Así que aquí estoy cargando el archivo de Python en la habilidad
00:06:30y creando una herramienta llamada score title,
00:06:33que usa value bots para verificar los parámetros
00:06:35y luego ejecuta el script de Python.
00:06:37Luego podemos registrar esta herramienta dentro de nuestro agente
00:06:40y todo debería funcionar como se espera.
00:06:42Pero ahora volvamos al proyecto anterior
00:06:44y digamos que queremos activarlo basado en una llamada post HTTP.
00:06:47Bueno, solo hay una cosa que tenemos que hacer para habilitar eso.
00:06:50Y eso es simplemente añadir el middleware de ruta.
00:06:52Ahora, todo lo que tenemos que hacer es construir el proyecto flu,
00:06:54especificar nuestro objetivo, un puerto opcional,
00:06:56y luego ejecutar nuestro archivo de servidor.
00:06:58Y ahora está escuchando en el puerto que especificamos.
00:07:00Ten en cuenta que el archivo server.js
00:07:01incorpora cualquier agente o flujo de trabajo que tengamos.
00:07:03Así que solo necesitamos este archivo
00:07:05si quisiéramos desplegarlo en cualquier lugar que soporte Node.js.
00:07:07Ahora puedo ejecutar curl con el método post
00:07:09al puerto que se especificó,
00:07:11seleccionar un flujo de trabajo y darle algunos datos,
00:07:13lo que nos da una ID de flujo de trabajo.
00:07:14Y luego si hacemos curl para flujos de trabajo,
00:07:16especificando nuestra ID de flujo de trabajo específica
00:07:18y enviando a JQ solo para hacerlo más fácil de leer,
00:07:21podemos ver información sobre nuestro flujo de trabajo
00:07:23y un resumen de los resultados.
00:07:25Por supuesto, Flu soporta WebSockets en lugar de HTTP
00:07:27si quisieras transmitir la información del flujo de trabajo.
00:07:29Ahora, como de costumbre, hay tantas características que tiene Flu
00:07:31que no tuve tiempo de revisar,
00:07:33como perfiles de agente para agentes reutilizables,
00:07:35soporte para Daytona, sandboxes de Cloudflare,
00:07:37o cualquier otro sandbox simplemente usando una URL,
00:07:40añadiendo rutas personalizadas para autenticación o comprobaciones de salud,
00:07:42e incluso soporte para sub-agentes.
00:07:44Pero, ¿cómo se compara esto
00:07:45con otro framework de agente de IA de código abierto como Mastra?
00:07:48Bueno, la última vez que usé Mastra
00:07:49fue cuando hice este video,
00:07:50que puedes pausar este video e ir a verlo
00:07:52si quieres un repaso de lo que es.
00:07:54Pero cuando lo usé,
00:07:55todavía tenías que configurar manualmente las sesiones,
00:07:58la memoria, el sandbox y la carga de herramientas por ti mismo.
00:08:01Era mucho más un proceso granular paso a paso,
00:08:03y no estoy seguro de si eso ha cambiado
00:08:05para volverse más simple,
00:08:06pero creo que el enfoque que Flu está tomando
00:08:08es completamente diferente.
00:08:10Es más un enfoque primero en el entorno
00:08:11y asume que vas a estar usando
00:08:13estas características desde el principio.
00:08:14Hablando de sandboxes,
00:08:16Flu en realidad hace algo realmente inteligente con ellos.
00:08:18Así que cada agente obtiene su propio sandbox por defecto,
00:08:21lo cual expliqué antes en la demo,
00:08:22pero este sandbox está impulsado por el just Bash de Vercel,
00:08:25que re-implementa Bash en TypeScript.
00:08:27Así que ejecuta este sandbox en memoria
00:08:29en lugar de un contenedor real,
00:08:31lo que significa que obtienes acceso a las herramientas grep, glob y read
00:08:34sin pagar por un contenedor cada vez,
00:08:35que tiene que arrancar toda una máquina Linux
00:08:38antes de que puedas hacer algo.
00:08:40Lo que significa que Flu ejecuta miles de agentes
00:08:41por casi nada,
00:08:43y puedes optar por un contenedor real
00:08:44solo cuando necesites uno.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video