Có một niềm tin len lỏi khi mới làm với agent: rằng nếu mình nói chưa đủ rõ, nó sẽ hỏi lại. Con người làm thế mà — ai nhận một việc mơ hồ cũng ngẩng lên hỏi "ý anh là sao?".
Agent thì không. Đưa nó một câu lệnh mười phần rõ bảy, nó sẽ tự lấp ba phần còn lại bằng phán đoán — rồi lao vào làm cái phiên bản nó tự nghĩ ra, gọn gàng và dứt khoát như thể đó đúng là điều bạn muốn. Nó không đứng lại ở vạch nghi ngờ. Nó phi qua.
01Nó không cãi lời. Nó đoán.
Đây là chỗ ngược với trực giác: một junior người mà mơ hồ thì còn rụt rè, hỏi lại, làm cầm chừng. Agent mơ hồ thì tự tin — vì nó không có cái cảm giác "mình đang không chắc". Nó chỉ có phân phối xác suất, và nó chọn nhánh khả dĩ nhất rồi đi tiếp như chưa từng có nhánh nào khác.
Nên cái nguy không phải là nó từ chối làm. Cái nguy là nó làm — nhanh, đẹp, và sai cái đề. Bạn nhờ "dọn lại phần xử lý lỗi cho gọn", nó hiểu thành "viết lại toàn bộ tầng xử lý lỗi theo gu của nó". Cả hai đều khớp với câu chữ bạn gõ. Chỉ một cái khớp với cái bạn định nói.
Điều khiển agent, vì thế, không phải là nói to hơn hay nghiêm hơn. Là thu hẹp khoảng trống cho nó đoán xuống gần bằng không, trước khi nó kịp lấp đầy bằng phán đoán của mình.
02Lớp 1 — Cấu trúc lệnh: nói cái nó cần, không phải cái bạn nghĩ
Một câu lệnh mơ hồ không phải vì nó ngắn, mà vì nó để ngỏ những thứ quan trọng. "Tối ưu cái hàm này" để ngỏ: tối ưu theo chiều nào — tốc độ, bộ nhớ, hay dễ đọc? được phép đổi chữ ký không? có ràng buộc nào không được phá?
Đừng bắt nó tự trả lời mấy câu đó. Trả lời sẵn. Một câu lệnh có cấu trúc tối thiểu gồm ba phần: mục tiêu (đo được, không phải tính từ), ranh giới (cái gì được đụng, cái gì cấm), và dạng kết quả (bạn muốn nhận về thứ gì để kiểm).
So hai câu này, cùng một ý định:
✕ Mơ hồ — chừa chỗ cho nó đoán
✓ Có cấu trúc — không còn chỗ trống
Bạn không cần văn hay. Bạn cần đóng các nhánh. Mỗi chỗ bạn để ngỏ là một chỗ nó sẽ tự điền — và nó điền theo cái phổ biến nhất trong dữ liệu huấn luyện, chứ không theo cái đặc thù trong đầu bạn.
03Lớp 2 — Forcing function: chặn cái mặc định xấu, đừng chỉ dặn
Cấu trúc lệnh lo cái nó nên làm. Nhưng agent có những thói quen mặc định mạnh đến mức bạn dặn suông không lại: tiện tay refactor, thêm thư viện cho "đẹp", đổi tên cho "nhất quán", viết một tràng giải thích thay vì làm.
Dặn "đừng làm linh tinh" gần như vô dụng — nó là một lời khuyên, mà lời khuyên thì cạnh tranh yếu với thói quen. Cái ăn được là forcing function: một ràng buộc khiến đường tắt xấu không đi được, chứ không phải không nên đi.
Khác biệt nằm ở chỗ đó. "Đừng đổi nhiều file" là lời dặn. "Chỉ được sửa đúng một file x; muốn đụng file khác thì dừng lại xin phép" là forcing function — nó biến hành vi xấu thành một cái cổng phải gõ cửa. "Hãy test kỹ" là lời dặn. "Dán vào đây lệnh test bạn đã chạy và output thật của nó" là forcing function — không có output thì coi như chưa xong.
Nguyên tắc: mỗi lần bạn định viết "nhớ đừng…", hãy dừng lại và hỏi làm sao để nó không thể. Biến lời dặn thành một bước bắt buộc, một định dạng bắt buộc, hay một cái dừng bắt buộc.
04Lớp 3 — Bắt nó hỏi trước khi đoán
Hai lớp trên bịt những chỗ bạn biết trước. Nhưng sẽ luôn có chỗ bạn không lường được — và đó đúng là chỗ agent lặng lẽ đoán.
Cách chữa rẻ đến bất ngờ: cấp cho nó quyền nói "tôi chưa chắc", rồi bắt nó dùng. Một câu thêm vào đầu việc khó: "Trước khi làm, liệt kê những chỗ trong yêu cầu này còn mơ hồ hoặc có thể hiểu theo nhiều cách. Nếu có, hỏi tôi. Đừng tự chọn."
Câu đó làm một việc tinh tế: nó đổi mặc định từ đoán-rồi-làm sang nêu-chỗ-mù-trước. Phần lớn lần, nó sẽ lôi ra đúng hai ba chỗ mà nếu để yên nó đã đoán sai. Trả lời ba câu hỏi mất ba mươi giây. Gỡ một đống làm-lại vì nó đoán trật thì mất cả buổi.
Một dấu hiệu nên thuộc: khi nó nói "tôi giả định là…" — đó không phải thông tin, đó là một chỗ nó vừa tự đoán mà không hỏi. Mỗi câu "tôi giả định" là một lời mời bạn kiểm lại.
05Điều khiển là thiết kế, không phải may rủi
Gộp lại, ba lớp này là một ý: đừng giao việc rồi cầu may, hãy thiết kế cái khuôn để chỉ có một cách hiểu đúng lọt qua. Cấu trúc lệnh đóng những nhánh bạn thấy. Forcing function chặn những thói quen bạn biết. Và câu hỏi-cho-rõ kéo ra những chỗ mù bạn không thấy.
Nghe có vẻ nhiều công. Nhưng để ý mà xem: cả ba đều là việc làm một lần ở đầu, tính bằng giây. Cái thay thế chúng — phát hiện ra nó hiểu sai đề sau khi đã viết xong — là việc bạn trả bằng cả buổi, và thường trả vào lúc bạn tưởng mình đã xong.
Agent sẽ không bao giờ ngẩng lên hỏi "ý bạn là sao?" như một đứa em. Nên việc đó thành việc của bạn: hỏi hộ nó, ngay từ đầu, bằng cách không chừa chỗ nào cho câu hỏi đó phải đặt ra.