Agent lập trình của tôi yêu cầu quyền cho mọi bước nhỏ nhất
Trợ lý AI của tôi gặp một vấn đề lớn. Nó không phải là từ chối yêu cầu quyền, mà là yêu cầu quyền quá thường xuyên.
Tôi giao cho nó một tác vụ đơn giản như đọc một tệp PDF. Trợ lý sẽ thực hiện một bước, yêu cầu phê duyệt, chạy lệnh, và sau đó ngay lập tức lại yêu cầu cho bước nhỏ tiếp theo. Một tác vụ trở thành một vòng lặp vô tận của các lời nhắc xác nhận.
Các yêu cầu phê duyệt là cần thiết. Bạn muốn một trợ lý cục bộ phải dừng lại trước khi chạy lệnh, ghi tệp hoặc mở ứng dụng. Nhưng công việc thực tế đòi hỏi nhiều bước. Việc đọc một tệp PDF bao gồm kiểm tra Python, tìm trình chuyển đổi, chạy trình chuyển đổi đó và đọc văn bản.
Nếu mọi bước đều yêu cầu phê duyệt, bạn sẽ ngừng đánh giá rủi ro. Bạn bắt đầu nhấn xác nhận qua các thông báo gián đoạn chỉ để chúng biến mất. Điều này rèn luyện bạn thói quen phớt lờ hệ thống an toàn. Điều đó còn nguy hiểm hơn cả việc không có hệ thống an toàn nào.
Quy trình làm việc cũ trông như thế này:
- Trợ lý chọn một công cụ
- Chính sách yêu cầu xác nhận
- Người dùng phê duyệt
- Công cụ chạy
- Trợ lý lại yêu cầu cho công cụ tiếp theo
Trợ lý đã bỏ lỡ ý định của người dùng. Bạn không phải đang phê duyệt một bước thăm dò nhỏ lẻ. Bạn đang phê duyệt cả một tác vụ hoàn chỉnh.
Tôi đã thay đổi cách CliGate hoạt động. Giờ đây, một khi bạn phê duyệt hành động đầu tiên trong một cuộc trò chuyện, hệ thống sẽ thiết lập một cờ (flag). Điều này cho phép các bước sau tiếp tục mà không cần các vòng phê duyệt mới. Trợ lý vẫn nhận được kết quả thực tế để có thể tiếp tục làm việc.
Tôi cũng đã thêm một lối thoát: /safe. Lệnh này sẽ bật lại chế độ xác nhận rõ ràng.
Tôi cũng đã sửa một lỗi ngôn ngữ. Khi hệ thống tiếp tục một tác vụ, đôi khi nó thay đổi ngôn ngữ của các lời nhắc. Nếu bạn nói tiếng Trung, trợ lý sẽ chuyển sang tiếng Anh cho lời nhắc tiếp theo. Giờ đây, trợ lý sẽ xem tin nhắn thực tế cuối cùng của bạn để chọn đúng ngôn ngữ.
Giải pháp không phải là tắt tính năng phê duyệt. Giải pháp là ghi nhớ lý do tại sao người dùng đã đưa ra sự phê duyệt đó.
Đối với các công cụ cục bộ, hãy sử dụng sự tin cậy theo phạm vi tác vụ (task-scoped trust):
- Yêu cầu trước khi vượt qua một ranh giới lớn
- Ghi nhớ sự phê duyệt cho tác vụ hiện tại
- Cung cấp cách để quay lại chế độ nghiêm ngặt
- Không để các tin nhắn hệ thống làm thay đổi ý định của người dùng
Đây là cách tôi xây dựng các phê duyệt trong CliGate. Nó là mặt phẳng điều khiển (control plane) cục bộ của tôi cho Claude Code, Codex CLI, và Gemini CLI.
Bạn xử lý tình trạng mệt mỏi vì phê duyệt (approval fatigue) như thế nào? Bạn phê duyệt theo từng lần gọi công cụ, theo từng tác vụ, hay theo từng phiên làm việc?
Agent lập trình của tôi yêu cầu sự cho phép cho mọi bước nhỏ nhất
Tôi đang sử dụng một agent lập trình AI để giúp mình xây dựng một ứng dụng web nhỏ. Mọi thứ bắt đầu rất suôn sẻ, cho đến khi tôi nhận ra một vấn đề cực kỳ khó chịu: agent này yêu cầu sự cho phép của tôi cho... mọi thứ.
Bạn muốn đọc một tệp? "Tôi có thể đọc tệp package.json không?"
Bạn muốn chạy một lệnh? "Tôi có thể chạy npm install không?"
Bạn muốn tạo một thư mục? "Tôi có thể tạo thư mục src không?"
Ban đầu, tôi nghĩ: "Ồ, thật tuyệt, nó rất an toàn và thận trọng." Nhưng sau 15 phút, sự hào hứng đó biến thành sự ức chế tột độ.
Vấn đề: Sự gián đoạn luồng làm việc (Flow)
Lập trình đòi hỏi sự tập trung cao độ. Khi tôi đang trong "trạng thái dòng chảy" (flow state), việc phải liên tục chuyển đổi giữa việc suy nghĩ về logic mã nguồn và việc nhấn "Yes" trên terminal là một thảm họa.
Thay vì để agent thực sự làm việc, tôi lại trở thành một "người phê duyệt" (approver) mệt mỏi. Tôi không còn đang xây dựng ứng dụng nữa; tôi đang quản lý một nhân viên thực tập cực kỳ nhút nhát và luôn hỏi ý kiến về những việc hiển nhiên.
Tại sao điều này xảy ra?
Hầu hết các agent lập trình hiện nay được thiết lập với các rào cản an toàn (safety guardrails) rất nghiêm ngặt. Điều này là hợp lý—bạn không muốn một AI tự ý chạy rm -rf / trên máy tính của mình.
Tuy nhiên, sự cân bằng giữa an toàn và tự chủ (autonomy) thường bị lệch về phía an toàn quá mức. Các system prompt mặc định thường hướng dẫn agent phải luôn xác nhận trước khi thực hiện bất kỳ hành động nào có khả năng thay đổi hệ thống tệp hoặc thực thi lệnh.
Giải pháp: Trao quyền tự chủ có kiểm soát
Tôi nhận ra rằng thay vì cố gắng làm việc với agent theo cách này, tôi cần thay đổi cách tôi cấu hình nó.
1. Điều chỉnh System Prompt
Thay vì để prompt mặc định, tôi đã thử cập nhật instruction cho nó:
"Bạn là một kỹ sư phần mềm tự chủ. Bạn có quyền đọc tệp, tạo tệp và chạy các lệnh build/test cần thiết để hoàn thành nhiệm vụ mà không cần hỏi lại, trừ khi lệnh đó có nguy cơ xóa dữ liệu hoặc yêu cầu xác nhận thanh toán."
Kết quả? Sự khác biệt là một trời một vực. Agent bắt đầu tự thực hiện các chuỗi hành động: đọc tệp $\rightarrow$ phân tích $\rightarrow$ sửa lỗi $\rightarrow$ chạy test $\rightarrow$ xác nhận hoàn thành.
2. Sử dụng môi trường Sandbox
Để giải quyết nỗi lo về an toàn, tôi chuyển sang chạy agent trong một Docker container hoặc một môi trường sandbox biệt lập. Khi biết rằng agent có thể "phá hỏng" mọi thứ mà không ảnh hưởng đến máy chủ chính, tôi cảm thấy thoải mái hơn nhiều khi cho phép nó có toàn quyền trong môi trường đó.
Kết luận
Các agent lập trình có tiềm năng thay đổi hoàn toàn cách chúng ta viết code, nhưng chúng chỉ thực sự hữu ích khi chúng có thể hoạt động với tốc độ của tư duy. Nếu bạn đang cảm thấy bị làm phiền bởi những câu hỏi lặp đi lặp lại, hãy xem xét lại cách bạn thiết lập quyền tự chủ cho chúng.
Đừng biến trợ lý AI của bạn thành một thực tập viên cần được cầm tay chỉ việc từng bước một. Hãy biến nó thành một cộng sự thực thụ.