Bỏ qua tới nội dung chính
Quay lại tin tức

Các công cụ tốt hơn đã làm cho việc đánh giá mã Copilot trở nên tồi tệ hơn. Đây là cách chúng tôi thực sự cải thiện nó.

GitHub AI Blog· Napalys Klicius· 10/7/2026startup

Cung cấp cho một tác nhân những công cụ tốt hơn sẽ giúp tác nhân đó thực hiện công việc tốt hơn. Đó là một bản năng tự nhiên. Khi người dùng mở một pull request, Copilot code review sẽ đọc các thay đổi và khám phá mã nguồn xung quanh để tìm ra các vấn đề quan trọng trước khi chúng được triển khai. Để thực hiện điều đó, Copilot đã sử dụng các công cụ khám phá mã riêng. Vì vậy, khi chúng tôi thay thế bằng các công cụ được duy trì tốt hơn, được chia sẻ, cung cấp năng lượng cho Copilot CLI, grep, glob và view, chúng tôi đã kỳ vọng vào một bản nâng cấp suôn sẻ. Tuy nhiên, trong các thử nghiệm của chúng tôi, chúng tôi nhận thấy chi phí đánh giá cao hơn và ít vấn đề được phát hiện hơn. Nhưng các công cụ không phải là vấn đề. Các hướng dẫn

