Tu agente necesita un ordenador, no un contenedor. Llega @cloudflare/computer

Matt Carey y Aron Carroll

8 min de lectura

Esta publicación también está disponible en English, Deutsch, Español (Latinoamérica), Français, 日本語, 한국어, 繁體中文简体中文.

Los agentes más competentes tienen algo muy sencillo en común: les dan su propio ordenador para trabajar.

Los agentes de codificación funcionan de esta manera. Les das un sistema de archivos, un shell, herramientas, paquetes y la posibilidad de ejecutar código. Analizan el entorno, hacen cambios, prueban lo que han hecho y siguen adelante. El ordenador le da al modelo una forma familiar de interactuar con el mundo. En Cloudflare, estamos trabajando duro para ofrecer las primitivas adecuadas sobre los que desarrollar los agentes más eficaces.

Hoy te presentamos una vista previa preliminar de @cloudflare/computer. El paquete @cloudflare/computer ofrece un entorno de ejecución para agentes en el que la plataforma se encarga de los detalles y la mecánica de qué código se ejecuta en un aislamiento y qué se ejecuta en un entorno de pruebas de contenedor. Cada agente tiene un ordenador, y el entorno de ejecución se optimiza para garantizar la eficiencia y la escalabilidad.

Creemos que, para satisfacer la creciente demanda de recursos de computación que requieren los sistemas basados en agentes, tenemos que buscar soluciones que vayan más allá de la contenedorización tradicional. 

El cambio en la forma de crear agentes

Hemos visto cómo esta historia ha ido cambiando poco a poco en los últimos seis meses. A principios de año, lo habitual era crear un contenedor y ejecutar un agente dentro de él. En los últimos meses, hemos visto cómo se ha generalizado rápidamente el uso de entornos de agentes que permiten ejecutar código en un entorno aislado a través de herramientas. Esto separa las "manos" (el entorno aislado donde se realiza el trabajo) del "cerebro" (el bucle del agente).

BLOG-3464_image6.png

Da igual dónde se ejecute el entorno de ejecución. Dotar a cada agente de un contenedor supone todo un desafío. Entre todas las nubes y todos los hiperescaladores, no hay ni de lejos suficiente capacidad de procesamiento en el mundo para que cada empresa pueda ofrecer a los agentes de sus usuarios su propio entorno de procesamiento en contenedor. Esto no se podrá ampliar a cientos de millones, ni a miles de millones, de agentes simultáneos. Por eso hay una demanda desesperada y frenética de la industria por el procesamiento con CPU, no solo GPU.

En Cloudflare llevamos mucho tiempo trabajando en este problema, creando una primitiva de procesamiento más eficiente: los aislamientos. Hicimos esa apuesta que se salía de lo habitual hace casi 10 años, cuando lanzamos Cloudflare Workers. Lo hicimos de nuevo cuando anunciamos Durable Objects hace casi seis años. Hicimos esta apuesta porque los aislamientos son infinitamente escalables horizontalmente. Se activan y desactivan increíblemente rápido. Pueden hibernar cuando el agente está inactivo, almacenar su propio estado, e incluso iniciar sus propios aislamientos para ejecutar código no fiable. Los aislamientos son la mejor manera de escalar horizontalmente, y la escala horizontal es lo que demandan los agentes.

BLOG-3464_image3.png

El año pasado, dimos a los aislamientos la capacidad de iniciar sus propios entornos de pruebas en contenedores. Desde el primer día, la arquitectura de Cloudflare se ha diseñado para ejecutar el conjunto de agentes en el entorno aislado (en un objeto duradero) y llamar a un contenedor asociado bajo demanda como herramienta. Esto te permite utilizar primitivas de procesamiento más pesadas solo cuando sea necesario, optimizando así el rendimiento y el coste. Durable Objects escalan infinitamente en horizontal, y el contenedor asociado permite que se escalen en vertical para realizar cualquier tarea. Así es como creamos nuestros propios agentes, y vemos que los clientes también están creando cosas increíbles de esta manera.

BLOG-3464_image8.png

Pero cuando pensamos en la necesidad de contar con varias primitivas de procesamiento subyacentes para crear agentes (aislamientos y contenedores) y en que nuestros clientes y desarrolladores tienen que combinarlas ellos mismos en el espacio de usuario, creemos que podemos hacerlo mejor. Pensamos que podemos proporcionar una abstracción más sencilla.

