¿Comandos de Bash en TypeScript? (Esto es una genialidad)

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

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!

Key Takeaway

justbash permite potenciar agentes de IA proporcionándoles una terminal bash simulada en TypeScript que ahorra costes y mejora la precisión sin requerir infraestructura de servidores real.

Highlights

Introducción a "justbash

un entorno de bash simulado escrito íntegramente en TypeScript.

Eliminación de la necesidad de infraestructura compleja como contenedores o servidores para ejecutar comandos básicos.

Uso de un sistema de archivos virtual en memoria que garantiza seguridad y aislamiento para agentes de IA.

Reducción drástica del consumo de tokens (de 133,000 a 6,000) al procesar archivos grandes mediante comandos en lugar de contexto directo.

Soporte para comandos avanzados como jq, python 3, sqlite y peticiones de red mediante curl con listas blancas.

Precisión superior en tareas de manipulación de datos complejos en comparación con el suministro de datos en el prompt.

Timeline

Introducción y el problema de la infraestructura

El narrador explica que dar acceso a bash a los agentes de IA es una de las mejores formas de potenciarlos, pero tradicionalmente requiere una infraestructura compleja. Menciona que elementos como terminales reales, sistemas de archivos físicos y contenedores dificultan la implementación para desarrolladores individuales. Ante este problema, se presenta una solución innovadora: una implementación de bash escrita completamente en TypeScript. Esta herramienta promete simplificar el flujo de trabajo y reducir significativamente los costes operativos. El objetivo de la sección es plantear el desafío técnico antes de revelar la biblioteca "justbash".

Funcionamiento técnico de justbash

En esta sección se detalla qué es el paquete "justbash" y cómo opera mediante un entorno simulado y un sistema de archivos virtual en memoria. El autor muestra código donde utiliza el método `env.exec` para ejecutar comandos como echo y redirigir la salida a archivos de texto internos. Se aclara que los comandos de bash se transforman internamente en funciones de JavaScript, lo que permite que el sistema sea extremadamente ligero y seguro. El video lista una amplia gama de comandos compatibles, incluyendo herramientas de procesamiento de datos como awk y jq, así como soporte para tuberías y redirecciones. Esta flexibilidad permite simular una terminal completa sin salir del entorno de ejecución de Node.js o TypeScript.

Comparativa de eficiencia: Contexto vs. Bash

El ponente presenta un caso de uso práctico comparando dos métodos para analizar un archivo JSON de gran tamaño con un agente de IA. El primer método consiste en pegar todo el contenido del archivo en el prompt, lo cual consume la enorme cifra de 133,000 tokens en GPT-4o. Aunque el modelo logra responder, el coste es prohibitivo y la capacidad de realizar análisis complejos o cálculos sobre rangos específicos se ve limitada. El autor argumenta que esta es la forma incorrecta de trabajar debido al desperdicio de recursos y posibles errores de suposición de la IA. Se mencionan alternativas como RAG o entornos aislados reales, subrayando que ambos tienen sus propios inconvenientes técnicos o de latencia.

Implementación con AI SDK y resultados

Se demuestra la integración de "justbash" con el SDK de IA de Vercel utilizando la herramienta `bash-tool` para crear un flujo de trabajo optimizado. Al proporcionar al agente acceso a la terminal simulada, este puede ejecutar comandos como jq para extraer datos precisos del archivo JSON sin necesidad de leerlo completo. Los resultados muestran una reducción del uso de tokens a tan solo 6,000, lo que representa un ahorro masivo y una mayor precisión en las respuestas. El agente demuestra ser capaz de autocorregirse tras fallos iniciales de sintaxis y realizar consultas complejas sobre metadatos de forma instantánea. Finalmente, el video concluye animando a los desarrolladores a utilizar esta herramienta gratuita para añadir valor a sus aplicaciones de IA sin añadir complejidad de servidores.

Community Posts

View all posts