Anthropic Engineering

Thiết kế dây cáp cho phát triển ứng dụng chạy dài hạn

🕐 20/07/2026 12:08 📰 Anthropic Engineering ✅ Đã dịch sang tiếng Việt

Được viết bởi Prithvi Rajasekaran, một thành viên trong nhóm **Labs** của chúng tôi.

Trong vài tháng qua, tôi đã làm việc trên hai vấn đề có mối liên hệ với nhau: giúp Claude tạo ra các thiết kế frontend chất lượng cao, và giúp nó xây dựng các ứng dụng hoàn chỉnh mà không cần sự can thiệp của con người. Công việc này bắt nguồn từ những nỗ lực trước đó về **kỹ năng thiết kế frontend** và **khung tác nhân mã hóa chạy dài**, nơi các đồng nghiệp và tôi đã cải thiện hiệu suất của Claude vượt xa mức cơ bản thông qua kỹ thuật prompt và thiết kế khung—nhưng cả hai cuối cùng đều chạm đến giới hạn.

Để vượt qua, tôi đã tìm kiếm các phương pháp kỹ thuật AI mới có hiệu quả trên hai lĩnh vực khá khác nhau, một được định nghĩa bởi gu thẩm mỹ chủ quan, cái còn lại bởi tính đúng đắn và khả năng sử dụng có thể kiểm chứng. Lấy cảm hứng từ **Mạng đối nghịch tạo sinh (GANs)**, tôi đã thiết kế một cấu trúc đa tác nhân với một tác nhân **sinh** và một tác nhân **đánh giá**. Việc xây dựng một bộ đánh giá có thể chấm điểm đầu ra một cách đáng tin cậy—và có gu thẩm mỹ—đồng nghĩa với việc trước tiên phải phát triển một bộ tiêu chí có thể biến những đánh giá chủ quan như "thiết kế này có đẹp không?" thành các thuật ngữ cụ thể, có thể chấm điểm.

Sau đó, tôi áp dụng các kỹ thuật này vào mã hóa tự động chạy dài, kế thừa hai bài học từ công việc khung trước đây của chúng tôi: phân rã quá trình xây dựng thành các phần có thể quản lý được, và sử dụng các tạo phẩm có cấu trúc để chuyển giao ngữ cảnh giữa các phiên. Kết quả cuối cùng là một kiến trúc ba tác nhân—lập kế hoạch, sinh, và đánh giá—đã tạo ra các ứng dụng full-stack phong phú qua các phiên mã hóa tự động kéo dài nhiều giờ.

Chúng tôi trước đây đã chỉ ra rằng thiết kế khung có tác động đáng kể đến hiệu quả của mã hóa tác nhân chạy dài. Trong một **thí nghiệm** trước đó, chúng tôi đã sử dụng một tác nhân khởi tạo để phân rã một đặc tả sản phẩm thành danh sách nhiệm vụ, và một tác nhân mã hóa thực hiện các nhiệm vụ từng tính năng một trước khi chuyển giao các tạo phẩm để mang ngữ cảnh qua các phiên. Cộng đồng nhà phát triển rộng lớn hơn đã hội tụ về những hiểu biết tương tự, với các phương pháp như "Ralph Wiggum" sử dụng hook hoặc script để giữ các tác nhân trong các vòng lặp cải tiến liên tục.

Nhưng một số vấn đề vẫn còn dai dẳng. Đối với các nhiệm vụ phức tạp hơn, tác nhân vẫn có xu hướng đi chệch hướng theo thời gian. Khi phân rã vấn đề này, chúng tôi đã quan sát thấy hai chế độ thất bại phổ biến với các tác nhân thực hiện các loại nhiệm vụ này.

Đầu tiên là các mô hình có xu hướng mất mạch lạc trong các nhiệm vụ dài khi cửa sổ ngữ cảnh đầy dần (xem bài viết của chúng tôi về **kỹ thuật ngữ cảnh**). Một số mô hình cũng thể hiện "lo lắng về ngữ cảnh", trong đó chúng bắt đầu kết thúc công việc sớm khi tiến gần đến giới hạn ngữ cảnh mà chúng tin là có. Việc đặt lại ngữ cảnh—xóa hoàn toàn cửa sổ ngữ cảnh và bắt đầu một tác nhân mới, kết hợp với một bàn giao có cấu trúc mang trạng thái của tác nhân trước và các bước tiếp theo—giải quyết cả hai vấn đề này.

