Diff cho thấy bản vá tuyên bố sẽ làm gì. Nó không cho thấy lỗi đã thật sự biến mất chưa, nhánh mới của một câu if có bao giờ được chạy không, hay việc nâng phiên bản thư viện phụ thuộc có làm hỏng import khi cài đặt sạch không. Người review biết điều đó, nên rất nhiều bài review kết thúc bằng "LGTM, miễn là test qua".
Với bản vá do AI viết, khoảng trống này càng rộng. Mô hình tạo ra mã trông hợp lý rất nhanh, và trông hợp lý chính là loại dễ lọt qua mắt một người review mệt mỏi. Cách khắc phục rẻ là chạy thay đổi trước khi ai đó duyệt nó — ở nơi nó không thể làm hại gì.
Phép kiểm tra: base, head, test
Bằng chứng thuyết phục nhất mà một bản vá có thể đưa ra là đoạn tái hiện thất bại trên mã cũ và chạy qua trên mã mới. Sandbox biến việc đó thành một script 20 dòng. Đây là microVM Firecracker có Python 3.12, Node.js 22, git và curl, khởi động trong khoảng một giây:
import os
from eqvps import Sandbox
REPO, BASE, HEAD = os.environ["REPO_URL"], os.environ["BASE_SHA"], os.environ["HEAD_SHA"]
def repro(sb, ref):
sb.exec(f"cd /root/app && git checkout -q {ref}", timeout=55)
return sb.exec("cd /root/app && python3 /root/repro.py", timeout=55).exit_code
with Sandbox.create(tariff="standard", ttl=1800) as sb:
sb.exec(f"git clone -q {REPO} /root/app", timeout=55)
sb.exec("cd /root/app && pip install -q -r requirements.txt", timeout=55)
sb.upload("/root/repro.py", open("repro.py").read())
before, after = repro(sb, BASE), repro(sb, HEAD)
tests = sb.exec("cd /root/app && python3 -m pytest -q", background=True).wait()
print(f"repro on base: {before}, on head: {after}; tests: {tests.state}, exit {tests.exit_code}")
repro.py là đoạn mã trong báo cáo lỗi. Nếu nó thoát với mã khác 0 trên base và bằng 0 trên head, bản vá sửa đúng thứ nó tuyên bố. Hãy đăng dòng đó cùng bản tóm tắt test làm bình luận trên pull request, và người review sẽ bắt đầu từ sự thật.
Bộ test chạy dưới dạng tác vụ nền vì một lệnh đồng bộ đơn lẻ dừng ở giây thứ 55. TTL 30 phút giới hạn thời gian một lần chạy bị treo có thể tính phí bạn.
Agent review biết chạy mã
Ý tưởng này cũng áp dụng cho người review là AI. Kết nối qua máy chủ MCP, agent có các công cụ sandbox: tạo sandbox, chạy lệnh, tải tệp lên và xuống. Thay vì viết "điều này có thể làm hỏng khả năng tương thích với Python 3.8", nó lấy branch về, chạy mã và trích dẫn traceback — hoặc báo rằng mọi thứ vẫn ổn.
Hãy cho agent như vậy một hạn mức chi tiêu và một token chỉ đọc, đồng thời quyết định những công cụ nào nó được gọi mà không cần hỏi. Trang biện pháp bảo vệ MCP liệt kê từng công cụ theo mức rủi ro.
Chọn gói nào
| Kho mã | Gói | Lượt điển hình | Chi phí ước tính |
|---|---|---|---|
| Thư viện nhỏ, Python hoặc JS thuần | small (0.5 vCPU, 1 GB) | 2 phút | $0.0011 |
| Ứng dụng web có bộ test | standard (1 vCPU, 2 GB) | 5 phút | $0.0055 |
| Phần mở rộng native, thư viện cần biên dịch | plus (2 vCPU, 4 GB) | 15 phút | $0.033 |
Sandbox tạm thời được tính phí theo giây với mức tối thiểu 60 giây. Nếu người review muốn quay lại cùng một môi trường trong vài ngày, hãy tạo nó ở chế độ persistent: nó giữ ổ đĩa tối đa 30 ngày và được tính theo mỗi giờ bắt đầu, nên một sandbox standard giữ cho đợt review hai ngày tốn khoảng $3.17. Hãy xóa nó khi pull request đã được merge.
Những giới hạn nên biết
- Hai lệnh cùng lúc mỗi tài khoản. Thừa đủ cho việc review, vốn diễn ra lần lượt. Nếu bạn kiểm tra hàng chục pull request cùng lúc, chúng sẽ xếp hàng.
- Không có cổng chiều vào. Bạn không thể mở ứng dụng trên trình duyệt. Hãy khởi chạy nó bên trong và kiểm tra bằng
curl localhosttừ một lệnh thứ hai. - Không có Docker bên trong. Test cần khởi chạy container nên đặt trên runner ở VPS.
- Internet chiều đi được mở. Đó là điều giúp
pip installhoạt động. Đừng đưa vào sandbox bất cứ thứ gì bạn sẽ không giao cho tác giả bản vá.
Bắt đầu
Tài khoản mới nhận $1 thời gian sandbox, đủ cho hơn một trăm lượt review trên gói standard. Trang sandbox có bảng giá, tài liệu tham khảo SDK có mọi phương thức dùng ở trên, và SDK Python trong 5 phút hướng dẫn thiết lập.
Liên quan: chạy test CI cô lập cho toàn bộ pipeline, và sandbox cho AI agent cho những agent viết mã ngay từ đầu.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.