Series Prompt Engineering Thực chiến #1: Giải phẫu câu lệnh – Lập trình bằng Ngôn ngữ tự nhiên
Chào bạn và anh em!
Sau khi đã đi qua hàng loạt công cụ DevOps nặng đô từ Git, Docker, đến Elasticsearch, hôm nay chúng ta sẽ mở khóa một kỹ năng mềm nhưng mang sức mạnh của "vũ khí hủy diệt": Prompt Engineering (Kỹ năng viết câu lệnh AI).
Nhiều anh em kỹ sư phàn nàn rằng: "AI code ngu lắm, toàn sinh ra bug hoặc dùng mấy cái thư viện cũ rích". Thực ra, AI không "ngu". Nó giống như một hệ thống API siêu mạnh nhưng rất ngây thơ. Nếu bạn gửi một Payload (câu lệnh) sơ sài, API sẽ trả về dữ liệu rác (Garbage in, Garbage out).
Tư duy đầu tiên cần thay đổi: Prompting không phải là Google Search. Prompting là lập trình bằng ngôn ngữ tự nhiên. Hôm nay, chúng ta sẽ mổ xẻ cấu trúc lõi của một câu lệnh hoàn hảo để biến AI thành một Senior Backend Engineer thực thụ.
1. Sự khác biệt giữa Tìm kiếm và Giao việc
Khi dùng Google, bạn gõ từ khóa: "fix lỗi mất kết nối vitess golang". Khi dùng AI (như Claude hay Gemini), nếu bạn cũng gõ câu đó, AI sẽ đóng vai Wikipedia và trả về một bài văn diễn giải dài dòng về lỗi timeout.
Để AI làm việc, bạn phải ra lệnh cho nó giống như cách Leader giao task cho bạn trong hệ thống JIRA. Một task chuẩn chỉnh cần phải có đầy đủ bối cảnh, mô tả chi tiết, và tiêu chí hoàn thành (Acceptance Criteria).
2. Công thức cốt lõi: Khung C-T-C-F
Một Prompt đẳng cấp Enterprise luôn được cấu thành từ 4 thành phần sau:
- C - Context (Bối cảnh): Cung cấp cho AI biết nó đang đứng ở đâu, làm dự án gì, đóng vai trò ai.
- T - Task (Nhiệm vụ): Yêu cầu cụ thể, trực diện (Viết code, review bug, hay thiết kế hệ thống).
- C - Constraints (Ràng buộc): Những quy tắc "sống còn" mà AI không được phép vi phạm.
- F - Format (Định dạng đầu ra): Yêu cầu cách AI trình bày kết quả (JSON, Markdown, Bảng biểu...).
3. Thực chiến: Từ "Tay mơ" đến "Senior"
Hãy đặt vào kịch bản thực tế: Bạn đang làm việc trong dự án soát vé tự động (AFC), và bạn cần một đoạn code xử lý lại dữ liệu đầu vào.
Cấp độ 1: Prompt "Tay mơ" (Sơ sài)
"Viết cho tôi hàm chuẩn hóa địa chỉ tiếng Việt bằng Golang."
Kết quả: AI sẽ nhả ra một hàm NormalizeAddress cực kỳ chung chung, có thể dùng các thư viện bên ngoài mà công ty bạn không cho phép, và bỏ qua các trường hợp viết tắt đặc thù.
Cấp độ 2: Prompt "Senior" (Áp dụng khung C-T-C-F)
[Context] Đóng vai một Senior Backend Engineer am hiểu về hệ thống phân tán và xử lý dữ liệu lớn. Chúng ta đang phát triển hệ thống soát vé tự động (AFC) nội bộ. Hệ thống hiện đang nhận được các chuỗi JSON chứa địa chỉ khách hàng bị sai định dạng và cần chuẩn hóa.
[Task] Hãy viết một hàm bằng Golang để chuẩn hóa chuỗi địa chỉ tiếng Việt này.
[Constraints] > - Tuyệt đối không sử dụng thư viện regex của bên thứ ba, chỉ dùng standard library của Go.
- Hàm phải xử lý được các từ viết tắt phổ biến (ví dụ: chuyển "TP", "TP.", "Tp" thành "Thành phố"; "Q1", "Q.1" thành "Quận 1").
- Hàm phải tối ưu về mặt cấp phát bộ nhớ (memory allocation) vì nó sẽ phải chạy hàng triệu lần mỗi ngày trên các worker.
[Format] > Trả về code Golang hoàn chỉnh có kèm comment giải thích. Sau đó, viết một khối JSON ví dụ minh họa đầu vào và đầu ra của hàm. Trình bày bằng Markdown.
Kết quả: Với payload này, AI hiểu ngay nó đang ở trong một môi trường chịu tải cao. Nó sẽ né việc dùng Regex phức tạp gây tốn CPU, chuyển sang dùng xử lý chuỗi cơ bản (strings.Replace, byte manipulation) để tiết kiệm memory, và định dạng output chính xác 100% như bạn yêu cầu.
4. Bí kíp "Mớm mồi" (Few-Shot Prompting)
Đôi khi, giải thích bằng lời là không đủ, nhất là với các bài toán chuẩn hóa dữ liệu phức tạp. Để AI làm chính xác tuyệt đối, Kỹ sư AI sử dụng kỹ thuật Few-Shot Prompting (Mớm mồi vài ví dụ).
Bạn chỉ cần nhét thêm một dòng này vào Prompt:
"Dưới đây là một số ví dụ để bạn tham khảo cách chuẩn hóa: Input: '123 Le Loi, P. Ben Nghe, Q1, HCM' -> Output: '123 Lê Lợi, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh' Input: 'Khu CNC, Tp Thu Duc' -> Output: 'Khu Công nghệ cao, Thành phố Thủ Đức' Dựa vào pattern trên, hãy xử lý các dữ liệu tôi chuẩn bị gửi lên."
Khi được "nhìn" thấy dữ liệu mẫu, AI gần như không bao giờ đi chệch đường ray.
Tổng kết Bài 1
Bạn đã nắm được vũ khí đầu tiên: Khung C-T-C-F và kỹ thuật Few-Shot Prompting. Viết prompt dài hơn một chút ở đầu vào sẽ tiết kiệm cho bạn hàng giờ đồng hồ ngồi debug và sửa code rác ở đầu ra.
Khi đã quen với việc "giao task" cho AI một cách bài bản, bạn sẽ thấy nó không chỉ là một cái máy trả lời tự động, mà thực sự là một người đồng đội code cặp (Pair-programming) cực kỳ xuất sắc.
All Rights Reserved