Por eso empezamos este experimento con @cloudflare/computer como biblioteca de código abierto, para aprender junto a nuestros clientes, que están ampliando los límites de la ejecución de agentes a escala.

Un sistema de archivos compartido entre aislamientos y contenedores

El paquete @cloudflare/computer parte de una premisa sencilla: ¿qué pasaría si le diéramos a un agente un sistema de archivos ya preparado, definido de forma descriptiva, que contuviera todo lo necesario para la tarea en cuestión y una selección de entornos de ejecución para trabajar con esos archivos, cada uno con sus propias ventajas e inconvenientes en cuanto a velocidad, capacidad y coste?

Resulta que los agentes de hoy en día son sorprendentemente capaces de seleccionar el entorno adecuado para la tarea en cuestión. Una tarea que solo tenga que manipular archivos, procesar datos o gestionar un repositorio de Git se puede ejecutar dentro de un aislamiento. Un comando que necesita Linux, npm, o un binario nativo puede ejecutarse dentro de un contenedor. Ambos trabajan con los mismos archivos que se mantienen sincronizados con el sistema de archivos de origen.

BLOG-3464_image2.png

El paquete @cloudflare/computer ofrece un sistema de archivos duradero que puedes usar con repositorios de Git, buckets de almacenamiento o cualquier archivo que elijas. Proporciona herramientas que te permiten leer, escribir y editar archivos usando Code Mode o comandos de Bash. Todas las operaciones están controladas, auditadas y supervisadas, lo que te da un control muy preciso sobre los cambios que el agente puede realizar, además de un registro claro que muestra lo que ha hecho el agente.

Cómo utilizas la IA

Se puede crear una instancia de un espacio de trabajo @cloudflare/computer en cualquier Durable Object para proporcionar un sistema de archivos virtual y un entorno de ejecución.

Se instala a través de npm:

npm install @cloudflare/computer

El caso de uso principal es proporcionar ese sistema de archivos y herramientas a un agente. Por ejemplo, así es como se instancia el espacio de trabajo en un agente basado en @cloudflare/think destinado a clasificar informes de errores.

import { Think } from "@cloudflare/think";
import { Workspace, type DurableObjectStorageLike } from "@cloudflare/computer";
import { createWorkersAI } from "workers-ai-provider";

export class Agent extends Think {
  override workspaceBash = false;

  override workspace = new Workspace({
    storage: this.ctx.storage,
    useThink: true, // soon will not be needed
  });

  override getModel() {
    return createWorkersAI({ binding: this.env.AI })("@cf/zai-org/glm-5.2");
  }

  override getSystemPrompt() {
    return `
You are a bug triage agent.

Use the project in /workspace/repo to reproduce the bug, inspect the
code, make a focused fix when it is safe, and run verification. In your
final answer, include what you changed, which commands you ran, and
whether verification passed.`;
  }
}

El paquete @cloudflare/computer incluye varios backends de ejecución, aunque también puedes escribir el tuyo propio. Aquí conectamos un contenedor de Cloudflare.

import { Think } from "@cloudflare/think";
import { Workspace, WorkspaceProxy } from "@cloudflare/computer";
import {
  CloudflareContainerBackend,
  withWorkspaceContainer,
} from "@cloudflare/computer/backends/container";

export { WorkspaceProxy };

export class Agent extends withWorkspaceContainer(Think) {
  override workspaceBash = false;

  override workspace = new Workspace({
    storage: this.ctx.storage,
    useThink: true, // soon will not be needed
    backends: [
      new CloudflareContainerBackend({
        container: () => this,
        workspace: {
          binding: "Agent",
          id: this.ctx.id.toString(),
        },
      }),
    ],
  });

  /* Example code truncated for readability... */
}

Utiliza las herramientas de gestión de archivos, Git y el shell, junto con las herramientas específicas del producto, para resolver los problemas que se hayan notificado.

import { createAITools } from "@cloudflare/computer/tools";
import type { ToolSet } from "ai";
import { replyToIssue } from "./tools/github";

export class Agent extends withWorkspaceContainer(Think) {
  override workspaceBash = false;

  /* Example code truncated for readability... */

