Một agent viết code chỉ hữu ích khi có thứ chạy code đó một cách an toàn và báo lại kết quả. Hướng dẫn này xây vòng lặp đó từ đầu đến cuối: mô hình viết một script Python, sandbox chạy nó, và nếu thất bại thì lỗi được trả về cho mô hình. Sau đó là cùng tác vụ mà không viết dòng code nào, qua MCP.
Bạn cần Python 3.8+, token tài khoản EQVPS (xem kết nối tài khoản) và API key cho một mô hình.
1. Đặt hạn mức chi tiêu trước
Agent tự tạo sandbox, nên hãy cho nó một mức trần trước khi bắt đầu. Hai đô mỗi ngày và hai mươi đô mỗi tháng là dư dả cho thử nghiệm:
curl -X PUT https://api.eqvps.com/api/v1/eqvps/sandboxes/budget \
-H "Authorization: Bearer $EQVPS_API_KEY" -H "Content-Type: application/json" \
-d '{"daily_usd": 2, "monthly_usd": 20}'
Khi chạm hạn mức, sandbox mới nhận 429 budget_exceeded và các sandbox tạm thời đang chạy bị xóa. Chi tiết có trong giới hạn và tính phí sandbox.
2. Cài hai thư viện
pip install eqvps anthropic
export EQVPS_API_KEY="your-eqvps-token"
export ANTHROPIC_API_KEY="your-model-key"
Ví dụ dùng một nhà cung cấp mô hình, nhưng không có gì phụ thuộc vào nó. Chỉ hàm ask() giao tiếp với mô hình.
3. Vòng lặp viết, chạy, sửa
Lưu đoạn này thành agent.py:
import re
import anthropic
from eqvps import Sandbox
TASK = "Count the prime numbers below 1,000,000 and print only the number."
client = anthropic.Anthropic()
def ask(messages):
msg = client.messages.create(model="claude-sonnet-5", max_tokens=2000, messages=messages)
return msg.content[0].text
def extract_code(text):
m = re.search(r"`{3}(?:python)?\n(.*?)`{3}", text, re.S)
return m.group(1) if m else text
messages = [{"role": "user", "content": "Write a Python 3 script for this task. "
"Reply with a single code block and nothing else.\n\nTask: " + TASK}]
with Sandbox.create(tariff="small", idle_timeout=120) as sb:
for attempt in range(1, 4):
reply = ask(messages)
r = sb.run(extract_code(reply), timeout=55)
print(f"attempt {attempt}: exit code {r.exit_code}")
if r.ok:
print(r.stdout.strip())
break
messages += [
{"role": "assistant", "content": reply},
{"role": "user", "content": f"The script failed with exit code {r.exit_code}.\n"
f"stderr:\n{r.stderr[-3000:]}\nFix it. Reply with a single code block."},
]
Chạy nó:
python3 agent.py
Một lần chạy điển hình in ra attempt 1: exit code 0 rồi 78498. Nếu script đầu tiên lỗi, bạn sẽ thấy lần thử thứ hai với lỗi đã được sửa.
Mỗi phần làm gì:
Sandbox.create(..., idle_timeout=120)khởi động một microVM trong khoảng một giây. Nếu script của bạn chết giữa chừng, sandbox vẫn tự xóa sau 2 phút không hoạt động.sb.run(code, timeout=55)chạy code và trả về mã thoát, stdout và stderr. Code bị lỗi là kết quả bình thường chứ không phải exception, nên vòng lặp có thể đưa nó cho mô hình xem.r.stderr[-3000:]chỉ gửi phần cuối của lỗi. Một traceback đầy đủ từ script lớn có thể lãng phí nhiều ngữ cảnh của mô hình.- Ba lần thử là giới hạn có chủ ý. Một mô hình chưa sửa được script sau ba lần thường cần mô tả tác vụ tốt hơn, chứ không phải lần thử thứ tư.
4. Khi tác vụ cần hơn 55 giây
Một lệnh gọi đồng bộ kéo dài tối đa 55 giây. Với việc dài hơn, hãy chạy nền rồi chờ:
task = sb.run(code, background=True)
result = task.wait(timeout=1800)
Tác vụ vẫn tiếp tục chạy kể cả khi wait của bạn quá thời gian chờ, và bạn có thể quay lại với nó bằng sb.task(task_id).
5. Cùng tác vụ qua MCP, không cần code
Nếu bạn dùng một client MCP như Claude Desktop hoặc Cursor với máy chủ MCP của EQVPS, agent đã có sẵn công cụ sandbox: create_sandbox, run_code, exec_command, upload_file, download_file và kill_sandbox. Chỉ cần một prompt:
Tạo một sandbox tạm thời nhỏ. Viết một script Python đếm các số nguyên tố nhỏ hơn 1.000.000, chạy nó ở đó, sửa nếu bị lỗi, cho tôi biết kết quả và xóa sandbox.
Agent thực hiện cùng các lệnh gọi như script ở trên. Công cụ nào an toàn để cho phép mà không cần xác nhận được giải thích trong rào chắn MCP.
Tốn bao nhiêu
Sandbox sống chưa tới một phút và bị tính mức tối thiểu 60 giây: $0.00055 trên small. Lệnh gọi mô hình tốn hơn sandbox. Tín dụng dùng thử $1 của tài khoản mới đủ cho khoảng 1.800 lần chạy như thế này.
Đi tiếp đâu
- SDK từng bước: SDK Python cho sandbox trong 5 phút hoặc TypeScript.
- Mọi phương thức và lỗi: tài liệu tham khảo SDK.
- Các gói và tín dụng dùng thử: trang sandbox.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.