Hôm nay tôi đã đọc một bài viết dài về Kỹ thuật Harness — hàng chục nghìn từ, gần như chắc chắn là do AI viết. Phản ứng đầu tiên của tôi không phải là "wow, thật là một khái niệm mạnh mẽ." Mà là "những người này có ý tưởng gì ngoài việc đặt tên mới cho những thứ cũ?" Tôi luôn cảm thấy khó chịu với mô hình này trong thế giới AI — sự tái phát minh liên tục các khái niệm hiện có. Từ kỹ thuật prompt đến kỹ thuật ngữ cảnh, giờ là kỹ thuật harness. Cứ vài tháng, có ai đó lại đặt ra một thuật ngữ mới, viết một bài luận dài 10.000 từ, rải rác một vài nghiên cứu điển hình của các công ty lớn, và cả cộng đồng bắt đầu xôn xao. Nhưng nếu bạn thực sự nhìn vào nội dung, thì đó là cùng một điều mỗi lần: Thiết kế môi trường mà mô hình của bạn hoạt động — thông tin mà nó nhận được, công cụ mà nó có thể sử dụng, cách mà các lỗi được chặn lại, cách mà bộ nhớ được quản lý qua các phiên. Điều này đã tồn tại kể từ ngày ChatGPT ra mắt. Nó không trở thành một lĩnh vực mới chỉ vì ai đó — vì lý do nào đó — quyết định đặt cho nó một cái tên mới. Nói vậy, bên cạnh những phàn nàn, các nghiên cứu và trường hợp được trích dẫn trong bài viết thực sự có giá trị — đặc biệt là vì chúng chồng chéo rất nhiều với những gì tôi đã xây dựng với how-to-sglang. Vì vậy, hãy để tôi sử dụng điều này như một cơ hội để nói về những sai lầm mà tôi thực sự đã mắc phải. Một chút bối cảnh trước. Các yêu cầu phổ biến nhất trong cộng đồng SGLang là Các câu hỏi cách làm — cách triển khai DeepSeek-V3 trên 8 GPU, phải làm gì khi cổng không thể kết nối với địa chỉ công nhân, liệu khoảng cách giữa GLM-5 INT4 và FP8 chính thức có đáng kể không. Những câu hỏi này trải rộng trên một bề mặt kỹ thuật cực kỳ rộng lớn, và khi cộng đồng phát triển nhanh chóng, chúng tôi ngày càng không thể theo kịp với các phản hồi. Vì vậy, tôi đã bắt đầu xây dựng một hệ thống đa tác nhân để trả lời chúng tự động. Ý tưởng đầu tiên, tất nhiên, là ý tưởng ngây thơ nhất — xây dựng một tác nhân toàn tri thức duy nhất, nhồi nhét tất cả tài liệu, mã và sách hướng dẫn của SGLang vào đó, và để nó trả lời mọi thứ. Điều đó không hiệu quả. Bạn không cần lý thuyết kỹ thuật harness để giải thích tại sao — cửa sổ ngữ cảnh không phải là RAM. Càng nhồi nhét nhiều vào đó, sự chú ý của mô hình càng phân tán và câu trả lời càng tệ hơn. Một tác nhân cố gắng hiểu đồng thời về lượng tử hóa, phân tách PD, phục vụ khuếch tán và khả năng tương thích phần cứng cuối cùng sẽ không hiểu sâu sắc về bất kỳ điều nào trong số đó. Thiết kế mà chúng tôi cuối cùng đã chọn là một kiến trúc chuyên gia phụ đa lớp. Tài liệu của SGLang đã có các ranh giới chức năng tự nhiên — các tính năng nâng cao, nền tảng, các mô hình được hỗ trợ — với các sách hướng dẫn được tổ chức theo mô hình. Chúng tôi đã biến mỗi lĩnh vực phụ thành một tác nhân chuyên gia độc lập, với một Quản lý Tranh luận Chuyên gia chịu trách nhiệm nhận câu hỏi, phân tách chúng thành các câu hỏi phụ, tham khảo Bảng Định tuyến Chuyên gia để kích hoạt các tác nhân phù hợp, giải quyết song song, sau đó tổng hợp câu trả lời. Nhìn lại, thiết kế này gần như hoàn toàn khớp với các mô hình mà cộng đồng kỹ thuật harness ủng hộ. Nhưng khi tôi xây dựng nó, tôi không biết rằng những mô hình này có tên. Và tôi không cần phải biết. 1. Tiết lộ tiến bộ — chúng tôi không đổ tất cả tài liệu vào bất kỳ tác nhân nào. Mỗi chuyên gia lĩnh vực chỉ tải kiến thức của lĩnh vực của mình, và Quản lý quyết định ai sẽ được kích hoạt dựa trên loại câu hỏi. Cảm giác của tôi là thiết kế này đã mang lại sự cải thiện nhiều hơn so với việc thay thế bằng một mô hình mạnh hơn. Bạn không cần phải biết điều này được gọi là "tiết lộ tiến bộ" để đưa ra quyết định này. Bạn chỉ cần đã thử phương pháp "nhồi nhét mọi thứ vào" một lần và chứng kiến nó thất bại. 2. Kho lưu trữ là nguồn sự thật — toàn bộ quy trình làm việc sống trong kho how-to-sglang. Tất cả các tác nhân chuyên gia đều rút ra kiến thức của họ từ các tệp markdown bên trong kho, không phụ thuộc vào tài liệu bên ngoài hoặc thỏa thuận bằng lời. Ngay từ đầu, chúng tôi đã có ý định viết một tài liệu sglang-maintain.md khổng lồ bao trùm mọi thứ. Chúng tôi nhanh chóng nhận ra rằng điều đó không hiệu quả. Nhóm Codex của OpenAI đã mắc phải sai lầm tương tự — họ đã thử một AGENTS.md quá lớn và chứng kiến nó hư hỏng theo những cách có thể đoán trước. Bạn không cần phải đọc blog của họ để tự mình bước vào mìn này. Đây là vấn đề kỹ thuật phần mềm cổ điển của "tài liệu đơn khối luôn trở nên lỗi thời," ngoại trừ trong bối cảnh tác nhân, hậu quả còn tồi tệ hơn — tài liệu lỗi thời không chỉ không được đọc, mà còn gây hiểu lầm cho tác nhân. 3. Định tuyến có cấu trúc — Bảng Định tuyến Chuyên gia rõ ràng ánh xạ các loại câu hỏi đến các tác nhân. Một câu hỏi về GLM-5 INT4 kích hoạt cả Chuyên gia Lĩnh vực Sách hướng dẫn và Chuyên gia Lĩnh vực Lượng tử hóa đồng thời. Quản lý không đoán; nó tuân theo một chỉ mục có cấu trúc. Đám đông kỹ thuật harness gọi điều này là "ràng buộc cơ giới hóa." Tôi gọi đó là kỹ thuật bình thường. Tôi không nói rằng các ý tưởng đằng sau kỹ thuật harness là xấu. Các nghiên cứu được trích dẫn là vững chắc, khái niệm ACI từ SWE-agent thực sự đáng biết, và kiến trúc tác nhân đôi của Anthropic (tác nhân khởi tạo + tác nhân lập trình) là tài liệu tham khảo quý giá cho bất kỳ ai thực hiện các nhiệm vụ dài hạn. Điều tôi thấy mệt mỏi là việc liên tục đặt ra các thuật ngữ mới — đóng gói những kiến thức kỹ thuật đã được thiết lập thành một lĩnh vực mới, sau đó tạo ra sự lo lắng xung quanh "bạn đang tụt lại phía sau nếu bạn không biết từ này." Kỹ thuật prompt, kỹ thuật ngữ cảnh, kỹ thuật harness — chúng là những khía cạnh khác nhau của cùng một điều. Tháng tới, có thể ai đó sẽ đặt ra thuật ngữ kỹ thuật giàn giáo hoặc kỹ thuật phối hợp, viết một bài luận dài khác trích dẫn cùng một tài liệu SWE-agent, và cộng đồng sẽ bắt đầu một chu kỳ khuếch đại khác. Những gì tôi thực sự học được từ how-to-sglang có thể được nói mà không cần bất kỳ từ vựng mới nào:...