在生成式 AI 中利用 RAG 來教授新資訊
簡介
檢索增強生成 (RAG) 是一個強大的框架,透過整合來自外部知識來源的資訊檢索來增強大型語言模型 (LLM)。本指南重點介紹使用 Neo4j 等圖形資料庫的特殊 RAG 實作,這些資料庫在管理高度連接的關聯數據方面表現出色。與傳統使用向量資料庫的 RAG 設置不同,結合圖形資料庫的 RAG 提供了更好的上下文感知能力與基於關係的深刻見解。
在本指南中,您將
- 探索將圖形資料庫整合到 RAG 框架中的優勢。
- 使用 Docker 配置一個包含 Neo4j 與 AI 模型的 GenAI 技術棧。
- 分析一個現實案例,突顯此方法在處理專業查詢時的有效性。
理解 RAG
RAG 是一個透過整合資訊檢索來增強大型語言模型功能的混合框架。它結合了三個核心組件:
- 來自外部知識庫的資訊檢索
- 用於生成回應的大型語言模型 (LLM)
- 用於啟用語意搜尋的向量嵌入 (Vector embeddings)
在 RAG 系統中,向量嵌入用於以機器可理解與處理的方式表示文本的語意。例如,「狗」(dog) 和「幼犬」(puppy) 這兩個詞將具有相似的嵌入,因為它們共享相似的含義。透過將這些嵌入整合到 RAG 框架中,系統可以結合大型語言模型的生成能力,以及從外部來源提取高度相關、具備上下文感知資料的能力。
系統運作方式如下:
- 問題被轉換為捕捉其含義的數學模式。
- 這些模式有助於在資料庫中找到匹配的資訊。
- LLM 生成回應,將模型的內在知識與這些額外資訊進行融合。
為了以高效的方式保存這些向量資訊,我們需要一種特殊類型的資料庫。
圖形資料庫簡介
Neo4j 等圖形資料庫專為管理高度連接的資料而設計。與傳統關聯式資料庫不同,圖形資料庫優先處理實體及其之間的關係,這使得它們非常適合那些連接與資料本身同樣重要的任務。
圖形資料庫因其獨特的資料儲存與查詢方法而脫穎而出。它們使用節點 (Nodes,或稱頂點) 來表示實體,並使用邊 (Edges) 來表示這些實體之間的關係。這種結構允許高效處理高度連接的數據與複雜查詢,而這些在傳統資料庫系統中難以管理。
SQL 資料庫與圖形資料庫在資料模型上有顯著差異。SQL 資料庫使用表格結構,包含列與欄,實體之間的關係透過外鍵 (Foreign keys) 建立。這種方法適用於結構化數據與預定義的關係。相反,圖形資料庫將資料表示為節點(實體)與邊(關係),使得關係的表示更加直觀與靈活。這種結構對於複雜、互連的數據特別有利。
另一個關鍵差異在於模式 (Schema) 的靈活性。SQL 資料庫運行在嚴格的模式上,這意味著對數據結構進行任何更改(例如添加新欄或改變關係)通常需要仔細規劃與遷移過程。然而,圖形資料庫是模式可選的 (Schema-optional),允許更大的靈活性。可以在不干擾現有數據的情況下引入新的節點、邊或屬性,從而更快地適應變化的需求。
實作:測試 RAG 有效性
為了說明 RAG 系統在實踐中的威力,讓我們以 Apache NiFi 作為對象來審視一個現實中的實作。這個案例研究展示了 RAG 如何增強 AI 提供關於專業技術主題準確、上下文相關資訊的能力。
教導 AI 學習新技術
Apache NiFi 是一個很好的例子,展示了傳統 LLM 的局限性以及 RAG 如何克服它們。作為一種較新的技術,許多 LLM 對它的知識有限或已過時,這使其成為展示 RAG 能力的絕佳案例。
如果沒有 RAG,當被問及超過其資訊截斷點的資訊時,LLM 可能會提供籠統的回應或承認其知識有限。以下範例證明了這一點。
Question: What important events happened in 2024?
RAG: Disabled
I'm happy to help! Unfortunately, I'm a large language model, I don't have access to real-time information or events that occurred after my training data cutoff in 2024. Therefore, I cannot provide you with any important events that happened in 2024. My apologize for any inconvenience this may cause. Is there anything else I can help you with?在 Linux 上使用 GPU 加速設置 GenAI 技術棧
要在 Linux 主機上設置並運行 GenAI 技術棧,請執行以下命令之一(分別針對 GPU 或 CPU 驅動):
GPU 驅動
git clone https://github.com/docker/genai-stack
docker compose --profile linux-gpu up -d
mv env.example .env
nano .env在 .env 檔案中,確保下列行已被註解掉。為了安全起見,請設置您自己的憑證。
NEO4J_URI=neo4j://database:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
OLLAMA_BASE_URL=http://llm-gpu:11434CPU 驅動
git clone https://github.com/docker/genai-stack
docker compose --profile linux up -d
mv env.example .env
nano .env在 .env 檔案中,確保下列行已被註解掉。為了安全起見,請設置您自己的憑證。
NEO4J_URI=neo4j://database:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
OLLAMA_BASE_URL=http://llm:11434在其他平台上進行設置
有關如何在其他平台上設置該技術棧的說明,請參閱此頁面。
首次啟動
首次啟動可能需要一些時間,因為系統需要下載大型語言模型。
監控進度
我們可以透過查看日誌來監控下載與初始化進度。執行以下命令查看日誌:
docker compose logs等待日誌中出現指示下載完成與技術棧就緒的特定行。這些行通常會確認設置與初始化已成功。
pull-model-1 exited with code 0
database-1 | 2024-12-29 09:35:53.269+0000 INFO Started.
pdf_bot-1 | You can now view your Streamlit app in your browser.
loader-1 | You can now view your Streamlit app in your browser.
bot-1 | You can now view your Streamlit app in your browser.您現在可以存取介面 https://:8501/ 進行提問。例如,您可以嘗試以下範例問題:
當我們在日誌中看到這些行時,即表示 Web 應用程式已準備好可以使用。
由於我們的目標是教導 AI 它尚不知道的事物,我們首先在 https://:8501/ 向它提出關於 Nifi 的簡單問題。

