# Khoá GraphRAG của Neo4j dạy cách làm, blog của Neo4j dạy khi nào đừng làm

> Khoá hai giờ trên DeepLearning.AI dựng graph từ hồ sơ SEC, nhưng hãy có baseline RAG dùng vector trước để chứng minh graph có ích.

Bản gốc: https://fdetimes.net/vi/sach-khoa-hoc/khoa-knowledge-graphs-for-rag-deeplearning-ai-neo4j/

Khoá học dài 2 giờ 4 phút này dạy bạn dựng knowledge graph để làm RAG. Thế nhưng câu có ích nhất cho một FDE lại không nằm trong khoá. Nó nằm trên blog của chính Neo4j: nếu GraphRAG không cải thiện được các chỉ số, thì bỏ công mô hình hoá và duy trì một graph là không đáng.

Hai điều đó không mâu thuẫn. Khoá học dạy bạn *cách* làm GraphRAG, còn ở khách, việc khó hơn là quyết định *có nên* làm hay không. Ai đang được khách hỏi "sao không dùng knowledge graph?" thì nên học khoá này, miễn là biết phần nào dùng được khi làm cho khách và phần nào phải tự bổ sung.

## Hai giờ học cho ba kỹ năng dùng được

"Knowledge Graphs for RAG" là khoá ngắn trên DeepLearning.AI, do Andreas Kollegger, Lead for GenAI Innovation ở Neo4j, giảng dạy. Trang chính thức ghi lần cập nhật gần nhất là ngày 7/10/2025.

Khoá hứa ba kết quả: dùng Cypher, ngôn ngữ truy vấn của Neo4j, để quản lý và lấy dữ liệu trong graph; viết truy vấn tìm và định dạng text để LLM có context sát hơn; và dựng một hệ hỏi đáp bằng Neo4j cùng LangChain.

Phần lớn nội dung thực hành là dựng graph từ văn bản, với bộ dữ liệu là hồ sơ SEC. Bài 5 có tên "Constructing a Knowledge Graph from Text Documents", còn bài trò chuyện với graph nằm ở cuối.

## Nên học theo thứ tự nào?

Khoá gắn chặt với LangChain. DeepLearning.AI khuyên bạn đã quen LangChain, hoặc học "LangChain: Chat with Your Data" trước. Nếu bạn chưa từng dựng một pipeline RAG dùng vector, hãy học khoá đó trước để có baseline mà so sánh.

Sau đó, cũng Andreas Kollegger dạy tiếp "Agentic Knowledge Graph Construction" (3 giờ 8 phút). Khoá này tự động hoá việc dựng graph bằng hệ multi-agent trên Google ADK, có các agent nhận diện mục tiêu của người dùng rồi đề xuất nên trích những node và quan hệ nào. Nó lấp đúng chỗ trống về schema mà khoá RAG để lại.

## Ý thứ nhất: phân loại câu hỏi trước khi bàn đến graph

Neo4j định nghĩa GraphRAG là một tập pattern truy xuất dựa trên cấu trúc graph, không phải một sản phẩm duy nhất. Và chính hãng nói rõ khi nào nên bỏ graph: câu hỏi trả lời được từ một đoạn văn bằng so khớp ngữ nghĩa thì vector search vẫn là công cụ đúng.

Graph hợp với câu hỏi multi-hop, tức những câu mà quan hệ giữa các sự kiện mới là điều quan trọng.

Thử hình dung với chính dữ liệu SEC của khoá. "Rủi ro lớn nhất mà công ty A nêu trong hồ sơ năm nay là gì?" chỉ cần một đoạn văn, vector làm tốt.

Còn "Những công ty nào cùng phụ thuộc vào một nhà cung cấp với công ty A?" thì phải đi từ A sang nhà cung cấp rồi quay ngược lại các công ty khác. Đó là hai bước nhảy, và đây là chỗ graph có lợi thế.

**Điểm mấu chốt:** Hãy hỏi câu hỏi của khách cần bao nhiêu bước nhảy trước khi hỏi có cần graph không.

## Ý thứ hai: kỹ năng thật nằm ở cách định dạng context

Cypher học vài buổi là quen. Thứ đáng giữ hơn là kết quả thứ hai của khoá: viết truy vấn vừa *tìm* vừa *định dạng* text cho LLM. Một truy vấn tốt không trả về một mớ node, mà trả về thứ mô hình đọc hiểu được.

Lấy lại câu hỏi hai bước nhảy ở trên. Giả sử graph của bạn có node `Company`, node `Supplier` và quan hệ `DEPENDS_ON` (đây là schema minh hoạ, không phải schema của khoá). Truy vấn có thể trông như sau:

```cypher
MATCH (a:Company {name: 'Company A'})-[:DEPENDS_ON]->(s:Supplier)
      <-[:DEPENDS_ON]-(other:Company)
RETURN s.name AS supplier, collect(other.name) AS peers
```

Kết quả thô là vài cặp tên và danh sách. Bước định dạng biến nó thành câu: "Company A phụ thuộc vào nhà cung cấp S. Các công ty khác cũng phụ thuộc vào S: B, C." Chuỗi đó, kèm đoạn văn gốc trong hồ sơ, mới là context gửi cho LLM.

Lời khuyên khi làm bài tập: hãy in ra đúng chuỗi context gửi vào LLM và đọc nó như thể bạn là mô hình. Mô hình chỉ thấy những gì bạn đưa vào, nên nếu chính bạn đọc còn thấy rối thì câu trả lời khó mà rõ.

## Ý thứ ba: viết bài kiểm tra chấp nhận trước khi dựng

Lời khuyên của Neo4j là đo trước. Trước buổi demo đầu tiên, hãy cùng khách chốt một bộ câu hỏi, một chỉ số và một ngưỡng. Sau đó chạy baseline vector rồi mới chạy graph trên cùng bộ câu hỏi đó.

Giả sử bộ câu hỏi của khách gần như toàn loại một đoạn văn. Khi đó graph khó tạo ra chênh lệch đủ lớn để bù cho chi phí duy trì, và bạn vừa tiết kiệm cho khách vài tuần làm việc. Câu "không cần graph" có bằng chứng đi kèm cũng là một kết quả đáng giá.

## Phần khoá bỏ qua lại tốn công nhất

Hệ hỏi đáp trong khoá chạy trên tài liệu văn bản có cấu trúc, không phải dữ liệu lộn xộn như ở khách. Tian Pan, một kỹ sư có kinh nghiệm triển khai, cảnh báo rằng thiếu một cách khử trùng thực thể có nguyên tắc thì graph sẽ bị phân mảnh, và theo ông việc này có thể tốn công hơn cả khâu trích xuất.

Cụ thể, nếu "Công ty A", "A Corp" và mã cổ phiếu của A thành ba node riêng, truy vấn hai bước nhảy ở trên chỉ khớp được một trong ba, và câu trả lời thiếu mà không báo lỗi nào.

Tian Pan cũng cho rằng thiết kế hybrid cần một router quyết định khi nào làm giàu context bằng graph và khi nào chỉ dùng vector, và router đó không dễ làm cho đúng. Khoá học không dạy phần này.

Với CV, đừng chỉ ghi "đã học GraphRAG". Hãy viết rằng bạn đã so graph với baseline vector trên một bộ câu hỏi cụ thể, đã xử lý thực thể trùng ra sao, và kết quả cuối cùng là giữ hay bỏ graph. Nếu job description nhắc đến "knowledge graph" hay "Neo4j", hãy chuẩn bị sẵn câu chuyện về chính những quyết định đó để kể khi phỏng vấn.

Khoá học đưa bạn tới bản demo chạy được. Còn biết lúc nào nên bỏ graph thì bạn chỉ học được ở khách hàng.

**Thử ngay tuần này:**

- Lấy 20 câu hỏi thật của khách hoặc của dự án RAG bạn đang làm, gắn nhãn 'một đoạn' hay 'multi-hop' cho từng câu, rồi đếm xem loại nào nhiều hơn
- Học bài 'Constructing a Knowledge Graph from Text Documents' và thử dựng lại graph trên một bộ tài liệu bẩn hơn của bạn, ghi lại xem có bao nhiêu thực thể bị tách thành nhiều node
- Viết bài kiểm tra chấp nhận trước khi dựng graph: chỉ số nào, ngưỡng bao nhiêu, đo trên baseline vector ra sao

## Nguồn

- [Knowledge Graphs for RAG - DeepLearning.AI](https://www.deeplearning.ai/courses/knowledge-graphs-rag)

- [Knowledge Graphs for RAG - DeepLearning.AI](https://www.deeplearning.ai/short-courses/knowledge-graphs-rag/)

- [Agentic Knowledge Graph Construction - DeepLearning.AI](https://www.deeplearning.ai/courses/agentic-knowledge-graph-construction)

- [Intro to GraphRAG - GraphRAG Pattern Catalog](https://graphrag.com/concepts/intro-to-graphrag/)

- [Vector RAG vs. GraphRAG: Which retrieval do you need?](https://neo4j.com/blog/agentic-ai/vector-rag-vs-graphrag/)

- [GraphRAG vs. Vector RAG: The Architecture Decision Teams Make Too Late](https://tianpan.co/blog/2026/04/19/graphrag-vs-vector-rag-architecture-decision)
