แซนด์บ็อกซ์
MicroVM Linux แบบแยกส่วนสำหรับโค้ดที่สคริปต์และเอเจนต์ AI ของคุณรัน แซนด์บ็อกซ์เปิดได้ในราวหนึ่งวินาที รัน Python, Node.js หรือ bash และคิดเงินเป็นวินาทีจากยอดเงินเดียวกับเซิร์ฟเวอร์ของคุณ
แซนด์บ็อกซ์คืออะไร
เครื่อง Linux ขนาดเล็กที่คุณสร้างผ่าน API หรือ MCP ใช้ไม่กี่วินาทีหรือไม่กี่วัน แล้วลบทิ้ง อินเทอร์เน็ตขาออกใช้ได้ (pip install, npm install, git clone) ไม่มีพอร์ตขาเข้าและไม่มี SSH: คำสั่งและไฟล์ส่งผ่าน API ภายในมี Python 3.12 พร้อม pip, Node.js 22 พร้อม npm, bash, git และ curl
สองโหมด
แพ็กเกจ
| แพ็กเกจ | vCPU | RAM | ดิสก์ | เครือข่าย | ต่อชั่วโมง | ถาวร สูงสุดต่อเดือน |
|---|---|---|---|---|---|---|
| micro | 0.25 | 512 MB | 3 GB | 50 Mbit/s | $0.0165 | $9.03 |
| small | 0.5 | 1 GB | 5 GB | 100 Mbit/s | $0.033 | $18.07 |
| standard | 1 | 2 GB | 10 GB | 200 Mbit/s | $0.066 | $36.14 |
| plus | 2 | 4 GB | 15 GB | 300 Mbit/s | $0.132 | $72.27 |
| pro | 4 | 8 GB | 20 GB | 400 Mbit/s | $0.264 | $144.54 |
| max | 8 | 16 GB | 40 GB | 500 Mbit/s | $0.528 | $289.08 |
คุณจ่ายค่า vCPU และ RAM ของแพ็กเกจที่เลือก: $0.040 ต่อ vCPU-ชั่วโมง และ $0.013 ต่อ GiB-ชั่วโมง ราคาปัจจุบันโดยไม่ต้องใช้โทเคน: GET /sandboxes/tariffs
ข้อจำกัดที่ควรรู้
คำสั่งหนึ่งรันได้สูงสุด 55 วินาที งานที่นานกว่านั้นรันเป็นงานเบื้องหลังที่คุณคอยถามผล ไฟล์สูงสุด 5 MB ต่อคำขอ ไฟล์ใหญ่กว่า (สูงสุด 2 GB) ผ่านลิงก์ดาวน์โหลดและอัปโหลดแบบใช้ครั้งเดียว บัญชีหนึ่งรันแซนด์บ็อกซ์ได้พร้อมกัน 20 ตัวและคำสั่ง 2 คำสั่ง
ตัวแปรสภาพแวดล้อม
ส่งข้อมูลลับและการตั้งค่าผ่าน env หากกำหนดตอนสร้างจะมีผลกับทุกคำสั่งในแซนด์บ็อกซ์ หากกำหนดใน exec หรือ run จะมีผลเฉพาะการเรียกครั้งนั้นและแทนที่ค่าของแซนด์บ็อกซ์ ได้สูงสุด 64 ตัวแปร ค่าละ 32 KB และรวม 64 KB ค่าจะถูกเก็บแบบเข้ารหัส API ไม่ส่งกลับ และไม่ถูกเขียนลงล็อก การตอบกลับแสดงเฉพาะชื่อ (env_keys)
API=https://api.eqvps.com/api/v1/eqvps
AUTH="Authorization: Bearer $EQVPS_API_KEY"
# env for the whole sandbox (only the names come back, as env_keys)
SB=$(curl -s -X POST $API/sandboxes -H "$AUTH" -H "Content-Type: application/json" \
-d '{"tariff":"small","env":{"DB_URL":"postgres://user:pass@db/app","MODE":"test"}}' | jq -r .id)
# env for one call, merged over the sandbox env
curl -s -X POST $API/sandboxes/$SB/exec -H "$AUTH" -H "Content-Type: application/json" \
-d '{"command":"echo $MODE $RUN_ID","env":{"RUN_ID":"42"}}'ขีดจำกัดการใช้จ่าย
โดยค่าเริ่มต้นแซนด์บ็อกซ์ไม่มีขีดจำกัดการใช้จ่าย คุณตั้งเพดานรายวันและรายเดือนได้ในแดชบอร์ดหรือด้วย PUT /sandboxes/budget เมื่อถึงเพดาน แซนด์บ็อกซ์ใหม่จะได้รับ 429 budget_exceeded แซนด์บ็อกซ์ชั่วคราวที่ทำงานอยู่จะถูกลบ และแซนด์บ็อกซ์ถาวรจะหยุดชั่วคราวโดยเก็บดิสก์ไว้ จากนั้นจะทำงานต่อเมื่อคุณเพิ่มเพดานหรือเริ่มวันหรือเดือนใหม่ (UTC)
# daily cap $5, monthly cap $50 (null = no cap)
curl -s -X PUT $API/sandboxes/budget -H "$AUTH" -H "Content-Type: application/json" \
-d '{"daily_usd":5,"monthly_usd":50}'
# spent today / this month and when the caps reset (UTC)
curl -s $API/sandboxes/budget -H "$AUTH"เริ่มต้นเร็ว: MCP (Claude Code, Cursor และไคลเอนต์อื่น)
เชื่อมเซิร์ฟเวอร์ MCP ครั้งเดียว จากนั้นบอกเอเจนต์ด้วยคำพูดของคุณเองว่าต้องการอะไร เครื่องมือแซนด์บ็อกซ์: create_sandbox, run_code, exec_command, get_task, kill_task, get_upload_url, get_download_url, list_sandboxes, get_sandbox, kill_sandbox, sandbox_pricing
claude mcp add --transport http eqvps https://mcp.eqvps.com/mcp \
--header "Authorization: Bearer $EQVPS_API_KEY"สร้างแซนด์บ็อกซ์ขนาดเล็ก รัน print(2 + 2) ใน Python แสดงผลลัพธ์ให้ดู แล้วลบแซนด์บ็อกซ์ทิ้งเริ่มต้นเร็ว: REST จาก Python และ Node.js
ไม่ต้องติดตั้งแพ็กเกจเพิ่ม ใส่โทเคนของคุณในตัวแปรสภาพแวดล้อม EQVPS_API_KEY (วิธีรับโทเคนอยู่ในหัวข้อ “เชื่อมต่อบัญชี”)
# first_sandbox.py — Python 3.8+, standard library only
import json, os, urllib.request
API = "https://api.eqvps.com/api/v1/eqvps"
KEY = os.environ["EQVPS_API_KEY"]
def call(method, path, body=None):
req = urllib.request.Request(API + path, method=method,
data=json.dumps(body).encode() if body is not None else None,
headers={"Authorization": "Bearer " + KEY,
"Content-Type": "application/json", "Accept": "application/json"})
with urllib.request.urlopen(req, timeout=90) as r: # HTTPError on 401/402/…
return json.loads(r.read() or b"{}")
sb = call("POST", "/sandboxes", {"tariff": "small"})
try:
r = call("POST", f"/sandboxes/{sb['id']}/run",
{"language": "python", "code": "print(2 + 2)"})
print(r["exit_code"], r["stdout"]) # 0 4
finally:
call("DELETE", f"/sandboxes/{sb['id']}")// first_sandbox.mjs — Node.js 18+ (built-in fetch), run: node first_sandbox.mjs
const API = "https://api.eqvps.com/api/v1/eqvps";
const KEY = process.env.EQVPS_API_KEY;
async function call(method, path, body) {
const r = await fetch(API + path, {
method,
headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json", Accept: "application/json" },
body: body ? JSON.stringify(body) : undefined,
});
const data = await r.json();
if (!r.ok) throw new Error(`${r.status} ${data.error ?? ""} ${data.message ?? ""}`);
return data;
}
const sb = await call("POST", "/sandboxes", { tariff: "small" });
try {
const r = await call("POST", `/sandboxes/${sb.id}/run`, { language: "node", code: "console.log(2 + 2)" });
console.log(r.exit_code, r.stdout); // 0 4
} finally {
await call("DELETE", `/sandboxes/${sb.id}`);
}SDK สำหรับ Python และ TypeScript
ชอบใช้ไลบรารีมากกว่า? แพ็กเกจ Python และ TypeScript เรียก REST แบบเดียวกัน ลองใหม่เองเมื่อเจอ 429 และ 503 และลบแซนด์บ็อกซ์ทุกครั้งเมื่อจบบล็อก วิธีติดตั้งและตัวอย่าง:
# pip install -U eqvps https://pypi.org/project/eqvps/ (0.2.0+ for env)
# "eqvps sandbox create" = Sandbox.create() here · create_sandbox in MCP · POST /sandboxes in REST (no CLI)
from eqvps import Sandbox
# EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
with Sandbox.create(tariff="small", env={"DB_URL": "postgres://user:pass@db/app"}) as sb:
r = sb.run("print(2 + 2)")
print(r.stdout, r.exit_code) # "4\n" 0
sb.upload("/root/data.csv", "a,b\n1,2\n")
print(sb.exec("wc -l /root/data.csv").stdout)
print(sb.exec("echo $RUN_ID", env={"RUN_ID": "42"}).stdout) # env for one call
# the sandbox is deleted when the block exits, also on errors// npm i @eqvps/sdk@latest https://www.npmjs.com/package/@eqvps/sdk (0.2.0+ for env)
import { Sandbox } from "@eqvps/sdk";
// EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
await Sandbox.with({ tariff: "small", env: { DB_URL: "postgres://user:pass@db/app" } }, async (sb) => {
const r = await sb.run("print(2 + 2)");
console.log(r.stdout, r.exit_code); // "4\n" 0
console.log((await sb.exec("echo $RUN_ID", { env: { RUN_ID: "42" } })).stdout); // env for one call
}); // deleted afterwards, also on errors
ความคิดเห็น
ยังไม่มีความคิดเห็น เป็นคนแรกสิ