Tác giả bài gốc: Thariq Shihipar (Member of Technical Staff). Đăng ngày 24/07/2026 trên claude.dev.
Trước đây, mình đã viết về cách viết prompt hiệu quả nhất cho các model thế hệ Claude 5 mới nhất và làm việc với chúng qua nhiều vòng để khám phá điều bạn muốn xây dựng.
Nhưng khi bạn gửi tin nhắn cho Claude, prompt chỉ là một phần nhỏ trong context mà nó nhận được. Phần lớn context được tổng hợp từ system prompt, skill, các file CLAUDE.md, bộ nhớ và những nguồn khác. Chúng tôi gọi việc này là thiết kế context (context engineering), và nó ảnh hưởng lớn đến kết quả bạn tạo ra khi dùng Claude Code hoặc xây dựng agent của riêng mình.
Không giống một prompt, context được dùng chung cho nhiều yêu cầu nên không thể cụ thể bằng. Bạn xây dựng những prompt và hướng dẫn chung này cho Claude như thế nào, nhất là khi không biết người dùng có thể đưa ra prompt gì?
Điều này có thể khó hơn bạn tưởng khi năng lực của chính Claude thay đổi. Gần đây nhất, chúng tôi nhận thấy một bước chuyển lớn trong cách viết prompt cho thế hệ model Claude mới nhất. Chúng tôi đã bỏ hơn 80% system prompt của Claude Code cho các model như Claude Opus 5 và Claude Fable 5 mà không ghi nhận suy giảm có thể đo lường được trong các bài đánh giá lập trình của chúng tôi.
Dưới đây là những điều chúng tôi học được về cách viết prompt cho nhóm model mới này, và cách bạn có thể áp dụng để cập nhật việc thiết kế context. Chúng tôi đã đưa những best practice này vào claude doctor; hãy dùng lệnh /doctor trong Claude Code để điều chỉnh skill và các file CLAUDE.md của bạn cho vừa đủ.
Gỡ những ràng buộc kìm hãm Claude
Nhìn chung, chúng tôi nhận thấy mình đã ràng buộc Claude Code quá mức, cả trong system prompt lẫn các file CLAUDE.md và skill.
Ví dụ, khi đọc bản ghi những lần sử dụng Claude Code trong nội bộ, chúng tôi thấy nhiều chỉ dẫn mâu thuẫn trong cùng một yêu cầu, như “bổ sung tài liệu khi phù hợp” hoặc “KHÔNG thêm comment”, do system prompt, skill và yêu cầu của người dùng xung đột với nhau.

Nhìn chung, Claude có thể hiểu ý định của người dùng để đưa ra đáp án đúng, nhưng phải suy nghĩ kỹ hơn về những chỉ dẫn chồng chéo và mâu thuẫn này trước khi quyết định làm gì.
Dù trước đây những ràng buộc này là cần thiết để tránh các tình huống tệ nhất, từ đó đến nay chúng tôi nhận thấy có thể xóa nhiều ràng buộc và để model sử dụng context xung quanh cùng khả năng phán đoán thay thế.
Ngoài ra, Claude Code hiện có nhiều tool hơn hẳn. Trước đây, Claude dựa vào CLAUDE.md để ghi nhớ, lấy thông tin và hướng dẫn. Giờ đây, chúng tôi có bộ nhớ, artifact và skill mà Claude có thể dùng để tạo những cách mới nhằm nạp và chia sẻ context giữa các session.
Trước đây và bây giờ
Một số best practice về context engineering trước đây đã trở thành những quan niệm không còn đúng. Chẳng hạn:

Trước đây: Cho Claude quy tắc
Bây giờ: Để Claude tự phán đoán
Khi mới triển khai Claude Code, chúng tôi cần đảm bảo Claude tránh những tình huống tệ nhất, chẳng hạn xóa file. Điều đó có nghĩa chúng tôi đưa ra hướng dẫn đặc biệt cứng rắn, dù không phải lúc nào cũng đúng. Ví dụ, trong system prompt, trước đây chúng tôi từng viết:
Trong code: mặc định không viết comment. Không bao giờ viết docstring nhiều đoạn hoặc khối comment nhiều dòng — tối đa một dòng ngắn. Đừng tạo tài liệu lập kế hoạch, quyết định hoặc phân tích trừ khi người dùng yêu cầu — làm việc dựa trên context của cuộc trò chuyện, không phải file trung gian.
Nhưng với một nhóm prompt nhất định, hướng dẫn này lại sai. Khi nói đến tài liệu, người dùng có thể có sở thích riêng, hoặc một số phần cụ thể trong code rất phức tạp có thể cần khối comment nhiều dòng.
Dù vậy, nếu không có những cơ chế bảo vệ này cho các model cũ, comment Claude viết sẽ sai trong nhiều trường hợp và chúng tôi phải chấp nhận sự đánh đổi đó. Nhưng các model mới có khả năng phán đoán tốt hơn và xử lý tốt những quyết định này mà không cần quy tắc tường minh.
Trong system prompt mới, chúng tôi viết: Viết code sao cho giống code xung quanh: khớp về mật độ comment, cách đặt tên và lối viết.
Trước đây: Cho Claude ví dụ
Bây giờ: Thiết kế giao diện
Quy tắc số một về việc dùng tool từng là cung cấp cho Claude ví dụ về cách sử dụng chúng. Với các model mới nhất, chúng tôi nhận thấy việc đưa ví dụ thực ra lại giới hạn chúng trong một không gian khám phá nhất định.

Thay vì dùng ví dụ, hãy suy nghĩ nhiều hơn về thiết kế tool, script và file của bạn — Claude có những tham số nào và làm sao để chúng diễn đạt được nhiều hơn?
Ví dụ, trong ví dụ về tool Todo, chỉ cần liệt kê status dưới dạng enum gồm pending, in_progress và completed cũng đã gợi ý cho Claude cách dùng. Hướng dẫn chỉ giữ một mục ở trạng thái in_progress giúp xác định hành vi chúng tôi mong muốn.
Trước đây: Đưa tất cả vào ngay từ đầu
Bây giờ: Sử dụng tiết lộ dần
Vì Claude Code tập trung vào lập trình, system prompt của chúng tôi từng chứa thông tin chi tiết về cách review code và kiểm chứng. Không phải lúc nào cũng cần chúng, nhưng khi cần thì đây lại là thông tin rất quan trọng.
Từ đó đến nay, Claude Code đã trở nên rất thành thạo trong việc tiết lộ dần (progressive disclosure) — nạp đúng context vào đúng thời điểm. Ví dụ, chúng tôi đã chuyển phần kiểm chứng và review code sang các skill riêng mà Claude Code có thể chọn gọi khi cần.
Nhưng tiết lộ dần không chỉ dành cho skill; chúng tôi còn dùng nó cho tool. Một số tool được “nạp trì hoãn” (deferred loading), nghĩa là agent phải tìm định nghĩa đầy đủ của chúng bằng ToolSearch trước khi sử dụng. Điều này cho phép chúng tôi có nhiều tool hơn (chẳng hạn các tool Task) mà chúng không chiếm context cho đến khi cần.
Bạn có thể áp dụng cách tương tự cho các file CLAUDE.md và Skill.md của mình. Một quan niệm sai phổ biến là bạn nên biến chúng thành nơi tập trung mọi cách làm đã biết mà bạn có thể gặp, vì nếu không Claude sẽ không tìm thấy. Thay vào đó, hãy cân nhắc một cây file có thể được nạp vào đúng thời điểm.
Trước đây: Lặp lại hướng dẫn
Bây giờ: Mô tả tool đơn giản
Các model Claude trước đây đôi khi cần hướng dẫn lặp lại, hoặc dễ làm theo hướng dẫn ở cuối context window hơn ở đầu. Điều này khiến system prompt của chúng tôi đôi khi vừa tham chiếu đến tool trong phần system prompt chính, vừa có hướng dẫn trong mô tả tool.
Chúng tôi nhận thấy có thể xóa những ví dụ lặp lại này và đưa hướng dẫn dùng tool vào mô tả của tool thay vì system prompt.
Trước đây: Bộ nhớ trong file CLAUDE.md
Bây giờ: Bộ nhớ tự động
Trước đây, chúng tôi khuyến khích người dùng lưu thông tin vào bộ nhớ của Claude bằng phím tắt # để tự động ghi vào CLAUDE.md. Thay vào đó, giờ đây Claude tự động lưu những thông tin cần nhớ có liên quan đến công việc và đến bạn.
Trước đây: Đặc tả đơn giản
Bây giờ: Nguồn tham khảo phong phú
Trong plan mode, Claude Code từng dựa rất nhiều vào các file Markdown chứa kế hoạch. Lưu kế hoạch trong những file này giúp Claude tham khảo chúng khi cần. Một best practice tương tự là lưu đặc tả trong codebase để Claude tham khảo khi làm những dự án kéo dài hơn.
Nhưng chúng tôi nhận thấy Claude có thể xử lý những nguồn tham khảo ngày càng phức tạp. Thay vì file Markdown đơn giản, Claude có thể tham khảo các artifact HTML được tạo bằng tính năng artifact mới của chúng tôi.
Bạn cũng có thể cung cấp cho Claude nguồn tham khảo dưới dạng code. Một đặc tả cũng có thể là bộ test chi tiết, hoặc một hàm trong codebase khác mà Claude có thể chuyển sang codebase hiện tại.
Bộ tiêu chí đánh giá (rubric) là một dạng nguồn tham khảo khác. Rubric cho phép Claude thử đáp ứng và kiểm chứng gu của bạn trong một lĩnh vực cụ thể (ví dụ: thiết kế API tốt trông như thế nào) bằng cách dùng workflow động và khởi tạo các agent kiểm chứng với những rubric đó.
Áp dụng vào context của bạn
Kết hợp tất cả những điều trên, khi tổng hợp context của mình, bạn sẽ có gì?

