Menu
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Đang tải...

Bài 17 — Prompt for extraction — Pull structured data

Prompt Engineering for Business Bài 17/60

Mở đầu — vì sao bài này quan trọng

Hãy tưởng tượng bạn là quản lý tuyển dụng của một công ty công nghệ ở TP.HCM. Mỗi đợt tuyển, hộp thư của bạn nhận về 800 CV dưới đủ mọi định dạng: PDF, Word, ảnh chụp màn hình, thậm chí là email dài dằng dặc. Bạn cần một bảng Excel gọn gàng gồm tên, email, số năm kinh nghiệm, kỹ năng chính. Nếu làm tay, mỗi CV mất 3 phút, tổng cộng 40 tiếng làm việc thuần túy — gần trọn một tuần chỉ để copy-paste.

Đây chính là bài toán mà extraction prompting (prompt trích xuất) sinh ra để giải quyết. Trong khi các bài trước dạy bạn cách để AI sinh ra nội dung mới, thì bài này tập trung vào một nhiệm vụ khác hẳn về bản chất: biến văn bản lộn xộn, phi cấu trúc (unstructured text) thành dữ liệu có cấu trúc (structured data) mà máy tính và con người đều dùng được ngay.

Trích xuất dữ liệu là một trong những ứng dụng có ROI cao nhất của Prompt Engineering trong doanh nghiệp, vì nó tấn công trực tiếp vào loại công việc thủ công tốn thời gian mà không ai muốn làm: đọc, tìm, chép lại. Từ CV, hóa đơn, hợp đồng, email khách hàng, đơn hàng, cho đến biên bản họp — tất cả đều là mỏ vàng dữ liệu đang bị "khóa" trong định dạng khó dùng. Bài này sẽ dạy bạn cách mở khóa nó một cách đáng tin cậy.

Khái niệm cốt lõi

Trích xuất khác gì với các tác vụ khác?

Điểm mấu chốt cần nắm: trích xuất không phải là sáng tạo, mà là định vị và sao chép trung thực. Khi bạn yêu cầu AI viết một email marketing, bạn muốn nó sáng tạo, thêm thắt, diễn giải. Nhưng khi trích xuất, mọi sự "sáng tạo" đều là lỗi. Nếu hóa đơn ghi số tiền là 12.500.000đ mà AI trả về 12.000.000đ vì "làm tròn cho đẹp", đó là thảm họa kế toán.

Vì vậy triết lý viết prompt trích xuất xoay quanh ba nguyên tắc:

  • Định nghĩa rõ schema đầu ra — bạn muốn lấy đúng những trường (field) nào, tên gì, kiểu dữ liệu gì.
  • Ép AI trung thực với nguồn — chỉ lấy cái có trong văn bản, không được bịa (hallucinate).
  • Quy định rõ cách xử lý khi thiếu dữ liệu — nếu không tìm thấy trường nào đó thì phải làm sao.

Schema — bản thiết kế của dữ liệu đầu ra

Schema là "khuôn" bạn muốn AI đổ dữ liệu vào. Ví dụ với CV, schema của bạn có thể là:

{
  "ho_ten": "string",
  "email": "string hoặc null",
  "so_dien_thoai": "string hoặc null",
  "so_nam_kinh_nghiem": "number",
  "ky_nang_chinh": ["array of strings"],
  "vi_tri_gan_nhat": "string hoặc null"
}

Việc khai báo schema rõ ràng (thường kết hợp với kỹ thuật structured output ở Bài 9) giúp bạn nhận về kết quả đồng nhất giữa 800 CV, thay vì mỗi CV một kiểu trình bày. Đây là điều kiện tiên quyết để đổ dữ liệu vào Excel, Google Sheets hay database.

Ba tình huống trích xuất kinh điển trong kinh doanh

  • CV → hồ sơ ứng viên: họ tên, email, kỹ năng, số năm kinh nghiệm.
  • Hóa đơn → dữ liệu kế toán: tên nhà cung cấp, mã số thuế, tổng tiền, hạn thanh toán.
  • Email → hành động cần làm: người gửi, ý định (intent), các đầu việc (action items), deadline.
Điểm chung: đầu vào là văn bản tự do do con người viết, đầu ra là các ô dữ liệu gọn gàng.

Xử lý dữ liệu thiếu — trường hợp quan trọng nhất

