Prompt Engineering Cho Claude Code: Complete Guide (2026)

Prompt engineering cho Claude Code 2026
Prompt Engineering: viet prompt tot hon, nhan code tot hon.

Viết prompt cho Claude Code không giống viết prompt cho ChatGPT hay Claude.ai. Bạn không đang hỏi đáp, bạn đang giao việc cho một agent tự động có quyền đọc file, chạy lệnh, và sửa code. Cách tiếp cận sai sẽ lãng phí cả token lẫn thời gian.

Bài này mình tổng hợp từ tài liệu chính thức của Anthropic (code.claude.com/docs/en/best-practices) và kinh nghiệm thực tế khi dùng Claude Code hàng ngày. Không có lý thuyết màu mè, chỉ có workflow và template bạn dùng được ngay.

TL;DR

Prompt trong Claude Code là gì là lệnh giao việc cho agent, không phải câu hỏi. Dùng quy trình 4 bước Explore → Plan → Implement → Commit, chọn đúng /effort cho từng task, giữ CLAUDE.md gọn nhẹ, và tránh 7 anti-pattern phổ biến. Đặt câu hỏi ở cuối prompt dài giúp tăng chất lượng phản hồi lên tới 30% theo Anthropic.

+30%
chất lượng khi đặt câu hỏi cuối prompt dài (Anthropic)

4
bước workflow chính thức: Explore → Plan → Implement → Commit

31,999
token thinking budget khi dùng ultrathink

7
anti-pattern phổ biến nhất cần tránh ngay

4-Phase Workflow: Explore, Plan, Implement, Commit
Slide 1/4: 4-Phase Workflow: Explore, Plan, Implement, Commit.
8 Prompt Templates thuc te
Slide 2/4: 8 Prompt Templates thuc te.
Effort Levels: Low, Medium, High, Max
Slide 3/4: Effort Levels: Low, Medium, High, Max.
7 Anti-Patterns phai tranh
Slide 4/4: 7 Anti-Patterns phai tranh.

Prompt Trong Claude Code Khác Chat Thường Thế Nào?

Claude Code hoạt động trong môi trường agentic: nó không chỉ trả lời mà còn chạy tool (Read, Edit, Bash), truy cập file, và thực hiện nhiều bước liên tiếp. Anthropic xác nhận rằng đặt câu hỏi ở cuối prompt dài giúp tăng chất lượng phản hồi lên 30% vì Claude xử lý context trước khi đọc yêu cầu cụ thể (Anthropic, 2025).

Sự khác biệt lớn nhất: khi chat thông thường, context window gần như vô hạn với một vòng hỏi đáp. Còn trong Claude Code, một session làm việc có thể tiêu tốn hàng chục nghìn token chỉ để đọc vài file source. Prompt kém chất lượng không chỉ cho kết quả tệ, nó còn đốt token nhanh hơn bạn nghĩ.

Ba điểm cốt lõi cần nhớ:

  • Bạn đang giao việc, không hỏi đáp. Thay vì “Bạn có thể giải thích auth flow không?”, hãy nói “Đọc @src/auth và giải thích logic token refresh.”
  • Context window đầy rất nhanh. File lớn, lịch sử dài, tool outputs đều ăn token. Prompt rõ ràng giúp Claude hoàn thành task nhanh hơn, ít vòng lặp hơn.
  • Agent có quyền hành động. Claude Code có thể sửa file thật, chạy lệnh thật. Prompt mơ hồ dẫn đến hành động ngoài ý muốn.

Để hiểu sâu hơn về cách Claude Code quản lý token và context, bạn có thể đọc thêm về memory và context trong Claude Code.

4-Phase Workflow: Explore, Plan, Implement, Commit
4-Phase Workflow: Explore, Plan, Implement, Commit.

Quy Trình 4 Bước Chính Thức: Explore, Plan, Implement, Commit

Anthropic công bố quy trình 4 bước chính thức cho mọi task phức tạp trong Claude Code. Quy trình này không tùy chọn khi bạn làm việc với codebase lớn vì nó ngăn Claude “nhảy vào code” trước khi hiểu rõ toàn cảnh, tránh những thay đổi không mong muốn gây tốn thêm nhiều vòng sửa lỗi (Anthropic, 2025).

Phase 1 – Explore: Đọc và Hiểu Trước

Trước khi code bất cứ thứ gì, bật Plan Mode bằng cách nhấn Shift+Tab. Trong mode này, Claude chỉ đọc và phân tích, không sửa file. Prompt mẫu:

Đọc @src/auth và hiểu cách sessions được quản lý.
Tập trung vào:
- Cách token được tạo và lưu trữ
- Flow khi token hết hạn
- Các edge case đã được xử lý

Phase 2 – Plan: Lấy Kế Hoạch Rõ Ràng

Sau khi Claude hiểu code, hỏi về kế hoạch trước khi cho phép thực thi. Bước này tiết kiệm rất nhiều thời gian vì bạn phát hiện vấn đề trước khi Claude đã viết 200 dòng code sai hướng.

Những file nào cần thay đổi để implement token refresh?
Tạo kế hoạch chi tiết trước khi viết bất kỳ dòng code nào.

Phase 3 – Implement: Thực Thi Có Kiểm Soát

Bây giờ tắt Plan Mode, quay về Normal Mode, và cho phép Claude thực hiện kế hoạch đã duyệt. Luôn yêu cầu viết test cùng lúc để không phải quay lại sau.

Implement kế hoạch đã thống nhất.
Viết unit tests cho logic token refresh.
Chạy tests sau khi viết xong.

Phase 4 – Commit: Đóng Gói Gọn Gàng

Commit với message mô tả rõ thay đổi.
Mở PR nếu cần review.
Khi nào skip Plan Mode? Nếu bạn có thể mô tả thay đổi trong một câu ngắn (ví dụ: “đổi tên biến userID thành userId“), thì skip Plan Mode hoàn toàn ổn. Plan Mode chỉ thực sự cần thiết khi task liên quan đến nhiều file hoặc logic phức tạp.
8 Prompt Templates thuc te
8 Prompt Templates thuc te.

8 Prompt Templates Thực Tế Nào Hay Nhất?

Dưới đây là 8 template mình dùng thường xuyên nhất, được đúc kết từ tài liệu chính thức của Anthropic và thực tế làm việc hàng ngày. Mỗi template giải quyết một loại task cụ thể và đã được kiểm chứng qua nhiều dự án thực tế (Anthropic Prompting Guide, 2025).

Template 1: Read và Act

Pattern cơ bản nhất cho mọi task liên quan đến code hiện có. Luôn cho Claude đọc context trước khi làm.

Đọc @src/auth và hiểu cách sessions được quản lý.
Sau đó implement token refresh với sliding window 15 phút.

Template 2: Find và Fix Theo Scope

Dùng khi muốn Claude tìm và sửa một vấn đề cụ thể trên toàn codebase. Định nghĩa rõ “scope” để tránh Claude đụng vào những gì không cần thiết.

Tìm tất cả chỗ dùng API deprecated getUserById() trong @src/.
Thay thế bằng findUserById() theo signature mới trong @docs/api-v2.md.
Không sửa gì trong @tests/.

Template 3: Refactor Không Phá Behavior

Refactor @src/utils/helpers.js lên ES2024:
- Dùng optional chaining và nullish coalescing
- Giữ nguyên tất cả function signatures
- Chạy tests sau khi xong để verify không có regression

Template 4: Write với Test Cases Cụ Thể

Cách tốt nhất để đảm bảo code đúng spec: định nghĩa test cases trước, yêu cầu chạy tests ngay sau khi viết xong.

Viết function validateEmail(email: string): boolean
Test cases bắt buộc pass:
- validateEmail("user@example.com") === true
- validateEmail("invalid") === false
- validateEmail("a@b") === false
- validateEmail("user+tag@domain.co.uk") === true
Chạy tests ngay sau khi viết xong.

Template 5: Interview Mode cho Feature Mới

Khi bạn chưa rõ hoàn toàn requirements, dùng AskUserQuestion để Claude phỏng vấn bạn trước khi bắt tay vào làm.

Mình muốn build tính năng notification system.
Phỏng vấn mình bằng AskUserQuestion để làm rõ:
- Yêu cầu kỹ thuật (channels, delivery guarantees)
- UI/UX (in-app, email, push?)
- Edge cases (offline users, rate limiting)
Hỏi từng câu một, không hỏi tất cả cùng lúc.

Template 6: @file Reference Patterns

# Giải thích logic cụ thể
Giải thích logic trong @src/utils/auth.js.
Tập trung vào hàm refreshToken và tại sao nó cần mutex lock.

# So sánh hai implementation
So sánh @src/v1/parser.js  @src/v2/parser.js.
Điểm khác biệt chính trong error handling là gì?

Template 7: Sub-agents cho Task Phức Tạp

Khi task cần điều tra nhiều nhánh độc lập, dùng sub-agents trong Claude Code để chạy song song và tổng hợp kết quả.

Dùng sub-agents để điều tra cách auth xử lý token refresh:
- Agent 1: Đọc @src/auth/ và map toàn bộ token lifecycle
- Agent 2: Đọc @tests/auth/ và xác định test coverage hiện tại
- Agent 3: Tìm bug reports liên quan trong @docs/
Tổng hợp kết quả và đề xuất hướng fix.

Template 8: Headless Mode cho Automation

# List tất cả API endpoints và output JSON
claude -p 'list all REST API endpoints in @src/routes/ with method, path, and auth required' --output-format json

# Chạy trong CI/CD pipeline
claude -p 'review @src/auth.js for security issues. Output as JSON with severity levels.' --output-format json | jq '.issues[] | select(.severity == "high")'
Effort Levels: Low, Medium, High, Max
Effort Levels: Low, Medium, High, Max.

/effort Và Ultrathink: Khi Nào Dùng Mức Nào?

Claude Code hỗ trợ 4 mức effort thông qua slash commands, mỗi mức phù hợp với loại task khác nhau. Đặc biệt, từ khóa ultrathink kích hoạt thinking budget lên tới 31,999 token, nhưng chỉ nên dùng cho những quyết định kiến trúc thực sự quan trọng (Anthropic, 2025).

Mức Effort Dùng Cho Ví Dụ
/effort low Sửa typo, rename biến, thêm log line Đổi tên function trong 1 file
/effort medium Mặc định, hầu hết task hàng ngày Thêm feature nhỏ, sửa bug cụ thể
/effort high Refactor nhiều file, debug phức tạp Tái cấu trúc module auth
/effort max Quyết định kiến trúc, thiết kế hệ thống Chọn database strategy, API design
ultrathink Kiến trúc cực kỳ phức tạp, một lần duy nhất Thiết kế distributed system, migration strategy lớn

Lưu ý quan trọng: ultrathink chỉ hoạt động trong một turn, không duy trì qua nhiều vòng hội thoại. Dùng nó để lấy một phân tích sâu, sau đó làm việc dựa trên kết quả đó. Nếu bạn dùng ultrathink cho mọi task, bạn sẽ chậm và tốn kém mà không có lợi ích tương xứng.

# Sai: ultrathink cho task đơn giản
ultrathink: đổi màu button từ blue sang red

# Đúng: ultrathink cho quyết định kiến trúc
ultrathink: Phân tích trade-offs giữa event sourcing và CQRS
cho hệ thống payment với 100k transactions/ngày.
Context: @docs/current-architecture.md

CLAUDE.md Là Standing Prompt Hiệu Quả Nhất?

CLAUDE.md là file cấu hình được Claude Code đọc tự động khi khởi động session. Đây là cơ chế để bạn thiết lập “quy tắc của dự án” một lần, áp dụng mãi mãi mà không cần nhắc lại trong mỗi prompt. Tuy nhiên, file CLAUDE.md phình to là một trong những anti-pattern nguy hiểm nhất vì Claude sẽ bắt đầu bỏ qua những rule bị chôn vùi.

Nguyên tắc đơn giản nhất để quyết định thứ gì nên có trong CLAUDE.md: “Nếu xóa dòng này, Claude có tự làm sai không?” Nếu câu trả lời là “không”, hãy xóa nó.

Nên Đưa Vào CLAUDE.md

# CLAUDE.md - ví dụ tốt

## Lệnh thường dùng
npm run test:unit       # Chạy unit tests
npm run lint:fix        # Auto-fix ESLint
docker compose up -d    # Khởi động local env

## Code style
- TypeScript strict mode, no any
- Async/await, không dùng callback
- Test file đặt cùng thư mục với source

## Quy tắc commit
- Conventional commits (feat/fix/chore)
- Không commit trực tiếp vào main

## Đọc thêm
See @README.md for project overview
See @docs/architecture.md for system design

Không Nên Đưa Vào CLAUDE.md

# CLAUDE.md - ví dụ XẤU (đừng làm thế này)

# BAD: Claude tự đọc được từ code
- Dự án dùng React và TypeScript
- State management bằng Redux

# BAD: Convention chuẩn, không cần nhắc
- Tên hàm dùng camelCase
- Indent bằng 2 spaces

# BAD: Tutorial dài (dùng @imports thay thế)
Để setup project, đầu tiên bạn cần cài Node.js...
[500 chữ hướng dẫn mà Claude không cần]

Bạn có thể đọc thêm hướng dẫn chi tiết về CLAUDE.md là gì và cách cấu hình hiệu quả trong bài riêng về chủ đề này.

7 Anti-Patterns phai tranh
7 Anti-Patterns phai tranh.

7 Anti-Patterns Phải Tránh Ngay?

Anthropic xác nhận những lỗi phổ biến này qua tài liệu chính thức và feedback từ developer community. Mỗi anti-pattern dưới đây đều có ví dụ BAD và GOOD để bạn so sánh trực tiếp, vì đọc ví dụ cụ thể giúp nhớ lâu hơn nhiều so với lý thuyết.

Anti-Pattern 1: Prompt Mơ Hồ, Không Có Location

BAD GOOD
fix the login bug Trong @src/auth/login.ts dòng 47, hàm validateCredentials throw "TypeError: Cannot read properties of undefined". Paste error stack. Viết test để reproduce trước khi fix.

Không có location, không có error message, không có repro steps, Claude phải đoán mò. Kết quả là Claude đọc rất nhiều file chỉ để tìm hiểu bạn đang nói về bug gì, tốn token vô ích và cho kết quả không chắc chắn.

Anti-Pattern 2: Tiêu Chí “Trông Đẹp Hơn” Không Đo Được

BAD GOOD
make the dashboard look better Dashboard hiện tại: spacing không đồng nhất (8px/16px/24px lẫn lộn). Chuẩn hóa toàn bộ về 8px grid system. Giữ nguyên màu sắc, chỉ sửa spacing và alignment.

Anti-Pattern 3: Kitchen Sink Session

BAD GOOD
Bắt đầu session sửa auth bug, rồi giữa chừng hỏi về database query, rồi chuyển sang viết docs, rồi lại hỏi về deployment… Mỗi task là một session riêng. Dùng /clear giữa các task không liên quan để context sạch sẽ.

Context bẩn là nguyên nhân số 1 gây ra kết quả lạ trong Claude Code. Đọc thêm về cách tiết kiệm token Claude Code để quản lý context tốt hơn.

Anti-Pattern 4: Sửa Claude 3+ Lần Liên Tiếp

BAD GOOD
“Không, không phải vậy” → “Thử lại đi” → “Vẫn sai” → “Bạn hiểu không vậy?” Nhận ra khi nào context đã bị nhiễm, dùng /clear, và viết lại prompt hoàn toàn từ đầu với thông tin đầy đủ hơn.

Sau 3 lần sửa mà Claude vẫn không hiểu đúng ý bạn, vấn đề thường là prompt ban đầu thiếu thông tin, không phải Claude “cứng đầu”. /clear và viết lại sẽ nhanh hơn nhiều so với tiếp tục cố gắng sửa trong session đã ô nhiễm.

Anti-Pattern 5: Hỏi Thay Vì Ra Lệnh

BAD GOOD
Bạn có thể gợi ý cách cải thiện hàm này không? Cải thiện hàm này: thêm input validation và error handling. Giữ nguyên function signature.

Anti-Pattern 6: CLAUDE.md Quá Dài

BAD GOOD
CLAUDE.md dài 500+ dòng chứa mọi thứ từ setup guide đến code convention đến lịch sử dự án CLAUDE.md chỉ chứa những gì Claude không tự suy ra được. Dùng See @docs/X.md cho nội dung dài, dùng @imports thay vì copy-paste.

Anti-Pattern 7: Lạm Dụng Ultrathink

BAD GOOD
ultrathink: đổi text button từ "Submit" sang "Gửi" Dùng /effort low cho task đơn giản. Dành ultrathink cho khi thực sự cần 31,999 token thinking: trade-off kiến trúc, security design, migration plan phức tạp.

Câu Hỏi Thường Gặp

Làm sao biết prompt của mình có đủ context chưa?

Kiểm tra bằng cách đọc lại prompt như thể bạn là một người mới hoàn toàn không biết dự án. Nếu bạn cần hỏi thêm để hiểu yêu cầu, Claude cũng sẽ thiếu thông tin tương tự. Prompt tốt cần có: file/function cụ thể, expected behavior, và điều kiện hoàn thành đo được.

Khi nào nên dùng @file reference thay vì paste code trực tiếp?

Luôn dùng @file thay vì paste code khi file đó tồn tại trong dự án. Lý do: Claude Code đọc file theo context thật, hiểu được imports và dependencies xung quanh. Paste code trực tiếp làm mất context, Claude phân tích đoạn code như một đảo cô lập.

Plan Mode có làm chậm workflow không?

Với task đơn giản, Plan Mode là overhead không cần thiết. Với task phức tạp (nhiều file, logic liên kết), Plan Mode thực ra nhanh hơn vì tránh được nhiều vòng sửa lỗi sau khi code đã được viết sai hướng. Quy tắc thực tế: task có thể mô tả trong một câu ngắn thì skip Plan Mode.

Có thể dùng nhiều CLAUDE.md trong cùng một dự án không?

Có. Claude Code đọc CLAUDE.md theo hierarchy: root CLAUDE.md cho toàn dự án, và CLAUDE.md trong thư mục con cho context cụ thể hơn. Đây là cách hữu ích để giữ CLAUDE.md gọn nhẹ: rules chung ở root, rules đặc thù (ví dụ: backend, frontend) ở thư mục con tương ứng.

Tại sao Claude đôi khi làm trái yêu cầu trong CLAUDE.md?

Nguyên nhân phổ biến nhất là CLAUDE.md quá dài, khiến rule bị “chôn vùi” trong context. Rule quan trọng nên đặt gần đầu file và viết ngắn gọn. Rule phức tạp nên tách ra file riêng rồi dùng See @path/to/rule.md trong CLAUDE.md. Mình thấy file dưới 50 dòng hiệu quả nhất.

Nên dùng /effort level trong prompt hay trong CLAUDE.md?

Trong prompt, không trong CLAUDE.md. Mức effort phụ thuộc vào từng task cụ thể, không phải toàn bộ dự án. Đặt effort level cố định trong CLAUDE.md sẽ gây lãng phí (dùng /effort max cho mọi thứ) hoặc kết quả kém chất lượng (dùng /effort low cho task phức tạp).

Claude Code có hiểu tiếng Việt trong prompt không?

Có, Claude hiểu tiếng Việt tốt. Tuy nhiên, trong môi trường technical, mình khuyến khích dùng tiếng Anh cho tên file, function, và command, còn tiếng Việt cho mô tả business logic và requirements. Điều này giúp tránh nhầm lẫn khi Claude tìm kiếm trong codebase.

Infographic prompt engineering cho Claude Code cheat sheet
Lưu infographic này để tham khảo khi viết prompt cho Claude Code.

Kết Luận

Prompt engineering cho Claude Code không phải nghệ thuật bí ẩn. Nó là kỹ năng thực tế: giao việc rõ ràng, chọn đúng công cụ, tránh những lỗi đã được đặt tên. Bốn điểm cốt lõi bạn có thể áp dụng ngay hôm nay:

  • 4-phase workflow cho task phức tạp: Explore, Plan, Implement, Commit. Đừng bỏ qua bước Plan.
  • 8 templates thực tế đủ cho 90% tình huống hàng ngày. Không cần phát minh lại từ đầu.
  • Chọn đúng /effort level. Ultrathink là công cụ mạnh, dùng đúng chỗ.
  • CLAUDE.md gọn là CLAUDE.md hiệu quả. Nguyên tắc “xóa đi Claude có làm sai không?”

Mình sẽ tiếp tục cập nhật khi Anthropic ra thêm tính năng mới. Nếu bạn chưa cài Claude Code, xem hướng dẫn cài đặt từng bước cho mọi hệ điều hành trước khi thực hành. Đã nắm prompt engineering rồi? Bước tiếp theo là Claude Code skills, nơi bạn đóng gói prompt patterns thành file tái sử dụng. Nếu bạn có template nào hay hoặc anti-pattern nào mình chưa đề cập, để lại comment bên dưới nhé.

Bài tiếp theo bạn có thể đọc là tổng hợp đầy đủ về slash commands trong Claude Code, bao gồm cả những lệnh ít người biết đến. Tham khảo roadmap đầy đủ để chọn learning path phù hợp.

Similar Posts