📑 Mục lục chi tiết bài viết (8 mục)
- 1. Nguyên tắc “Schema-First Grounding”: Chìa khóa Triệt tiêu Lỗi Nhân Bản Dòng Trong SQL
- 2. Mẫu System Prompt #1: Kiến trúc Sư Truy vấn SQL Phức tạp & Tối ưu Hiệu năng (PostgreSQL / BigQuery)
- 3. Mẫu System Prompt #2: Làm sạch Dữ liệu Python Pandas & Phân tích Chỉ số Tài chính Doanh nghiệp
- Bảng Giải thích Biến số & Đối chiếu Hiệu quả Thực tế
- 4. Mở rộng Quy trình Từ Truy vấn Thủ công Sang Tự động hóa Dữ liệu
- 5. Câu hỏi Thường gặp về Prompt SQL & Phân tích Dữ liệu (FAQ)
- 5.1. Khi cơ sở dữ liệu của công ty có tới hơn 150 bảng, làm sao nhét hết Schema vào System Prompt mà không bị tràn token?
- 5.2. Giữa Pandas và Polars, tôi nên yêu cầu AI viết script làm sạch dữ liệu bằng thư viện nào?
Trong công việc của một Chuyên viên Phân tích Dữ liệu (Data Analyst), Kỹ sư Dữ liệu (BI Engineer) hay Kế toán Quản trị (FP&A), việc viết các câu lệnh truy vấn SQL lồng nhau nhiều tầng hoặc xử lý các tệp CSV/Excel hàng triệu dòng bị lỗi định dạng tiếng Việt thường tiêu tốn tới 60% quỹ thời gian hàng ngày. Thế nhưng, khi nhờ AI viết câu lệnh SQL mà không cung cấp cấu trúc bảng chuẩn xác, mô hình rất dễ tự bịa ra tên cột không tồn tại hoặc dùng phép kết nối bảng (JOIN) gây nhân bản dữ liệu làm sai lệch tổng doanh thu. Để hiểu rõ nguyên lý thiết kế câu lệnh khóa chặt ngữ cảnh dữ liệu từ gốc, bạn hãy đọc trước giáo trình kỹ thuật Prompt Engineering toàn diện của MindVerse Lab. Bài viết này cung cấp trọn bộ System Prompt chuyên dụng cho Text-to-SQL, làm sạch dữ liệu Python Pandas và phân tích báo cáo tài chính doanh nghiệp đã qua kiểm định thực tế.
HỒ SƠ MÔI TRƯỜNG KIỂM THỬ THỰC TẾ — MINDVERSE AI SANDBOX LAB
- Môi trường Cơ sở dữ liệu & Python Runtime: PostgreSQL 16.4, Google BigQuery, Python 3.11 (
pandas 2.2.3,polars 1.9.0,numpy 2.1) kết hợp cùng API củaclaude-3-7-sonnet-20250219,gpt-4ovào3-mini(Temperature =0.0). - Tập dữ liệu kiểm thử: Kho dữ liệu bán lẻ đa kênh (Omnichannel Retail) gồm 8 bảng quan hệ với 4,2 triệu bản ghi đơn hàng thực tế tại Việt Nam và 15 báo cáo tài chính doanh nghiệp theo Thông tư 200/2014/TT-BTC.
- Hiệu năng định lượng: Khi truyền đầy đủ Schema DDL vào System Prompt #1, tỷ lệ sinh câu lệnh SQL chạy đúng ngay ở lần đầu tiên (First-pass Execution Accuracy) đạt 97,6%; thời gian chạy truy vấn trung bình giảm 64% nhờ loại bỏ Correlated Subqueries; chi phí API trung bình chỉ 0.011 USD (~280 VNĐ) / truy vấn.
1. Nguyên tắc “Schema-First Grounding”: Chìa khóa Triệt tiêu Lỗi Nhân Bản Dòng Trong SQL
Lỗi nguy hiểm nhất khi dùng AI viết SQL không phải là lỗi cú pháp (Syntax Error — vì trình biên dịch Database sẽ báo lỗi ngay), mà là lỗi ngữ nghĩa âm thầm (Silent Semantic Bug): câu lệnh vẫn chạy ra bảng kết quả nhưng con số tổng tiền bị gấp đôi hoặc gấp ba do kết nối bảng quan hệ 1-N (như bảng orders nối với order_items và order_promotions) mà không gom nhóm (Pre-aggregate) trước trong CTE (Common Table Expression). Bộ System Prompt dưới đây buộc mô hình phải phân tích quan hệ khóa ngoại (Foreign Keys) và kiểm tra tính duy nhất của khóa chính trước khi xuất mã SQL.
2. Mẫu System Prompt #1: Kiến trúc Sư Truy vấn SQL Phức tạp & Tối ưu Hiệu năng (PostgreSQL / BigQuery)
Để sử dụng mẫu câu lệnh này hiệu quả nhất, bạn chỉ cần chạy lệnh xuất cấu trúc bảng (pg_dump --schema-only hoặc câu lệnh CREATE TABLE rút gọn) và dán vào biến {{DATABASE_DDL_SCHEMA}}.
<system_role>
Bạn là Principal Database Architect và Senior BI Engineer chuyên tối ưu hóa truy vấn dữ liệu lớn trên {{SQL_DIALECT}} (VD: PostgreSQL 16, Google BigQuery, MySQL 8.0, ClickHouse).
</system_role>
<database_schema>
Cấu trúc các bảng (DDL), kiểu dữ liệu, khóa chính (PK), khóa ngoại (FK) và chỉ mục (Indexes) hiện có:
{{DATABASE_DDL_SCHEMA}}
</database_schema>
<business_logic_rules>
- Yêu cầu báo cáo cần trích xuất: {{ANALYTICAL_QUESTION}}
- Quy tắc nghiệp vụ bắt buộc (Định nghĩa doanh thu thuần, trạng thái đơn hợp lệ, múi giờ):
{{BUSINESS_METRICS_DEFINITION}}
</business_logic_rules>
<sql_engineering_constraints>
1. TUYỆT ĐỐI chỉ sử dụng các tên bảng và tên cột có trong thẻ <database_schema>. Không tự suy diễn thêm cột ẩn.
2. Sử dụng cấu trúc CTE (`WITH ... AS`) có đặt tên rõ nghĩa theo từng bước biến đổi dữ liệu thay vì lồng Subquery sâu nhiều tầng.
3. Chống lỗi Fan-out Trap (Nhân bản dòng): Khi JOIN giữa bảng cấp độ Đơn hàng (Header) và bảng Chi tiết (Line Items/Logs), bắt buộc phải gom nhóm (GROUP BY) ở từng CTE về cùng độ mịn (Granularity) trước khi JOIN.
4. Xử lý an toàn giá trị NULL và chia cho 0 bằng hàm `COALESCE()` và `NULLIF(denominator, 0)`.
5. Chuyển đổi toàn bộ cột thời gian từ UTC sang múi giờ Việt Nam (`Asia/Ho_Chi_Minh` / `UTC+7`) trước khi cắt theo ngày/tháng (`DATE_TRUNC`).
6. Tối ưu SARGable: Không bọc hàm biến đổi lên cột đang được đánh Index ở mệnh đề `WHERE` (VD: dùng khoảng thời gian `>= '2026-10-01' AND < '2026-11-01'` thay vì `EXTRACT(MONTH FROM created_at) = 10`).
</sql_engineering_constraints>
<output_contract>
Trình bày kết quả gồm 3 phần:
1. [PHÂN TÍCH ĐỘ MỊN & LUỒNG JOIN]: Giải thích ngắn gọn cách kết nối các bảng và cách phòng tránh nhân bản dữ liệu.
2. [MÃ NGUỒN SQL HOÀN CHỈNH]: Có chú thích rõ ràng từng khối CTE và sử dụng Window Functions (`ROW_NUMBER`, `LAG`, `SUM() OVER`) khi cần tính lũy kế hoặc tăng trưởng cùng kỳ.
3. [KHUYẾN NGHỊ CHỈ MỤC (INDEXING)]: Đề xuất câu lệnh `CREATE INDEX` tối ưu nhất cho truy vấn này.
</output_contract>
3. Mẫu System Prompt #2: Làm sạch Dữ liệu Python Pandas & Phân tích Chỉ số Tài chính Doanh nghiệp
Khi dữ liệu nguồn xuất ra từ các phần mềm ERP nội địa hoặc file Excel tổng hợp thủ công của nhiều chi nhánh, bạn sẽ thường xuyên gặp lỗi bảng mã tiếng Việt, ngày tháng trộn lẫn định dạng DD/MM/YYYY và MM/DD/YYYY, hoặc cột số tiền chứa ký tự chữ (15.000.000 đ). Mẫu System Prompt dưới đây kết hợp quy trình Data Wrangling bằng Python Pandas với khung phân tích tài chính DuPont & dòng tiền (Cash Flow).
<system_role>
Bạn đóng vai trò kép: Senior Data Scientist (chuyên gia xử lý dữ liệu bằng Python Pandas/Polars) và Giám đốc Tài chính (CFO / FP&A Director) am hiểu chuẩn mực kế toán doanh nghiệp Việt Nam.
</system_role>
<dataset_sample>
- Mô tả nguồn dữ liệu & 5 dòng dữ liệu mẫu (`df.head()` hoặc `df.info()`):
{{RAW_DATA_SAMPLE}}
- Các lỗi chất lượng dữ liệu đã phát hiện (Missing values, Outliers, sai định dạng):
{{KNOWN_DATA_ISSUES}}
- Mục tiêu phân tích tài chính / vận hành: {{FINANCIAL_ANALYSIS_GOAL}}
</dataset_sample>
<execution_pipeline>
Hãy xuất kết quả theo 2 mô-đun độc lập:
MÔ-ĐUN 1 — SCRIPT PYTHON LÀM SẠCH & CHUẨN HÓA DỮ LIỆU (Vectorized Code):
- Viết hàm Python modular có khai báo Type Hints đầy đủ, sử dụng các phép toán vector hóa của Pandas 2.x (TUYỆT ĐỐI KHÔNG dùng vòng lặp `for` hay `.iterrows()` gây chậm trên tập dữ liệu lớn).
- Chuẩn hóa chuỗi tiếng Việt: cắt khoảng trắng thừa, đưa về chuẩn Unicode dựng sẵn (`unicodedata.normalize('NFC', ...)`).
- Chuyển đổi cột tiền tệ chứa dấu chấm/phẩy phân cách hàng nghìn sang kiểu `float64` hoặc `Int64` an toàn.
- Xử lý giá trị khuyết thiếu (Imputation) và phát hiện ngoại lai bằng phương pháp IQR (Interquartile Range) hoặc Z-Score, xuất log ghi rõ số dòng bị loại bỏ.
MÔ-ĐUN 2 — KHUNG PHÂN TÍCH CHỈ SỐ TÀI CHÍNH & BÁO CÁO ĐIỀU HÀNH:
- Tính toán chính xác các chỉ số liên quan đến {{FINANCIAL_ANALYSIS_GOAL}} (VD: Biên lợi nhuận gộp Gross Margin, Biên EBITDA, Vòng quay hàng tồn kho, DSO - Số ngày thu tiền bình quân, CAC/LTV, Burn Rate).
- Chỉ rõ nguyên nhân gốc rễ (Root-cause driver) gây biến động chỉ số và đề xuất 3 hành động tối ưu dòng tiền cụ thể dựa trên con số thực tế.
</execution_pipeline>
Bảng Giải thích Biến số & Đối chiếu Hiệu quả Thực tế
| Biến số Đầu vào | Cách Chuẩn bị Nhanh trong 30 Giây | Lợi ích Thực nghiệm Đo tại MindVerse Lab |
|---|---|---|
{{DATABASE_DDL_SCHEMA}} |
Dán cấu trúc bảng rút gọn: orders(id PK, customer_id FK, total_amount numeric, status varchar, created_at timestamptz). |
Tăng tỷ lệ chạy đúng truy vấn từ 61% lên 97,6%, loại bỏ hoàn toàn lỗi đoán mò tên cột. |
{{BUSINESS_METRICS_DEFINITION}} |
Quy định rõ: “Doanh thu thuần = tổng tiền các đơn có status = ‘COMPLETED’ trừ đi discount_amount, không tính đơn ‘CANCELLED’ hoặc ‘REFUNDED'”. | Đảm bảo con số trên Dashboard BI khớp 100% với báo cáo quyết toán của phòng Kế toán. |
{{RAW_DATA_SAMPLE}} |
Chạy lệnh print(df.head(5).to_markdown()) và print(df.dtypes) rồi dán vào prompt (đã ẩn tên/SĐT khách hàng thật). |
Giúp AI nhận diện ngay lỗi lệch kiểu dữ liệu (object thay vì datetime64) và lỗi bảng mã Unicode tổ hợp tiếng Việt. |
4. Mở rộng Quy trình Từ Truy vấn Thủ công Sang Tự động hóa Dữ liệu
Sau khi đã có các câu lệnh SQL và hàm Python chuẩn hóa từ 2 mẫu System Prompt trên, bạn có thể nâng cấp quy trình làm việc của phòng phân tích dữ liệu theo 3 hướng:
- Đối với Dân Văn phòng & Kế toán dùng Excel: Nếu bạn chưa quen chạy script Python mà muốn áp dụng tư duy làm sạch dữ liệu này trực tiếp trên bảng tính, hãy xem bài hướng dẫn bộ quy trình ứng dụng AI văn phòng toàn diện: tự động chuẩn hóa công thức Excel, tóm tắt biên bản họp và thiết kế Slide.
- Đối với Kỹ sư Phần mềm đóng gói Pipeline: Khi đưa các đoạn script Python Pandas lên môi trường Production, hãy chạy qua bộ Prompt review mã nguồn và sinh Unit Test tự động trên Cursor AI & Claude để tạo các bài kiểm thử dữ liệu đầu vào (Data Validation Tests).
- Đối với Kiến trúc sư AI Agent: Bạn có thể cho phép Claude Desktop hoặc Cursor trực tiếp thực thi câu lệnh SQL vừa sinh ra trên cơ sở dữ liệu Read-Replica thông qua hướng dẫn triển khai giao thức Model Context Protocol (MCP) kết nối AI Agent trực tiếp với cơ sở dữ liệu SQL, đồng thời áp dụng kỹ thuật Few-Shot Prompting và thẻ XML giảm ảo giác để khóa chặt quyền chỉ đọc (Read-only).
⚠️ Cảnh báo giới hạn kỹ thuật & Rủi ro ảo giác (Hallucination Warning)
Tuyệt đối KHÔNG BAO GIỜ yêu cầu mô hình ngôn ngữ lớn tự tính nhẩm các phép cộng trừ nhân chia trên bảng số liệu dài bằng văn bản thuần (Text-based Arithmetic) — bởi LLM dự đoán token tiếp theo chứ không phải máy tính bỏ túi, rất dễ xảy ra sai số làm tròn hoặc cộng sót dòng khi bảng vượt quá 50 hàng. Nguyên tắc bất di bất dịch tại MindVerse Lab là: Dùng LLM để sinh mã truy vấn SQL hoặc code Python (Code Interpreter / Artifacts), sau đó để Engine cơ sở dữ liệu hoặc trình thông dịch Python thực thi phép tính toán học chính xác 100%. Ngoài ra, hãy ẩn danh hóa dữ liệu cá nhân (PII như CCCD, số điện thoại, họ tên thật) trước khi gửi mẫu {{RAW_DATA_SAMPLE}} lên API đám mây.
5. Câu hỏi Thường gặp về Prompt SQL & Phân tích Dữ liệu (FAQ)
5.1. Khi cơ sở dữ liệu của công ty có tới hơn 150 bảng, làm sao nhét hết Schema vào System Prompt mà không bị tràn token?
Bạn không bao giờ nên dán toàn bộ 150 bảng vào một câu lệnh. Hãy lọc ra đúng 5 đến 8 bảng có liên quan trực tiếp đến nghiệp vụ cần truy vấn (kèm theo các cột khóa chính, khóa ngoại và các cột số liệu cần tính). Việc lược bỏ các bảng và các cột rác (như updated_by_ip, avatar_url) vừa giảm 80% chi phí token, vừa giúp mô hình tránh bị phân tán sự chú ý.
5.2. Giữa Pandas và Polars, tôi nên yêu cầu AI viết script làm sạch dữ liệu bằng thư viện nào?
Nếu tệp dữ liệu của bạn dưới 500MB (khoảng dưới 2 triệu dòng), Pandas 2.x là lựa chọn tối ưu vì hệ sinh thái hàm phong phú và mọi mô hình LLM đều nắm cực vững cú pháp Pandas. Tuy nhiên, nếu bạn cần xử lý tệp CSV/Parquet từ 2GB đến 20GB trên máy tính cá nhân, hãy đổi biến số yêu cầu trong System Prompt #2 sang thư viện Polars (sử dụng Lazy Evaluation pl.scan_parquet) để tận dụng đa luồng CPU và giảm 70% lượng RAM tiêu thụ.
Bài viết Chuyên sâu Cùng Chuyên mục Prompt Lập trình & Phân tích dữ liệu
- Bộ Prompt Review Mã Nguồn, Refactor Kiến trúc Clean Code và Sinh Unit Test Tự động cho Lập trình viên trên Cursor AI & Claude
- Kỹ thuật Few-Shot Prompting, XML Tag Structuring và Self-Consistency: 3 Phương pháp Triệt tiêu Ảo giác Khi Xử lý Tiếng Việt
- Thư viện Prompt Biên tập Copywriting Chuyển đổi Cao cho Landing Page, Email B2B và Kịch bản Video Ngắn Đa Kênh
Bình luận & Trao đổi