Đây là nơi 90% người mới thất bại. Khi một trường không có trong văn bản (ví dụ CV không ghi số điện thoại), AI có xu hướng bịa ra một số điện thoại trông hợp lý, hoặc suy đoán dựa trên ngữ cảnh. Cả hai đều nguy hiểm. Bạn phải chỉ thị rõ ràng: "Nếu không tìm thấy thông tin cho một trường, hãy điền null. Tuyệt đối không suy đoán, không bịa." Đây là câu lệnh bắt buộc trong mọi prompt trích xuất nghiêm túc.

Tình huống thực tế

Ví dụ 1 — Sàn tuyển dụng sàng lọc 800 CV mỗi tuần

Một startup HR-tech giả định tên TuyểnGọn ở Hà Nội xây dựng công cụ giúp nhà tuyển dụng nhập nhanh CV vào hệ thống. Ban đầu họ dùng prompt ngây thơ: "Trích xuất thông tin từ CV này." Kết quả là mỗi lần chạy lại ra một định dạng khác nhau, có khi AI viết cả đoạn văn mô tả ứng viên thay vì trả về dữ liệu.

Họ sửa lại thành prompt có kỷ luật:

Bạn là hệ thống trích xuất dữ liệu CV. Chỉ trả về JSON theo schema sau,
không thêm bất kỳ lời giải thích nào:
{
  "ho_ten": string,
  "email": string | null,
  "so_dien_thoai": string | null,
  "so_nam_kinh_nghiem": number | null,
  "ky_nang": string[],
  "hoc_van_cao_nhat": string | null
}
Quy tắc:
  • Chỉ lấy thông tin có thật trong CV. Không suy đoán.
  • Nếu thiếu, điền null (với "ky_nang" thì điền []).
  • "so_nam_kinh_nghiem" là tổng số năm đi làm, làm tròn xuống.
CV: """ [nội dung CV] """

Bài học rút ra: Việc thêm vai trò "hệ thống trích xuất dữ liệu", khóa định dạng JSON, và quy tắc xử lý thiếu đã đưa độ chính xác từ khoảng 70% lên trên 95%. Con số 3 phút/CV giảm xuống còn vài giây, và quan trọng hơn là kết quả nhất quán để đổ thẳng vào database.

Ví dụ 2 — Phòng kế toán một chuỗi F&B xử lý hóa đơn nhà cung cấp

Chuỗi cà phê giả định Cội Coffee có 30 chi nhánh, mỗi tháng nhận hàng trăm hóa đơn từ nhà cung cấp nguyên liệu — sữa, cà phê hạt, cốc giấy. Kế toán phải nhập tay từng hóa đơn vào phần mềm. Họ chụp ảnh hóa đơn, dùng OCR để chuyển thành text, rồi đưa cho AI trích xuất:

Trích xuất dữ liệu hóa đơn sau thành JSON:
{
  "ten_nha_cung_cap": string,
  "ma_so_thue": string | null,
  "so_hoa_don": string | null,
  "ngay_lap": "YYYY-MM-DD" | null,
  "tong_tien_truoc_thue": number,
  "vat": number | null,
  "tong_tien_thanh_toan": number,
  "han_thanh_toan": "YYYY-MM-DD" | null
}
Quy tắc:
  • Số tiền trả về dạng số nguyên (VND), bỏ dấu chấm phân cách, ví dụ
"12.500.000đ" -> 12500000.
  • Chuẩn hóa ngày về định dạng YYYY-MM-DD.
  • Nếu một trường không có, điền null. Không tự tính toán suy đoán.

Một chi tiết tinh tế: Cội Coffee từng gặp lỗi khi AII tự "kiểm tra" bằng cách tính tong_tien_truoc_thue + vat rồi ghi đè lên tong_tien_thanh_toan. Có hóa đơn phụ phí vận chuyển khiến phép cộng không khớp, và AI đã "sửa" con số cho khớp — sai với hóa đơn gốc. Họ phải thêm rõ: "Lấy đúng con số in trên hóa đơn, không tự tính lại."

Bài học rút ra: Trong trích xuất tài chính, quy tắc chuẩn hóa (số, ngày, đơn vị tiền tệ) và cấm AI tự suy diễn là tối quan trọng. Sai một con số có thể dẫn tới sai lệch sổ sách và rắc rối thuế. Luôn để con người kiểm tra ngẫu nhiên (spot-check) một tỷ lệ nhỏ trước khi ghi vào hệ thống.

