[Series AI] LLM và AI Agent – Prompting và Context
Chào anh em đã quay trở lại với series Cursor AI for Developers!
Ở bài trước, mình đã giới thiệu sương sương về lý do tại sao Cursor lại đang là "chân ái" của giới coder tụi mình. Nhưng chắc hẳn nhiều anh em tải về dùng thử vài hôm lại thấy hụt hẫng: "Ủa, sao con AI này nó sinh code lạ lắm, gọi function không tồn tại, hay tự nhiên phá hỏng luôn cái logic đang chạy ngon lành?".
Đừng vội đổ lỗi cho Cursor. Lỗi không nằm ở AI, mà nằm ở việc chúng ta chưa biết cách giao tiếp với nó. Hôm nay, với tư cách là một backend dev từng "trầy trật" với đủ thứ bug từ Microservices đến tối ưu query, mình sẽ chia sẻ với anh em bí quyết cốt lõi để làm chủ công cụ này: Hiểu về LLM, AI Agent và sức mạnh của Prompting & Context.
1. LLM và AI Agent: Bộ não và Đôi tay
Để xài Cursor mượt, anh em cần phân biệt rõ hai khái niệm này đang hoạt động dưới nền tảng của nó:
- LLM (Large Language Model): Đây là "bộ não" (như GPT-4o, Claude 3.5 Sonnet). Nó cực kỳ thông minh, học hết mọi pattern code trên GitHub, hiểu syntax của Golang, TypeScript, PHP... Nhưng nó có một nhược điểm chí mạng: Nó không hề biết project hiện tại của anh em đang viết theo tiêu chuẩn nào.
- AI Agent (Tác tử AI): Đây là "đôi tay" và "con mắt" mà Cursor trang bị thêm cho bộ não kia. Agent trong Cursor có khả năng: đọc file thư mục, tìm kiếm (grep) trong codebase, tự động mở terminal để chạy lệnh xem lỗi ở đâu, và tự động apply code mới vào file.
Khi anh em gõ lệnh vào Cursor, anh em đang ra lệnh cho Agent đi thu thập thông tin, đóng gói lại đưa cho LLM xử lý, rồi lấy kết quả từ LLM để thực thi ngược lại vào code.
2. Nghệ thuật Prompting: Đừng giao việc như một "ông sếp tồi"
Nhiều anh em có thói quen quăng cho AI một câu cộc lốc: "Viết cho tôi cái API tạo user".
Kết quả? AI sẽ tự biên tự diễn theo cách chung chung nhất. Nếu project của anh em xài Clean Architecture, nó lại quăng hết logic vào Controller. Nếu anh em đang chuẩn hóa data, nó lại dùng sai format.
Prompting trong Cursor cần sự cụ thể và tư duy thiết kế hệ thống. Hãy coi AI như một người đồng nghiệp Junior cực kỳ chăm chỉ nhưng... cần chỉ việc rõ ràng.
Thay vì viết:
"Tối ưu lại logic chuẩn hóa chuỗi địa chỉ này cho tôi."
Hãy viết (Prompting chuẩn kỹ sư):
*"Refactor lại function xử lý chuỗi địa chỉ Việt Nam này. Yêu cầu:
- Tách rõ ràng các trường: Thành phố, Quận/Huyện, Phường/Xã dựa trên mảng config cho sẵn.
- Sử dụng Regex để làm sạch các ký tự đặc biệt trước khi parse.
- Trả về format JSON chuẩn.
- Handle các edge cases như chuỗi đầu vào bị khuyết thông tin Quận/Huyện. Viết kèm Unit Test cho các case này nhé."*
Khi đưa ra bài toán rõ ràng về cấu trúc và luồng dữ liệu, anh em sẽ nhận lại đoạn code "ăn liền" mà không mất công sửa lại quá nhiều.
3. Context (Ngữ cảnh): Vũ khí tối thượng của Cursor
Nếu Prompting là cách bạn ra lệnh, thì Context chính là tài liệu bạn đưa cho AI để nó làm việc. AI "ngáo" (hallucinate) 99% là do thiếu ngữ cảnh. Nó không biết hệ thống của bạn đang dùng database gì, schema ra sao để viết query cho chuẩn.
Trong Cursor, hãy tận dụng triệt để dấu @:
@Files: Luôn đính kèm file Model/Entity hoặc Interface liên quan trước khi nhờ nó viết logic. (Ví dụ: "Viết hàm update số dư, dựa vào schema của@User.phpvà@Transaction.php").@Codebase: Dùng khi muốn AI quét toàn bộ dự án để tìm mối liên hệ.- Vũ khí bí mật -
.cursorrules: Đây là tính năng đáng đồng tiền bát gạo nhất. Anh em hãy tạo một file.cursorrulesở thư mục gốc của project và định nghĩa "luật chơi" cho AI.
Ví dụ một đoạn .cursorrules cho project Backend:
- Bạn là một Senior Backend Developer chuyên về hệ thống High-Performance.
- Luôn sử dụng strict typing và type hinting đầy đủ.
- Với các logic kết nối Database, luôn cân nhắc bài toán N+1 query và đề xuất sử dụng Eager Loading nếu cần.
- Nếu xử lý các tác vụ nặng, hãy gợi ý đẩy vào Message Queue (Kafka/RabbitMQ) thay vì xử lý đồng bộ.
- Code style: Tuân thủ chuẩn PSR-12 (nếu là PHP) hoặc chuẩn format của Go (nếu là Golang).
Chỉ cần có file này, mọi câu trả lời của Cursor từ nay về sau sẽ tự động bám sát tiêu chuẩn kiến trúc của dự án. Anh em sẽ không bao giờ phải nhắc đi nhắc lại một yêu cầu nữa!
4. Tạm kết
Tóm lại, Cursor mạnh, nhưng anh em phải là người cầm trịch. Mình luôn giữ tư duy: Mình là Kỹ sư thiết kế hệ thống, AI là thợ xây. Cung cấp bản vẽ (Context) càng chi tiết, chỉ dẫn (Prompting) càng rõ ràng, thì tòa nhà xây lên càng vững.
Teaser Bài Tiếp Theo:
Tới đây chắc anh em đã nắm được "nội công tâm pháp" khi xài AI IDE rồi. Nhưng ngoài Cursor ra, giới dev dạo gần đây còn đang rần rần với một cái tên khác: Windsurf (của Codeium) – một đối thủ cực kỳ nặng ký với mô hình AI Agent rất khác biệt.
Ở bài viết tới, chúng ta sẽ không nói lý thuyết nữa. Mình sẽ mở máy lên, so sánh trực tiếp hai con hàng này và thực chiến Demo dùng AI Agent để build một ứng dụng ChatApp AI LLM từ con số 0.
👉 [Series Cursor AI - Bài 3] Cursor và Windsurf – Demo agent build ChatApp AI LLM
Anh em thấy cách truyền đạt Context này thế nào? Có tip Prompting nào hay anh em hay dùng thì share xuống comment để mọi người cùng học hỏi nhé!
All rights reserved