Những câu hỏi mà một agent giỏi không bao giờ hỏi bạn

7 phút đọc

Cũng có bằng English, Español, Português, 简体中文, 日本語, 한국어, Deutsch, Français, ไทยTe Reo Māori.

"Không có câu hỏi nào là ngu ngốc" là một trong những câu nói tử tế mà chúng ta dành cho nhau, và với con người thì điều đó đúng. Một đồng nghiệp mới hỏi mã xử lý thanh toán nằm ở đâu đang học cách hình dung hệ thống; câu hỏi đó xây dựng ngữ cảnh chung và câu trả lời chỉ mất một phút. Nhưng một agent tự động không phải là một đồng nghiệp mới đang tìm chỗ đứng. Nó có thể đọc toàn bộ kho mã trong thời gian bạn đọc xong câu này. Với một agent, một số câu hỏi thực sự là ngu ngốc — và ngu ngốc nhất là những câu hỏi mà nó lẽ ra có thể tự trả lời chỉ bằng cách xem qua.

Câu hỏi ngu ngốc đối với một agent là gì

Một câu hỏi ngu ngốc là câu hỏi mà câu trả lời đã nằm sẵn trong codebase. "Mã xử lý việc này nằm ở đâu?" "Lệnh build là gì?" "Chúng ta đã có sẵn một mẫu (pattern) cho loại việc này chưa?" Một con người có thể hợp lý khi hỏi bất kỳ câu nào trong số này vào ngày đầu tiên đi làm. Một agent hỏi những câu này đang tuyên bố rằng nó thà được đút ngữ cảnh tận miệng còn hơn tự đi tìm — mặc dù việc tự tìm chính là điều duy nhất nó rõ ràng giỏi hơn bạn.

Dấu hiệu nhận biết là câu trả lời có thể được khám phá. Nếu agent có thể tiếp cận nó bằng cách đọc một tệp, grep trong cây thư mục, kiểm tra cấu hình CI, hoặc đọc vài commit gần nhất chạm vào khu vực đó, thì việc hỏi bạn không phải là thận trọng. Đó là đẩy lại cho bạn công việc mà lẽ ra nó phải tự làm.

Một agent bất đồng bộ trả giá cho câu hỏi bằng cả ngày trời

Với một trợ lý chat ngồi cạnh bạn, một câu hỏi rất rẻ: bạn ở ngay đó, bạn trả lời, nó tiếp tục. TaskGoblin không ngồi cạnh bạn. Nó được kích hoạt bởi việc gán một issue, một lượt nhắc đến, hoặc một merge request mới, và nó thực hiện công việc trong một sandbox trong khi bạn đang họp, đang ngủ, hoặc ở một múi giờ khác. Trong thế giới đó, một câu hỏi không phải là một khoảng dừng — đó là một điểm dừng hoàn toàn.

Một agent hỏi "Tôi nên đặt cái này vào services/ hay lib/?" rồi chờ đợi đã biến một lượt chạy lẽ ra có thể hoàn thành trong vài phút thành một lượt chạy chỉ kết thúc khi bạn tình cờ xem lại luồng trò chuyện đó. Một câu hỏi có/không duy nhất, được hỏi vào sai thời điểm, có thể tốn cả một ngày thời gian thực chỉ để đổi lấy ba mươi giây suy nghĩ thực sự. Chính mô hình bất đồng bộ, không có con người trong vòng lặp, làm cho agent trở nên có giá trị, cũng chính là mô hình khiến một câu hỏi có thể tránh được trở nên đắt đỏ đến vậy.

Đặc tả quá mức là cùng một sai lầm, chỉ là bị đẩy lên sớm hơn

Cách phòng vệ tự nhiên trước một agent hay hỏi là trả lời mọi thứ trước: dán cấu trúc thư mục vào prompt, liệt kê các lệnh, đánh vần chi tiết các quy ước đặt tên, kèm theo một đoạn mẫu cần tuân theo. Nó có vẻ như là trách nhiệm. Nhưng đó chính là sai lầm cũ đội lốt khác.

Ngữ cảnh viết tay trở nên lỗi thời ngay khi code tiếp tục thay đổi. Khi bạn nạp sẵn vào prompt rằng "chúng ta đặt các repository trong app/Repositories", bạn đang đặt cược rằng điều đó vẫn đúng, rằng bạn đã nhớ mọi chi tiết liên quan, và rằng không điều nào trong số đó làm agent thiên vị theo cách tiếp cận của ngày hôm qua. Thông thường ít nhất một trong những cược đó sẽ sai, và giờ đây agent tự tin xây dựng dựa trên một sự kiện bạn cung cấp thay vì sự thật mà lẽ ra nó có thể tự đọc. Bạn đã thay thế công việc thực sự — hiểu trạng thái hiện tại của hệ thống — bằng công việc về công việc đó, và khiến kết quả tệ hơn trong quá trình này.

Một agent giỏi tự trả lời câu hỏi của chính mình

Lối thoát không phải là một prompt tốt hơn. Đó là một agent coi hướng dẫn của bạn là mục tiêu và tự đi xác lập các sự kiện.

Đó là lý do vì sao một lượt chạy của TaskGoblin bắt đầu bằng việc clone toàn bộ kho mã vào sandbox của nó — không chỉ diff đang được xem xét, mà toàn bộ working tree — để sự thật nền tảng luôn sẵn sàng để đọc. Nó đọc các tệp, lịch sử của khu vực nó đang thay đổi, issue đã kích hoạt nó cùng với các thảo luận xung quanh, và bộ nhớ bàn giao từ các lượt chạy trước đó trên cùng luồng. Nó có thể chạy chính các lệnh của dự án trong sandbox để xem điều gì thực sự build được và pass, thay vì tin vào một lệnh build mà ai đó đã gõ vào prompt sáu tuần trước. Ở những nơi cần trạng thái trực tiếp từ công cụ của bạn, nó đọc trực tiếp thông qua các tích hợp của mình thay vì yêu cầu bạn chuyển tiếp thông tin đó.

Kết quả là agent đạt đến sự hiểu biết tương đương với những gì một kỹ sư giỏi đạt được sau một giờ đọc — chỉ khác là nó làm điều đó trong vài giây, và nó làm điều đó dựa trên code như hiện tại, chứ không phải như ai đó còn nhớ.

Khi nào nó vẫn nên hỏi

Tất cả những điều này không có nghĩa là một agent không bao giờ nên hỏi gì cả. Những câu hỏi đáng để hỏi là những câu mà code thực sự không thể trả lời: bạn thực sự muốn hành vi nào trong hai hành vi có thể chấp nhận được, liệu một cuộc di chuyển (migration) rủi ro có nằm trong phạm vi hay không, một quyết định sản phẩm chỉ tồn tại trong đầu bạn. Đó không phải là những câu hỏi ngu ngốc — chúng là những quyết định mang tính phán đoán thuộc về bạn, và một agent giỏi sẽ nêu chúng ra rõ ràng và sớm thay vì đoán mò.

Sự phân biệt này chính là trọng tâm. Một agent hỏi bạn code nằm ở đâu đang lãng phí thứ mà nó giỏi nhất. Một agent hỏi bạn đang cố xây dựng sản phẩm nào trong hai sản phẩm đang sử dụng thời gian của bạn cho điều duy nhất mà bạn giỏi nhất. Chúng tôi xây dựng TaskGoblin để nó tự trả lời loại câu hỏi đầu tiên, sao cho những câu hỏi duy nhất đến được với bạn là những câu thực sự xứng đáng với sự chú ý của bạn.