Создание безопасного рабочего процесса выполнения кода с помощью Daytona SDK

В этом руководстве по использованию Daytona SDK мы пошагово покажем, как использовать безопасную среду песочницы Daytona для безопасного выполнения ненадёжного или сгенерированного искусственным интеллектом кода Python в Notebook.

Начало работы

Мы начнём с создания простой песочницы и выполнения базового кода, затем продемонстрируем, как изолировать процессы, установить зависимости и запустить простые скрипты, не подвергая опасности хост-среду.

Обработка данных

По мере продвижения по руководству мы углубимся в обработку данных с помощью pandas, файловые операции, включая чтение и запись файлов JSON, а также выполнение сложных фрагментов кода, сгенерированных искусственным интеллектом, таких как рекурсивные функции и алгоритмы сортировки.

Параллельное выполнение задач

Наконец, мы покажем параллельное выполнение задач в нескольких песочницах и соответствующие процедуры очистки, гарантируя правильное управление и удаление всех ресурсов.

Импорт необходимых модулей

«`python
import os
import time
import json
from typing import List, Dict, Any

try:
import daytona_sdk
except ImportError:
print(«Installing Daytona SDK…»)
!pip install daytona-sdk
import daytona_sdk

from daytona_sdk import Daytona, DaytonaConfig, CreateSandboxParams
«`

Инициализация класса DaytonaTutorial

«`python
class DaytonaTutorial:
«»»Полное руководство по использованию Daytona SDK — платформа для безопасного выполнения кода с помощью искусственного интеллекта»»»

def init(self, api_key: str):
«»»Инициализация клиента Daytona»»»
self.config = DaytonaConfig(apikey=apikey)
self.daytona = Daytona(self.config)
self.sandboxes: List[Any] = []
«`

Демонстрация создания базовой песочницы

«`python
def basicsandboxdemo(self):
«»»Демонстрация 1: создание базовой песочницы и выполнение кода»»»
print(» Demo 1: Basic Sandbox Operations»)
print(«-» * 40)

try:
sandbox = self.daytona.create(CreateSandboxParams(language=»python»))
self.sandboxes.append(sandbox)

print(f» Created sandbox: {sandbox.id}»)

code = ‘print(«Hello from Daytona Sandbox!»)\nprint(f»2 + 2 = {2 + 2}»)’
response = sandbox.process.code_run(code)

if response.exit_code == 0:
print(f» Output: {response.result}»)
else:
print(f» Error: {response.result}»)

except Exception as e:
print(f» Error in basic demo: {e}»)
«`

Демонстрация обработки данных

«`python
def dataprocessingdemo(self):
«»»Демонстрация 2: обработка данных в изолированной среде»»»
print(«\n Demo 2: Secure Data Processing»)
print(«-» * 40)

try:
sandbox = self.daytona.create(CreateSandboxParams(language=»python»))
self.sandboxes.append(sandbox)

install_cmd = «import subprocess; subprocess.run([‘pip’, ‘install’, ‘pandas’])»
response = sandbox.process.coderun(installcmd)

data_code = «»»
import pandas as pd
import json

Create sample dataset

data = {
‘name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘Diana’],
‘age’: [25, 30, 35, 28],
‘salary’: [50000, 60000, 70000, 55000]
}

df = pd.DataFrame(data)
result = {
‘total_records’: len(df),
‘avg_age’: df[‘age’].mean(),
‘avg_salary’: df[‘salary’].mean(),
‘summary’: df.describe().to_dict()
}

print(json.dumps(result, indent=2))
«»»

response = sandbox.process.coderun(datacode)
if response.exit_code == 0:
print(» Data processing completed:»)
print(response.result)
else:
print(f» Error: {response.result}»)

except Exception as e:
print(f» Error in data processing demo: {e}»)
«`

Демонстрация файловых операций

«`python
def fileoperationsdemo(self):
«»»Демонстрация 3: файловые операции в песочнице»»»
print(«\n Demo 3: File Operations»)
print(«-» * 40)

try:
sandbox = self.daytona.create(CreateSandboxParams(language=»python»))
self.sandboxes.append(sandbox)

file_code = «»»
import os
import json

Create a sample file

data = {‘message’: ‘Hello from Daytona!’, ‘timestamp’: ‘2025-06-13’}
with open(‘sample.json’, ‘w’) as f:
json.dump(data, f, indent=2)

Read and display file contents

with open(‘sample.json’, ‘r’) as f:
content = f.read()
print(«File contents:»)
print(content)

List files in current directory

files = os.listdir(‘.’)
print(f»\\nFiles in directory: {files}»)
«»»

response = sandbox.process.coderun(filecode)
if response.exit_code == 0:
print(» File operations completed:»)
print(response.result)
else:
print(f» Error: {response.result}»)

except Exception as e:
print(f» Error in file operations demo: {e}»)
«`

Демонстрация выполнения кода, сгенерированного искусственным интеллектом

