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

Создание ИИ-исполнителя кода

Создание системы выполнения кода на базе ИИ с использованием Sandbox SDK и Claude. Преобразуйте вопросы на естественном языке в код на Python, безопасно выполняйте его и возвращайте результаты.

Время выполнения: 20 минут

Что вы создадите

API, который принимает вопросы вроде «Каково 100-е число Фибоначчи?», использует Claude для генерации кода на Python, выполняет его в изолированном sandbox и возвращает результат.

Предварительные требования

  1. Зарегистрируйтесь для получения Аккаунт Cloudflare ↗.
  2. Установка Node.js ↗.

менеджер версий Node.js

Используйте менеджер версий Node, например Volta ↗ или nvm ↗ чтобы избежать проблем с правами доступа и переключать версии Node.js. Wrangler, о котором пойдёт речь далее в этом руководстве, требует версию Node 16.17.0 или более поздней версии.

Также потребуется:

1. Создайте проект

Создайте новый проект Sandbox SDK:

npm create cloudflare@latest -- ai-code-executor --template=cloudflare/sandbox-sdk/examples/minimal
cd ai-code-executor

2. Установите зависимости

Установите Anthropic SDK:

npm i @anthropic-ai/sdk

3. Постройте исполнитель кода

Замените содержимое src/index.ts:

import { getSandbox, type Sandbox } from '@cloudflare/sandbox';
import Anthropic from '@anthropic-ai/sdk';

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

interface Env {
	Sandbox: DurableObjectNamespace<Sandbox>;
	ANTHROPIC_API_KEY: string;
}

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		if (request.method !== 'POST' || new URL(request.url).pathname !== '/execute') {
			return new Response('POST /execute with { "question": "your question" }');
		}

		try {
			const { question } = await request.json();

			if (!question) {
				return Response.json({ error: 'Question is required' }, { status: 400 });
			}

			// Use Claude to generate Python code
			const anthropic = new Anthropic({ apiKey: env.ANTHROPIC_API_KEY });
			const codeGeneration = await anthropic.messages.create({
				model: 'claude-sonnet-4-5',
				max_tokens: 1024,
				messages: [{
					role: 'user',
					content: `Generate Python code to answer: "${question}"

Requirements:
- Use only Python standard library
- Print the result using print()
- Keep code simple and safe

Return ONLY the code, no explanations.`
				}],
			});

			const generatedCode = codeGeneration.content[0]?.type === 'text'
				? codeGeneration.content[0].text
				: '';

			if (!generatedCode) {
				return Response.json({ error: 'Failed to generate code' }, { status: 500 });
			}

			// Strip markdown code fences if present
			const cleanCode = generatedCode
				.replace(/^```python?\n?/, '')
				.replace(/\n?```\s*$/, '')
				.trim();

			// Execute the code in a sandbox
			const sandbox = getSandbox(env.Sandbox, 'demo-user');
			await sandbox.writeFile('/tmp/code.py', cleanCode);
			const result = await sandbox.exec('python /tmp/code.py');

			return Response.json({
				success: result.success,
				question,
				code: generatedCode,
				output: result.stdout,
				error: result.stderr
			});

		} catch (error: any) {
			return Response.json(
				{ error: 'Internal server error', message: error.message },
				{ status: 500 }
			);
		}
	},
};

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

  1. Получает вопрос через POST-запрос к /execute
  2. Использует Claude для генерации кода на Python
  3. Записывает код в /tmp/code.py в песочнице
  4. Выполняется с sandbox.exec('python /tmp/code.py')
  5. Возвращает код и результаты выполнения

4. Настройте локальные переменные окружения

Создайте .dev.vars файл в корне вашего проекта для локальной разработки:

echo "ANTHROPIC_API_KEY=your_api_key_here" > .dev.vars

Замените your_api_key_here на ваш действующий API-ключ из Anthropic Console ↗.

5. Протестируйте локально

Запустите сервер разработки:

npm run dev

Тестирование с помощью curl:

curl -X POST http://localhost:8787/execute \
  -H "Content-Type: application/json" \
  -d '{"question": "What is the 10th Fibonacci number?"}'

Ответ:

{
  "success": true,
  "question": "What is the 10th Fibonacci number?",
  "code": "def fibonacci(n):\n    if n <= 1:\n        return n\n    return fibonacci(n-1) + fibonacci(n-2)\n\nprint(fibonacci(10))",
  "output": "55\n",
  "error": ""
}

6. Разверните

Разверните ваш Worker:

npx wrangler deploy

Затем задайте ключ API Anthropic в качестве секрета для продакшена:

npx wrangler secret put ANTHROPIC_API_KEY

Вставьте свой API-ключ из Anthropic Console ↗ при появлении запроса.

7. Проверка развёртывания

Попробуйте другие вопросы:

# Factorial
curl -X POST https://ai-code-executor.YOUR_SUBDOMAIN.workers.dev/execute \
  -H "Content-Type: application/json" \
  -d '{"question": "Calculate the factorial of 5"}'

# Statistics
curl -X POST https://ai-code-executor.YOUR_SUBDOMAIN.workers.dev/execute \
  -H "Content-Type: application/json" \
  -d '{"question": "What is the mean of [10, 20, 30, 40, 50]?"}'

# String manipulation
curl -X POST https://ai-code-executor.YOUR_SUBDOMAIN.workers.dev/execute \
  -H "Content-Type: application/json" \
  -d '{"question": "Reverse the string \"Hello World\""}'

Что вы создали

Вы создали систему выполнения кода на основе ИИ, которая:

Следующие шаги