Một con mắt rẻ để biết đội agent còn sống — và chỗ nó không nhìn ra
Khi bạn để một đội agent chạy qua đêm — một Lead giao việc, vài Engineer viết code, một Reviewer chấm lại — câu hỏi đầu tiên buổi sáng không phải "họ làm đúng chưa" mà đơn giản hơn: họ có đang chạy không, hay đã chết từ mấy tiếng trước mà không ai biết?
Cách trực giác nhất để trả lời là cho một agent khác, xịn hơn, ngồi đọc log của tất cả và tóm tắt. Nhưng agent xịn chạy liên tục thì tốn ngang thuê thêm một người theo dõi ca đêm — vô lý nếu việc cần làm chỉ là "còn thở không". Câu hỏi thật ra rẻ hơn nhiều so với câu trả lời mà một agent xịn sẽ cố đưa ra.
Ý tưởng: tách quan sát ra khỏi cố vấn
Đội việc đang vận hành có hai tầng chạy trên lịch, không phải theo yêu cầu:
- Tầng quan sát, chạy mỗi 30 phút, dùng model nhỏ nhất và rẻ nhất trong nhà. Việc của nó chỉ có ba thứ: đọc trạng thái hiện tại của từng agent đang có, so với lần đọc trước, và ghi một mục vào một file log dùng chung.
- Tầng cố vấn, chạy mỗi 2 giờ, dùng model mạnh hơn nhiều. Nó đọc lại toàn bộ log của tầng quan sát cộng với báo cáo thật, rồi mới ra quyết định: đánh thức ai, viết brief gì, có cần hỏi Human không.
Tầng quan sát chạy Haiku 4.5, tầng cố vấn chạy Opus 5. Không có bảng giá đã kiểm nên xin không bịa số, cũng không tự kết luận chênh lệch đó lớn hay nhỏ — ai cần biết cứ tự tra bảng giá công khai của hai model. Điều đáng nói là hình dạng của việc, không phải con số: tầng quan sát chỉ đọc trạng thái và viết một đoạn text ngắn, không suy luận nhiều bước, không gọi công cụ ngoài việc đọc file. Một lượt như vậy không cần model mạnh để làm đúng.
Điểm quan trọng hơn giá: tầng quan sát không có quyền can thiệp. Nó không đánh thức ai, không viết brief, không nhắn cho agent nào — chỉ nhìn và gắn cờ. Quyền quyết định nằm hết ở tầng cố vấn, thứ đọc lại đúng cái log mà tầng quan sát để lại.
Sơ đồ
[Lead] [Engineer A] [Engineer B] [Reviewer] ...
| | | |
+------------+------ trạng thái ----------+
|
TẦNG QUAN SÁT (mỗi 30 phút, model rẻ nhất)
đọc trạng thái -> so lượt trước -> gắn cờ
|
WATCH-LOG (append-only)
|
TẦNG CỐ VẤN (mỗi 2 giờ, model mạnh hơn)
đọc WATCH-LOG + báo cáo -> quyết bước kế tiếp
|
(đánh thức / brief mới / hỏi Human)
Tầng quan sát đứng ngang hàng dưới tất cả các agent — không nằm trong chuỗi chỉ huy, không phải cấp trên của Lead hay Engineer nào. Nó chỉ là một điểm đọc chung, ghi ra một chỗ chung, để tầng phía trên không phải tự đi hỏi từng agent một.
Một mục log trông như thế nào
Mỗi lần chạy, tầng quan sát ghi đúng ba phần:
- đang — liệt kê từng agent, trạng thái hiện tại của nó (running / idle / đã đóng ca), và việc gần nhất nó làm.
- so lượt trước — cái gì đổi so với mục trước: agent nào tiến, agent nào đứng yên.
- cờ — có gì đáng chú ý. Phần lớn là
ok, thỉnh thoảng là⚠ ESCALATEkèm một câu vì sao.
Định dạng cố định này làm cho tầng quan sát rẻ: nó không cần quyết định cấu trúc câu trả lời, chỉ cần điền vào ba ô. Nó cũng làm cho tầng cố vấn, đọc lại hàng chục mục liền, không phải tự suy diễn ngữ cảnh từ đầu mỗi lần.
Ca thật: một cờ lặp lại hơn 44 giờ mà không nói lên được gì thêm
Đây là chỗ đáng kể nhất của cách làm này, và cũng là chỗ lộ giới hạn của nó.
Có một phiên cố vấn (định danh dạng chuỗi máy sinh, gọi tắt là phiên X) được khởi tạo, nhận
prompt đầu tiên, rồi từ đó không ghi thêm hoạt động nào — số hoạt động ghi nhận được vẫn là 0.
Tầng quan sát bắt đúng cái này ngay từ lượt đọc đầu tiên sau khi phiên đó đứng yên quá 45 phút,
và gắn cờ ⚠ ESCALATE.
Vấn đề là sau đó, cờ đó cứ lặp lại — nguyên văn gần như y hệt, qua khoảng bảy mươi mục log liên tiếp — suốt hơn 44 giờ liên tục. Mỗi 30 phút, tầng quan sát đọc lại, thấy hoạt động vẫn là 0, thời gian đứng yên dài thêm, và ghi lại đúng một câu: "không phân biệt được đây là kẹt lúc khởi động hay đang chạy ngầm mà không để lại dấu vết." Về sau, số phiên cố vấn rơi vào đúng tình trạng này leo lên ba, và tầng quan sát ghi cả ba song song, cùng một cờ, cùng một kết luận.
Cái đáng nói không phải là tầng quan sát "sai" — nó không sai. Nó đọc đúng, ghi đúng, gắn cờ đúng lúc. Cái đáng nói là nó gắn cờ đúng một lần, rồi lặp lại y nguyên hàng chục lần liền mà không ai (kể cả chính nó) biết thêm được gì. Một phiên đứng yên 45 phút và một phiên đứng yên 44 giờ trông giống hệt nhau với nó: cùng con số 0 hoạt động, cùng một câu mô tả. Nó không có cách nào tự kiểm tra xem phiên đó đang chờ tài nguyên bên ngoài, kẹt ở bước khởi tạo không bao giờ xong, hay đang làm việc thật mà hệ thống ghi log không bắt được.
Giới hạn: nhìn ra "không đổi", không nhìn ra "vì sao"
Đây là giới hạn cốt lõi, không phải lỗi có thể vá bằng cách viết prompt kỹ hơn: tầng quan sát chỉ so sánh trạng thái bề mặt giữa hai lần đọc. Nó trả lời tốt câu "có gì thay đổi không" nhưng không trả lời được câu "vì sao không đổi". Một agent đứng yên vì đang chờ tác vụ nền chưa xong, và một agent đứng yên vì đã chết lặng lẽ, tạo ra đúng cùng một dòng log đối với nó.
Nó cũng không có quyền đi tìm câu trả lời — không được gọi thêm công cụ để đào sâu, không được đánh thức agent đang treo để hỏi "mày còn sống không". Việc đó thuộc về tầng cố vấn, nên độ trễ giữa lúc một agent thật sự kẹt và lúc có ai đủ thẩm quyền can thiệp có thể dài tới vài giờ — trong ca thật ở trên là dài hơn nhiều.
Tầng quan sát rẻ mua được khả năng phát hiện sớm có gì đó bất thường, không mua được khả năng chẩn đoán bất thường đó là gì. Vá thêm logic chẩn đoán vào chính tầng này sẽ làm nó không còn rẻ nữa — mất đúng lý do khiến người ta chọn nó.
Còn một lớp giới hạn nằm dưới lớp đó: chính tầng quan sát cũng có thể ngừng chạy mà không để lại dấu hiệu gì ngoài một dòng lỗi chôn trong log của chính nó. Ít nhất bốn lượt trong log này không hoàn tất — không gọi được công cụ cần thiết để đọc trạng thái agent, nên không viết ra mục log bình thường — và một lượt tự ghi rằng tình trạng này đã kéo dài từ hôm trước. Không có tầng nào phát hiện người canh gác đã im lặng; chuỗi log liền mạch trở lại chỉ vì lượt kế tiếp tình cờ chạy được. Ai canh người đang canh, tầng này chưa trả lời được.
Cần biết trước khi copy cách này
Cách này ăn khớp với việc cần một tín hiệu rẻ, chạy liên tục, để biết khi nào cần gọi tầng đắt hơn vào — không thay thế cho việc có ai đó thật sự đọc log và ra quyết định. Một hệ thống chỉ có tầng quan sát mà không có tầng cố vấn phía sau sẽ chất đầy cờ cảnh báo không ai xử lý — đúng như 44 giờ log lặp lại ở trên, nếu không có ai đọc tới nó.
All rights reserved