Điều này khác với nén, nơi các phần trước của cuộc trò chuyện được tóm tắt tại chỗ để cùng một tác nhân có thể tiếp tục với lịch sử rút gọn. Trong khi nén duy trì tính liên tục, nó không cung cấp cho tác nhân một trang giấy trắng, điều đó có nghĩa là sự lo lắng về ngữ cảnh vẫn có thể

Sist. Reset mang lại một khởi đầu mới, với cái giá là artifact bàn giao phải có đủ trạng thái để agent tiếp theo có thể tiếp nhận công việc một cách sạch sẽ. Trong các thử nghiệm trước đây, chúng tôi nhận thấy Claude Sonnet 4.5 thể hiện sự lo lắng về ngữ cảnh (context anxiety) đủ mạnh đến mức việc nén (compaction) đơn thuần không đủ để đảm bảo hiệu suất tốt cho các tác vụ dài, vì vậy reset ngữ cảnh trở nên thiết yếu trong thiết kế harness. Điều này giải quyết vấn đề cốt lõi, nhưng lại làm tăng độ phức tạp trong điều phối, chi phí token và độ trễ cho mỗi lần chạy harness.

Vấn đề thứ hai, mà trước đây chúng tôi chưa đề cập, là tự đánh giá (self-evaluation). Khi được yêu cầu đánh giá công việc do chính mình tạo ra, các agent có xu hướng phản hồi bằng cách tự tin khen ngợi tác phẩm—ngay cả khi, theo quan điểm của người quan sát, chất lượng rõ ràng là tầm thường. Vấn đề này đặc biệt rõ rệt đối với các tác vụ mang tính chủ quan như thiết kế, nơi không có một kiểm tra nhị phân tương đương với một bài kiểm tra phần mềm có thể xác minh. Việc một bố cục có tinh tế hay chung chung là một nhận định mang tính đánh giá, và các agent luôn có xu hướng thiên vị tích cực khi chấm điểm công việc của chính mình.

Tuy nhiên, ngay cả đối với các tác vụ có kết quả có thể xác minh, các agent đôi khi vẫn thể hiện khả năng phán đoán kém, cản trở hiệu suất của chúng trong khi hoàn thành nhiệm vụ. Việc tách biệt agent thực hiện công việc khỏi agent đánh giá nó tỏ ra là một đòn bẩy mạnh mẽ để giải quyết vấn đề này. Sự tách biệt này không ngay lập tức loại bỏ sự dễ dãi đó; người đánh giá vẫn là một LLM có xu hướng hào phóng đối với các đầu ra do LLM tạo ra. Nhưng việc tinh chỉnh một agent đánh giá độc lập để trở nên hoài nghi hóa ra lại khả thi hơn nhiều so với việc biến một agent tạo sinh trở nên phê phán công việc của chính nó, và một khi có phản hồi bên ngoài đó, agent tạo sinh có thứ cụ thể để lặp lại và cải thiện.

Tôi bắt đầu bằng cách thử nghiệm trên thiết kế frontend, nơi vấn đề tự đánh giá dễ thấy nhất. Nếu không có bất kỳ can thiệp nào, Claude thường có xu hướng hướng tới các bố cục an toàn, dễ đoán, về mặt kỹ thuật có chức năng nhưng về mặt thị giác thì không có gì nổi bật.

Hai hiểu biết đã định hình harness mà tôi xây dựng cho thiết kế frontend. Thứ nhất, mặc dù tính thẩm mỹ không thể được giảm hoàn toàn thành một điểm số—và sở thích cá nhân sẽ luôn khác nhau—nhưng chúng có thể được cải thiện bằng các tiêu chí chấm điểm mã hóa các nguyên tắc và sở thích thiết kế. "Thiết kế này có đẹp không?" thật khó để trả lời một cách nhất quán, nhưng "điều này có tuân theo các nguyên tắc thiết kế tốt của chúng ta không?" mang lại cho Claude một thứ cụ thể để chấm điểm. Thứ hai, bằng cách tách biệt việc tạo frontend khỏi việc đánh giá frontend, chúng ta có thể tạo ra một vòng phản hồi thúc đẩy agent tạo sinh hướng tới các đầu ra mạnh mẽ hơn.

