Thiết Kế Hệ Thống RAG Bảo Mật Cao Cho Doanh Nghiệp Với PostgreSQL (pgvector) Và Ollama
Đặt Vấn Đề: Thách Thức Bảo Mật Dữ Liệu Khi Triển Khai RAG Enterprise
Trong kỷ nguyên trí tuệ nhân tạo, Retrieval-Augmented Generation (RAG) đã trở thành kiến trúc chuẩn mực giúp doanh nghiệp khai thác sức mạnh của các mô hình ngôn ngữ lớn (LLM) dựa trên kho tri thức nội bộ. Tuy nhiên, đối với khối ngân hàng, tài chính, y tế hoặc các tập đoàn công nghệ lớn, việc gửi dữ liệu nhạy cảm qua API của các nhà cung cấp bên thứ ba là một rủi ro pháp lý và bảo mật không thể chấp nhận được.
Để giải quyết bài toán này, xu hướng xây dựng hệ thống RAG On-Premise hoặc Private Cloud đang trở thành ưu tiên hàng đầu. Bài viết này hướng dẫn chi tiết cách thiết lập một hệ thống RAG bảo mật cấp doanh nghiệp, tận dụng hai công cụ mã nguồn mở mạnh mẽ nhất hiện nay: PostgreSQL (với extension pgvector) làm cơ sở dữ liệu vector toàn diện, và Ollama để chạy các mô hình ngôn ngữ lớn cục bộ hoàn toàn.
---Kiến Trúc Tổng Quan Của Hệ Thống RAG Bảo Mật
Một hệ thống RAG bảo mật cao cần tuân thủ nguyên tắc cách ly dữ liệu: không một byte dữ liệu nào được phép rời khỏi hạ tầng mạng nội bộ của doanh nghiệp. Sơ đồ luồng xử lý bao gồm:
- Data Ingestion Pipeline: Tài liệu nội bộ (PDF, Word, Markdown) được trích xuất, làm sạch và chia nhỏ (chunking).
- Embedding Generation: Sử dụng Ollama với mô hình Embedding cục bộ (như
nomic-embed-texthoặcbge-m3) để chuyển đổi text thành các vector định danh. - Vector Storage: Lưu trữ text chunks và vectors tương ứng vào cơ sở dữ liệu PostgreSQL bảo mật có cài sẵn extension
pgvector. - Multi-Tenant Retrieval: Tìm kiếm tương đồng kết hợp bộ lọc phân quyền (Row-Level Security - RLS) để trích xuất ngữ cảnh chính xác mà không lộ dữ liệu chéo giữa các phòng ban.
- Local Generation: Gửi câu hỏi kèm ngữ cảnh (context) bảo mật vào mô hình LLM cục bộ (như Llama 3 hoặc Mistral) đang chạy trên Ollama để sinh câu trả lời cuối cùng.
Bước 1: Cấu Hình PostgreSQL Với pgvector Và Cơ Chế Bảo Mật Toàn Diện
Thay vì sử dụng các cơ sở dữ liệu vector độc lập (SaaS), việc sử dụng PostgreSQL giúp doanh nghiệp tận dụng hạ tầng database sẵn có, cơ chế sao lưu, tính nhất quán ACID và đặc biệt là hệ thống phân quyền nghiêm ngặt.
Kích hoạt extension pgvector
Trước tiên, đảm bảo bạn đang sử dụng phiên bản PostgreSQL mới nhất (khuyến nghị Postgres 16+) để đạt hiệu năng index vector tốt nhất:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm; -- Hỗ trợ tìm kiếm kết hợp hybrid search
Thiết kế Schema phân quyền đa người dùng (Multi-Tenancy)
Trong môi trường enterprise, nhân viên phòng kế toán không được phép truy cập tài liệu của phòng nhân sự. Chúng ta cần thiết kế bảng lưu trữ hỗ trợ phân quyền ở mức dòng (Row-Level Security):
CREATE TABLE enterprise_documents (
id BIGSERIAL PRIMARY KEY,
department_id VARCHAR(50) NOT NULL,
title TEXT,
content TEXT NOT NULL,
embedding vector(768), -- Phù hợp với dimension của nomic-embed-text
created_at TIMESTAMPTZ DEFAULT now()
);
Áp dụng Row-Level Security (RLS) để bảo vệ dữ liệu
Kích hoạt RLS trên bảng dữ liệu để đảm bảo người dùng chỉ có thể truy vấn các vector thuộc phòng ban của họ:
ALTER TABLE enterprise_documents ENABLE ROW LEVEL SECURITY;
CREATE POLICY department_access_policy ON enterprise_documents
FOR SELECT
USING (department_id = current_setting('app.current_department_id', true));
Mẹo tối ưu: Để tăng tốc độ tìm kiếm tương đồng trên hàng triệu bản ghi, hãy khởi tạo index HNSW (Hierarchical Navigable Small World) trên cột embedding:
CREATE INDEX ON enterprise_documents USING hnsw (embedding vector_cosine_ops);
---
Bước 2: Cài Đặt Và Cách Ly Ollama Trong Mạng Nội Bộ
Ollama cung cấp giải pháp triển khai LLM nội bộ nhẹ nhàng và hiệu năng cao. Để đảm bảo an toàn cho môi trường doanh nghiệp, cần thiết lập Ollama chạy dưới dạng một service nội bộ, không public port ra ngoài internet.
Cấu hình mạng an toàn cho Ollama
Mặc định, Ollama lắng nghe tại 127.0.0.1:11434. Nếu cần gọi Ollama từ các cụm ứng dụng khác trong mạng LAN, hãy cấu hình biến môi trường trong file cấu hình dịch vụ hệ thống (systemd service) của Linux:
[Service]
Environment="OLLAMA_HOST=10.0.0.5:11434"
Environment="OLLAMA_NUM_PARALLEL=4" # Tối ưu hóa xử lý đồng thời
Tải các mô hình chuyên dụng cho Enterprise
Chúng ta cần hai mô hình: một mô hình sinh text (LLM) và một mô hình tạo embedding. Thực hiện lệnh trực tiếp trên server nội bộ:
- Mô hình Embedding:
ollama pull nomic-embed-text(Khởi tạo vector 768 chiều với ngữ cảnh lớn). - Mô hình LLM:
ollama pull llama3:8bhoặcollama pull mistral(Tùy thuộc vào cấu hình phần cứng GPU có sẵn).
Bước 3: Xây Dựng Pipeline Tìm Kiếm Hỗn Hợp (Hybrid Search) Bảo Mật
Tìm kiếm chỉ dựa trên khoảng cách vector đôi khi bỏ sót các từ khóa kỹ thuật chính xác (mã lỗi, số hiệu sản phẩm). Một hệ thống RAG chuẩn Enterprise luôn cần sự kết hợp giữa Vector Search và Full-Text Search (BM25).
Dưới đây là cấu trúc câu truy vấn SQL thực hiện tìm kiếm hỗn hợp trực tiếp trong PostgreSQL, đảm bảo tuân thủ cơ chế bảo mật RLS đã thiết lập:
-- Thiết lập phòng ban của người dùng hiện tại trước khi truy vấn
SET LOCAL app.current_department_id = 'finance';
WITH vector_search AS (
SELECT id, content, 1 - (embedding <=> :query_embedding) AS similarity
FROM enterprise_documents
ORDER BY embedding <=> :query_embedding
LIMIT 10
),
text_search AS (
SELECT id, content, ts_rank_cd(to_tsvector('english', content), plainto_tsquery('english', :search_keyword)) AS rank
FROM enterprise_documents
WHERE to_tsvector('english', content) @@ plainto_tsquery('english', :search_keyword)
LIMIT 10
)
SELECT
COALESCE(v.id, t.id) AS id,
COALESCE(v.content, t.content) AS content,
(COALESCE(v.similarity, 0) * 0.7 + COALESCE(t.rank, 0) * 0.3) AS hybrid_score
FROM vector_search v
FULL OUTER JOIN text_search t ON v.id = t.id
ORDER BY hybrid_score DESC
LIMIT 5;
Sức mạnh của giải pháp này nằm ở chỗ PostgreSQL sẽ tự động loại bỏ các dòng tài liệu không thuộc phòng ban 'finance' trước khi tính toán khoảng cách vector hay xếp hạng từ khóa, triệt tiêu hoàn toàn rủi ro rò rỉ thông tin ở tầng database.
---Các Tiêu Chuẩn Bảo Mật Nâng Cao Khi Vận Hành
Để hoàn thiện hệ thống RAG sẵn sàng cho môi trường kiểm toán doanh nghiệp khắt khe, bạn cần lưu ý 3 yếu tố cốt lõi sau:
- Mã hóa dữ liệu tại chỗ (Data-at-Rest Encryption): Kích hoạt mã hóa toàn bộ ổ đĩa lưu trữ PostgreSQL bằng các công cụ như LUKS hoặc tận dụng các giải pháp lưu trữ đám mây riêng có mã hóa AES-256.
- Audit Logging toàn diện: Bật tính năng log chi tiết của PostgreSQL (sử dụng extension
pgaudit) để ghi vết toàn bộ các câu lệnh tìm kiếm ngữ cảnh, kiểm soát ai đã truy cập vào phần tài liệu nào và vào thời gian nào. - Giới hạn tài nguyên (Rate Limiting): Đặt hàng đợi xử lý (Message Queue) trước API của Ollama để tránh tình trạng hạ tầng GPU bị nghẽn khi có hàng trăm nhân viên cùng truy vấn hệ thống RAG đồng thời.
Kết Luận
Việc kết hợp PostgreSQL (pgvector) và Ollama mang lại một giải pháp RAG tối ưu cho doanh nghiệp: vừa duy trì hiệu năng tìm kiếm mạnh mẽ, vừa giữ toàn quyền kiểm soát dữ liệu trong hạ tầng nội bộ. Không phụ thuộc vào API bên ngoài, không lo ngại về chi phí token leo thang, và quan trọng nhất là tuân thủ tuyệt đối các quy định bảo mật nghiêm ngặt nhất. Hãy bắt đầu xây dựng nền tảng tri thức AI an toàn cho doanh nghiệp của bạn ngay hôm nay!