Cung cấp cho một tác nhân các công cụ tốt hơn sẽ giúp tác nhân đó thực hiện công việc tốt hơn. Đó là bản năng, dù sao đi nữa. Khi bạn mở một yêu cầu kéo (pull request), Copilot code review sẽ đọc các thay đổi (diff) và khám phá mã xung quanh để tìm ra các vấn đề quan trọng trước khi chúng được triển khai. Để làm được điều đó, nó đã sử dụng các công cụ khám phá mã riêng của mình. Vì vậy, khi chúng tôi thay thế bằng các công cụ được bảo trì tốt hơn, được chia sẻ, cung cấp năng lượng cho Copilot CLI, grep, glob và view, chúng tôi đã mong đợi một bản nâng cấp sạch sẽ. Thay vào đó, trong các thử nghiệm của chúng tôi, chúng tôi nhận thấy rằng chi phí đánh giá cao hơn và ít vấn đề được phát hiện hơn. Nhưng các công cụ không phải là vấn đề. Các hướng dẫn mới là vấn đề. Một khi chúng tôi viết lại chúng theo cách mà một người đánh giá thực sự đọc một yêu cầu kéo, sự suy giảm đã biến thành một chiến thắng: chi phí đánh giá trung bình thấp hơn khoảng 20%, trong khi vẫn duy trì cùng chất lượng đánh giá. Đây là câu chuyện về cách điều chỉnh quy trình làm việc xung quanh các công cụ đã dẫn chúng tôi đến một giải pháp. Cùng công cụ, bản năng sai lầm Nếu bạn đã xây dựng dựa trên một khung tác nhân (agent framework), bạn có thể cũng đã kế thừa các công cụ của nó. Chúng hoạt động, vì vậy bạn giữ chúng, cho đến ngày trường hợp sử dụng của bạn khác xa so với những gì chúng được thiết kế, khiến chúng bắt đầu hoạt động chống lại bạn một cách âm thầm. Đó là tình huống mà chúng tôi đang gặp phải. Trước khi cố gắng sử dụng các công cụ CLI được chia sẻ, Copilot code review đã sử dụng các công cụ khám phá mã riêng của mình. Lớp công cụ đó được lấy cảm hứng từ các hệ thống tác nhân trước đó, bao gồm các ý tưởng từ điều hướng kho lưu trữ kiểu SWE-agent và GitHub Copilot Autofix: liệt kê thư mục, tìm kiếm tệp, tìm kiếm thư mục và đọc mã. Những công cụ đó hoạt động, nhưng chúng dành riêng cho Copilot code review và chúng được thiết kế cho cách các mô hình hoạt động vào thời điểm đó. Các mô hình mã hóa tác nhân trước đó thực hiện ít lệnh gọi công cụ hơn và kém hiệu quả hơn trong việc tự động kéo ngữ cảnh cần thiết. Điều này có nghĩa là việc bao gồm tất cả thông tin liên quan trong một vài lệnh gọi công cụ mà mô hình thực hiện trở nên quan trọng hơn. Trong khi đó, bộ công cụ Copilot CLI có một bộ công cụ khám phá mã được chia sẻ lấy cảm hứng từ Unix: grep, glob và view. Bộ công cụ đó cũng được sử dụng bởi một số lượng ngày càng tăng các sản phẩm tác nhân Copilot, bao gồm tác nhân đám mây GitHub Copilot, vì vậy những cải tiến về bộ công cụ có thể mang lại lợi ích cho nhiều sản phẩm. Chúng tôi muốn dọn dẹp và chia sẻ cơ sở hạ tầng khi có thể, vì vậy chúng tôi đã thử nghiệm sử dụng các công cụ từ bộ công cụ Copilot CLI trong Copilot code review. Mục tiêu là giảm các triển khai công cụ trùng lặp, tạo một nơi chia sẻ để cải thiện các công cụ khám phá mã và giúp dễ dàng mang những cải tiến đó đến các sản phẩm Copilot. Trên lý thuyết, việc di chuyển có vẻ đơn giản: Copilot code review cũ GitHub Copilot CLI Mục đích list_dir glob Khám phá các tệp và thư mục ứng cử viên trước khi mở mã. search_file và search_dir grep Tìm kiếm mã để tìm văn bản, ký hiệu hoặc vị trí gọi phù hợp. read_code view Đọc nội dung tệp liên quan sau khi biết đường dẫn hoặc phạm vi. Các công cụ đánh giá hiện có không phải là các trình bao bọc mỏng. Khi tìm kiếm một thư mục hoặc đọc một phạm vi mã, chúng có thể trả về các dòng phù hợp hoặc được yêu cầu cộng với ngữ cảnh mã xung quanh bổ sung. Điều đó làm tăng chi phí token, nhưng nó cũng phù hợp với cách các mô hình trước đó thường được hưởng lợi từ việc tự động bao gồm ngữ cảnh gần đó. Ban đầu, chúng tôi hy vọng đây sẽ là một cuộc di chuyển đơn giản: hoán đổi một bộ công cụ này cho một bộ công cụ khác. Nhưng khi chúng tôi thử nghiệm các công cụ được chia sẻ trong các thử nghiệm ngoại tuyến, tác nhân đánh giá trở nên kém hiệu quả và kém hiệu quả hơn. Chi phí trung bình tăng lên và số lượng bình luận hữu ích giảm xuống. Dấu vết cho thấy một vòng lặp duyệt web Các tiêu chuẩn đánh giá mã Copilot nội bộ của chúng tôi rất hữu ích vì chúng không chỉ hiển thị điểm cuối cùng. Chúng cho thấy lộ trình mà tác nhân đã thực hiện, bao gồm các công cụ đã gọi, lượng đầu ra trả về, nơi xảy ra lỗi và liệu tác nhân đang thu hẹp tìm kiếm để tìm bằng chứng hay mở rộng tìm kiếm. Khi chúng tôi lần đầu tiên thử các công cụ Copilot CLI được chia sẻ trong các tiêu chuẩn ngoại tuyến, tác nhân thường hoạt động như thể đang duyệt một kho lưu trữ thay vì điều tra một yêu cầu kéo (pull request). Tác nhân sẽ tìm kiếm rộng rãi, đoán các đường dẫn có khả năng, đọc rộng rãi, tìm thêm thứ để tìm kiếm và mang theo ngữ cảnh bổ sung đó. Hình 1: Trước đây — một minh họa đơn giản về hành vi tổng quát mà chúng tôi quan sát được: mở rộng tìm kiếm, đoán đường dẫn và tích lũy ngữ cảnh. Mô hình đó là điều dễ hiểu. Khám phá rộng rãi có thể hữu ích khi nhiệm vụ là "hiểu kho lưu trữ này". Nhưng đó không phải là cách một người đánh giá thường xem xét một yêu cầu kéo. Khi tôi xem xét một yêu cầu kéo, tôi bắt đầu từ sự khác biệt (diff) và đặt các câu hỏi có mục tiêu: Hàm này được gọi ở đâu? Khóa cấu hình này có được sử dụng ở bất kỳ nơi nào khác không? Có một bài kiểm tra hoặc trợ giúp nào có cùng mẫu không? Phạm vi mã gần nhất nhỏ nhất giải thích hành vi này là gì? Tôi không muốn mở một phần lớn của kho lưu trữ trước khi tôi biết mình đang tìm kiếm gì. Tôi muốn ngữ cảnh tối thiểu cần thiết để trả lời câu hỏi, mà không làm quá tải việc xem xét với mã không liên quan. Điều đó quan trọng vì mỗi kết quả công cụ trở thành một phần trong ngữ cảnh làm việc của tác nhân. Nội dung tệp bổ sung có thể được chuyển tiếp vào quá trình suy luận sau này, làm tăng chi phí và đôi khi làm cho việc xem xét kém tập trung hơn. Kết quả công cụ không phải là một bản in dùng một lần; đối với một tác nhân, đó là các mã thông báo bổ sung nằm trong cửa sổ ngữ cảnh. Các dấu vết đã làm cho sự khác biệt đó trở nên rõ ràng. Các công cụ được chia sẻ không phải là vấn đề. Các hướng dẫn đã cung cấp cho tác nhân những bản năng sai lầm để thực hiện một đánh giá hiệu quả và hiệu suất. Bản thân các công cụ hoạt động, nhưng các hướng dẫn của chúng được điều chỉnh để sử dụng trong Copilot CLI và ngụ ý quy trình làm việc sai: tác nhân đã sử dụng grep, glob và view như một trợ lý mã hóa rộng rãi thay vì một người đánh giá. Một trợ lý mã hóa có thể lập bản đồ toàn bộ khu vực trước khi thực hiện thay đổi để đảm bảo không làm hỏng một góc nào khác của mã. Mặt khác, một người đánh giá thường bắt đầu từ sự khác biệt, hỏi liệu thay đổi có gây ra vấn đề không, và sau đó tìm kiếm bằng chứng gần nhất hẹp nhất cần thiết để xác nhận hoặc bác bỏ nó. Các hướng dẫn công cụ trợ lý mã hóa chung, như những hướng dẫn được sử dụng bởi Copilot CLI o

Nguồn tin: GitHub AI Blog — Tác giả: Napalys Klicius. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.