  override getTools(): ToolSet {
    return {
      ...createAITools({
        workspace: this.workspace,
        shell: {
          defaultBackend: "container",
          backends: {
            container: {
              description:
                "Cloudflare Container with a full Linux userland: " +
                "npm, node, package managers, test runners, and real " +
                "binaries on $PATH. Use it when a task needs more than " +
                "file manipulation.",
            },
          },
        },
      }),
      replyToIssue,
    };
  }
}

El modelo puede usar herramientas durante el bucle del agente, pero también puedes usar directamente la API del espacio de trabajo, por ejemplo, para preparar el entorno antes de darle instrucciones al agente.

export class Agent extends withWorkspaceContainer(Think) {
  override workspaceBash = false;

  /* Example code truncated for readability... */

  async startTriage(report: { title: string; body: string; repoUrl: string }) {
    await this.workspace.fs.mkdir("/workspace", { recursive: true });
    await this.workspace.fs.writeFile(
      "/workspace/BUG_REPORT.md",
      `# ${report.title}\n\n${report.body}\n`,
    );

    await this.workspace.git.clone({
      url: report.repoUrl,
      dir: "/workspace/repo",
    });

    return this.submitMessages([
      {
        id: crypto.randomUUID(),
        role: "user",
        parts: [
          {
            type: "text",
            text: [
              `Triage this bug: ${report.title}`,
              "The bug report is in /workspace/BUG_REPORT.md.",
              "The repository is checked out at /workspace/repo.",
            ].join("\n"),
          },
        ],
      },
    ]);
  }
}

Échale un vistazo al repositorio de Workspace para ver más ejemplos de cómo usar los diferentes backends y herramientas, incluido un tutorial paso a paso que te guía en la creación de un agente desde cero.

Cómo funciona

La pieza clave de @cloudflare/computer es el espacio de trabajo. Un sistema de archivos virtual basado en SQLite que se puede alimentar desde diversas fuentes, como el almacenamiento en la nube y el control de versiones.

BLOG-3464_image7.png

El espacio de trabajo admite entornos de ejecución opcionales que permiten ejecutar código en el sistema de archivos. Todos los entornos de ejecución admiten la misma interfaz exec(string, options) y, de momento, vienen dos ya integrados (aunque puedes crear el tuyo propio):

  • Un entorno de ejecución basado en aislamientos que utiliza just-bash para traducir código de shell en JavaScript se ejecuta en un Worker dinámico. Aquí, puedes acceder directamente al sistema de archivos a través de los enlaces de Workers.
  • Un entorno de ejecución de contenedores que utiliza contenedores de Cloudflare para proporcionar un entorno Linux completo. Aquí, el sistema de archivos se proporciona a través de un montaje FUSE (Filesystem in Userspace), lo que garantiza que los archivos estén disponibles para el contenedor y que los cambios se sincronicen de vuelta.

La clase Workspace ofrece una interfaz API para manipular directamente el sistema de archivos, además de un envoltorio compatible con node:fs, para que puedas usarla fácilmente con bibliotecas de JavaScript de terceros.

image4.png

Para que lo usen los agentes, os ofrecemos un kit de herramientas compatible con el SDK de IA que incluye las herramientas más habituales: read, write, edit, ls y exec. La herramienta exec es un poco especial, ya que funciona en todos los entornos de ejecución y admite un argumento backend. La descripción de la herramienta te ayuda a elegir el entorno de ejecución adecuado para la tarea que tengas entre manos: o bien un backend de trabajo rápido y económico, o bien el contenedor con todas las funciones. En nuestras pruebas, los modelos Frontier se han demostrado muy eficaces a la hora de tomar la decisión correcta y recurrir al uso de contenedores solo cuando es necesario.

¿Y ahora qué?

Aquí en Cloudflare ya vemos cómo algunos agentes usan exclusivamente aislamientos para desarrollar, probar e implementar aplicaciones de JavaScript con herramientas modernas, generar documentación a medida para cada uno de nuestros clientes y utilizar navegadores web para realizar tareas complejas.

Nuestro objetivo con @cloudflare/computer es ofrecer un agente con un entorno de ejecución en el que solo se necesite un contenedor para menos del 10 % de su trabajo, y en el que las tareas de programación, la manipulación de audio y vídeo y la creación de documentos se puedan gestionar mediante aislamientos. 

Prueba hoy mismo una versión preliminar. Estamos deseando saber qué te parece.