Hỏi đáp file dữ liệu bằng ngôn ngữ tự nhiên với PandasAI
PandasAI cho phép đặt câu hỏi tự nhiên trên DataFrame để khám phá CSV nhanh hơn. Playbook này hướng dẫn cài đặt, đặt câu hỏi rõ ràng, kiểm tra nhiều bảng và đối soát kết quả trước khi đưa số liệu lên dashboard.
Một file doanh thu vừa được gửi từ business. Ngay lập tức, những câu hỏi quen thuộc xuất hiện: “Khu vực nào đóng góp nhiều nhất?”, “Top 3 quốc gia mang về bao nhiêu doanh số?”, “Vẽ nhanh biểu đồ để tôi xem”.
Với analyst, phần khó thường không phải là trả lời nhanh, mà là trả lời đúng định nghĩa chỉ tiêu, đúng kỳ thời gian và đúng quan hệ dữ liệu. PandasAI có thể rút ngắn bước khám phá ban đầu, nhưng không thay thế việc kiểm chứng trước khi một con số đi vào Power BI, Looker hoặc Metabase.
PandasAI dùng để làm gì?
PandasAI là thư viện Python cho phép đặt câu hỏi về dữ liệu bằng ngôn ngữ tự nhiên. Bạn nạp dữ liệu vào DataFrame, cấu hình một mô hình ngôn ngữ, rồi dùng chat() để hỏi.
README của dự án minh họa việc đọc CSV và hỏi doanh thu trung bình theo khu vực:
python
import pandasai as pai
from pandasailitellm.litellm import LiteLLM
Initialize LiteLLM with your OpenAI model
Configure PandasAI to use this LLM
Load your data
response = df.chat("What is the average revenue by region?")
print(response)
Trong công việc BI, cách tiếp cận này phù hợp cho giai đoạn khám phá:
Hỏi nhanh tổng hợp theo nhóm.
Kiểm tra các giá trị lớn nhất hoặc nhỏ nhất.
Thử một câu hỏi phân tích trước khi viết logic chính thức.
Yêu cầu tạo biểu đồ để quan sát dữ liệu.
Hãy xem câu trả lời từ PandasAI là một gợi ý phân tích cần kiểm tra, không phải logic production đã được phê duyệt. Nếu kết quả sẽ đi vào warehouse, semantic model, SQL view hoặc measure DAX, bạn vẫn cần tái lập phép tính trong quy trình dữ liệu chính thức.
Cài đặt và chạy thử với CSV
Theo README, PandasAI hỗ trợ Python từ 3.8+ đến 3.11. Cài thư viện cùng tích hợp LiteLLM:
bash
pip install pandasai
pip install pandasai-litellm
PandasAI cũng hỗ trợ các câu hỏi tổng hợp phức tạp hơn. Ví dụ trong README:
python
df.chat(
"What is the total sales for the top 3 countries by sales?"
)
Quy trình thử an toàn cho analyst
Đừng bắt đầu bằng một file lớn, nhiều cột và chưa rõ định nghĩa. Một quy trình thực tế hơn là:
Rút gọn dữ liệu cho câu hỏi đang cần trả lời.
Chỉ giữ các cột liên quan như ngày, khu vực, doanh thu, mã đơn hoặc trạng thái đơn hàng.
Kiểm tra cấu trúc dữ liệu trước.
Các tên cột gần giống nhau như sales, revenue, netsales có thể mang ý nghĩa khác nhau. Tương tự, orderdate và paiddate không nhất thiết đại diện cho cùng một kỳ báo cáo.
Đặt câu hỏi có điều kiện cụ thể.
Nêu rõ metric, chiều phân tích, thời gian và cách xử lý giá trị thiếu.
Đối chiếu lại kết quả.
Dùng pandas, SQL, DAX hoặc dashboard chuẩn hiện có để xác thực.
Chỉ dùng số đã kiểm tra trong báo cáo.
Một câu trả lời hội thoại không tự tạo lineage, định nghĩa metric hay data test cho dashboard của bạn.
Tài liệu mô tả PandasAI là công cụ hỏi dữ liệu bằng ngôn ngữ tự nhiên, nhưng không đưa ra đánh giá riêng về độ chính xác với tiếng Việt. Bạn có thể thử hỏi bằng tiếng Việt, song nên dùng tên cột rõ nghĩa và kiểm tra kỹ kết quả, nhất là với thuật ngữ nội bộ.
Mẫu câu hỏi để giảm mơ hồ
Một prompt tốt không cần dài, nhưng phải nêu đúng điều kiện tính toán:
text
Dựa trên DataFrame hiện có, hãy tính <chỉ tiêu> theo <chiều phân tích>.
Phạm vi thời gian: <điều kiện ngày>.
Nêu rõ cách xử lý giá trị thiếu nếu có.
Nếu không xác định được cột hoặc định nghĩa chỉ tiêu, hãy nói không đủ dữ liệu thay vì suy đoán.
Khi cần biểu đồ:
text
Vẽ biểu đồ cho <chỉ tiêu> theo <chiều phân tích>.
Hiển thị nhãn rõ ràng.
Không tự suy đoán đơn vị tiền tệ.
Kiểm tra giá trị thiếu trong cột số trước khi vẽ.
README có ví dụ yêu cầu PandasAI tạo biểu đồ:
python
df.chat(
"Plot the histogram of countries showing for each one the gdp. Use different colors for each bar",
)
Walkthrough: hỏi đúng để tránh “đúng câu chữ, sai số”
Giả sử bạn có dữ liệu rút gọn:
| region | revenue | orderdate |
|---|---:|---|
| North | 1 | <ngày> |
| South | 2 | <ngày> |
| North | 2 | <ngày> |
Thay vì hỏi “Khu vực nào tốt nhất?”, hãy hỏi cụ thể:
text
Tổng revenue theo region là bao nhiêu?
Chỉ dùng các dòng có orderdate thuộc <kỳ báo cáo>.
Liệt kê kết quả theo thứ tự giảm dần và cho biết revenue có giá trị thiếu hay không.
Một kết quả đáng xem xét phải bám vào các trường thực sự có trong bảng: region, revenue và orderdate. Sau đó, hãy quay lại kiểm tra dữ liệu bằng các thao tác pandas cơ bản:
python
df.head()
python
df.columns
python
df.describe()
Theo tài liệu pandas:
head() hiển thị các dòng đầu của DataFrame.
columns cho biết tên các cột.
describe() cung cấp tóm tắt thống kê nhanh cho dữ liệu số, như count, trung bình, min và max.
Đây là các bước đơn giản nhưng hữu ích để phát hiện cột bị gọi nhầm, dữ liệu thiếu hoặc kiểu dữ liệu không như kỳ vọng.
Hỏi trên nhiều bảng: kiểm tra join trước
PandasAI có thể nhận nhiều DataFrame trong một câu hỏi. README minh họa hai bảng nhân viên và lương, liên kết qua EmployeeID:
python
pai.chat("Who gets paid the most?", employeesdf, salariesdf)
Trong BI, đây có thể là tình huống ghép bảng đơn hàng với khách hàng, fact với dimension, hoặc bán hàng với chỉ tiêu.
Tuy nhiên, trước khi đặt câu hỏi trên nhiều bảng, hãy tự xác định:
Khóa liên kết là gì?
Một khóa có lặp lại trong bảng nào không?
Bạn mong đợi quan hệ một-một, một-nhiều hay nhiều-nhiều?
Các bản ghi không khớp khóa cần được giữ lại hay loại đi?
Có khác biệt về đơn vị tiền tệ, thời gian hoặc cấp độ dữ liệu không?
Bạn có thể nêu rõ ý định trong câu hỏi:
text
Có các bảng <bảng A> và <bảng B>.
Liên kết theo <khóa>.
Trước khi tính <chỉ tiêu>, hãy kiểm tra liệu một khóa có xuất hiện nhiều lần ở mỗi bảng hay không.
Không cộng dồn số tiền nếu việc liên kết làm một bản ghi bị nhân lên.
Nếu không xác định được quan hệ bảng, hãy nêu vấn đề.
Nếu tổng doanh thu cao bất thường, đừng vội sửa dashboard. Hãy kiểm tra duplicate key và số dòng trước, sau bước ghép bảng trong quy trình dữ liệu của bạn.
Excel, dữ liệu nhạy cảm và môi trường thực thi
README minh họa trực tiếp việc đọc CSV bằng pai.readcsv. Nếu nguồn dữ liệu là Excel, hãy kiểm tra tài liệu đầy đủ hoặc chuẩn hóa một bản CSV thử nghiệm trước khi áp dụng cho workbook thực tế.
Ví dụ cấu hình trong README sử dụng API key cho mô hình ngôn ngữ. Vì vậy, cần tuân thủ chính sách dữ liệu của tổ chức trước khi gửi dữ liệu sang dịch vụ AI. Khi thử nghiệm, nên ưu tiên dữ liệu đã được rút gọn hoặc ẩn danh; không dùng dữ liệu khách hàng, lương, hợp đồng hay thông tin cá nhân nếu chưa được phép.
README cũng cung cấp Docker Sandbox, một môi trường Docker cô lập để thực thi mã an toàn hơn và giảm rủi ro từ các tấn công độc hại.
Cài đặt:
bash
pip install "pandasai-docker"
Ví dụ khởi tạo sandbox:
python
from pandasaidocker import DockerSandbox
sandbox = DockerSandbox()
sandbox.start()
Thực hiện câu hỏi với sandbox
sandbox.stop()
Sandbox là một lớp cô lập bổ sung, không thay thế kiểm soát truy cập, chính sách dữ liệu hay việc review kết quả.
Checklist trước khi đưa số lên dashboard
[ ] Đã kiểm tra tên cột thật bằng df.columns.
[ ] Đã xem một số dòng dữ liệu bằng df.head().
[ ] Đã xác định metric, phạm vi ngày và cách xử lý giá trị thiếu.
[ ] Đã kiểm tra khóa và quan hệ dữ liệu nếu hỏi nhiều bảng.
[ ] Đã đối chiếu kết quả với SQL, DAX hoặc báo cáo chuẩn.
[ ] Đã tuân thủ chính sách dữ liệu khi sử dụng API và mô hình AI.
[ ] Không coi câu trả lời hội thoại là logic production.
PandasAI đáng thử khi bạn cần đi từ một CSV lạ đến câu hỏi phân tích đầu tiên nhanh hơn. Giá trị của nó không nằm ở việc “trả lời thay analyst”, mà ở việc giảm thời gian dò dữ liệu để bạn tập trung vào phần quan trọng hơn: định nghĩa đúng con số và chứng minh con số đó đúng.