← Dynamic Workers / dynamic-workers / examples
Příklad Code Mode
Tento příklad ukazuje, jak používat @cloudflare/codemode ↗ knihovnu s Agents SDK ↗ k vytvoření agenta, kde LLM píše kód pro orchestraci volání nástrojů místo jejich postupného volání jedno po druhém. Tento přístup, nazývaný Code Mode ↗, snižuje spotřebu tokenů až o 80 %, vrací lepší výsledky a zabraňuje zbytečnému zvětšování kontextového okna.
Tento příklad ukazuje, jak:
- Definování nástrojů jako obyčejných funkcí se schématy Zod
- Použijte
createCodeToolk vystavení vašich nástrojů LLM jako jediný nástroj typu "napiš kód" - Použijte
DynamicWorkerExecutork bezpečnému spuštění kódu vygenerovaného LLM - Vše propojte pomocí
AIChatAgentke zpracování chatu přes WebSockets
Jak to funguje
Agent používá tři komponenty z @cloudflare/codemode ↗ knihovna a Agents SDK ↗:
AIChatAgent(@cloudflare/ai-chat), základní třída vašeho agenta. Zajišťuje chat přes WebSockets, ukládá zprávy a volá LLM.createCodeTool(@cloudflare/codemode/ai), zabalí vaše nástroje do jednohocodemodenástroj, který přijímá{ code: string }.DynamicWorkerExecutor(@cloudflare/codemode), spustí kód vygenerovaný LLM v izolovaném Dynamický Worker.
Postup:
- Uživatel odešle zprávu přes WebSocket.
AIChatAgentho předá LLM s jediným dostupným nástrojem:codemode.- LLM píše JavaScript, například
const projects = await codemode.listProjects(), místo jednotlivých volání nástrojů. DynamicWorkerExecutorspustí izolovaný Worker a spustí v něm kód. Uvnitř sandboxu,codemode.listProjects()volá vaši skutečnoulistProjectsimplementace.- Výsledek, veškerý výstup konzole a chyby se vrátí LLM.
- LLM použije výsledek k odpovědi uživateli, nebo v případě potřeby napíše další kód.
DynamicWorkerExecutor
DynamicWorkerExecutor je součástí @cloudflare/codemode knihovnou. Když LLM napíše kód, který orchestruje vaše nástroje, potřebuje tento kód spustit na bezpečném místě. DynamicWorkerExecutor spustí pro každé vykonání izolovaný Dynamic Worker pomocí bindingu Worker Loader. Uvnitř sandboxu:
- A
codemodeproxy objekt směruje volání jakocodemode.createTask(...)zpět k vaší skutečné implementaci nástrojů přes Workers RPC - Nastavení
globalOutboundnanullblokyfetch(), takže se kód dostane do vnějšího světa pouze přes vaše nástroje console.logvýstup se zachytí a vrátí spolu s výsledkem- Každé spuštění získá vlastní instanci Workeru s časovým limitem 30 sekund
import { DynamicWorkerExecutor } from "@cloudflare/codemode";
const executor = new DynamicWorkerExecutor({
loader: env.LOADER, // WorkerLoader binding from wrangler.jsonc
timeout: 30000, // default: 30s
globalOutbound: null, // null = fetch blocked
});import { DynamicWorkerExecutor } from "@cloudflare/codemode";
const executor = new DynamicWorkerExecutor({
loader: env.LOADER, // WorkerLoader binding from wrangler.jsonc
timeout: 30000, // default: 30s
globalOutbound: null, // null = fetch blocked
});createCodeTool
createCodeTool je součástí @cloudflare/codemode. Přijme vaše nástroje a executor a vrátí jediný AI SDK tool(). Provádí následující:
- Generuje deklarace typů TypeScript ze Zod schémat vašich nástrojů, aby LLM vědělo, co je k dispozici a jak vypadají tvary argumentů.
- Tyto typy vloží do popisu nástroje, takže LLM vidí jediný nástroj s parametrem
{ code: string }a popis, který obsahuje kompletní typové rozhraní API. - Při spuštění normalizuje kód LLM (odstraní ohraničení kódu v markdownu, obalí samostatné příkazy do async funkcí a automaticky vrátí poslední výraz) a poté ho předá exekutoru.
import { createCodeTool } from "@cloudflare/codemode/ai";
const codemode = createCodeTool({
tools: myTools, // Record<string, tool()> with Zod schemas
executor, // DynamicWorkerExecutor
});
// The LLM sees: one tool called "codemode" with input { code: string }
// The description includes TypeScript types for all your toolsimport { createCodeTool } from "@cloudflare/codemode/ai";
const codemode = createCodeTool({
tools: myTools, // Record<string, tool()> with Zod schemas
executor, // DynamicWorkerExecutor
});
// The LLM sees: one tool called "codemode" with input { code: string }
// The description includes TypeScript types for all your toolsLLM napíše async arrow function. createCodeTool ho normalizuje a předá executoru. Executor sestaví modul Worker s codemode proxy, spustí kód a vrátí { code, result, logs }.