Ví dụ 3 — Trợ lý xử lý email của một agency

Một agency marketing ở Đà Nẵng nhận hàng trăm email khách hàng mỗi ngày. Họ muốn tự động phân loại và rút ra đầu việc. Prompt của họ trích xuất cả ý định của người gửi lẫn các hành động cần làm kèm deadline:

Đọc email dưới đây và trích xuất JSON:
{
  "nguoi_gui": string,
  "y_dinh_chinh": "yeu_cau_bao_gia" 
"phan_hoi_du_an"
"khieu_nai" | "hoi_dap" | "khac", "action_items": [ { "viec_can_lam": string, "deadline": "YYYY-MM-DD" | null } ], "muc_do_khan": "cao" | "trung_binh" | "thap" } Nếu email không nêu deadline rõ ràng, để deadline = null.

Với một email khách viết: "Bên anh cần bảng báo giá gói social media trước thứ Sáu tuần này để kịp trình sếp", prompt trả về ý định yeu_cau_bao_gia, một action item "gửi bảng báo giá gói social media" với deadline là ngày thứ Sáu tương ứng, mức độ khẩn "cao".

Bài học rút ra: Trích xuất có thể vượt xa việc chép nguyên văn — nó có thể kết hợp với phân loại (Bài 16) để suy ra các trường như "ý định" hay "mức độ khẩn". Nhưng lưu ý: với deadline, việc quy đổi "thứ Sáu tuần này" thành ngày cụ thể đòi hỏi AI biết ngày hiện tại, nên bạn cần cung cấp ngày tham chiếu trong prompt (ví dụ: "Hôm nay là 2026-06-27").

Hướng dẫn từng bước

Bước 1 — Xác định chính xác bạn cần lấy gì. Trước khi viết một chữ nào cho prompt, hãy liệt kê các trường bạn cần và câu hỏi tự đặt: dữ liệu này rồi sẽ đổ vào đâu (Excel, CRM, database)? Điều này quyết định tên trường và kiểu dữ liệu.

Bước 2 — Viết schema rõ ràng. Khai báo tên trường, kiểu dữ liệu (string, number, array, boolean), và trường nào bắt buộc, trường nào có thể null. Nên dùng JSON làm định dạng đầu ra vì nó dễ parse bằng code.

Bước 3 — Đặt vai trò và cấm "nói thêm". Mở đầu bằng câu như "Bạn là hệ thống trích xuất dữ liệu. Chỉ trả về JSON, không giải thích, không thêm văn bản ngoài JSON." Điều này ngăn AI trả về những câu như "Đây là dữ liệu bạn cần:" gây khó cho việc parse tự động.

Bước 4 — Viết quy tắc xử lý biên (edge cases). Bao gồm: (a) trường thiếu thì điền gì; (b) chuẩn hóa định dạng số/ngày/tiền tệ; (c) cấm suy đoán và tự tính toán; (d) xử lý khi có nhiều giá trị (ví dụ nhiều email thì lấy cái nào).

Bước 5 — Phân tách rõ dữ liệu đầu vào. Đặt văn bản nguồn trong dấu phân cách rõ ràng như """...""" để AI không nhầm lẫn giữa hướng dẫn và dữ liệu cần trích.

Bước 6 — Kiểm thử với các ca khó. Đừng chỉ test CV hoàn hảo. Hãy đưa vào CV thiếu email, hóa đơn mờ chữ, email viết lan man. Chính những ca này lộ ra chỗ prompt còn yếu.

Bước 7 — Thêm lớp kiểm tra. Với dữ liệu quan trọng (tài chính, pháp lý), luôn có bước con người kiểm tra ngẫu nhiên, hoặc dùng code để validate (ví dụ: email phải có ký tự @, số tiền phải dương).

Lỗi thường gặp & mẹo

Lỗi 1 — Không xử lý dữ liệu thiếu. Đây là lỗi phổ biến nhất. Không nói gì về trường thiếu, AI sẽ bịa. Mẹo: luôn có câu "thiếu thì điền null, không suy đoán".