Question: What is Apache Nifi?
RAG: Disabled
Hello! I'm here to help you with your question about Apache NiFi. Unfortunately, I don't know the answer to that question. I'm just an AI and my knowledge cutoff is December 2022, so I may not be familiar with the latest technologies or software. Can you please provide more context or details about Apache NiFi? Maybe there's something I can help you with related to it.正如我們所見,AI 對這個主題一無所知,因為它在訓練期間(也稱為資訊截斷點)並不存在。
現在是時候教 AI 一些新把戲了。首先,連接到 https://:8502/。不要使用 "neo4j" 標籤,請將其更改為 "apache-nifi" 標籤,然後選擇 **Import**(匯入)按鈕。

匯入成功後,我們可以存取 Neo4j 以驗證數據。
登入 https://:7474/(使用 .env 檔案中的憑證)後,您可以在 Neo4j 上執行查詢。使用 Neo4j Cypher 查詢語言,您可以檢查儲存在資料庫中的資料。
若要計算資料量,請執行以下查詢:
MATCH (n)
RETURN DISTINCT labels(n) AS NodeTypes, count(*) AS Count
ORDER BY Count DESC;若要執行此查詢,請寫在頂部的框中並選擇藍色的運行按鈕。

結果將顯示在下方。我們在這裡看到的是從 Stack Overflow 下載並儲存在圖形資料庫中的資訊系統。RAG 將利用這些資訊來增強其回應。
您也可以執行以下查詢來視覺化數據:
CALL db.schema.visualization()若要檢查資料庫中的關係,請執行以下查詢:
CALL db.relationshipTypes()現在,我們準備好讓我們的 LLM 使用這些資訊了。回到 https://:8501/,勾選 **RAG** 核取方塊,並再次詢問同一個問題。LLM 現在將提供更詳細的答案。

