Cách prompt hiệu quả với Agentic IDE
Việc sử dụng prompt hiệu quả với Agentic IDE là yếu tố quan trọng để tận dụng tối đa sức mạnh của AI trong quá trình phát triển phần mềm. Bài viết này sẽ hướng dẫn cách chọn models phù hợp và các kỹ thuật prompt cơ bản.
Models khuyến nghị
Để đạt hiệu quả tối ưu, Jai1 Framework khuyến nghị sử dụng các models phù hợp cho từng loại tác vụ:
Thinking Models (cho việc lên kế hoạch, suy nghĩ)
| Model | Đặc điểm | Phù hợp với |
|---|---|---|
Claude Sonnet 4.0 (3.7) | Khả năng suy luận cao, giải quyết vấn đề phức tạp | Phân tích yêu cầu, thiết kế kiến trúc, lập kế hoạch triển khai |
o3 | Tốc độ cao, hiểu nhiều ngôn ngữ, suy luận logic tốt | Phân tích vấn đề, lên kế hoạch, đánh giá giải pháp |
gemini-2.5-pro | Hiểu ngữ cảnh sâu, xử lý nhiều file, phân tích toàn diện | Thiết kế hệ thống, phân tích yêu cầu phức tạp, debug lỗi khó |
Coding Models (cho việc thực hiện code chức năng)
| Model | Đặc điểm | Phù hợp với |
|---|---|---|
Claude Sonnet 4.0 (3.7) | Cân bằng giữa tốc độ và chất lượng, hiểu sâu về cấu trúc code | Tạo code mới, refactoring, viết unit tests |
gemini-2.5-pro | Hiểu sâu về cấu trúc code, tạo code chất lượng cao | Tối ưu hóa hiệu suất, sửa lỗi trong code, tạo code tuân thủ best practices |
Cách sử dụng prompts cơ bản
1. Prompt cho Thinking Models
Khi sử dụng thinking models để lên kế hoạch và phân tích, hãy cấu trúc prompt theo các nguyên tắc sau:
Cấu trúc prompt hiệu quả:
- Ngữ cảnh: Mô tả ngữ cảnh dự án và vấn đề cần giải quyết
- Yêu cầu cụ thể: Nêu rõ yêu cầu và mong đợi
- Các khía cạnh cần xem xét: Liệt kê các khía cạnh quan trọng cần được phân tích
- Format kết quả mong muốn: Mô tả cách thức trình bày kết quả
Kỹ thuật prompt nâng cao
1. Mention file trong dự án
Sử dụng cú pháp @[đường_dẫn] để tham chiếu trực tiếp đến file trong dự án, giúp AI hiểu ngữ cảnh chính xác.
Ví dụ prompt:
Prompt phân tích file
@[/src/controllers/UserController.js] Hãy phân tích controller này và đề xuất cải tiến về xử lý lỗi và validation input.
Ví dụ prompt nâng cao:
Prompt thêm phương thức mới
Tôi cần thêm một phương thức mới vào @[/src/services/AuthService.js] để xử lý việc đổi mật khẩu. Phương thức này cần kiểm tra mật khẩu cũ trước khi cho phép đổi mật khẩu mới. Hãy đảm bảo phương thức này tuân thủ các nguyên tắc bảo mật và phù hợp với cấu trúc hiện tại của service.
2. Sử dụng context7 để truy cập tài liệu
Sử dụng context7 để truy cập tài liệu mới nhất của các thư viện và framework.
Ví dụ prompt:
Prompt tìm hiểu thư viện với context7
Sử dụng context7 để tìm hiểu về cách sử dụng React Query v5 cho việc quản lý cache. Tôi cần biết các hooks mới và cách xử lý invalidation cache.
Ví dụ prompt nâng cao:
Prompt nghiên cứu chuyên sâu với context7
Tôi cần tài liệu mới nhất về NextJS App Router và cách triển khai Server Components. Cụ thể tôi cần hiểu:
- Cách tạo và sử dụng Server Actions
- Cách xử lý form submissions với Server Components
- Cách tối ưu hóa hiệu suất với streaming và suspense
- Cách xử lý authentication và authorization
Hãy sử dụng context7 để cung cấp thông tin này với các ví dụ code cụ thể.
3. Kết hợp context7 với file trong dự án
Kết hợp context7 với file trong dự án để tạo ra giải pháp phù hợp với cả thư viện và codebase hiện tại.
Ví dụ prompt:
Prompt cải thiện code với context7
Tôi đang sử dụng Express.js và cần cải thiện hệ thống middleware xác thực trong @[/src/middleware/auth.js]. Hãy sử dụng context7 để tìm các best practices mới nhất về JWT authentication trong Express và đề xuất cách áp dụng vào file này.
Ví dụ prompt nâng cao:
Prompt nâng cấp thư viện
File @[/src/components/DataTable.jsx] đang sử dụng React Table v7. Tôi muốn nâng cấp lên TanStack Table v8 với các tính năng mới. Hãy sử dụng context7 để tìm hiểu về TanStack Table v8 và đề xuất cách chuyển đổi component này, đặc biệt là:
- Cách cập nhật cú pháp định nghĩa cột
- Cách triển khai sorting và filtering
- Cách xử lý pagination
- Cách tối ưu hóa hiệu suất với virtual scrolling
Hãy đảm bảo giải pháp phù hợp với cấu trúc hiện tại của component.
4. Planning trước khi coding và tạo unit test
Sử dụng phương pháp planning trước khi thực hiện coding để đảm bảo giải pháp toàn diện.
Ví dụ prompt:
Prompt lập kế hoạch phát triển
Tôi cần phát triển một hệ thống thanh toán trực tuyến. Hãy:
- Phân tích yêu cầu và thiết kế kiến trúc tổng thể (thinking model)
- Thiết kế các interfaces và classes chính (thinking model)
- Triển khai code cho PaymentProcessor (coding model)
- Tạo unit tests cho PaymentProcessor (coding model)
- Triển khai code cho PaymentValidator (coding model)
- Tạo unit tests cho PaymentValidator (coding model)
Hãy thực hiện từng bước một, chỉ chuyển sang bước tiếp theo khi bước hiện tại đã hoàn thành.
Ví dụ prompt nâng cao:
Prompt lập kế hoạch chi tiết
Tôi cần phát triển một API RESTful để quản lý đơn hàng trong hệ thống e-commerce. Hãy lập kế hoạch và triển khai theo các bước sau:
Phân tích yêu cầu: Xác định các endpoints cần thiết, cấu trúc dữ liệu, và business rules
Thiết kế database schema: Tạo các models và mối quan hệ giữa các bảng
Thiết kế API endpoints: Định nghĩa các routes, request/response formats, và status codes
Triển khai OrderController: Viết code cho controller xử lý các endpoints
Triển khai OrderService: Viết code cho service xử lý business logic
Triển khai OrderRepository: Viết code cho repository xử lý truy xuất dữ liệu
Viết unit tests: Tạo các test cases cho controller, service và repository
Tạo API documentation: Viết tài liệu API sử dụng Swagger/OpenAPI
Hãy thực hiện từng bước một và đảm bảo mỗi bước đều có output rõ ràng trước khi chuyển sang bước tiếp theo.
5. Kỹ thuật Prompt Engineering
Zero-shot Prompting
Yêu cầu AI thực hiện nhiệm vụ mà không cung cấp ví dụ. Kỹ thuật này phù hợp với các tác vụ đơn giản hoặc phổ biến mà AI đã được huấn luyện tốt.
Ví dụ prompt cơ bản:
Prompt Zero-shot cơ bản
Tạo một hàm JavaScript để sắp xếp một mảng các đối tượng sản phẩm theo giá từ thấp đến cao.
Ví dụ prompt nâng cao:
Prompt Zero-shot nâng cao
Tạo một hàm JavaScript để sắp xếp một mảng các đối tượng sản phẩm theo giá từ thấp đến cao. Đối tượng sản phẩm có cấu trúc { id: string, name: string, price: number, category: string }. Hàm cần:
- Xử lý trường hợp price là null hoặc undefined (đặt những sản phẩm này ở cuối)
- Hỗ trợ sắp xếp theo nhiều tiêu chí (giá, danh mục) thông qua tham số
- Có tùy chọn để đảo ngược thứ tự sắp xếp
- Tối ưu hiệu suất cho mảng lớn (tránh sắp xếp lại toàn bộ mảng khi chỉ cần kết quả phân trang)
- Hỗ trợ định dạng tiền tệ khác nhau (USD, VND, EUR)
Hãy viết hàm này với JSDoc đầy đủ và các unit test để kiểm tra các trường hợp khác nhau.
Ví dụ thực tế trong dự án:
Prompt Zero-shot thực tế
Xem xét file @[/src/utils/sorting.js] hiện tại và bổ sung thêm một hàm mới sortProductsByMultipleFields để sắp xếp sản phẩm theo nhiều trường (price, rating, createdDate) với các tùy chọn sau:
- Cho phép chỉ định thứ tự ưu tiên của các trường sắp xếp
- Cho phép chỉ định hướng sắp xếp (tăng/giảm) cho từng trường
- Xử lý các trường hợp giá trị null/undefined
- Tối ưu hiệu suất cho danh sách lớn
- Tương thích với cơ chế phân trang hiện tại
Hãy đảm bảo hàm mới tuân theo coding style của dự án và có unit test đầy đủ.
One-shot Prompting
Cung cấp một ví dụ để AI hiểu rõ hơn về yêu cầu. Kỹ thuật này đặc biệt hữu ích khi yêu cầu có cấu trúc phức tạp hoặc đặc thù cho dự án của bạn.
Ví dụ prompt cơ bản:
Prompt One-shot cơ bản
Tôi cần một hàm để chuyển đổi định dạng dữ liệu. Đây là ví dụ:
Input:
{
"name": "John Doe",
"age": 30,
"addresses": [
{ "type": "home", "street": "123 Main St" },
{ "type": "work", "street": "456 Market St" }
]
}Output mong muốn:
{
"fullName": "John Doe",
"userAge": 30,
"homeAddress": "123 Main St",
"workAddress": "456 Market St"
}Hãy viết hàm JavaScript để thực hiện chuyển đổi này.
Ví dụ prompt nâng cao:
Prompt One-shot nâng cao
Tôi cần một hàm để chuyển đổi dữ liệu từ API của bên thứ ba sang định dạng sử dụng trong ứng dụng của chúng tôi. Đây là ví dụ về dữ liệu nhận được và định dạng mong muốn:
Input (dữ liệu từ API):
{
"user": {
"personal_info": {
"first_name": "Nguyen",
"last_name": "Van A",
"dob": "1990-05-15",
"email": "nguyenvana@example.com"
},
"location_data": {
"addresses": [
{ "address_type": "RESIDENTIAL", "address_line": "123 Le Loi", "city": "Ho Chi Minh", "country": "Vietnam" },
{ "address_type": "BUSINESS", "address_line": "456 Nguyen Hue", "city": "Ho Chi Minh", "country": "Vietnam" }
]
},
"account_info": {
"created_at": "2023-01-15T08:30:00Z",
"status": "ACTIVE",
"subscription_tier": "PREMIUM",
"payment_methods": [
{ "type": "CREDIT_CARD", "last_four": "1234", "expiry": "05/25" }
]
}
}
}Output mong muốn (cho ứng dụng của chúng tôi):
{
"userProfile": {
"fullName": "Nguyen Van A",
"email": "nguyenvana@example.com",
"age": 33,
"isActive": true,
"isPremium": true,
"homeAddress": "123 Le Loi, Ho Chi Minh, Vietnam",
"workAddress": "456 Nguyen Hue, Ho Chi Minh, Vietnam",
"paymentMethod": "CREDIT_CARD (*1234)",
"memberSince": "15/01/2023"
}
}Hãy viết hàm transformUserData để thực hiện chuyển đổi này với các đặc điểm sau:
- Tính toán tuổi dựa trên ngày sinh
- Định dạng địa chỉ theo chuẩn của Việt Nam
- Xử lý các trường hợp dữ liệu thiếu hoặc không hợp lệ
- Chuyển đổi định dạng ngày tháng sang chuẩn Việt Nam (DD/MM/YYYY)
Ví dụ thực tế trong dự án:
Prompt One-shot thực tế
Tôi đang làm việc với file @[src/services/dataTransformer.js]. Trong file này đã có hàm transformUserData. Tôi muốn bạn xem xét hàm này và bổ sung thêm logic để xử lý một trường hợp mới: metadata.
Input (dữ liệu từ API):
{
"user": {
"personal_info": { ... },
"location_data": { ... },
"account_info": { ... },
"metadata": {
"last_login_ip": "127.0.0.1",
"session_duration": 3600,
"device_type": "DESKTOP"
}
}
}Output mong muốn (cho ứng dụng của chúng tôi):
{
"userProfile": {
"lastLogin": {
"ip": "127.0.0.1",
"device": "DESKTOP"
}
}
}Hãy cập nhật hàm transformUserData trong file @[src/services/dataTransformer.js] để xử lý thêm trường metadata và trả về output như trên.
Few-shot Prompting
Cung cấp nhiều ví dụ để AI hiểu mẫu và quy luật. Kỹ thuật này đặc biệt hiệu quả khi cần AI nhận diện mẫu hoặc quy luật phức tạp từ nhiều ví dụ.
Ví dụ prompt cơ bản:
Prompt Few-shot cơ bản
Tôi cần một hàm để phân tích và trích xuất thông tin từ chuỗi. Đây là một số ví dụ:
Input: "SP001 - Laptop Dell XPS 13 - 25.990.000đ" Output:
{ "code": "SP001", "name": "Laptop Dell XPS 13", "price": 25990000 }Input: "SP002 - Điện thoại iPhone 15 Pro - 30.490.000đ" Output:
{ "code": "SP002", "name": "Điện thoại iPhone 15 Pro", "price": 30490000 }Input: "SP003 - Màn hình Dell U2720Q - 14.500.000đ" Output:
{ "code": "SP003", "name": "Màn hình Dell U2720Q", "price": 14500000 }Hãy viết hàm JavaScript để thực hiện chuyển đổi này cho chuỗi bất kỳ theo định dạng trên.
Ví dụ prompt nâng cao:
Prompt Few-shot nâng cao
Tôi cần tạo các thông báo lỗi (error messages) nhất quán cho ứng dụng của mình. Dưới đây là một vài ví dụ về cách tôi muốn định dạng chúng:
Input:
- Lỗi: "Tên người dùng đã tồn tại"
- Mã lỗi: 409
- Trường: "username"
Output:
{
"error": {
"code": "USERNAME_TAKEN",
"status": 409,
"message": "Tên người dùng đã tồn tại.",
"field": "username"
}
}Input:
- Lỗi: "Email không hợp lệ"
- Mã lỗi: 400
- Trường: "email"
Output:
{
"error": {
"code": "INVALID_EMAIL_FORMAT",
"status": 400,
"message": "Email không hợp lệ.",
"field": "email"
}
}Input:
- Lỗi: "Mật khẩu quá ngắn"
- Mã lỗi: 422
- Trường: "password"
Output: ?
Chain-of-Thought Prompting
Yêu cầu AI giải thích từng bước suy nghĩ trong quá trình giải quyết vấn đề. Kỹ thuật này đặc biệt hữu ích khi cần giải quyết các vấn đề phức tạp, đòi hỏi suy luận logic chặt chẽ hoặc khi cần hiểu rõ quá trình tư duy của AI.
Ví dụ prompt cơ bản:
Prompt Chain-of-Thought cơ bản
Tôi cần tối ưu hóa hiệu suất cho hàm sau:
function findDuplicates(array) {
const duplicates = [];
for (let i = 0; i < array.length; i++) {
for (let j = i + 1; j < array.length; j++) {
if (array[i] === array[j] && !duplicates.includes(array[i])) {
duplicates.push(array[i]);
}
}
}
return duplicates;
}Hãy phân tích vấn đề hiệu suất của hàm này, giải thích từng bước suy nghĩ của bạn, và đề xuất cách tối ưu hóa.
Ví dụ prompt nâng cao:
Prompt Chain-of-Thought nâng cao
Tôi cần thiết kế một hệ thống cache cho API của chúng tôi để giảm tải cho database và cải thiện thời gian phản hồi. Hãy giải thích từng bước suy nghĩ của bạn khi thiết kế giải pháp này, bao gồm:
- Phân tích các loại dữ liệu nên được cache và không nên cache
- Chiến lược invalidation cache phù hợp cho từng loại dữ liệu
- Lựa chọn công nghệ cache (Redis, Memcached, in-memory) và lý do
- Cách xử lý race conditions và stale data
- Chiến lược cache warming và cache eviction
- Cách đo lường hiệu quả của hệ thống cache
Hãy giải thích từng bước suy nghĩ của bạn và các lý do đằng sau mỗi quyết định.
Ví dụ thực tế trong dự án:
Prompt Chain-of-Thought thực tế
Tôi đang gặp vấn đề về hiệu suất trong file @[/src/services/ProductService.js] khi tải danh sách sản phẩm có phân trang, lọc và sắp xếp. Đặc biệt là hàm getFilteredProducts đang chậm khi số lượng sản phẩm tăng lên.
Hãy phân tích vấn đề hiệu suất của hàm này theo các bước sau:
- Xác định các điểm nóng (bottlenecks) trong code hiện tại
- Phân tích độ phức tạp thời gian (time complexity) của các thao tác
- Đánh giá các giải pháp tiềm năng:
- Sử dụng indexing hiệu quả hơn trong database
- Áp dụng các kỹ thuật cache
- Tối ưu hóa các truy vấn database
- Chuyển một số xử lý sang server-side
- Sử dụng các kỹ thuật lazy loading hoặc virtual scrolling
- Đề xuất giải pháp cụ thể với code mẫu
- Đánh giá tác động của giải pháp đề xuất đối với hiệu suất và tính bảo trì
Hãy giải thích từng bước suy nghĩ của bạn và lý do đằng sau mỗi đề xuất.
Role-based Prompting
Yêu cầu AI đóng vai trò cụ thể để có góc nhìn chuyên sâu. Kỹ thuật này đặc biệt hữu ích khi cần phân tích vấn đề từ nhiều góc độ hoặc khi cần kiến thức chuyên sâu trong một lĩnh vực cụ thể.
Ví dụ prompt cơ bản:
"Prompt đóng vai trò chuyên gia bảo mật"
Đóng vai trò là một chuyên gia bảo mật, hãy đánh giá code sau và chỉ ra các lỗ hổng bảo mật tiềm ẩn:
app.post('/login', (req, res) => {
const { username, password } = req.body;
const query = `SELECT * FROM users WHERE username='${username}' AND password='${password}'`;
db.query(query, (err, result) => {
if (result.length > 0) {
req.session.user = username;
res.redirect('/dashboard');
} else {
res.send('Incorrect username or password');
}
});
});Ví dụ prompt nâng cao:
"Prompt đóng vai trò kiến trúc sư phần mềm"
Hãy đóng vai trò là một kiến trúc sư phần mềm cao cấp với hơn 15 năm kinh nghiệm trong việc thiết kế hệ thống microservices có khả năng mở rộng cao. Tôi cần bạn đánh giá kiến trúc hiện tại của hệ thống e-commerce của chúng tôi và đề xuất các cải tiến.
Hệ thống hiện tại của chúng tôi bao gồm các thành phần sau:
- Frontend: Single-page application sử dụng React và Redux
- API Gateway: Express.js để điều hướng các yêu cầu đến các microservices
- Auth Service: Xử lý đăng nhập, đăng ký và quản lý phiên làm việc
- Product Service: Quản lý danh mục sản phẩm, tìm kiếm và lọc
- Order Service: Xử lý đơn hàng và thanh toán
- Inventory Service: Quản lý kho hàng và cập nhật số lượng
- Notification Service: Gửi email, SMS và thông báo push
Các vấn đề chúng tôi đang gặp phải:
- Thời gian phản hồi chậm khi lượng truy cập cao
- Khó khăn trong việc duy trì tính nhất quán của dữ liệu giữa các services
- Quá trình triển khai và cập nhật phức tạp
- Chi phí vận hành cao khi mở rộng
- Khó khăn trong việc theo dõi và xử lý lỗi
Với tư cách là một kiến trúc sư phần mềm có kinh nghiệm, hãy:
- Đánh giá kiến trúc hiện tại và xác định các điểm yếu
- Đề xuất các cải tiến kiến trúc cụ thể để giải quyết các vấn đề trên
- Đề xuất các công nghệ và patterns phù hợp
- Đề xuất lộ trình chuyển đổi từ kiến trúc hiện tại sang kiến trúc mới
- Đánh giá chi phí và lợi ích của việc chuyển đổi
Ví dụ thực tế trong dự án:
"Prompt đóng vai trò chuyên gia UX/UI"
Hãy đóng vai trò là một chuyên gia UX/UI với chuyên môn về thiết kế trải nghiệm người dùng cho ứng dụng di động. Tôi cần bạn đánh giá và đề xuất cải tiến cho component ProductList trong file @[/src/components/ProductList.jsx] của ứng dụng React Native của chúng tôi.
Các vấn đề người dùng đã báo cáo:
- Danh sách sản phẩm khó sử dụng trên thiết bị di động nhỏ
- Thời gian tải danh sách quá lâu khi có nhiều sản phẩm
- Khó khăn trong việc tìm kiếm và lọc sản phẩm
- Người dùng không nhận được phản hồi trực quan khi thực hiện các thao tác
- Trải nghiệm không nhất quán giữa các thiết bị
Với tư cách là một chuyên gia UX/UI, hãy:
- Đánh giá thiết kế hiện tại của component ProductList
- Xác định các vấn đề về trải nghiệm người dùng và giao diện
- Đề xuất các cải tiến cụ thể về layout, thiết kế và tương tác
- Đề xuất các kỹ thuật tối ưu hóa hiệu suất từ góc độ UX
- Cung cấp code mẫu để cải thiện component này
Hãy đảm bảo các đề xuất của bạn tuân thủ các nguyên tắc thiết kế Material Design và các best practices cho React Native.
Lựa chọn model phù hợp
Để lựa chọn model phù hợp cho từng tác vụ, hãy xem xét các yếu tố sau:
- Liên quan đến phân tích, suy nghĩ, lên kế hoạch: Thinking Models
- Liên quan đến thực hiện code chức năng: Coding Models
Kết luận
Việc lựa chọn AI model phù hợp và tối ưu hóa prompt là rất quan trọng để tận dụng tối đa khả năng của AI trong quá trình phát triển phần mềm. Bằng cách tuân thủ các khuyến nghị trong Jai1 Framework, bạn có thể đạt được hiệu quả cao nhất khi làm việc với Agentic IDE.