15 điểm bởi GN⁺ 2026-01-31 | 4 bình luận | Chia sẻ qua WhatsApp
  • Trong bài đánh giá nhắm vào API Next.js 16, chỉ mục tài liệu AGENTS.md nằm ở thư mục gốc dự án ghi nhận độ chính xác cao hơn cách tiếp cận dựa trên skills
  • Skills là dạng gói tri thức miền mà tác tử sẽ gọi khi cần, nhưng việc gọi không ổn định nên ở cấu hình mặc định chỉ đạt tỷ lệ vượt qua 53%
  • Ngược lại, chỉ mục AGENTS.md được nén xuống 8KB đạt tỷ lệ vượt qua 100% trong mọi bài kiểm tra (Build, Lint, Test)
  • Cách làm này cho kết quả ổn định hơn so với việc gọi chủ động nhờ loại bỏ điểm quyết định, luôn sẵn có và giải quyết vấn đề thứ tự
  • Người duy trì framework có thể đưa chỉ mục tài liệu khớp phiên bản vào AGENTS.md để nâng cao độ chính xác khi sinh mã

Bối cảnh vấn đề

  • Tác tử lập trình AI có hạn chế là dữ liệu huấn luyện dựa trên API phiên bản cũ, nên không thể xử lý chính xác framework mới nhất
    • Các tính năng như 'use cache', connection(), forbidden() của Next.js 16 không có trong dữ liệu huấn luyện hiện có của mô hình
  • Ngược lại, ở các dự án dùng phiên bản cũ, mô hình cũng có thể đề xuất API mới không hề tồn tại
  • Để giải quyết điều này, nhóm đã thử nghiệm cách tiếp cận truy cập tài liệu khớp phiên bản

Hai cách tiếp cận

  • Skills: gói tiêu chuẩn mở gom prompt, công cụ và tài liệu lại với nhau, được tác tử gọi và sử dụng khi cần
  • AGENTS.md: tệp ngữ cảnh thường trực nằm ở thư mục gốc dự án, luôn có thể được tham chiếu trong mọi lượt hội thoại
  • Hai cách được đánh giá so sánh dựa trên cùng bộ tài liệu Next.js

Giới hạn của cách tiếp cận Skills

  • Kết quả đánh giá cho thấy, ở 56% bài kiểm tra skill không được gọi, và tỷ lệ vượt qua mặc định là 53%, không có cải thiện
  • Ở một số hạng mục, kết quả thậm chí còn thấp hơn mốc cơ sở (ví dụ: test 58% so với 63%)
  • Điều này được chỉ ra là giới hạn hiện tại khi mô hình chưa thể thực hiện việc dùng công cụ một cách ổn định

Thử nghiệm bổ sung chỉ dẫn tường minh

  • Khi thêm vào AGENTS.md chỉ dẫn tường minh “hãy gọi skill trước khi viết mã”, tỷ lệ vượt qua tăng lên 79%
  • Tuy nhiên, khác biệt rất nhỏ trong cách diễn đạt chỉ dẫn lại ảnh hưởng lớn tới kết quả
    • “Hãy gọi skill trước” → bị cố định vào mẫu trong tài liệu, bỏ sót ngữ cảnh dự án
    • “Hãy khám phá dự án rồi gọi skill” → cho kết quả tốt hơn
  • Do tính mong manh về ngôn ngữ này, độ tin cậy trong sử dụng thực tế bị đánh giá là thấp

Xây dựng đánh giá đáng tin cậy

  • Bài kiểm tra ban đầu thiếu độ tin cậy do prompt mơ hồ và vấn đề xác minh trùng lặp
  • Để cải thiện, nhóm đã tăng cường bằng xác minh dựa trên hành vi và các bài test tập trung vào API Next.js 16 chưa có trong dữ liệu huấn luyện
  • Các API được kiểm tra chính gồm: connection(), 'use cache', cacheLife(), forbidden(), proxy.ts, cookies(), headers(), after(), refresh()...

Thử nghiệm với cách tiếp cận AGENTS.md

  • Nhóm loại bỏ quá trình lựa chọn của tác tử và chèn trực tiếp chỉ mục tài liệu vào AGENTS.md
  • Chỉ mục không chứa toàn bộ tài liệu mà gồm danh sách đường dẫn tài liệu theo từng phiên bản
  • Chỉ dẫn bổ sung:
    IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any Next.js tasks.
    • Nhằm hướng mô hình ưu tiên suy luận dựa trên tài liệu thay vì dữ liệu đã học trước đó

