Ca đêm là việc của cả một đội model
Planner lên kế hoạch, worker thực thi, verifier tấn công, còn đứng chắn giữa tất cả bọn chúng với thế giới bên ngoài là một cái gate có whitelist và ledger.
4 phút đọcViết từ Seoul và Nha Trang
Đến một lúc nào đó, số lượng scheduled job, monitor và pipeline vượt qua cái ngưỡng mà một con người còn có thể ngồi làm bộ điều phối. Câu trả lời của chúng tôi không phải một con agent tự trị to đùng, mà là cả một đội agent nhỏ, với một script tất định nắm dây cương.
Code nắm luồng điều khiển, model nắm nội dung
Bộ orchestrator chỉ là code bình thường: nó quyết định cái gì chạy, theo thứ tự nào, chạy song song bao nhiêu, và khi hỏng thì làm gì. Model lấp vào từng bước. Một planner biến mục tiêu thành danh sách task. Các worker thực thi task bên trong tool sandbox với step budget định sẵn. Một verifier, được prompt để bác bỏ chứ không phải để giúp, tấn công output của worker. Một reporter nén những kết quả còn sống sót lại cho con người đọc. Mỗi vai trò đều ghi một transcript JSONL, nên công việc của bất cứ đêm nào cũng replay lại được từng bước vào sáng hôm sau.
Quy tắc kiến trúc duy nhất: model không bao giờ nói chuyện trực tiếp với nhau. Chúng nói qua orchestrator, nghĩa là mọi bước nhảy đều được log, tính budget và có thể ngắt giữa chừng.
Chiều nguy hiểm là chiều gửi ra ngoài
Phần rủi ro của việc tự động hóa vận hành không nằm ở đọc, mà ở ghi. Một con bot có thể nhắn cho người vào 4 giờ sáng thì sẽ có ngày nhắn cho họ bốn mươi lần lúc 4 giờ sáng. Mọi đường gửi ra ngoài trong đội của chúng tôi, dù tới người hay tới API, đều đi qua đúng một cái gate:
function send(msg, to) {
if (!WHITELIST.has(to)) return refuse('recipient');
if (ledger.countToday(to) >= DAILY_CAP) return refuse('cap');
ledger.append({ to, digest(msg), at: now() }); // written BEFORE sending
return transport.send(msg, to);
}
Một whitelist người nhận, một hạn mức mỗi ngày ép ngay trong code, một ledger ghi trước khi gửi, và đúng một cái gate dùng chung cho mọi bên gửi. Mười script xài chung một gate thắng đứt mười script mỗi đứa một kiểu lịch sự riêng.
Bắt sự im lặng, đừng chỉ chờ báo lỗi
# the watchdog does not listen for errors. it demands proof of life.
find /opt/health -name '*.ok' -mmin +90 -print # stale heartbeat = incident
Cron job chỉ hỏng ầm ĩ trong truyện cổ tích. Trong production, chúng hỏng bằng cách không chạy: gõ sai một ký tự trong lịch, một virtualenv chết, đồng hồ server ở một timezone mà tác giả không ngờ tới. Watchdog của chúng tôi đòi heartbeat và coi sự vắng mặt chính là chuông báo động. Từ lúc đảo ngược cách nghĩ đó, cái loại sự cố mà một thứ gì đó chết âm thầm cả tuần đã biến mất hẳn.
Nguyên tắc bỏ túi mà chúng tôi rút ra: một hệ tự động hóa được trao quyền tự trị tương xứng với mức độ bán kính sát thương của nó bị chặn máy móc tới đâu. Viết gate trước, rồi hãy thả đội ra.