Cái lệnh xóa chạy trong nửa giây. Câu "khoan, không phải cái đó" của bạn bật ra sau nó chừng hai giây. Và hai giây đó là tất cả khác biệt giữa một thứ undo được và một thứ đã đi mất.
Đa số việc agent làm thì sai cũng sửa được: viết lại đoạn code, chạy lại cái test, sửa lại câu chữ. Bạn quen với cái lưới an toàn đó tới mức quên rằng nó không phải lúc nào cũng có. Một nhúm hành động không có lưới: xóa sạch một thứ, ghi đè lên bản gốc, gửi một email ra ngoài, đẩy một thay đổi lên môi trường thật, trả một khoản tiền. Làm xong là xong. Không có save-point để quay về.
01Agent không thấy cái vạch "qua đây là hết đường lùi"
Vấn đề không phải agent bất cẩn. Là nó không có cái cảm giác mà bạn có sẵn: cái rùng mình nhẹ trước khi tay bạn bấm Enter trên một lệnh hủy diệt.
Với bạn, "đổi một dòng chữ" và "xóa cả thư mục" là hai việc nằm ở hai đầu của một thang nguy hiểm. Với agent, chúng là hai lệnh dài bằng nhau, viết cùng một cú pháp, trôi qua với cùng một độ "bình thường". Nó không có một cái vạch đỏ trong đầu ghi "qua đây là hết đường lùi". Nó xử lý cái lệnh đẩy-lên-môi-trường-thật bằng đúng sự nhẹ nhõm như xử lý một lệnh in dòng chữ ra màn hình.
Tệ hơn, nó còn hay quên. Nó không nhớ rằng cái thư mục kia là thứ cả đội đang sống nhờ, rằng cái danh sách email đó là khách hàng thật, rằng cái nút "triển khai" kia đẩy thẳng ra chỗ người dùng đang dùng. Với nó, mỗi lệnh là một khoảnh khắc rời rạc, không gánh theo cái lịch sử khiến bạn phải rén tay.
02Ba cái chốt cho cái không có nút undo
Vì agent không tự dựng được cái vạch đỏ đó, bạn dựng hộ — bằng ba cái chốt gài quanh mọi hành động không-hoàn-tác:
Chốt 2 — Dừng xin gật: trước một việc không hoàn tác, agent dừng lại chờ bạn duyệt — không tự bấm. Bạn nhìn cái bản nháp ở chốt 1, gật thì mới qua.
Chốt 3 — Ghi lại: nó đã làm gì, lúc nào, chạm vào đâu — chép vào một cuốn nhật ký. Để nếu có gì sai, bạn lần được dấu, không phải đoán mò trong bóng tối.
Để ý ba chốt này đều nằm <i>quanh</i> hành động, không nằm <i>trong</i> agent. Bạn không dạy nó sợ cái nút xóa — bạn đặt một lớp kính chắn trước cái nút đó, và một cái camera ghi lại mỗi lần nó với tay tới.
03Phân biệt cái undo được với cái không
Cái chốt sẽ thành phiền nếu bạn gài nó trước mọi hành động — agent dừng xin phép cả những việc vô hại thì còn gì là nhanh. Mẹo là phân loại trước: việc nào lùi được thì cho chạy thoải mái, việc nào không lùi được mới gài chốt.
Trước khi để agent tự do trên một loại việc, hỏi đúng một câu đó. Sửa code, chạy thử, nháp văn bản — lùi được, cho chạy. Xóa, gửi, triển khai, trả tiền — không lùi được, sang chốt sau.
"Cho tôi xem bạn sẽ xóa/gửi đúng cái gì, trước khi làm thật." Một bước dry-run biến cái không-undo-được thành cái xem-trước-được — chỗ bạn bắt lỗi khi nó còn chưa xảy ra.
Ghi lại các hành động hệ trọng agent đã làm. Không phải để soi nó — mà để khi một thứ biến mất hay sai lệch, bạn có chỗ tra "chuyện gì đã xảy ra", thay vì dựng lại từ trí nhớ.
Cái nhật ký ở bước ba hay bị xem nhẹ nhất, nhưng nó là thứ cứu bạn lúc tệ nhất: "không biết nó đã làm gì" tự nó đã là một lỗ hổng. Có dấu vết, một sai sót thành chuyện tra ra được; không có, nó thành một bí ẩn bạn ôm mãi.
04Sự bất đối xứng tàn nhẫn nhất
Vì sao đáng gài mấy cái chốt này, khi chín mươi chín lần agent xóa đúng cái cần xóa? Vì lần thứ một trăm. Cái chốt tốn của bạn vài giây mỗi lần — liếc một bản dry-run, gõ một chữ "ừ". Cái không có chốt tốn của bạn một thứ không mua lại được, vào đúng cái lần bạn không ngờ nhất.
Đây không phải chuyện thả lỏng hay siết chặt autonomy nói chung — cái đó là một bài toán riêng về việc thả tới đâu. Đây hẹp hơn và cứng hơn: với riêng nhóm việc không-quay-lại, mặc định luôn là gài chốt, bất kể bạn tin agent tới đâu. Vì lòng tin có sai thì bạn rút lại được bằng một câu. Còn một thứ đã xóa, đã gửi, đã đẩy đi — thì hai giây "khoan đã" của bạn mãi mãi tới sau nửa giây cái lệnh đã chạy.