Kết quả đánh giá

  • Khi chèn chỉ mục vào AGENTS.md, tỷ lệ vượt qua đạt 100%
    • Build, Lint và Test đều cho kết quả hoàn hảo
  • Thống kê so sánh:
    • Baseline 53%, Skill mặc định 53%, Skill + chỉ dẫn 79%, AGENTS.md 100%
  • Lý do cách ngữ cảnh thụ động vượt trội hơn cách gọi chủ động
    1. Không có điểm quyết định — thông tin luôn hiện diện
    2. Tính sẵn có nhất quán — được đưa vào system prompt ở mọi lượt
    3. Loại bỏ vấn đề thứ tự — không phụ thuộc vào thứ tự khám phá tài liệu

Giải quyết vấn đề dung lượng ngữ cảnh

  • Chỉ mục ban đầu là 40KB nhưng đã được nén còn 8KB (giảm 80%)
  • Dùng cấu trúc phân tách bằng dấu pipe (|) để lưu đường dẫn tài liệu và tên tệp với không gian tối thiểu
  • Tác tử chỉ đọc các tệp cần thiết trong thư mục .next-docs/ để sử dụng chính xác thông tin đúng phiên bản

Cách áp dụng

  • Có thể thiết lập chỉ với một dòng lệnh
    npx @next/codemod@canary agents-md
    
  • Lệnh này sẽ
    1. Phát hiện phiên bản Next.js
    2. Tải tài liệu của phiên bản đó vào .next-docs/
    3. Chèn chỉ mục đã nén vào AGENTS.md
  • Hoạt động tương tự trên các tác tử nhận diện AGENTS.md như Cursor

Hàm ý đối với nhà phát triển framework

  • Skills vẫn hữu ích, nhưng để cải thiện độ chính xác sinh mã nói chung thì cách làm với AGENTS.md hiệu quả hơn
  • Skills phù hợp với các quy trình tập trung vào nhiệm vụ cụ thể như “nâng cấp phiên bản”, “di chuyển sang App Router”
  • Khuyến nghị:
    • Đừng chờ skills được cải thiện, hãy dùng AGENTS.md ngay
    • Chỉ bao gồm chỉ mục tài liệu để giảm tối thiểu ngữ cảnh
    • Xác minh bằng đánh giá tập trung vào các API không có trong dữ liệu huấn luyện
    • Thiết kế tài liệu theo cấu trúc tìm kiếm phân mảnh chi tiết
  • Mục tiêu là chuyển từ suy luận dựa trên tiền huấn luyện sang suy luận dựa trên truy xuất, và AGENTS.md là cách triển khai điều này ổn định nhất

4 bình luận

 
channprj 2026-01-31

> Tác nhân AI viết mã có hạn chế là dựa trên dữ liệu huấn luyện dùng API phiên bản cũ nên không thể xử lý chính xác các framework mới nhất.

Dùng Context7 thì vấn đề trên được giải quyết phần nào.

https://context7.com

 
slowandsnow 2026-02-04

Là vì context7 không hiệu quả nên mới dùng hai cách ở trên...

 
channprj 2026-02-05

Tôi hiểu ý bạn muốn nói, nhưng thay vì mỗi lần đều phải tổng hợp rồi đưa vào AGENTS.md hoặc Skills từng liên kết tài liệu mới nhất của mọi framework/thư viện đang dùng, tôi nghĩ dùng context7 như một công cụ hỗ trợ cũng không hẳn là lựa chọn tệ.

Ngoài ra, cả bài trên GeekNews lẫn bài gốc của Vercel đều không nhắc đến context7. Tôi để lại bình luận này vì có vẻ như bạn đã diễn giải nội dung đi trước khoảng nửa bước.

