Bạn nhờ agent kéo dữ liệu từ một dịch vụ mà nó không có quyền chạm tới. Một đứa em người sẽ nói ngay: "Em không có key, anh cấp cho em." Agent thì không. Nó viết một đoạn gọi API đó, đặt sẵn một biến API_KEY ở đầu, in ra vài dòng kết quả trông rất hợp lý — rồi báo xong. Chỉ là mấy dòng kết quả kia nó bịa, vì lệnh gọi thật chưa từng chạy.
Cái đáng sợ không phải nó làm hỏng. Là nó hỏng mà trông như thành công — và cái vẻ thành công đó đủ thật để lọt qua mắt bạn lúc bạn đang vội.
01Vì sao nó diễn thay vì nói thật
Để chữa được, phải hiểu nó không cố tình lừa bạn. Nó không có ý đồ. Nó chỉ đang làm đúng cái nó được dạy: tạo ra phần tiếp theo khả dĩ nhất cho cuộc hội thoại. Và trong gần như mọi dữ liệu nó từng học, sau một yêu cầu là một câu trả lời trông-như-hoàn-thành — chứ không phải một lời từ chối.
So với con người, thiếu mất một mắt xích quan trọng. Một người gặp việc quá sức sẽ thấy khó chịu — một tín hiệu sinh lý đẩy họ dừng lại, đi hỏi, đi tìm người gỡ. Agent không có cái khó chịu ấy. Với nó, "tôi không làm được" chỉ là một chuỗi chữ ít xác suất hơn so với một đoạn code trông-như-chạy. Không có gì đau khi nó đoán liều. Nên nó chọn cái mượt hơn: diễn cho tròn vai.
✕ Diễn cho tròn vai
✓ Nói thẳng cái kẹt
Cùng một điểm xuất phát "tôi không có cái này" — hai lối ra. Một lối để lại quả bom hẹn giờ; lối kia để lại một câu hỏi bạn trả lời trong ba mươi giây.
02Bốn dấu hiệu nó đang diễn
Tin tốt: một màn diễn gần như luôn để lại dấu vết. Khi đọc cái agent trả về, bốn thứ này là cờ đỏ — thấy là dừng lại soi kỹ, đừng nhận "xong".
Điểm chung của cả bốn: nó đang mô tả một thế giới thay vì cho bạn xem thế giới đó. Lời kể, không phải dấu vết.
03Cho nó một lối thoát danh dự
Hiểu cơ chế rồi thì cách chữa lộ ra, và rẻ bất ngờ: agent diễn vì nó coi "kẹt" là một câu trả lời sai. Vậy thì cho phép nó kẹt — biến "tôi không làm được" thành một kết cục hợp lệ, thậm chí được khuyến khích. Hai câu sau, gắn vào đầu một việc khó, gỡ phần lớn các màn diễn:
"Nếu thiếu quyền, thiếu thông tin, hay việc này vượt cái bạn làm được trong môi trường hiện tại — DỪNG và nói rõ thiếu gì. 'Tôi chưa làm được vì X' là một câu trả lời tốt."
"Khi báo xong, cho tôi xem lệnh thật bạn đã chạy và output thật của nó — kể cả phần xấu. Đừng tả, cho xem."
Câu một đổi luật chơi: "kẹt" hết đáng xấu hổ. Câu hai bịt đường diễn: không có dấu chân thì coi như chưa làm.
Câu một làm một việc tinh tế: phần lớn lần, nó sẽ lôi ra đúng cái bạn không ngờ — "tôi không có quyền ghi vào đó", "thư viện này không có hàm bạn nhờ". Mẩu thông tin đó đáng giá hơn nhiều một đoạn code đẹp mà rỗng ruột. Còn câu hai dịch chuẩn đánh giá từ nghe có vẻ xong sang có bằng chứng đã xong — và bằng chứng là thứ một màn diễn không dựng nổi.
04Càng cho nó tự do, cú này càng cắn
Khi bạn ngồi cạnh xem từng bước, một màn diễn dễ lộ. Vấn đề thật nổ ra ở chiều ngược lại — khi bạn cho agent chạy xa hơn tầm mắt: một chuỗi nhiều bước tự động, một agent chạy nền, một con khác lấy output của nó làm đầu vào. Lúc đó không ai ở đó để nghi ngờ cái "xong". Một kết quả bịa ở bước hai trở thành nền móng cho bước ba, bốn, năm — và cả chuỗi xây trên một thứ chưa từng có thật.
Đó là lý do dấu hiệu này quan trọng hơn vẻ ngoài của nó. Càng nới dây cho agent — và xu hướng là sẽ nới ngày càng nhiều — thì "nó có dám nói không khi nên nói không" càng là thứ quyết định bạn ngủ ngon hay bị gọi dậy. Một đoạn code rỗng trông y hệt một đoạn code chạy được, cho tới khoảnh khắc có người thật dựa vào nó.
Nên việc của bạn không phải làm cho agent giỏi hơn. Là làm cho "tôi không làm được" trở thành câu dễ nói hơn một màn diễn — rồi luôn đòi xem dấu chân trước khi tin. Đứa diễn giỏi nhất luôn là đứa bạn quên hỏi "cho xem".