Với suy nghĩ này, tôi đã viết bốn tiêu chí chấm điểm mà tôi cung cấp cho cả agent tạo sinh và agent đánh giá trong prompt của chúng:

Tôi nhấn mạnh chất lượng và tính nguyên bản của thiết kế hơn là sự khéo léo và chức năng. Claude vốn đã đạt điểm cao về sự khéo léo và chức năng theo mặc định, vì năng lực kỹ thuật cần thiết thường đến một cách tự nhiên với mô hình. Nhưng về thiết kế và tính nguyên bản, Claude thường tạo ra các đầu ra ít nhất là nhạt nhẽo. Các tiêu chí đã phạt rõ ràng các mẫu "AI slop" có tính chung chung cao, và bằng cách đặt trọng số cho thiết kế và tính nguyên bản,

Khi tôi đặt trọng số cao hơn cho tính nguyên bản, mô hình có xu hướng chấp nhận nhiều rủi ro thẩm mỹ hơn.

Tôi hiệu chỉnh bộ đánh giá bằng các ví dụ few-shot kèm phân tích điểm chi tiết. Điều này đảm bảo đánh giá của bộ đánh giá khớp với sở thích của tôi, đồng thời giảm độ lệch điểm số qua các vòng lặp.

Tôi xây dựng vòng lặp trên Claude Agent SDK, giúp việc điều phối trở nên đơn giản. Một agent sinh nội dung trước tiên tạo giao diện frontend HTML/CSS/JS dựa trên prompt của người dùng. Tôi cấp cho bộ đánh giá Playwright MCP, cho phép nó tương tác trực tiếp với trang web đang chạy trước khi chấm điểm từng tiêu chí và viết nhận xét chi tiết. Trong thực tế, bộ đánh giá tự điều hướng trang, chụp ảnh màn hình và nghiên cứu kỹ lưỡng cách triển khai trước khi đưa ra đánh giá. Phản hồi đó được truyền ngược lại cho bộ sinh làm đầu vào cho vòng lặp tiếp theo. Tôi chạy từ 5 đến 15 vòng lặp cho mỗi lần sinh, mỗi vòng thường đẩy bộ sinh theo hướng độc đáo hơn khi nó phản hồi lại nhận xét của bộ đánh giá. Vì bộ đánh giá chủ động điều hướng trang thay vì chấm điểm ảnh chụp tĩnh, mỗi chu kỳ mất thời gian thực. Các lần chạy đầy đủ kéo dài tới bốn giờ. Tôi cũng hướng dẫn bộ sinh đưa ra quyết định chiến lược sau mỗi lần đánh giá: tinh chỉnh hướng hiện tại nếu điểm số có xu hướng tốt, hoặc chuyển hướng sang thẩm mỹ hoàn toàn khác nếu cách tiếp cận không hiệu quả.

Qua các lần chạy, đánh giá của bộ đánh giá cải thiện dần qua các vòng lặp trước khi đạt đến điểm bão hòa, vẫn còn dư địa phát triển. Một số lần sinh tinh chỉnh dần dần. Một số khác có những bước ngoặt thẩm mỹ rõ rệt giữa các vòng lặp.

Cách diễn đạt các tiêu chí đã định hướng bộ sinh theo những cách tôi không lường trước hết. Việc đưa vào các cụm từ như "thiết kế tốt nhất đạt chất lượng bảo tàng" đã đẩy các thiết kế về một hội tụ thị giác cụ thể, cho thấy việc gợi ý liên quan đến tiêu chí đã trực tiếp định hình đặc tính đầu ra.

Mặc dù điểm số thường cải thiện qua các vòng lặp, nhưng mô hình không phải lúc nào cũng tuyến tính rõ ràng. Các vòng lặp sau

📎 Nguồn gốc: Anthropic Engineering Xem bài gốc →