Bạn gõ một câu, nhấn Enter - và terminal bắt đầu tuôn ra từng dòng. Mở file. Chạy lệnh. Lại mở đúng file đó lần nữa. Nhìn từ bên ngoài thì trông như agent đang loay hoay: bạn chỉ nhờ một việc đơn giản, vậy mà có gì đó diễn ra rất lâu và khó hiểu.
Thực ra nó chẳng loay hoay chút nào. Agent chỉ đang chạy một vòng lặp gồm ba phần, và gần như mọi thứ bạn thấy trên màn hình chỉ là cùng một vòng lặp ấy ở những lượt khác nhau.
Vì sao agent làm được nhiều hơn chatbot
Chatbot in ra câu trả lời, phần còn lại bạn phải tự làm bằng tay: sao chép, dán, lưu, chạy. Agent thì tự làm việc ngay trong project của bạn - mở file, sửa file, chạy lệnh, xem kết quả, và các thay đổi thực sự nằm lại trên ổ đĩa của bạn.
Từ đó dẫn tới điều mà bài viết này muốn nói. Vì agent bắt tay vào làm chứ không chỉ khuyên, một động tác là không đủ. Giữa câu bạn gõ và kết quả hoàn chỉnh có nhiều bước, và bước nào cũng hiện trên màn hình.
Một bước gồm những gì
Sau khi nhận yêu cầu của bạn, agent bước vào vòng lặp này và đi qua nó bao nhiêu lần tùy theo nhu cầu. Mỗi lượt gồm ba phần.
Thu thập ngữ cảnh. Agent đọc thêm những gì nó chưa biết: mở các file cần thiết, xem cấu trúc project, đọc output của lệnh trước đó. Điểm khiến nhiều người bất ngờ nhất: nó không thuộc lòng project của bạn, nó đọc project. Mỗi lần cần một chi tiết nào đó, nó lại đi xem.
Thực hiện hành động. Một hành động cụ thể: sửa một file hoặc chạy một lệnh. Không phải toàn bộ kế hoạch cùng lúc, chỉ là bước tiếp theo.
Kiểm tra kết quả. Xem điều gì đã xảy ra và so sánh với những gì bạn yêu cầu.
Tiếp theo là ngã rẽ. Đạt mục tiêu - agent dừng lại và chờ yêu cầu tiếp theo. Chưa đạt - nó quay lại bước thu thập ngữ cảnh và đi thêm một vòng nữa.
Vòng lặp này tự điều chỉnh theo yêu cầu chứ không chạy theo một kịch bản cố định. Một câu hỏi đơn giản về code có thể dừng ngay ở bước thu thập ngữ cảnh: agent đọc, trả lời, không sửa gì. Ngược lại, sửa một lỗi sẽ phải chạy cả ba phần nhiều lần. Và ranh giới giữa các phần cũng không phải lúc nào cũng rõ ràng - agent dùng công cụ trong suốt cả vòng lặp.
Mọi thứ trông có vẻ lạ lúc đầu đều bắt nguồn từ đây. Agent mở cùng một file hai lần - vì sau khi sửa, nó cần xem lại file đó. Giữa yêu cầu và câu trả lời mất vài phút - vì có bốn lượt chứ không phải một. Quay lại từ đầu không phải là trục trặc, đó là cách vòng lặp vẫn hoạt động bình thường.
Suy luận và gọi công cụ
Không phải việc gì agent làm cũng thay đổi file trong project. Ranh giới nằm ngay giữa công việc của nó, và nhìn ra được ranh giới đó là điều có ích.
Suy luận - agent tính xem tiếp theo nên làm gì, nên mở file nào, nguyên nhân lỗi có thể nằm ở đâu. Lúc đó trên ổ đĩa không có một thay đổi nào. Dù nó lập luận thuyết phục đến đâu, đó vẫn chỉ là ý định.
Gọi công cụ - đây mới là lúc việc thật diễn ra. Đọc hoặc ghi file, tìm kiếm trong project, chạy lệnh, tra tài liệu trên internet. Mỗi hành động như vậy hiện trong terminal thành một dòng riêng, và chính những dòng đó cộng lại thành những gì đã xảy ra với project.
Kết quả của lần gọi được trả về cho agent và trở thành một phần của những gì nó biết ở lượt tiếp theo. Đọc file xong - giờ nó biết nội dung file. Chạy test xong - giờ nó biết test đó pass hay không.
Lệnh chạy lỗi, không tìm thấy file, test không pass - agent thấy hết và tính đến điều đó ở bước tiếp theo. Một thông báo lỗi trong output không có nghĩa là mọi thứ hỏng rồi và phải bỏ cuộc. Thường đó lại chính là thông tin nó đang thiếu, và lượt tiếp theo sẽ chính xác hơn lượt trước.
Kết luận thực tế khá đơn giản. Những dòng về gọi công cụ không phải là nhiễu kỹ thuật để lướt qua cho nhanh. Đó chính là chỗ bạn thấy được điều gì đang xảy ra với các file của mình ngay lúc này.
Vì sao agent đặt câu hỏi
Đang làm dở, agent có thể dừng lại và hỏi bạn. Đây là một phần bình thường của vòng lặp, không phải dấu hiệu cho thấy nó làm không nổi.
Câu hỏi có hai loại khác nhau, và nên phân biệt rõ chúng:
- thiếu thông tin về nhiệm vụ - cần thay đổi chính xác cái gì, bạn muốn nói tới file nào trong hai file na ná nhau, thế nào thì coi là xong. Agent gặp chỗ mơ hồ và không muốn đoán mò;
- cần xin phép trước khi hành động - agent sắp làm một việc đáng kể và dừng lại hỏi xem có được không. Nó tự chủ đến mức nào tùy vào phần cài đặt.
Loại câu hỏi thứ nhất là dấu hiệu tốt. Hỏi rõ ngay bây giờ vẫn hơn là phải làm lại sau ba lượt vòng lặp đi sai hướng.
Không cần ngồi chờ câu hỏi, bạn có thể tự gợi ra chúng. Ngay từ đầu, trước những lần sửa đầu tiên, hãy nhờ agent diễn đạt lại nhiệm vụ bằng lời của nó và hỏi về mọi chỗ còn chưa rõ:
Hãy viết ra bạn hiểu nhiệm vụ thế nào và định giải quyết nó ra sao.
Cứ đặt câu hỏi nếu điều đó giúp bạn hiểu rõ hơn nhiệm vụ và mục tiêu.Nhờ vậy những chỗ mơ hồ lộ ra trước lần sửa đầu tiên, chứ không phải khi đã làm xong một nửa. Bạn cũng có thể can thiệp bất cứ lúc nào giữa chừng: bổ sung ngữ cảnh, chỉnh lại hướng đi, hoặc dừng agent lại và diễn đạt lại nhiệm vụ.
Ai quyết định thế nào là xong
Chữ "xong" từ agent chỉ có đúng một nghĩa: vòng lặp của nó đã kết thúc. Nó đã hành động, tự kiểm tra kết quả theo tiêu chí của mình và cho rằng mục tiêu đã đạt. Nhưng công việc thì vẫn chưa xong.
Một thay đổi được coi là đã được chấp nhận không phải khi agent làm xong, mà khi con người đã xem những gì thực sự thay đổi và chịu trách nhiệm về kết quả đó. Sau đó có hai khả năng: chấp nhận - công việc kết thúc; sửa lại - bạn nói rõ chỗ nào chưa ổn, và vòng lặp bắt đầu lại từ yêu cầu mới của bạn.
Và thứ cần xem không phải bản báo cáo, mà là chính các thay đổi: agent cho thấy nó đã xóa những dòng nào và thêm những dòng nào. Đó mới là câu trả lời chính xác cho câu hỏi "đã thay đổi gì", và nó không nằm trong lời agent viết ra.
Agent có thể mô tả việc mình đã làm trơn tru đến mức không bắt bẻ được chỗ nào: "đã thêm xử lý lỗi vào ba phương thức, đã kiểm tra, mọi thứ đều chạy". Nghe như một sự thật. Nhưng nội dung câu trả lời và nội dung các file là hai thứ khác nhau, và không phải lúc nào chúng cũng khớp. Cách duy nhất để biết sự thật là xem danh sách thay đổi.
Điều này có ý nghĩa gì khi làm việc với Claude Code
Hiểu vòng lặp này thì trong thực tế được gì:
- yêu cầu càng rõ ràng thì càng ít lượt. Agent cứ chạy vòng lặp cho đến khi khớp với những gì bạn yêu cầu, và một câu diễn đạt mơ hồ sẽ tốn thêm mấy vòng;
- những chỗ bạn tự sửa trong file, agent sẽ thấy khi mở file đó lần sau: nó đâu có nhớ project, nó đọc. Nếu bạn đã sửa gì đó bằng tay, hãy nói cho nó biết;
- vòng lặp của agent kết thúc bằng chữ "xong". Công việc kết thúc bằng bước kiểm tra của bạn, và đó là hai thời điểm khác nhau.
Toàn cảnh trông như thế này: vòng lặp của agent ở bên trong, bước kiểm tra của bạn ở bên ngoài.
GO TO FULL VERSION