Cài đặt Microsoft GraphRAG với Ollama: Tự xây dựng Knowledge Graph Local 100%

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

Tại sao RAG truyền thống đôi khi khiến bạn thất vọng?

Bạn đã bao giờ xây dựng Chatbot bằng RAG (Retrieval-Augmented Generation) nhưng lại thấy nó “ngáo” khi được hỏi về tổng quan tài liệu chưa? RAG thông thường trả lời rất tốt các chi tiết nhỏ. Thế nhưng, khi bạn hỏi “Nội dung chính của 500 trang tài liệu này là gì?”, nó thường bắt đầu lúng túng.

Vấn đề nằm ở cơ chế so khớp vector (vector similarity search). RAG truyền thống tìm các đoạn văn bản giống câu hỏi nhất nhưng lại thiếu cái nhìn toàn cảnh. Microsoft GraphRAG ra đời để lấp đầy khoảng trống đó. Thay vì chỉ lưu trữ các mảnh vụn, nó xây dựng một bản đồ tri thức (Knowledge Graph) khổng lồ từ dữ liệu của bạn.

So sánh RAG truyền thống và GraphRAG

Dưới đây là lý do tại sao GraphRAG đang trở thành “vũ khí” mới cho các dự án AI đòi hỏi chiều sâu:

  • RAG truyền thống (Baseline RAG):
    • Cơ chế: Chia nhỏ văn bản (chunking) và tìm kiếm vector.
    • Ưu điểm: Tốc độ phản hồi nhanh, triển khai cực dễ.
    • Nhược điểm: Không hiểu được mối liên kết giữa các ý tưởng nằm xa nhau.
  • GraphRAG (Microsoft):
    • Cơ chế: Trích xuất thực thể, tạo mối quan hệ và xây dựng cộng đồng (Communities).
    • Ưu điểm: Trả lời xuất sắc các câu hỏi “tại sao” và “như thế nào” trên quy mô toàn bộ dataset.
    • Nhược điểm: Indexing lâu hơn 5-10 lần và tốn tài nguyên tính toán hơn.

Chạy Local với Ollama: Lợi ích và đánh đổi

Microsoft thiết kế GraphRAG ưu tiên OpenAI. Tuy nhiên, nếu bạn làm việc với dữ liệu nhạy cảm của doanh nghiệp, việc đẩy mọi thứ lên Cloud là một rủi ro lớn. Kết hợp với Ollama là phương án tối ưu để giữ dữ liệu nằm gọn trong tầm kiểm soát.

Điểm cộng:

  • Bảo mật: Dữ liệu không bao giờ rời khỏi máy tính của bạn.
  • Tiết kiệm: Không tốn xu nào cho token OpenAI. Điều này cực kỳ quan trọng vì GraphRAG tiêu tốn lượng token khổng lồ khi lập chỉ mục.
  • Tự do: Bạn có thể thoải mái đổi từ Llama 3 sang Mistral hay Phi-3 chỉ trong một nốt nhạc.

Điểm trừ:

  • Phần cứng: Bạn cần tối thiểu một chiếc GPU với 12GB VRAM (như RTX 3060) để quá trình Indexing không kéo dài đến vô tận.
  • Cấu hình: Cần tinh chỉnh nhẹ để Ollama và GraphRAG “hiểu” nhau.

Trải nghiệm thực tế

Mình đã thử nghiệm cách này trên một bộ hồ sơ kỹ thuật nội bộ dài hơn 200 trang. Kết quả cho thấy hệ thống có thể kết nối các logic nghiệp vụ từ chương 1 sang chương cuối một cách mạch lạc. Sếp mình hoàn toàn hài lòng vì dữ liệu không bị rò rỉ ra ngoài. Nếu máy bạn có 32GB RAM và card đồ họa ổn, đây chính là hướng đi đáng đầu tư nhất hiện nay.

Hướng dẫn triển khai chi tiết

Bước 1: Chuẩn bị Ollama

Tải Ollama tại ollama.com. Sau đó, hãy kéo hai model quan trọng về máy. Một model dùng để suy luận và một model chuyên tạo vector (Embedding).

# Model chính để xử lý ngôn ngữ
ollama pull llama3

# Model chuyên dụng để tạo vector
ollama pull nomic-embed-text

Bước 2: Cài đặt môi trường GraphRAG

Hãy dùng Python 3.10 trở lên. Mình khuyên bạn nên dùng môi trường ảo để hệ thống luôn sạch sẽ.

# Tạo và kích hoạt môi trường ảo
python -m venv graphrag-env
source graphrag-env/bin/activate # Windows: graphrag-env\Scripts\activate

# Cài đặt thư viện chính
pip install graphrag

Bước 3: Khởi tạo dự án

Tạo thư mục làm việc và yêu cầu GraphRAG sinh ra các file cấu hình mẫu:

mkdir my-graphrag-project
cd my-graphrag-project
mkdir input

# Khởi tạo cấu trúc
python -m graphrag.index --init --root .

Bước 4: Cấu hình file settings.yaml

Đây là phần quan trọng nhất để “ép” GraphRAG nói chuyện với Ollama. Mở file settings.yaml và cập nhật các thông số sau:

encoding_model: cl100k_base
llm:
  type: openai_chat
  api_base: http://localhost:11434/v1
  api_key: ollama # Điền dummy key để vượt qua kiểm tra
  model: llama3
  model_supports_json: true # Quan trọng để trích xuất thực thể chính xác

embeddings:
  async_mode: threaded
  llm:
    type: openai_embedding
    api_base: http://localhost:11434/api # Endpoint dành riêng cho embedding
    api_key: ollama
    model: nomic-embed-text

Bước 5: Chạy Indexing

Hãy ném các file .txt vào thư mục input/. Sau đó, bắt đầu quá trình xây dựng đồ thị tri thức:

python -m graphrag.index --root .

Lưu ý: Nếu bạn có 50 file văn bản, quá trình này có thể mất từ 30 phút đến 1 tiếng tùy vào sức mạnh GPU. Đừng sốt ruột nếu thấy terminal nhảy workflow liên tục.

Bước 6: Hỏi đáp với dữ liệu

Khi Index xong, bạn có hai chế độ truy vấn cực hay:

Global Search: Dùng cho các câu hỏi mang tính tổng hợp toàn tài liệu.

python -m graphrag.query --root . --method global "Tóm tắt 3 luận điểm chính của tài liệu"

Local Search: Dùng để đào sâu vào một nhân vật hoặc sự kiện cụ thể.

python -m graphrag.query --root . --method local "Mối quan hệ giữa A và B là gì?"

Vài lưu ý nhỏ để tối ưu hiệu năng

Trong quá trình làm, mình nhận thấy Llama 3 bản 8B đôi khi trích xuất thực thể hơi thừa thãi. Nếu bạn sở hữu card đồ họa “khủng” (24GB VRAM trở lên), hãy mạnh dạn dùng Llama 3 70B. Kết quả sẽ chính xác và sắc sảo hơn rất nhiều.

Thêm một mẹo nữa: Nếu tài liệu của bạn quá đặc thù (như y khoa hoặc luật), hãy giảm chunk_size trong file settings xuống còn khoảng 600. Việc này giúp model không bỏ sót các mối quan hệ lắt léo giữa các đoạn văn ngắn.

Chạy offline ban đầu có vẻ hơi tốn công cấu hình. Tuy nhiên, cảm giác làm chủ hoàn toàn một hệ thống AI mạnh mẽ ngay trên laptop cá nhân thực sự rất xứng đáng. Chúc các bạn cài đặt thành công!

Share: