Session 3 — Context: Biến AI hiểu dự án của bạn
Bạn sẽ học cách cung cấp đúng bối cảnh để AI tạo ra output thực sự có giá trị cho dự án của bạn — không còn chung chung nữa. Đây là "mảnh ghép cuối" để hoàn thiện bộ ba Mindset–Technique–Context.
Prerequisite: Session 2 — Technique
✅ Mục tiêu — Sau session này bạn có thể
- [ ] Giải thích tại sao Context là "mảnh ghép cuối" để AI cho output có giá trị
- [ ] Áp dụng nguyên tắc GIGO vào việc chuẩn bị prompt
- [ ] Inject context dự án vào prompt một cách hiệu quả
- [ ] Hiểu khái niệm RAG và Fine-tuning ở mức ứng dụng (không cần code)
- [ ] Tạo Context Card cá nhân cho dự án đang làm
PHẦN 1 — LÝ THUYẾT
1.1 Tại sao Context là nguyên tắc quan trọng nhất?
Sau khi học Mindset và Technique, nhiều Tester vẫn thấy AI trả về kết quả quá chung chung. Lý do chính: THIẾU BỐI CẢNH.
| Prompt thiếu context | Prompt đủ context |
|---|---|
| "Tạo test case cho đăng nhập" | "Tạo test case cho chức năng SSO login của ứng dụng quản lý kho B2B, user là warehouse manager, hệ thống tích hợp với Active Directory" |
| Kết quả: Generic, có thể dùng cho bất kỳ app nào | Kết quả: Cụ thể, cover đúng rủi ro thực tế của dự án |
flowchart LR
subgraph Bad["❌ Thiếu Context"]
A1["'Tạo test case\ncho đăng nhập'"] --> B1[AI]
B1 --> C1["Output chung chung\nKhông sát dự án"]
end
subgraph Good["✅ Đủ Context"]
A2["'Tạo test case cho SSO login\nB2B warehouse app\nuser = warehouse manager\ntích hợp Active Directory'"] --> B2[AI]
B2 --> C2["Output cụ thể\nCover đúng rủi ro thực tế"]
end
style Bad fill:#fff5f5,stroke:#c92a2a
style Good fill:#ebfbee,stroke:#2f9e44
style C1 fill:#ffc9c9,stroke:#c92a2a
style C2 fill:#b2f2bb,stroke:#2f9e44
Quy tắc GIGO (Garbage In, Garbage Out)
┌─────────────────────────────────────────────────────────┐
│ │
│ Prompt chung chung → Output nông cạn, vô dụng │
│ │
│ Prompt + Context → Output sâu, sát thực tế │
│ │
│ "Rác vào = Rác ra" (GIGO) │
│ │
└─────────────────────────────────────────────────────────┘
Nguyên tắc: Context tốt = Dữ liệu đầu vào tốt = Output giá trị cao
1.2 Năm loại Context cần cung cấp cho AI
| Loại Context | Ví dụ cụ thể cho QA |
|---|---|
| Business domain | Hệ thống ngân hàng / y tế / thương mại điện tử / logistics |
| User persona | Người dùng là ai, trình độ công nghệ, thói quen sử dụng |
| Kỹ thuật / Công nghệ | React frontend, Java Spring Boot, PostgreSQL, REST API |
| Quy tắc nghiệp vụ | Số tiền chuyển tối đa 500 triệu/ngày, thẻ hết hạn tự động hủy |
| Lịch sử bug / Rủi ro | Module thanh toán hay lỗi khi concurrent user > 100 |
mindmap
root((Context Card\nDự án))
Business Domain
e-commerce / banking / healthcare
Đặc thù ngành nghề
User Persona
Vai trò người dùng
Trình độ công nghệ
Thói quen sử dụng
Tech Stack
Frontend / Backend / Database
API type: REST / GraphQL
Business Rules
Giới hạn số tiền, thời gian
Quy định bắt buộc
Điều kiện đặc biệt
Lịch sử Bug & Rủi ro
Module hay lỗi
Rủi ro đã biết
Pattern lỗi cũ
1.3 RAG và Fine-tuning — Giải thích cho non-tech
RAG (Retrieval-Augmented Generation): AI được cung cấp tài liệu cụ thể TRƯỚC KHI trả lời. Giống như bạn cho nhân viên đọc tài liệu nội bộ trước khi làm việc.
Fine-tuning: "Huấn luyện lại" AI với dữ liệu của công ty. Phức tạp hơn, cần kỹ thuật, nhưng kết quả rất đặc thù. Phù hợp khi có nhiều tài liệu nội bộ.
| Phương pháp | Độ khó | Khi nào dùng |
|---|---|---|
| Context injection (Session này) | Dễ — chỉ cần copy-paste | Ngay lập tức, mọi dự án |
| RAG | Trung bình — cần setup | Có nhiều tài liệu nội bộ (> 50 trang) |
| Fine-tuning | Khó — cần kỹ thuật AI | Khi cần AI hiểu sâu nghiệp vụ đặc thù |
flowchart LR
D["Tài liệu dự án\nBRD / AC / API Spec"] --> Q{"Bao nhiêu trang?"}
Q -->|"< 10 trang"| CI["Context Injection\nCopy-paste vào prompt\n✅ Dùng ngay"]
Q -->|"10–100 trang"| RAG["RAG\nRetrieval-Augmented Generation\n⚙️ Cần setup"]
Q -->|"> 100 trang\nDữ liệu đặc thù"| FT["Fine-tuning\nHuấn luyện lại AI\n🔧 Cần kỹ thuật AI"]
style CI fill:#b2f2bb,stroke:#2f9e44
style RAG fill:#ffd43b,stroke:#e67700
style FT fill:#ffc9c9,stroke:#c92a2a
📺 Video tham khảo — RAG: Cách cung cấp tài liệu nội bộ cho AI
"Learn RAG from Scratch" — freeCodeCamp (Lance Martin, LangChain engineer) · 2.5 giờ · Tiếng Anh
Giải thích sâu về RAG (Retrieval-Augmented Generation): indexing, query translation, CRAG, Adaptive RAG. Hữu ích cho ai muốn hiểu cách AI "đọc" tài liệu nội bộ của dự án.
PHẦN 2 — THỰC HÀNH
🛠️ Bài tập 3.1 — Context Injection với tài liệu thực tế
Thời gian ước tính: 40 phút | Công cụ: ChatGPT hoặc Claude.ai
Bước 1: Chuẩn bị một đoạn tài liệu từ dự án thực tế của bạn — chọn một trong các loại sau: - User story / Acceptance criteria (1–2 story là đủ) - Một endpoint từ API documentation (Swagger/Postman) - Một đoạn ngắn từ Business requirement document (BRD) — tối đa 2000 ký tự
Nếu chưa có dự án thực tế, dùng đoạn mẫu bên dưới:
User Story: Là khách hàng, tôi muốn chuyển tiền cho tài khoản khác
trong cùng ngân hàng. Số tiền tối thiểu: 10,000 VND. Số tiền tối đa:
500,000,000 VND/ngày. Tài khoản nguồn phải có đủ số dư. Giao dịch
thành công sẽ hiển thị thông báo xác nhận và gửi SMS.
Bước 2: Chạy prompt KHÔNG có context trước (để so sánh sau):
Ghi lại output vào notes.
Bước 3: Chạy prompt CÓ context, dùng template sau:
=== CONTEXT ===
[Paste nội dung tài liệu bạn đã chuẩn bị ở Bước 1]
=== HẾT CONTEXT ===
Dựa trên tài liệu trên, hãy:
1. Xác định 5 rủi ro kiểm thử chính
2. Tạo 10 test case ưu tiên cao nhất
3. Đề xuất test data cần chuẩn bị
Bước 4: So sánh hai output và điền vào bảng đánh giá bên dưới.
✅ Kết quả mong đợi:
Output có context sẽ đề cập đúng các con số từ tài liệu (10,000 VND, 500 triệu/ngày), cover các edge case nghiệp vụ thực tế (số dư không đủ, vượt hạn mức ngày), và gợi ý test data phù hợp. Output không có context sẽ chung chung, không đề cập đặc thù nào của hệ thống.
❓ Tự kiểm tra — Bảng đánh giá (chấm điểm 1–5 cho mỗi tiêu chí):
| Tiêu chí | Không context | Có context | Cải thiện |
|---|---|---|---|
| Độ cụ thể (sát business domain?) | ___/5 | ___/5 | +___% |
| Khả năng dùng ngay (cần sửa nhiều không?) | ___/5 | ___/5 | +___% |
| Coverage (cover đúng rủi ro đặc thù?) | ___/5 | ___/5 | +___% |
💡 Gợi ý khi bị kẹt: Nếu tài liệu của bạn quá dài (> 2000 ký tự), hãy tóm tắt thủ công trước — lấy các business rule quan trọng nhất, con số giới hạn, và mô tả actor chính.
🛠️ Bài tập 3.2 — Domain-Specific Test Data
Thời gian ước tính: 40 phút | Công cụ: ChatGPT hoặc Claude.ai
Bối cảnh bài tập:
Test data chung chung không cover được đặc thù domain. Đây là ví dụ minh họa:
❌ Prompt thiếu context:
"Tạo test data cho hệ thống ngân hàng"
→ AI tạo: tên = "John Doe", số tài khoản = "123456" (vô nghĩa)
✅ Prompt đủ context:
"Tạo test data cho hệ thống ngân hàng Việt Nam theo quy định SBV.
Yêu cầu:
- Số tài khoản: 14 chữ số, bắt đầu bằng mã ngân hàng (VCB: 0070, TCB: 019)
- Số CMND/CCCD: 9 hoặc 12 chữ số, khớp với tỉnh thành
- Số tiền: VND, không có số thập phân, tối thiểu 50,000 VND
- Tên khách hàng: tên Việt Nam có dấu, format Họ Tên đệm
Tạo 10 dòng data hợp lệ và 5 dòng data lỗi để test validation."
→ AI tạo dữ liệu thực tế, đúng chuẩn Việt Nam
Bước 1: Chọn domain phù hợp với dự án của bạn (hoặc chọn bất kỳ domain nào bên dưới nếu chưa có dự án thực):
| Domain | Test data cần tạo |
|---|---|
| E-commerce | Sản phẩm, giỏ hàng, voucher, vận chuyển |
| HR System | Nhân viên, lương, ngày phép, bảo hiểm |
| Healthcare | Bệnh nhân, lịch khám, đơn thuốc, BHYT |
| Logistics | Đơn hàng, tuyến đường, kho hàng, tài xế |
| Finance | Tài khoản, giao dịch, hạn mức, phí |
Bước 2: Nghiên cứu (hoặc ghi lại từ kiến thức của bạn) ít nhất 3–4 quy tắc đặc thù của domain đó. Ví dụ với Healthcare: định dạng mã bệnh nhân, tên thuốc theo chuẩn ICD, định dạng số BHYT.
Bước 3: Viết prompt yêu cầu AI tạo test data với đầy đủ quy tắc domain bạn đã nghiên cứu.
Bước 4: Chạy prompt và đánh giá: data có phù hợp với thực tế của domain đó không?
Output mục tiêu: 15 dòng data hợp lệ + 5 dòng edge case + 5 dòng data lỗi
✅ Kết quả mong đợi:
Data AI tạo ra phải trông như data thật — đúng format, đúng quy tắc, có thể dùng ngay để test mà không cần sửa nhiều. Nếu bạn thấy data trông "giả" hoặc sai quy tắc thực tế, nghĩa là prompt của bạn chưa đủ context về domain.
❓ Tự kiểm tra: - [ ] Data có đúng format đặc thù của domain không? (số tài khoản, mã bệnh nhân, mã sản phẩm...) - [ ] Data lỗi có cover đúng các validation rule của hệ thống không? - [ ] Bạn có thể dùng data này để test ngay không, hay cần sửa nhiều?
💡 Gợi ý khi bị kẹt: Nếu không biết quy tắc domain, hãy hỏi AI trước: "Hệ thống [domain] Việt Nam thường có những quy tắc validate dữ liệu nào?" — sau đó dùng thông tin đó để viết prompt tạo test data.
💡 TÌNH HUỐNG THỰC TẾ: "Tài liệu quá dài, AI quên context"
Bối cảnh: Hương là QA Lead. Cô paste cả 50-trang BRD vào ChatGPT để sinh test plan. Khi hỏi đến module cuối, AI bắt đầu "quên" thông tin ở module đầu. Test plan tạo ra bị thiếu sót nhiều phần quan trọng.
Bài tập: Ghi lại câu trả lời của bạn vào notes — không có đáp án duy nhất, miễn là bạn có thể giải thích lý do.
- Nguyên nhân kỹ thuật là gì? (Gợi ý: "context window")
- Chiến lược nào giúp xử lý tài liệu dài?
- Nếu bạn là Hương, bạn sẽ làm gì khác đi?
- Khi nào nên dùng RAG thay vì context injection?
Gợi ý giải: ChatGPT ~128K token, Claude ~200K token (1 token ≈ 4 ký tự). Tài liệu 50 trang ≈ 75K+ token — đã gần limit. Giải pháp: Chia tài liệu theo module, xử lý từng phần riêng biệt, tổng hợp sau.
🛠️ Bài tập 3.3 — Xây dựng Context Card cá nhân
Thời gian ước tính: 20 phút | Công cụ: Notion / Google Doc / bất kỳ ứng dụng ghi chú nào
Bài tập này tạo ra một tài sản bạn sẽ dùng lại mãi mãi: Context Card cho dự án của bạn.
Bước 1: Tạo một file mới. Đặt tên: Context Card — [Tên dự án của bạn].
Bước 2: Điền đầy đủ template sau. Nếu chưa có dự án thực tế, hãy dùng dự án mẫu: ứng dụng e-commerce bán hàng thời trang online.
## Context Card — [Tên dự án]
### Domain
[Lĩnh vực: e-commerce / banking / healthcare / ...]
### Tech Stack
- Frontend: [React / Angular / Vue / ...]
- Backend: [Java Spring / Node.js / Python / ...]
- Database: [PostgreSQL / MySQL / MongoDB / ...]
- API: [REST / GraphQL / ...]
### User chính
- Vai trò: [Admin / End-user / Manager / ...]
- Trình độ công nghệ: [Cao / Trung bình / Thấp]
- Đặc điểm: [...]
### Business rules quan trọng
- [Quy tắc 1]
- [Quy tắc 2]
- [Quy tắc 3]
### Các loại lỗi hay gặp
- [Vấn đề 1]
- [Vấn đề 2]
### Đặc điểm dữ liệu
- Format số, ngày tháng, tiền tệ: [...]
- Giới hạn, ràng buộc: [...]
Bước 3: Sau khi điền xong, copy toàn bộ Context Card và paste vào đầu bất kỳ prompt nào bạn đã tạo ở Session 2. Chạy thử và so sánh với phiên bản không có Context Card.
✅ Kết quả mong đợi:
Context Card điền đầy đủ sẽ khiến mọi prompt của bạn cho output tốt hơn ngay lập tức — không cần giải thích lại từ đầu mỗi lần. Đây là kỹ thuật tiết kiệm thời gian nhất trong session này.
❓ Tự kiểm tra: - [ ] Context Card có đủ 6 mục không? - [ ] Business rules có ít nhất 3 quy tắc cụ thể không? - [ ] Khi copy vào prompt, output có cụ thể và sát dự án hơn không?
💡 Gợi ý khi bị kẹt: Phần khó nhất thường là "Business rules quan trọng" vì nó đòi hỏi bạn hiểu rõ domain. Nếu chưa chắc, hãy hỏi AI: "Hệ thống [domain] thường có những business rule phổ biến nào?" rồi chỉnh lại cho phù hợp với dự án thực tế của bạn.
PHẦN 3 — TỰ ĐÁNH GIÁ
📋 "Context Detective"
Dưới đây là 3 output AI tạo ra. Nhiệm vụ của bạn: phân tích context nào đã được cung cấp (hay thiếu). Ghi câu trả lời vào notes của bạn.
Output 1:
Test case: Đăng nhập với email "user123@email.com", password "Test@1234"
Expected: Đăng nhập thành công
_______________
- Context nào đang thiếu? _______________
- Chất lượng: ___/10
Output 2:
Test case: Kiểm tra chuyển tiền với số tiền "1,000,000 VND"
Số tài khoản nguồn: "0070123456789012" (VCB)
Expected: Giao dịch thành công, số dư giảm đúng
_______________
- Tốt hơn Output 1 ở điểm nào? _______________
- Vẫn còn thiếu context gì? _______________
Output 3:
API Test: POST /api/v1/orders/cancel
Payload: {
"orderId": "ORD-2024-001",
"reason": "customer_request",
"cancelledBy": "user_id_123"
}
Expected: 200 OK, order status = "cancelled"
_______________
- Còn thiếu context gì để test tốt hơn? _______________
💡 Gợi ý khi bị kẹt: Nhớ lại 5 loại context từ Phần 1: Business domain, User persona, Tech stack, Business rules, Lịch sử bug. Với mỗi output, hỏi: "Loại context nào được phản ánh trong output này? Loại nào không?"
📝 Tổng kết
- ✅ Context = chất lượng output: Thiếu context ⇒ output vô dụng
- ✅ 5 loại context: Domain, User, Tech, Business rules, Lịch sử lỗi
- ✅ GIGO: Garbage In = Garbage Out — đây là nguyên tắc bất biến của AI
- ✅ RAG dùng khi có nhiều tài liệu nội bộ; Fine-tuning khi cần AI "hiểu" sản phẩm
- ✅ Context Card cho dự án — copy vào mỗi prompt để output tốt hơn ngay
🗒️ Cheat Sheet
Template context:
[Domain] + [User] + [Tech stack] + [Business rules] + [Constraints]
Gợi ý: Copy 1 đoạn từ BRD / AC vào prompt trước khi yêu cầu sinh test case
Context window limits:
ChatGPT: ~128K token Claude: ~200K token (1 token ≈ 4 ký tự)
Tài liệu dài: Chia theo module, xử lý từng phần, tổng hợp sau
Context Card: Tạo 1 lần, dùng mãi mãi cho dự án của bạn
📚 Bài tập về nhà
Tạo Context Card cho dự án hiện tại. Test với 5 prompt khác nhau: So sánh output có/không có Context Card. Đo lường: Tiết kiệm bao nhiêu thời gian chỉnh sửa output?