System prompt
System prompt gắn chặt với context của sản phẩm. Nó cho Claude biết mình đang hoạt động trong sản phẩm nào và đang làm gì. Với Claude Code, bạn có lẽ sẽ không bao giờ chỉnh sửa phần này, nhưng nếu đang xây dựng harness cho agent riêng, đây là nơi bạn nên dành nhiều thời gian.
CLAUDE.md
Giữ CLAUDE.md gọn nhẹ và mô tả ngắn gọn repo của bạn dùng để làm gì, nhưng dành phần lớn token cho những điểm dễ mắc lỗi trong codebase. Ví dụ, bạn có thể tổ chức code sao cho các type chỉ nằm trong một file duy nhất, không ở đâu khác. Tránh nêu những điều “hiển nhiên” mà Claude có thể biết khi nhìn vào hệ thống file hoặc repo của bạn.
Tận dụng tiết lộ dần thật nhiều. Ví dụ, nếu có nhiều hướng dẫn riêng về cách kiểm chứng công việc, hãy tạo một skill kiểm chứng và tham chiếu đến nó từ CLAUDE.md.
Skill
Hãy xem skill như những hướng dẫn gọn nhẹ để Claude tìm thông tin khi cần. Tránh ràng buộc chúng quá mức, trừ những lĩnh vực cực kỳ quan trọng.
Với các skill dài, hãy cố tận dụng tiết lộ dần nhiều nhất có thể — chia nội dung ra nhiều file riêng.
Skill hiệu quả nhất khi chứa những quan điểm, kiến thức hoặc best practice riêng của bạn, nhóm hay sản phẩm.
Nguồn tham khảo
Bạn có thể nhắc đến file bằng @ để đưa chúng vào làm nguồn tham khảo. Những nguồn này cho phép Claude tham khảo thông tin chuyên sâu về kế hoạch hiện tại.
Chúng có thể là file đặc tả, mockup hoặc thậm chí cả codebase. Nhìn chung, bạn nên ưu tiên các file dưới dạng code vì chúng cung cấp hướng dẫn rõ ràng, sát ý định cho Claude bằng ngôn ngữ mà nó rất thành thạo. Ví dụ, một mockup HTML của thiết kế thường cho kết quả tốt hơn phần mô tả thiết kế hoặc ảnh chụp màn hình.
Thử đơn giản hóa
Với system prompt, skill và các file CLAUDE.md, bạn có thể cần đơn giản hóa giống như chúng tôi đã làm. Chúng tôi đã triển khai một lệnh mới tên claude doctor, cũng giúp bạn tự động làm việc này. Để tìm hiểu chi tiết hơn về cách viết prompt dành riêng cho các model tiên tiến hơn, hãy xem hướng dẫn thực hành Fable của chúng tôi.
Bài viết này do Thariq Shihipar, thành viên đội ngũ kỹ thuật tại Anthropic, thực hiện.