00:00:00Una de las formas más sencillas de potenciar a tus agentes de IA es, simplemente, dándoles
00:00:03acceso a bash, pero eso puede ser algo complejo. Necesitas una terminal real, un sistema de archivos,
00:00:09servidores y contenedores; en definitiva, mucha infraestructura, o al menos así era antes.
00:00:13¿Y si te dijera que hay una forma más simple? En realidad, puedes usar una implementación en TypeScript
00:00:18de bash. Sé que suena un poco loco, pero créeme, esto es genial
00:00:22e incluso podría ahorrarte dinero. Déjame enseñarte cómo.
00:00:30Este es un nuevo paquete llamado “justbash” y, como ves en el archivo de lectura, dice: “Entorno de bash
00:00:34simulado con un sistema de archivos virtual en memoria escrito en TypeScript. Esto está
00:00:38diseñado para agentes de IA que necesitan un entorno bash seguro y aislado”.
00:00:42Pero antes de mostrarte cómo vincularlo con tus agentes de IA para darles
00:00:45más capacidades, quiero enseñarte un código muy simple para que tengas contexto
00:00:48sobre cómo funciona. Aquí estoy iniciando un nuevo entorno de bash desde el paquete justbash
00:00:53y dentro de él podemos ejecutar comandos de bash. Usamos env.exec y, en este caso,
00:00:57ejecuto el comando echo “hello” y le pido que lo guarde en un archivo llamado
00:01:01greeting.txt. Luego, en la siguiente línea, ejecuto otro comando en el mismo entorno
00:01:06para leer ese archivo greeting.txt. Como puedes ver, podemos registrar la
00:01:10salida estándar del resultado obtenido, el código de salida y también las variables
00:01:14de entorno; al ejecutarlo, se ve que ha escrito el archivo y lo ha leído
00:01:18correctamente. Obtenemos un código de salida cero y las variables de entorno en nuestra terminal
00:01:22bash simulada. Pero lo importante aquí, como ya mencioné, es que es solo una
00:01:26simulación de bash; es literalmente una versión de esos comandos escrita en TypeScript.
00:01:30No está conectada a ninguna terminal real, simplemente convierte el comando que le
00:01:34pasamos a TypeScript y lo ejecuta. Así que este archivo greeting.txt
00:01:39no existe en ningún sistema de archivos físico, está en un sistema virtual en memoria, aunque
00:01:44existen opciones si quieres conectarlo a uno real. Una forma sencilla de entender
00:01:47lo que hace es que toma el comando bash que escribimos dentro de la función exec
00:01:51y lo convierte en una función de JavaScript que luego ejecuta; por eso no
00:01:55necesita una terminal real, y podemos verlo aquí en el código. Al poner “echo”
00:01:59dentro de exec, en realidad se ejecuta esta función de JavaScript, que tiene la lógica
00:02:03para procesar los parámetros del comando echo de bash y transformarlos a JavaScript
00:02:08para luego imprimir el resultado de lo que hayamos puesto después del echo; aquí
00:02:11abajo se ve que devuelve un objeto con la salida estándar en JavaScript,
00:02:15el error estándar y el código de salida. Y si piensas que no puede
00:02:19manejar todo lo básico de bash, aquí tienes una lista de todos los
00:02:23comandos compatibles: tiene muchísimos, como cat, copy, awk,
00:02:27base64, e incluso avanzados para procesar datos como jq, python 3 y sqlite. Hasta puedes
00:02:33hacer peticiones de red con curl configurando una lista blanca de seguridad. También
00:02:36soporta funciones de terminal como tuberías, redirecciones y encadenamiento de comandos;
00:02:41realmente ofrece todo lo que una terminal bash básica tendría. Como ves,
00:02:45el paquete es genial y muy funcional, pero probablemente te sigas
00:02:48preguntando por qué querrías bash en TypeScript y cómo ayuda esto a tus agentes
00:02:53y te ahorra dinero. Para responder a eso, veamos un caso de uso con una
00:02:57aplicación de chat muy simple. Digamos que en este chat quiero hablar sobre este archivo JSON;
00:03:02es un archivo que contiene muchísimos registros y quiero pedirle a la IA que extraiga
00:03:06cierta información o que analice algunos campos. Como puedes
00:03:11ver, es un archivo enorme. Una de las formas más fáciles, pero sin duda errónea, de hacerlo
00:03:15sería copiar todo el contenido del archivo dentro del prompt. Aquí
00:03:19estoy usando el SDK de IA y también GPT-4o. Si ejecutamos este agente y
00:03:24le pedimos un registro específico, el asistente responderá y
00:03:28puedo confirmar que es correcto, ya que estos modelos grandes son buenos recuperando valores de
00:03:33su contexto extenso. El problema es que esto consumió 133,000 tokens y además
00:03:39empezará a fallar si haces preguntas más complejas, como manipular datos
00:03:43o preguntar por rangos específicos. Como dije, esta es obviamente la forma
00:03:48incorrecta de trabajar; otra opción que quizás hayas probado sea el método RAG
00:03:51o incluso darle al agente un entorno aislado para ejecutar comandos bash y manipular los
00:03:56datos, pero el inconveniente es que empiezas a necesitar mucha infraestructura.
00:04:00En su lugar, vamos a simularlo con justbash. Para hacer esto con el SDK de IA,
00:04:05puedes usar el paquete bash-tool, que está construido sobre justbash, y lo que
00:04:09nos permite es que, en el punto de acceso de nuestra API de chat, podemos crear una herramienta de bash,
00:04:13pasarle los archivos que queramos en nuestro entorno simulado (en mi caso,
00:04:17el archivo JSON gigante de antes) y configurar el destino
00:04:21donde irán esos archivos, por ejemplo, a un directorio simulado llamado /workspace.
00:04:26Después de eso, en el flujo de nuestro SDK de IA, solo tenemos que pasarlo
00:04:31por la herramienta de bash que creamos (bashTool.bash). También le he pasado unas
00:04:34instrucciones para el agente que vienen en la carpeta node_modules; son simplemente
00:04:39instrucciones que el paquete proporciona para ayudar a tu agente de IA a entender
00:04:42cómo usar la herramienta de bash. Con esta configuración tan sencilla, si le preguntamos
00:04:46lo mismo al asistente para obtener información de ese JSON, en lugar de usar su propio contexto
00:04:50y tener que buscar una aguja en un pajar, verás que simplemente
00:04:54ejecuta comandos de bash. Pero recuerda, esto ocurre en nuestro entorno simulado de TypeScript.
00:04:58En este caso, intentó ejecutar un comando jq pero dio error, así que
00:05:02después ejecutó un comando head para ver el formato real del archivo y,
00:05:06tras obtenerlo, aplicó el comando jq correcto y nos dio la respuesta. Aunque hayamos obtenido
00:05:10la misma respuesta y quizás haya tardado un poco más, lo fundamental
00:05:15es que solo consumió 6,000 tokens de entrada, mientras que el otro método usó
00:05:19133,000. Este método es infinitamente mejor para manejar contextos largos,
00:05:24y esa no es su única ventaja. Se vuelve mucho más potente cuando empiezas
00:05:28a hacer preguntas profundas sobre tus datos. Por ejemplo, si pregunto cuántos registros
00:05:33entre 1,000 y 2,500 tienen “metadata.active” como verdadero, verás que
00:05:37simplemente ejecuta un comando bash y nos da la respuesta al instante. Si intentaras
00:05:41esto con la otra versión, primero agotaría el contexto y segundo,
00:05:45probablemente te daría una respuesta errónea basada en suposiciones. Esto es mucho más preciso,
00:05:49porque es como si le dieras al agente acceso total a una terminal bash, aunque
00:05:53técnicamente no la tenga. Sinceramente, es un valor añadido gratuito y sencillo
00:05:57para potenciar a tus agentes sin necesidad de infraestructura adicional, y eso
00:06:01es lo que más me gusta. Espero haber mostrado bien uno de sus casos de uso, pero
00:06:05créeme, hay muchos más; como vimos, puedes ejecutar Python básico, SQL y comandos
00:06:10curl, e incluso puedes conectarlo a un sistema de archivos real si quieres.
00:06:14Dime qué piensas de justbash en los comentarios. No olvides suscribirte
00:06:18y, como siempre, ¡nos vemos en el próximo!