Tôi vẫn nhớ cách đây 3 tháng, khi team mình triển khai hệ thống RAG nội bộ cho một ngân hàng lớn tại TP. HCM. Ngày ra mắt, lượng truy vấn tăng vọt, và chỉ sau 2 giờ, hệ thống giám sát phát hiện ra một log lưu trữ số CMND thật của khách hàng — vì một nhân viên mới copy-paste câu hỏi của khách vào prompt mà quên bật bộ lọc. Ngay lập tức phòng pháp chế vào cuộc, buổi họp khẩn kéo dài đến 11 giờ đêm, và dự án suýt bị đình chỉ. Đó chính là lúc tôi quyết tâm xây dựng lại toàn bộ pipeline tiền xử lý khử nhạy hóa dữ liệu (PII detection & masking) mà tôi sẽ chia sẻ trong bài viết này.

Bài viết hướng dẫn bạn dựng một lớp trung gian "sanitize" mọi prompt trước khi gửi tới model, sử dụng HolySheep AI làm lớp phát hiện thông minh kết hợp regex và LLM. Tất cả ví dụ đều chạy được ngay với base_url https://api.holysheep.ai/v1.

1. PII là gì và vì sao phải xử lý trước khi gọi AI API?

Thông tin định danh cá nhân (Personally Identifiable Information - PII) bao gồm: số CMND/CCCD, số điện thoại, email, địa chỉ, số tài khoản ngân hàng, mã số thuế, họ tên... Khi gửi những dữ liệu này cho model AI bên thứ ba, bạn đối mặt với 3 rủi ro lớn:

Giải pháp: chèn một middleware ngay trước khi gọi API, có nhiệm vụ phát hiện và thay thế PII bằng token giả (masking). Đây là kiến trúc tôi áp dụng và đã vận hành ổn định suốt 4 tháng qua với hơn 2.3 triệu lượt truy vấn production.

2. Kiến trúc pipeline 3 lớp

Tôi chia pipeline thành 3 lớp để cân bằng giữa tốc độ và độ chính xác:

3. Triển khai code với HolySheep AI

Dưới đây là module Python hoàn chỉnh. Bạn có thể copy và chạy ngay sau khi đăng ký tài khoản HolySheep để nhận tín dụng miễn phí.

# pii_sanitizer.py - Pipeline khử nhạy hóa dữ liệu
import re
import json
import hashlib
from openai import OpenAI

Client trỏ thẳng vào HolySheep, KHÔNG dùng api.openai.com

client = OpenAI( base_url="https://api.holysheep.ai/v1", api_key="YOUR_HOLYSHEEP_API_KEY" )

===== LỚP 1: REGEX NHANH =====

REGEX_PATTERNS = { "PHONE_VN": re.compile(r"(?:\+84|0)(?:3|5|7|8|9)[0-9]{8}\b"), "CMND": re.compile(r"\b[0-9]{9,12}\b"), "EMAIL": re.compile(r"\b[\w._%+-]+@[\w.-]+\.[A-Za-z]{2,}\b"), "STK": re.compile(r"\b[0-9]{10,16}\b"), "IPV4": re.compile(r"\b(?:\d{1,3}\.){3}\d{1,3}\b"), } def layer1_regex(text: str) -> tuple[str, dict]: masked, mapping = text, {} for label, pattern in REGEX_PATTERNS.items(): for match in pattern.findall(text): token = f"[{label}_{hashlib.md5(match.encode()).hexdigest()[:6]}]" mapping[token] = match masked = masked.replace(match, token, 1) return masked, mapping

===== LỚP 2: LLM PHÂN LOẠI QUA HOLYSHEEP =====

SYSTEM_PROMPT_PII = """Bạn là bộ phát hiện PII tiếng Việt. Trích xuất mọi thông tin cá nhân (tên người, địa chỉ, nghề nghiệp, bệnh lý, số tài khoản, thu nhập) và thay bằng token [PII_x]. Chỉ trả về JSON: {"masked": "...", "tokens": {"[PII_1]": "...", ...}}""" def layer2_llm(text: str) -> tuple[str, dict]: resp = client.chat.completions.create( model="deepseek-v3.2", messages=[ {"role": "system", "content": SYSTEM_PROMPT_PII}, {"role": "user", "content