INTEGRITY Dokumentace

Sandbox

Agents mohou používat Sandbox ke spouštění kódu v izolovaných kontejnerových prostředích. Sandbox použijte, když agent potřebuje skutečný systém souborů, příkazy shellu, runtime pro programovací jazyky, instalaci balíčků nebo dlouhodobě trvající stav projektu, který by neměl běžet přímo uvnitř vlastního Worker isolate agenta.

Sandbox je postavený na Cloudflare Containers a poskytuje TypeScript API pro spouštění příkazů, práci se soubory, procesy na pozadí a náhledy služeb.

Kdy použít Sandbox

Používejte Sandbox pro agenty, kteří potřebují:

Základní vzor

Navažte Sandbox Durable Object na svůj Worker a poté k sandboxu přistupujte z metod agenta pomocí getSandbox().

import { Agent, callable } from "agents";
import { getSandbox } from "@cloudflare/sandbox";

export { Sandbox } from "@cloudflare/sandbox";

export class CodeAgent extends Agent {
	@callable()
	async runPython(code) {
		const sandbox = getSandbox(this.env.Sandbox, this.name);

		await sandbox.writeFile("/workspace/script.py", code);
		const result = await sandbox.exec("python3 /workspace/script.py");

		this.setState({ lastOutput: result.stdout });

		return {
			success: result.success,
			stdout: result.stdout,
			stderr: result.stderr,
			exitCode: result.exitCode,
		};
	}
}
import { Agent, callable } from "agents";
import { getSandbox } from "@cloudflare/sandbox";
import type { Sandbox } from "@cloudflare/sandbox";

export { Sandbox } from "@cloudflare/sandbox";

type Env = {
	Sandbox: DurableObjectNamespace<Sandbox>;
};

export class CodeAgent extends Agent<Env, { lastOutput?: string }> {
	@callable()
	async runPython(code: string) {
		const sandbox = getSandbox(this.env.Sandbox, this.name);

		await sandbox.writeFile("/workspace/script.py", code);
		const result = await sandbox.exec("python3 /workspace/script.py");

		this.setState({ lastOutput: result.stdout });

		return {
			success: result.success,
			stdout: result.stdout,
			stderr: result.stderr,
			exitCode: result.exitCode,
		};
	}
}

Konfigurace

Konfigurace kontejneru Sandbox, vazby Durable Object a migrace v wrangler.jsonc.

{
	"containers": [
		{
			"class_name": "Sandbox",
			"image": "./Dockerfile",
			"instance_type": "lite",
			"max_instances": 1
		}
	],
	"durable_objects": {
		"bindings": [
			{
				"name": "Sandbox",
				"class_name": "Sandbox"
			}
		]
	},
	"migrations": [
		{
			"tag": "v1",
			"new_sqlite_classes": ["Sandbox"]
		}
	]
}
[[containers]]
class_name = "Sandbox"
image = "./Dockerfile"
instance_type = "lite"
max_instances = 1

[[durable_objects.bindings]]
name = "Sandbox"
class_name = "Sandbox"

[[migrations]]
tag = "v1"
new_sqlite_classes = [ "Sandbox" ]

Sandbox a stav agenta

Použijte stav agenta pro uživatelsky viditelný průběh a malá metadata. Použijte souborový systém sandboxu pro soubory pracovního prostoru, vygenerovaný kód, instalace balíčků, logy a artefakty.

Pro dlouhotrvající práci v sandboxu zkombinujte Sandbox s trvalé provádění s fibery nebo Workflows aby se agent mohl zotavit nebo nahlásit průběh, pokud práce přesáhne jeden požadavek.

Sandbox SDK

Úplná dokumentace Sandboxu pro příkazy, soubory, relace a nasazení.

Spouštění příkazů

Spouštějte příkazy shellu v sandboxovaném prostředí.

Správa souborů

Číst, zapisovat, nahrávat a stahovat soubory sandboxu.