«`python
def aicodeexecution_demo(self):
«»»Демонстрация 4: выполнение кода, сгенерированного искусственным интеллектом»»»
print(«\n Demo 4: AI-Generated Code Execution»)
print(«-» * 40)

ai_codes = [
«# Calculate fibonacci sequence\ndef fib(n):\n if n <= 1: return n\n return fib(n-1) + fib(n-2)\nprint([fib(i) for i in range(10)])",
«# Sort algorithm\ndef bubblesort(arr):\n n = len(arr)\n for i in range(n):\n for j in range(0, n-i-1):\n if arr[j] > arr[j+1]:\n arr[j], arr[j+1] = arr[j+1], arr[j]\n return arr\nprint(bubblesort([64, 34, 25, 12, 22, 11, 90]))»,
«# Data analysis\nimport math\ndata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nmean = sum(data) / len(data)\nvariance = sum((x — mean) 2 for x in data) / len(data)\nstddev = math.sqrt(variance)\nprint(f’Mean: {mean}, Std Dev: {stddev:.2f}’)»
]

try:
sandbox = self.daytona.create(CreateSandboxParams(language=»python»))
self.sandboxes.append(sandbox)

for i, code in enumerate(ai_codes, 1):
print(f»\n Executing AI Code Snippet {i}:»)
response = sandbox.process.code_run(code)

if response.exit_code == 0:
print(f» Output: {response.result}»)
else:
print(f» Error: {response.result}»)

time.sleep(1)

except Exception as e:
print(f» Error in AI code execution demo: {e}»)
«`

Демонстрация параллельного выполнения

«`python
def parallelexecutiondemo(self):
«»»Демонстрация 5: несколько песочниц для параллельной обработки»»»
print(«\n Demo 5: Parallel Execution»)
print(«-» * 40)

tasks = [
«print(‘Task 1: Computing prime numbers’)\nprimes = [i for i in range(2, 50) if all(i % j != 0 for j in range(2, int(i0.5) + 1))]\nprint(f’Primes: {primes[:10]}’)»,
«print(‘Task 2: String processing’)\ntext = ‘Hello Daytona World’\nprint(f’Reversed: {text[::-1]}’)\nprint(f’Word count: {len(text.split())}’)»,
«print(‘Task 3: Mathematical calculations’)\nimport math\nresult = sum(math.sqrt(i) for i in range(1, 101))\nprint(f’Sum of square roots 1-100: {result:.2f}’)»
]

try:
parallel_sandboxes = []
for i in range(len(tasks)):
sandbox = self.daytona.create(CreateSandboxParams(language=»python»))
parallel_sandboxes.append(sandbox)
self.sandboxes.append(sandbox)

results = []
for i, (sandbox, task) in enumerate(zip(parallel_sandboxes, tasks)):
print(f»\n Starting parallel task {i+1}»)
response = sandbox.process.code_run(task)
results.append((i+1, response))

for task_num, response in results:
if response.exit_code == 0:
print(f» Task {task_num} completed: {response.result}»)
else:
print(f» Task {task_num} failed: {response.result}»)

except Exception as e:
print(f» Error in parallel execution demo: {e}»)
«`

Очистка песочниц

«`python
def cleanup_sandboxes(self):
«»»Очистка всех созданных песочниц»»»
print(«\n Cleaning up sandboxes…»)
print(«-» * 40)

for sandbox in self.sandboxes:
try:
self.daytona.remove(sandbox)
print(f» Removed sandbox: {sandbox.id}»)
except Exception as e:
print(f» Error removing sandbox {sandbox.id}: {e}»)

self.sandboxes.clear()
print(» Cleanup completed!»)
«`

Запуск полного руководства

«`python
def runfulltutorial(self):
«»»Запуск полного руководства по Daytona SDK»»»
print(» Daytona SDK Complete Tutorial»)
print(«=» * 50)
print(«Безопасная и изолированная платформа для выполнения кода с помощью искусственного интеллекта»)
print(«=» * 50)

self.basicsandboxdemo()
self.dataprocessingdemo()
self.fileoperationsdemo()
self.aicodeexecution_demo()
self.parallelexecutiondemo()
self.cleanup_sandboxes()

print(«\n Tutorial completed successfully!»)
print(«Ключевые функции Daytona продемонстрированы:»)
print(«• Создание безопасной песочницы»)
print(«• Изолированное выполнение кода»)
print(«• Операции с файловой системой»)
print(«• Параллельная обработка»)
print(«• Очистка ресурсов»)
«`

Основная функция

«`python
def main():
«»»Основная функция для запуска руководства»»»

print(» Daytona Setup Instructions:»)
print(«1. Посетите: https://app.daytona.io»)
print(«2. Создайте учётную запись»)
print(«3. Сгенерируйте API-ключ на: https://app.daytona.io/dashboard/keys»)
print(«4. Замените ‘YOURAPIKEY’ ниже на ваш фактический ключ»)
print(«-» * 50)

API_KEY = «Use Your API Key Here»

if APIKEY == «YOURAPI_KEY»:
print(» Пожалуйста, установите ваш API-ключ Daytona перед запуском руководства!»)
print(» Обновите переменную API_KEY вашим ключом с https://app.daytona.io/dashboard/keys»)
return

try:
tutorial = DaytonaTutorial(API_KEY)
tutorial.runfulltutorial()

except Exception as e:
print(f» Tutorial failed: {e}»)
print(» Убедитесь, что ваш API-ключ действителен и у вас есть доступ к сети»)
«`

Проверка имени

«`python
if name == «main«:
main()
«`

Следуя этому руководству, разработчики получат полное представление о возможностях Daytona: создание изолированных песочниц Python, выполнение безопасных операций с данными, управление файловыми вводами/выводами, запуск произвольного или сгенерированного искусственным интеллектом кода и организация параллельных рабочих нагрузок, сохраняя при этом строгое разделение с хост-системой.

Источник

Оставьте комментарий