(Xin nói thêm, việc có thể tiết kiệm token bằng Skills hoặc AGENTS.md được viết tốt là điều đã được biết đến rộng rãi, và bản thân tôi cũng hiểu rõ điều đó.)

 
GN⁺ 2026-01-31
Ý kiến trên Hacker News
  • Mô hình không phải AGI. Nó chỉ là trình tạo văn bản, được huấn luyện để tạo ra các hiệu ứng như chỉnh sửa file hay gọi công cụ
    Mô hình không phải “hiểu” kỹ năng của người dùng rồi sử dụng, mà tạo ra loại văn bản đó nhờ học tăng cường (RL) dựa trên các ví dụ do con người tạo ra và nhật ký sử dụng
    Lý do nó không luôn dùng kỹ năng là vì vẫn chưa được học đủ nhiều trường hợp như vậy. Nếu ép bằng RL thì ngược lại còn có thể khiến mô hình ngu đi
    Hiện tại chúng ta đang tích lũy nhật ký sử dụng kỹ năng để các mô hình tương lai học tốt hơn về thời điểm cần dùng kỹ năng
    AGENTS.md đơn giản chỉ là ngữ cảnh. Mô hình ngay từ đầu đã được huấn luyện để làm theo ngữ cảnh

    • Khác biệt giữa AGENTS.md và kỹ năng rốt cuộc là vấn đề được chèn vào ngữ cảnh như thế nào
      Frontmatter của kỹ năng cuối cùng cũng được đưa vào ngữ cảnh, nên nếu AGENTS.md hoạt động tốt hơn thì đó là do khác biệt trong cách trích xuất và bơm thông tin kỹ năng
      Một số agent có thể dùng mô hình nhỏ hơn (ví dụ: Haiku) để quyết định nên truyền thông tin kỹ năng nào sang mô hình lớn hơn (ví dụ: Sonnet, Opus)
      Cuối cùng, điểm cốt lõi là thông tin nào đi vào “prompt thô”
    • Không phải AGI. Về thực chất nó ở mức tự động hoàn thành được tăng cường
      Hữu ích nhưng không hoàn hảo. Bản thân công nghệ GPT có vẻ đã bước vào giai đoạn chững hiệu năng
      Phần sẽ còn được cải thiện về sau là các hệ thống bổ trợ như kỹ năng. Nhưng tính năng kỹ năng hiện tại được triển khai vẫn kém hơn việc viết trực tiếp AGENTS.md
    • Tôi cũng đã làm thử nghiệm tương tự. Trong system prompt thì cho tải trước các kỹ năng liên quan, còn trong user prompt thì kiểm tra theo kiểu chỉ gọi khi cần
    • Có người hỏi RL là gì
    • Có một bình luận đùa, ví câu “mô hình không phải AGI” với tranh cãi cách gọi GNU/Linux
  • Trong bài đánh giá có kết quả cho thấy ở 56% trường hợp, kỹ năng chưa từng được gọi lấy một lần. Tức là có tài liệu nhưng không dùng. Kèm theo câu đùa “thế là vượt qua Turing test rồi…”

    • Có phản hồi dí dỏm rằng “AI cũng RTFM (không đọc hướng dẫn)”
    • Tôi cũng thấy buồn cười, nhưng nói nghiêm túc thì con người nhiều khi cũng không đáng tin
      Khác biệt là AI chấp nhận chỉ thị sửa đổi mà không có tự ái
      Chưa tới mức lập trình viên senior, nhưng vẫn nghe lời hơn junior
  • Phát hiện cốt lõi là nén (compression) các con trỏ tài liệu có hiệu quả
    Khó đọc với con người, nhưng với LLM thì đây là cấu trúc tham chiếu trực tiếp và hiệu quả
    Về sau, thay vì các heuristic như agents.md/claude.md/skills.md, có khả năng một định dạng chỉ mục nén luôn được tải sẽ trở thành tiêu chuẩn
    Cũng có thể tái sử dụng bộ test API để kiểm chứng hiệu năng code của LLM
    Khi việc áp dụng LLM ngày càng lớn, thư viện và API cũng cần tiến hóa theo hướng này

    • Một bài học nữa là “khám phá dự án trước rồi mới gọi kỹ năng” tốt hơn “cứ dùng kỹ năng bằng mọi giá”
      Trong Antigravity (= dựa trên GEMINI.md), đã yêu cầu tuân theo quy tắc AGENTS.md nhưng vẫn bị phớt lờ
      Ngược lại, prompt kiểu “hãy kiểm tra xem dự án có AGENTS.md không” thì lúc nào cũng hoạt động
      Đây là hiện tượng kỳ lạ giống thời xưa khi “let’s think step by step” có thể kích hoạt chain-of-thought
    • Cũng có ý kiến rằng gọi là “nén” nhưng thật ra gần như chỉ ở mức minify
    • Có người nói nếu dùng xuống dòng thay vì dấu gạch dọc thì sẽ dễ đọc hơn
  • Nếu đưa AGENTS.md trực tiếp vào system prompt thì nó luôn nằm trong ngữ cảnh
    Nhưng nhét mọi kỹ năng vào mỗi lần đều rất lãng phí. Vì vậy cần cách tiếp cận chỉ gọi khi cần, như advanced tool use của Anthropic
    Cuối cùng đây là bài toán cân bằng giữa ngữ cảnh và chi phí. Nếu còn dư sức chứa thì nén vào AGENTS.md là hiệu quả

    • Kỹ năng suy cho cùng cũng được khai báo trong ngữ cảnh. Có vẻ đơn giản là nén nó vào AGENTS.md thì chạy tốt hơn
    • Có vẻ Vercel đã nhầm lẫn giữa kỹ năng và thiết lập ngữ cảnh. Hai thứ này có mục đích hoàn toàn khác nhau nên cần dùng cả hai cùng lúc
    • Đây cũng là lý do cách tiếp cận RLM hoạt động tốt. Nó chỉ đưa thông tin cần thiết vào ngữ cảnh, còn phần còn lại để trong môi trường
      Các agent tự quản lý ngữ cảnh kiểu này có lẽ sẽ tiến bộ mạnh trong năm nay
    • Cuối cùng vẫn cần cả hai. Một phần nên bị ép đưa vào ngữ cảnh (index/sparknotes), phần còn lại phải được thêm động dựa trên khám phá/tìm kiếm
    • Người dùng cá nhân chỉ cần sửa system prompt, nhưng ở cấp độ nhóm thì phải dùng kỹ năng để duy trì các chuẩn như phong cách code
      Tỷ lệ tuân thủ kỹ năng của Claude khá thấp
  • Tôi cũng đang làm trong khu vực tương tự. Tôi muốn đánh giá cấu trúc scaffolding của dự án ảnh hưởng thế nào tới kết quả của Claude Code/Opencode
    Nhưng cách test của Vercel không rõ ràng nên khó so sánh

  • AGENTS.md không phải thứ hoàn toàn khác kỹ năng, mà là phiên bản đơn giản hóa của kỹ năng
    Điều cốt lõi là chất lượng thiết kế kỹ năng, tức là giảm thiểu số bước AI phải đi qua để tìm đúng thông tin
    Càng ít bước thì lỗi tích lũy càng giảm

    • Tôi cũng quản lý theo hai loại
      1. Loại được chèn cưỡng bức vào system prompt theo quy tắc
      2. Loại để agent tự khám phá khi cần
        Và để giảm lãng phí token, các file lớn chỉ được đưa vào system prompt một lần
  • Mỗi lần blog so sánh prompt engineering, điều tôi luôn thắc mắc là họ chạy đúng một lần hay lặp lại nhiều lần
    Kết quả của LLM không ổn định ngay cả với cùng một đầu vào

    • Thật bực khi các kết quả phi định tính như vậy lại được công bố như thể là khoa học
      Phần lớn tạo cảm giác như dữ liệu mức giai thoại được gói lại cho giống khoa học
    • Tôi thì luôn chạy lặp lại nhiều lần để tính khoảng tin cậy
      Nhưng nếu benchmark cẩn thận thì ít lượt xem, còn làm qua loa thì traffic blog tăng gấp 9 lần
      Cấu trúc khuyến khích méo mó mới là vấn đề
  • Cũng có cách tốt hơn AGENTS.md
    Tạo một thư mục .context, đặt các liên kết tượng trưng tới tài liệu liên quan của dự án (README, tài liệu dependency, v.v.) vào đó, rồi luôn tải nó vào ngữ cảnh
    Làm vậy thì ngay từ đầu LLM đã có đủ thông tin cần thiết, nên có thể tăng hiệu năng và giảm chi phí

    • Tuy nhiên tài liệu dependency không tạo khác biệt lớn. Thay vào đó, đưa chính mã nguồn vào thư mục _vendor còn hữu ích hơn nhiều
      LLM có thể trực tiếp phân tích code để hiểu cách nó hoạt động
    • Cũng có ý kiến cho rằng việc tải mọi tài liệu ở mọi lần là không hiệu quả. Tốt hơn là chỉ ghi vị trí trong Claude.md hay Agents.md rồi đọc khi cần
    • Không nên làm phình ngữ cảnh một cách không cần thiết. Thay vào đó, chỉ nén chỉ mục tài liệu vào sẽ hiệu quả hơn
    • Việc nhét file lớn vào mọi lần là lãng phí token. Blog Claude Code cũng từng cảnh báo điều tương tự
  • Đây là kinh nghiệm tôi có được khi tự làm agent tùy chỉnh của mình

    1. Tham khảo hướng dẫn trích xuất của Claude Code
    2. Tự động tải AGENTS.md để dùng làm mục lục và tóm tắt (sparknotes)
    3. Quản lý các file Markdown theo chủ đề như kỹ năng
    4. MCP và kỹ năng về mặt khái niệm khá giống nhau, nên điều quan trọng là tạo ra công cụ tốt
    5. Tôi vẫn đang tiếp tục thử nghiệm, vừa làm vừa vui và cải tiến
      Sau khi đưa read/write_file vào trạng thái và hiển thị nó trong system prompt, mọi thứ hoạt động tốt hơn nhiều
      Giờ tôi đang cố chứng minh điều đó bằng đánh giá định lượng (evals). Theo cảm nhận thì hiệu năng rất tốt