Создание безопасного рабочего процесса выполнения кода с помощью 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, выполнение безопасных операций с данными, управление файловыми вводами/выводами, запуск произвольного или сгенерированного искусственным интеллектом кода и организация параллельных рабочих нагрузок, сохраняя при этом строгое разделение с хост-системой.

Источник

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