在 GenAI 中利用 RAG 傳授新資訊
簡介
檢索增強生成 (Retrieval-Augmented Generation, RAG) 是一個強大的框架,它透過整合來自外部知識源的資訊檢索來增強大型語言模型 (LLM) 的能力。本指南重點介紹一種使用 Neo4j 等圖資料庫的專業 RAG 實現,這種資料庫在管理高度連線的關係型資料方面表現出色。與使用向量資料庫的傳統 RAG 設定不同,將 RAG 與圖資料庫相結合可以提供更好的上下文感知和關係驅動的洞見。
在本指南中,您將
- 探索將圖資料庫整合到 RAG 框架中的優勢。
- 使用 Docker 配置一個包含 Neo4j 和 AI 模型的 GenAI 技術棧。
- 分析一個真實案例研究,展示該方法在處理專業查詢方面的有效性。
理解 RAG
RAG 是一個混合框架,透過整合資訊檢索來增強大型語言模型的能力。它結合了三個核心元件
- 資訊檢索,來自外部知識庫
- 大型語言模型 (LLM),用於生成響應
- 向量嵌入,用於實現語義搜尋
在 RAG 系統中,向量嵌入用於表示文字的語義含義,以便機器能夠理解和處理。例如,“狗”和“小狗”這兩個詞會有相似的嵌入,因為它們的含義相近。透過將這些嵌入整合到 RAG 框架中,系統可以將大型語言模型的生成能力與從外部來源獲取高度相關、具有上下文感知能力的資料的能力結合起來。
該系統的工作方式如下
- 問題被轉化為捕捉其含義的數學模式
- 這些模式有助於在資料庫中找到匹配的資訊
- LLM 生成的響應融合了模型的內在知識和這些額外資訊。
為了高效地儲存這些向量資訊,我們需要一種特殊型別的資料庫。
圖資料庫簡介
圖資料庫(如 Neo4j)專為管理高度連線的資料而設計。與傳統的關係型資料庫不同,圖資料庫同時優先考慮實體和它們之間的關係,這使得它們非常適合處理連線與資料本身同樣重要的任務。
圖資料庫以其獨特的資料儲存和查詢方法而脫穎而出。它們使用節點(或頂點)來表示實體,使用邊來表示這些實體之間的關係。這種結構可以高效地處理高度連線的資料和複雜的查詢,而這些在傳統資料庫系統中難以管理。
SQL 資料庫和圖資料庫在資料模型上存在顯著差異。SQL 資料庫使用帶有行和列的表格結構,實體之間的關係透過外部索引鍵建立。這種方法非常適用於結構化資料和預定義的關係。相比之下,圖資料庫將資料表示為節點(實體)和邊(關係),使得關係的表示更加直觀和靈活。這種結構對於複雜的、相互關聯的資料尤其有利。
另一個關鍵區別在於模式的靈活性。SQL 資料庫基於嚴格的模式執行,這意味著對資料結構的任何更改,例如新增新列或更改關係,通常需要仔細的規劃和遷移過程。然而,圖資料庫是模式可選的,這提供了更大的靈活性。可以在不破壞現有資料的情況下引入新的節點、邊或屬性,從而能夠更快地適應不斷變化的需求。
實際應用:測試 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:11434
CPU 驅動
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”標籤,然後選擇匯入按鈕。


匯入成功後,我們可以訪問 Neo4j 來驗證資料。
使用 .env
檔案中的憑據登入 https://:7474/ 後,您可以在 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 以獲得最佳結果
在標準大型語言模型 (LLM) 表現不佳的場景中,檢索增強生成 (RAG) 尤其有效。RAG 表現出色的三個關鍵領域是知識侷限性、業務需求和成本效益。下面,我們將更詳細地探討這些方面。
克服知識侷限性
LLM 是在某個時間點之前的固定資料集上訓練的。這意味著它們無法訪問:
- 即時資訊:LLM 不會持續更新其知識,因此它們可能不知道最近的事件、新發布的研究或新興技術。
- 專業知識:許多小眾主題、專有框架或行業特定的最佳實踐可能在模型的訓練語料庫中沒有得到很好的記錄。
- 準確的上下文理解:LLM 可能難以處理金融、網路安全或醫學研究等動態領域中頻繁變化的細微差別或不斷演變的術語。
透過將 RAG 與 Neo4j 等圖資料庫結合,AI 模型可以在生成響應之前訪問和檢索最新的、相關的、高度連線的資料。這確保了答案是最新的,並且基於事實資訊,而不是推斷的近似值。
滿足業務和合規需求
醫療保健、法律服務和金融分析等行業的組織要求其 AI 驅動的解決方案具備以下特點:
- 準確:企業需要 AI 生成的內容是事實性的,並且與其特定領域相關。
- 合規:許多行業必須遵守有關資料使用和安全的嚴格法規。
- 可追溯:企業通常要求 AI 的響應是可審計的,這意味著它們需要引用源材料。
透過使用 RAG,AI 生成的答案可以從可信的資料庫中獲取來源,從而確保更高的準確性和行業標準的合規性。這可以降低錯誤資訊或違反法規等風險。
提升成本效益和效能
訓練和微調大型 AI 模型可能計算成本高昂且耗時。然而,整合 RAG 提供了:
- 減少微調需求:RAG 允許模型動態獲取並整合更新的資訊,而不是每次出現新資料時都重新訓練 AI 模型。
- 使用較小模型實現更好效能:透過正確的檢索技術,即使是緊湊型 AI 模型也能透過高效利用外部知識表現良好。
- 降低運營成本:企業可以利用 RAG 的即時檢索能力來最佳化資源,而不是投資昂貴的基礎設施來支援大規模的再訓練。
透過遵循本指南,您現在已經掌握了使用 Neo4j 實現 RAG 的基礎知識,使您的 AI 系統能夠提供更準確、相關和富有洞察力的響應。下一步是進行實驗——選擇一個數據集,配置您的技術棧,並開始利用檢索增強生成的力量來增強您的 AI。