Viết câu hỏi hiệu quả
Chất lượng câu trả lời của Agent phụ thuộc rất nhiều vào chất lượng câu hỏi của bạn. Bài viết này chia sẻ các nguyên tắc và mẹo để bạn viết câu hỏi hiệu quả, giúp Agent hiểu chính xác ý bạn và trả về kết quả đúng ngay từ lần đầu.
Nguyên tắc vàng: 5W + 1H
Một câu hỏi tốt cho Agent nên trả lời được các câu hỏi:
- What — Bạn muốn làm gì? (select, highlight, phân tích, …)
- Which — Layer/trường nào? (chỉ định rõ)
- Where — Khu vực nào? (nếu có)
- When — Có lọc theo thời gian không? (nếu có)
- Why — Mục đích cuối cùng là gì? (giúp Agent chọn cách tốt nhất)
- How — Bạn muốn kết quả như thế nào? (bảng, bản đồ, file)
10 nguyên tắc viết câu hỏi
1. Cụ thể thay vì chung chung
❌ Tệ:
Phân tích dữ liệu
✅ Tốt:
Tính tổng diện tích rừng tự nhiên theo từng huyện trong tỉnh Lâm Đồng
2. Chỉ định rõ layer và trường
❌ Tệ:
Chọn những cái lớn
✅ Tốt:
Chọn các thửa đất trong layer "thua_dat" có cột "dien_tich" lớn hơn 1000
3. Dùng tên trường chính xác
Nếu bạn không nhớ chính xác tên trường, hãy hỏi Agent trước:
Liệt kê các cột của layer lô rừng
Sau đó dùng tên chính xác trong câu hỏi tiếp theo.
4. Nói rõ ràng về đơn vị
❌ Tệ:
Tính tổng diện tích
✅ Tốt:
Tính tổng diện tích theo hecta (ha) cho từng huyện
5. Tránh từ mơ hồ
❌ Tệ:
Lọc những cái tốt
✅ Tốt:
Lọc các lô rừng có trạng thái = "tốt" và chất lượng >= 70%
6. Chia nhỏ tác vụ phức tạp
❌ Tệ (quá nhiều trong 1 câu):
Tính diện tích rừng theo huyện, vẽ biểu đồ, xuất PDF, gửi email cho sếp
✅ Tốt (chia thành nhiều bước):
Bước 1: Tính tổng diện tích rừng theo từng huyện
Bước 2: Vẽ biểu đồ cột cho kết quả trên
Bước 3: Tạo layout PDF với bản đồ + biểu đồ
7. Cho ngữ cảnh khi cần
Nếu bạn đã làm gì đó trước đó, hãy nhắc lại:
Với kết quả vừa rồi (tổng diện tích theo huyện), hãy vẽ biểu đồ
8. Yêu cầu rõ ràng về output
❌ Tệ:
Cho tôi xem kết quả
✅ Tốt:
Hiển thị kết quả dạng bảng, sắp xếp theo diện tích giảm dần, chỉ top 10
9. Dùng ví dụ khi cần
Style theo gradient từ vàng (giá trị thấp) sang đỏ (giá trị cao) cho cột diện tích
10. Xác nhận lại khi kết quả sai
Kết quả trả về 152,340 ha cho huyện Bắc Bình. Con số này có vẻ lớn. Bạn kiểm tra lại giúp tôi được không?
So sánh câu hỏi tốt vs xấu
Ví dụ 1: Tìm lô rừng
❌ Xấu:
Tìm lô rừng
✅ Tốt:
Tìm tất cả lô rừng trong layer "lo_rung" có cột "loai_rung" = "rừng tự nhiên" và "dien_tich_ha" > 50
Ví dụ 2: Thống kê
❌ Xấu:
Thống kê rừng
✅ Tốt:
Thống kê tổng diện tích rừng theo cột "tinh_thanh", sắp xếp giảm dần, hiển thị top 5 tỉnh có diện tích rừng lớn nhất
Ví dụ 3: Tạo bản đồ
❌ Xấu:
Làm bản đồ đẹp
✅ Tốt:
Tô màu gradient cho cột "dien_tich" của layer "lo_rung", dùng 5 cấp màu từ vàng nhạt đến đỏ đậm, thêm đường viền đen 0.5px
Ví dụ 4: Phân tích
❌ Xấu:
Xem có bao nhiêu rừng
✅ Tốt:
Đếm số lô rừng theo từng giá trị của cột "trang_thai" trong layer "lo_rung", cho biết tổng cộng có bao nhiêu lô
Cú pháp tham chiếu
Tham chiếu layer
Trong layer [tên layer]
Ví dụ: Trong layer "lo_rung", chọn các feature có diện tích > 100 ha
Tham chiếu cột (trường)
Cột [tên cột]
Ví dụ: Lọc theo cột "loai_rung" = "rừng tự nhiên"
Tham chiều feature đã chọn
Các feature đang được chọn
Ví dụ: Tính tổng diện tích của các feature đang được chọn trong layer "lo_rung"
Kết hợp nhiều điều kiện
[điều kiện 1] VÀ/HOẶC [điều kiện 2]
Ví dụ: Chọn lô rừng có "loai_rung" = "tự nhiên" VÀ "dien_tich_ha" > 50
Khi nào nên dùng Python script?
Nếu câu hỏi của bạn quá phức tạp cho UI/QGIS expression, Agent sẽ tự động chuyển sang dùng Python script. Bạn cũng có thể yêu cầu trực tiếp:
Dùng Python script để tính khoảng cách giữa tất cả các cặp điểm trong layer "tram_quan_trac"
Xem chi tiết tại Bài 10: Python Console.
Xử lý khi Agent trả lời sai
Bước 1: Kiểm tra kết quả
Đọc kỹ kết quả Agent trả về. Nếu có gì đó không đúng (vd: số liệu vô lý, layer không tồn tại), đừng tiếp tục dùng kết quả đó.
Bước 2: Sửa lại câu hỏi
Kết quả trả về có vẻ không đúng. Bạn có thể kiểm tra lại bằng cách:
1. Liệt kê các layer có chứa cột "dien_tich"
2. Tính tổng diện tích từng layer một
Bước 3: Cung cấp thêm ngữ cảnh
Tôi muốn tính diện tích rừng cho tỉnh Lâm Đồng. Lớp "lo_rung" chứa tất cả lô rừng cả nước, bạn cần lọc theo cột "tinh_thanh" = "Lâm Đồng" trước khi tính tổng
Bước 4: Reset nếu cần
Bắt đầu lại từ đầu với câu hỏi rõ ràng hơn.
Mẹo nâng cao
1. Dùng session/thread
Mỗi cuộc hội thoại với Agent có thể được lưu lại. Bạn có thể quay lại sau và tiếp tục:
Tiếp tục từ cuộc hội thoại trước, bây giờ hãy vẽ biểu đồ cho kết quả
2. Hỏi Agent về khả năng của nó
Bạn có thể làm được gì trong QGIS?
Tool nào dùng để tính diện tích?
3. Yêu cầu giải thích
Giải thích cách bạn tính ra kết quả này
Tại sao bạn chọn thuật toán này?
4. Đề xuất workflow
Tôi cần phân tích rừng hàng quý. Bạn có thể đề xuất workflow tự động không?
5. Dùng hình ảnh
Agent có thể “nhìn” bản đồ:
Nhìn bản đồ hiện tại, khu vực nào có nhiều lô rừng tự nhiên nhất?
Từ điển thuật ngữ QGIS ↔ tiếng Việt
| Thuật ngữ QGIS | Tiếng Việt phổ biến |
|---|---|
| Layer | Lớp |
| Feature | Đối tượng |
| Attribute | Thuộc tính |
| Select | Chọn |
| Highlight | Tô màu nổi bật |
| Filter | Lọc |
| Buffer | Vùng đệm |
| Intersect | Giao |
| Union | Hợp |
| Clip | Cắt theo ranh giới |
| CRS / SRS | Hệ tọa độ |
| Extent | Phạm vi |
| Raster | Ảnh (raster) |
| Vector | Vector (điểm, đường, vùng) |
| Query | Truy vấn |
| Expression | Biểu thức |
| Renderer | Bộ hiển thị (style) |