Phân phối kỹ năng Agent qua gói NuGet: cách tiếp cận mới cho lập trình với AI
Agent skills do Anthropic giới thiệu năm 2025 đã nhanh chóng trở nên phổ biến trong phát triển phần mềm với AI, với các ví dụ như dotnet/skills hay Impeccable skills. Cách phân phối truyền thống là qua git repo, nhưng nhóm phát triển .NET đã thử nghiệm phân phối kỹ năng qua gói NuGet và nhận thấy hướng đi này hiệu quả. Điểm chung là cả repo lẫn gói đều là đơn vị phát triển có thể dùng làm phương tiện phân phối kỹ năng.
Vì sao cần kỹ năng đóng gói theo gói
Kỹ năng giải quyết hai vấn đề: lấp khoảng trống kiến thức của mô hình và áp đặt "cách làm của chúng ta" cho một tác vụ. Gói NuGet mới luôn đi trước quá trình huấn luyện mô hình, nên việc cung cấp kỹ năng đúng thời điểm mang lại lợi ích rõ rệt. Một gói phiên bản mới với API vừa phát hành cách đây vài phút không nằm trong kiến thức của mô hình, nhưng kỹ năng cập nhật có thể được đặt cạnh binary cập nhật, giúp mỗi phiên bản gói có kỹ năng phù hợp riêng.
Về hành vi mặc định, agent có thể tự tìm nội dung trong cache NuGet để học về một gói, kể cả đọc README.md hay viết chương trình tạm phản chiếu metadata assembly. Các mô hình tiên tiến khá sáng tạo và rút ra được hiểu biết bất ngờ, nhưng không hẳn rẻ. Câu hỏi cốt lõi là liệu agent dùng sự sáng tạo đó để dịch ngược tài liệu từ metadata hay để giải quyết bài toán kinh doanh thực tế của bạn.
Định dạng SKILL.md
Kỹ năng là tệp markdown có header YAML, tên là SKILL.md, theo đặc tả tại agentskills.io. Kỹ năng phân phối qua NuGet dùng cùng định dạng này. Ví dụ, một kỹ năng có thể hướng dẫn agent chạy kiểm tra lỗ hổng bảo mật cho các phụ thuộc NuGet của dự án bằng lệnh dotnet package list --vulnerable --include-transitive.
Cách phân phối thông thường và qua NuGet
Cách phổ biến nhất là đưa kỹ năng vào repo mã nguồn thông thường, để mọi người làm việc trên repo có cùng trải nghiệm và thay đổi kỹ năng đi qua quy trình PR. Cách thứ hai là repo marketplace kỹ năng, nơi người dùng cài qua lệnh tương tự git clone, nên repo marketplace cần nhỏ gọn. Điểm mạnh của việc đặt kỹ năng trực tiếp trong repo là chúng luôn hiện diện, kể cả khi dùng Copilot Web Agent.
Với NuGet, thách thức là gói mới không có trong mô hình, còn cơ hội là kỹ năng cập nhật được đặt cạnh binary cập nhật. Lệnh dotnet restore vốn đã kéo gói về máy, nghĩa là các tệp SKILL.md đi kèm cũng có mặt trên máy. Các kỹ năng của gói được liệt kê trong project.assets.json, giúp dễ xác định gói nào có kỹ năng.
Công cụ hỗ trợ
Nhóm phát triển đã xây dựng vài công cụ khám phá tệp SKILL.md:
- dotnet-inspect: liệt kê kỹ năng trong một gói hoặc toàn bộ đồ thị gói từ tệp dự án, in nội dung ra context hoặc ra tệp để tìm kiếm, lưu vào repo.
- dotnet-package-skills: quét các gói trực tiếp, sao chép kỹ năng hợp lệ vào thư mục .agents/skills trong repo để chúng luôn sẵn có; người dùng phải tự đảm bảo kỹ năng đồng bộ khi cập nhật PackageRef.
- NuGet MCP: công cụ giúp agent hiểu sâu về NuGet, cả dự án cục bộ lẫn registry, hiện chưa cập nhật cho kỹ năng nhưng sẽ sớm được triển khai.
Bài học rút ra
Kỹ năng đóng gói theo gói không phải loại kỹ năng đặc biệt, chỉ là biến thể dùng cùng định dạng, nên việc đánh giá kỹ năng thông thường vẫn áp dụng. Kỹ năng có thể mang lại hiệu quả (trả lời đúng) và hiệu suất (trả lời rẻ), nhưng cũng có thể phản tác dụng nếu viết hoặc kiểm thử kém.
Chi phí là yếu tố lớn với mô hình. Nếu thêm SKILL.md khiến agent của người dùng tốn kém hơn thì đó là điều xấu, nên nhà duy trì gói cần đánh giá kỹ năng và cải thiện hoặc loại bỏ những kỹ năng bị báo cáo là kém hiệu quả hay tốn kém. Với mô hình tiên tiến, nhóm không thấy nhiều dư địa cải thiện hiệu quả do khả năng sáng tạo; với mô hình yếu hơn, họ quan sát hiệu quả thấp và dao động đáng kể do mức tuân thủ kỹ năng thấp hơn.
Nhóm dùng hiệu quả Pareto làm công cụ điều chỉnh với nguyên tắc "không gây hại". Ý tưởng ban đầu là dùng kỹ năng để đưa mô hình hạng "mini" lên ngang mô hình tiên tiến, nhưng điều này không thực tế vì một bộ kỹ năng được phục vụ cho mọi mô hình: cải thiện 50% hiệu suất cho Anthropic Haiku nhưng giảm 10% cho Opus là một đánh đổi tồi, khiến công việc của người dùng Opus trở nên đắt đỏ hơn.
Nguồn: .NET Blog
Trích nguồn từ: .NET Blog