Cấu hình môi trường Python và thư viện xử lý Embedding
Bước đầu tiên là thiết lập môi trường Python ảo (venv) để cách ly các thư viện AI nặng khỏi hệ thống Ubuntu, tránh xung đột phiên bản.
Chúng ta sẽ sử dụng Python 3.12 mặc định trên Ubuntu 24.04. Cần cài đặt các thư viện cốt lõi: transformers để tải model, torch cho tính toán tensor, và psycopg2-binary để kết nối PostgreSQL.
Tạo thư mục dự án và kích hoạt môi trường ảo.
mkdir -p /opt/ai-pipeline && cd /opt/ai-pipeline
python3 -m venv venv
source venv/bin/activate
Kết quả mong đợi: Shell prompt thay đổi, xuất hiện dấu (venv) ở đầu dòng lệnh.
Cài đặt các gói thư viện cần thiết
Upgrade pip trước khi cài đặt để đảm bảo tương thích với các gói mới nhất.
pip install --upgrade pip
pip install transformers torch accelerate sentence-transformers psycopg2-binary python-dotenv
Thư viện accelerate giúp tối ưu hóa việc tải model trên GPU/CPU. sentence-transformers đóng gói sẵn các mô hình embedding phổ biến.
Kết quả mong đợi: Không báo lỗi cài đặt, các gói được liệt kê trong thư mục site-packages.
Cấu hình biến môi trường kết nối Database
Để script Python có thể truy cập PostgreSQL an toàn, ta cần lưu thông tin kết nối trong file .env thay vì hardcode.
Tạo file .env tại đường dẫn /opt/ai-pipeline/.env với nội dung hoàn chỉnh như sau (thay thế YOUR_DB_PASSWORD bằng mật khẩu thực tế đã đặt trong Phần 1):
cat > /opt/ai-pipeline/.env
File này chứa thông tin host, port, tên database, user và password. Script sẽ đọc file này để thiết lập kết nối.
Verify kết quả: Kiểm tra nội dung file bằng lệnh cat .env và đảm bảo mật khẩu đã được điền đúng.
Triển khai Script tạo Vector Embedding
Chọn và tải mô hình BGE-M3
Chúng ta sẽ sử dụng mô hình BAAI/bge-m3. Đây là mô hình đa ngôn ngữ (hỗ trợ tiếng Việt tốt), có độ dài ngữ cảnh lên đến 8192 tokens và hỗ trợ nhiều loại query.
Thay vì tải model thủ công, script sẽ tự động tải từ Hugging Face Hub lần đầu tiên chạy. Cần xác định rõ đường dẫn model trong code.
Viết script Python xử lý Pipeline
Tạo file create_embeddings.py tại /opt/ai-pipeline/create_embeddings.py. Script này thực hiện 4 bước: đọc dữ liệu văn bản, tạo vector bằng model, kết nối DB, và chèn dữ liệu.
Nội dung hoàn chỉnh của file script:
cat > /opt/ai-pipeline/create_embeddings.py
Kết quả mong đợi: Script in ra thông báo tải model, tiến độ encode, và xác nhận số lượng bản ghi đã chèn.
Chạy Pipeline và Verify kết quả
Chạy script Python trong môi trường ảo đã kích hoạt.
cd /opt/ai-pipeline
source venv/bin/activate
python create_embeddings.py
Lần chạy đầu tiên có thể mất 1-2 phút để tải model BGE-M3 (khoảng 2GB) về cache.
Để verify dữ liệu đã được chèn đúng vào bảng PostgreSQL, đăng nhập vào psql và chạy lệnh kiểm tra:
psql -U postgres -d ai_knowledge_base -c "SELECT id, content, embedding FROM documents LIMIT 2;"
Kết quả mong đợi: Hiển thị 2 dòng đầu tiên với cột embedding chứa mảng số float (ví dụ: [-0.023, 0.154, ...]). Nếu thấy lỗi column "embedding" does not exist, hãy quay lại Phần 2 để tạo bảng.
Verify độ chính xác của Vector
Để đảm bảo vector đã được chuẩn hóa (normalized) và có chiều dài đúng, chạy lệnh kiểm tra khoảng cách cosine giữa vector và chính nó (phải bằng 1.0 hoặc rất gần 1.0 nếu dùng cosine similarity).
psql -U postgres -d ai_knowledge_base -c "SELECT id, 1 - (embedding embedding) as self_similarity FROM documents LIMIT 1;"
Kết quả mong đợi: Giá trị self_similarity phải là 1.0 (hoặc 0.9999...). Nếu giá trị này thấp, mô hình hoặc quá trình chuẩn hóa có vấn đề.
Xử lý dữ liệu từ File CSV (Mở rộng)
Chuẩn bị file dữ liệu mẫu
Trong thực tế, dữ liệu thường nằm trong file CSV. Tạo file data_source.csv tại /opt/ai-pipeline/data_source.csv để test khả năng đọc file.
cat > /opt/ai-pipeline/data_source.csv
File này có 2 cột: id và content.
Cập nhật script để đọc từ CSV
Chỉnh sửa create_embeddings.py để thay thế phần DATA_SOURCE bằng hàm đọc file CSV sử dụng thư viện csv mặc định của Python.
Thay thế toàn bộ nội dung file /opt/ai-pipeline/create_embeddings.py bằng code sau:
cat > /opt/ai-pipeline/create_embeddings.py
Script này giờ có thể đọc bất kỳ file CSV nào có cấu trúc id, content.
Chạy và Verify dữ liệu từ CSV
Chạy script đã cập nhật.
python create_embeddings.py
Kiểm tra số lượng bản ghi trong bảng để xác nhận dữ liệu từ file CSV đã được thêm vào.
psql -U postgres -d ai_knowledge_base -c "SELECT COUNT(*) as total_records FROM documents;"
Kết quả mong đợi: total_records phải bằng 8 (5 bản ghi từ script cũ + 3 bản ghi từ file CSV).
Điều hướng series:
Mục lục: Series: Triển khai Database AI với PostgreSQL, pgvector và Ubuntu 24.04
« Phần 2: Cài đặt và cấu hình extension pgvector cho PostgreSQL
Phần 4: Triển khai truy vấn tìm kiếm tương tự (Similarity Search) bằng SQL »