← Vytvářejte agenty na Cloudflare / agents / tools
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í:
- Spouštějte nedůvěryhodný nebo modelem generovaný kód izolovaně.
- Spouští Python, Node.js, příkazy shellu nebo správce balíčků.
- Číst, zapisovat a spravovat soubory projektu.
- Spouštějte testy, lintery, build nástroje nebo skripty pro analýzu dat.
- Udržujte pracovní prostor napříč více koly agenta.
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.