系統透過從當前技術文件中提取資訊,提供全面、準確的資訊。
Question: What is Apache Nifi?
RAG: Enabled
Answer:
Apache NiFi is an open-source, distributed data processing system that allows you to collect, transform, and transport data across various sources and sinks. It provides a graphical user interface for designing and managing data flows, as well as a set of APIs for integrating with other systems.
According to this Stack Overflow question, the free Neo4J JDBC driver doesn't understand SQL, only Cypher, so you would need to use a non-free BI Connector to connect to Neo4j from Apache Drill.
Additionally, this Stack Overflow question suggests that Apache POI does work in a Neo4j User Defined Function. However, there may be an unknown glitch in the standalone UDF mentioned in the initial question.
To export data from Neo4j to Excel using APOC Extended procedures, you can use apoc.export.xls.query which takes a Cypher query and exports the results to an Excel file.
References:
How to connect and query Neo4j Database on Apache Drill?
Is a Neo4j UDF compatible with Apache POI?請記住,新的問題將會被添加到 Stack Overflow,且由於大多數 AI 模型固有的隨機性,答案可能會有所不同,並且不會與此範例中的完全相同。
歡迎隨意使用另一個 Stack Overflow 標籤重新開始。若要刪除 Neo4j 中的所有數據,您可以在 Neo4j Web UI 中使用以下命令:
MATCH (n)
DETACH DELETE n;為了獲得最佳效果,請選擇一個 LLM 不熟悉的標籤。
何時利用 RAG 以獲得最佳效果
檢索增強生成 (RAG) 在標準大型語言模型 (LLM) 不足的場景中特別有效。RAG 表現優異的三個關鍵領域是:知識限制、業務需求與成本效益。以下我們更詳細地探討這些方面。
克服知識限制
LLM 是在固定數據集上進行訓練的,僅截至某個時間點。這意味著它們無法存取:
- 即時資訊:LLM 不會持續更新其知識,因此它們可能不了解最近發生的事件、新發布的研究或新興技術。
- 專業知識:許多小眾主題、專有框架或行業特定的最佳實踐可能沒有在模型的訓練語料庫中被充分記錄。
- 準確的上下文理解:LLM 在理解動態領域(如金融、網絡安全或醫學研究)中頻繁變化的細微差別或進化術語時,可能會遇到困難。
透過將 RAG 與 Neo4j 等圖形資料庫整合,AI 模型可以在生成回應之前存取並檢索最新、相關且高度連接的數據。這確保了答案是最新的,並且基於事實資訊,而非推斷出的近似值。
解決業務與合規需求
醫療保健、法律服務與金融分析等行業的組織要求其 AI 驅動的解決方案必須:
- 準確:企業需要事實正確且與其特定領域相關的 AI 生成內容。
- 合規:許多行業必須遵守關於數據使用與安全的嚴格法規。
- 可追溯:企業通常要求 AI 回應是可稽核的,這意味著它們需要引用來源材料。
透過使用 RAG,AI 生成的答案可以從受信任的資料庫中獲取,從而確保更高的準確性與行業標準合規性。這減輕了諸如錯誤資訊或違規等風險。
提升成本效益與效能
訓練與微調大型 AI 模型在計算上可能既昂貴又耗時。然而,整合 RAG 提供了:
- 減少微調需求:RAG 允許模型動態獲取與整合更新的資訊,而不必在每次出現新數據時重新訓練 AI 模型。
- 以較小模型獲得更好的效能:透過正確的檢索技術,即使是緊湊的 AI 模型也可以藉由有效利用外部知識來表現良好。
- 降低營運成本:企業可以利用 RAG 的即時檢索能力來優化資源,而不必投資於支持大規模重新訓練的昂貴基礎設施。
遵循本指南,您現在已經具備了將 RAG 與 Neo4j 實作的基礎知識,使您的 AI 系統能夠提供更準確、相關且深刻的回應。下一步是進行實驗——選擇一個數據集、配置您的技術棧,並開始利用檢索增強生成的威力來增強您的 AI。