Lỗi 2 — Để AI trả về kèm lời dẫn. AI hay thêm "Chắc chắn rồi, đây là dữ liệu:" trước JSON, làm code parse bị lỗi. Mẹo: ra lệnh "chỉ trả về JSON hợp lệ, không có văn bản nào khác" và cân nhắc dùng chế độ JSON mode nếu API hỗ trợ.

Lỗi 3 — Không chuẩn hóa định dạng. Ngày có thể ra "15/3/2026", "March 15", "15-03-26" lẫn lộn. Mẹo: chỉ định rõ định dạng chuẩn như YYYY-MM-DD ngay trong schema.

Lỗi 4 — Để AI tự tính toán rồi ghi đè dữ liệu gốc. Như ví dụ Cội Coffee, việc AI "giúp" tính lại tổng tiền có thể làm sai con số thật. Mẹo: nhấn mạnh "lấy đúng giá trị xuất hiện trong văn bản, không tự tính".

Lỗi 5 — Nhồi quá nhiều tài liệu vào một lần. Nếu ghép 50 CV vào một prompt, AI dễ lẫn dữ liệu giữa các ứng viên. Mẹo: trích xuất từng tài liệu một, hoặc nếu gộp thì yêu cầu trả về một mảng và đánh số rõ ràng.

Mẹo nâng cao — dùng few-shot cho ca khó. Nếu tài liệu có cấu trúc đặc thù (ví dụ hóa đơn của một nhà cung cấp lạ), cho AI 1-2 ví dụ đầu vào–đầu ra mẫu (few-shot, Bài 6) sẽ tăng độ chính xác đáng kể.

Mẹo — thêm trường "do_tin_cay" (confidence). Với các ca mờ, bạn có thể yêu cầu AI trả thêm mức độ chắc chắn cho từng trường, để hệ thống biết trường nào cần con người xem lại.

Bài tập thực hành

  • CV cơ bản: Lấy một CV bất kỳ (của bạn hoặc mẫu trên mạng), viết prompt trích xuất ra JSON gồm: họ tên, email, số điện thoại, 5 kỹ năng chính, số năm kinh nghiệm. Bắt buộc có quy tắc xử lý trường thiếu.
  • Hóa đơn có bẫy: Tìm một ảnh hóa đơn điện/nước của bạn, gõ lại nội dung thành text, rồi viết prompt trích xuất nhà cung cấp, tổng tiền, hạn thanh toán. Cố tình xóa đi phần hạn thanh toán và kiểm tra xem AI có trả về null đúng không, hay nó bịa ra một ngày.
  • Email đa hành động: Viết một email giả định của khách hàng chứa 3 yêu cầu khác nhau với 2 deadline. Viết prompt trích xuất tất cả action items kèm deadline (nhớ cung cấp ngày hôm nay). Kiểm tra xem AI có bỏ sót việc nào không.
  • Nâng cao: Lấy prompt hóa đơn ở bài 2, thêm quy tắc chuẩn hóa số tiền về số nguyên VND và ngày về YYYY-MM-DD. Chạy trên 3 hóa đơn khác nhau và so sánh tính nhất quán của đầu ra.

Tóm tắt

Trích xuất dữ liệu là kỹ năng biến văn bản phi cấu trúc thành dữ liệu có cấu trúc dùng được ngay — một trong những ứng dụng ROI cao nhất của prompt trong doanh nghiệp. Khác với các tác vụ sáng tạo, trích xuất đòi hỏi sự trung thực tuyệt đối với nguồn: định vị và sao chép, không bịa, không suy đoán.

Ba trụ cột của một prompt trích xuất tốt là: (1) schema rõ ràng định nghĩa trường và kiểu dữ liệu; (2) quy tắc xử lý dữ liệu thiếu (điền null, không suy đoán) — đây là điểm quyết định thành bại; và (3) quy tắc chuẩn hóa và cấm tự tính toán để đảm bảo con số, ngày tháng luôn đúng và nhất quán.

Qua ba tình huống — sàng lọc CV, xử lý hóa đơn kế toán, và rút action items từ email — bạn đã thấy cùng một khung tư duy áp dụng cho mọi loại tài liệu. Hãy nhớ: luôn kiểm thử với ca khó, luôn có lớp kiểm tra cho dữ liệu quan trọng, và luôn tách bạch dữ liệu đầu vào khỏi hướng dẫn. Nắm vững trích xuất, bạn đã có trong tay công cụ để tự động hóa hàng chục giờ lao động thủ công mỗi tuần.