INTEGRITY Документация

Пример Code Mode

В этом примере показано, как использовать @cloudflare/codemode ↗ библиотеку с Agents SDK ↗ для создания агента, в котором LLM пишет код, оркестрирующий вызовы инструментов, вместо того чтобы вызывать их по одному. Этот подход называется Code Mode ↗, сокращает расход токенов до 80%, даёт более качественные результаты и не раздувает контекстное окно.

Развертывание в Workers

В этом примере показано, как выполнить следующее:

Как это работает

Агент использует три компонента из @cloudflare/codemode ↗ библиотека и Agents SDK ↗:

Процесс:

  1. Пользователь отправляет сообщение через WebSocket.
  2. AIChatAgent передаёт его LLM с единственным доступным инструментом: codemode.
  3. LLM пишет код на JavaScript, например const projects = await codemode.listProjects(), вместо выполнения отдельных вызовов инструментов.
  4. DynamicWorkerExecutor запускает изолированный Worker и выполняет код. Внутри песочницы, codemode.listProjects() вызывает ваш реальный listProjects реализация.
  5. Результат, любой вывод консоли и ошибки возвращаются в LLM.
  6. LLM использует результат, чтобы ответить пользователю, либо пишет дополнительный код при необходимости.

DynamicWorkerExecutor

DynamicWorkerExecutor является частью @cloudflare/codemode библиотека. Когда LLM пишет код, который оркестрирует ваши инструменты, этот код должен выполняться в безопасном месте. DynamicWorkerExecutor запускает изолированный Dynamic Worker для каждого выполнения, используя привязку Worker Loader. Внутри песочницы:

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 является частью @cloudflare/codemode. Он принимает ваши инструменты и executor, и возвращает единый AI SDK tool(). Он:

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 tools
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 tools

LLM пишет асинхронную стрелочную функцию. createCodeTool нормализует его и передаёт исполнителю. Исполнитель собирает модуль Worker с codemode proxy, выполняет код и возвращает { code, result, logs }.