動手實現GraphRAG,檢索效果大幅提升
1 理解檢索增強生成(RAG)
檢索增強生成(RAG)技術通過融合檢索得到的文檔和用戶輸入的查詢,為語言模型注入了額外的上下文信息。這種結合不僅豐富了模型的知識庫,還提升了其回答的準確性和相關性。
例如,當用戶提出涉及特定個人信息或商業數據的問題時,RAG能夠從預設的數據源中提取關鍵信息,輔助模型給出更加精準的答復。
簡而言之,RAG技術就像是給語言模型配備了一個智能的背景知識庫,使其在面對復雜問題時,能夠做出更加明智的回應。
2 GraphRAG:通過圖形結構增強上下文
GraphRAG技術在傳統RAG的基礎上更進一步,通過構建信息的圖形網絡,實現了對數據的深度理解和應用。這不僅僅是簡單地檢索相關文檔,更重要的是能夠洞察文檔中實體間的復雜聯系。
舉個例子,假設數據集中包含了紐約、洛杉磯和芝加哥等城市的信息。GraphRAG不僅能夠檢索到這些城市的相關資料,還能識別并利用它們之間的各種關系,比如紐約與洛杉磯之間的貿易伙伴關系,或是洛杉磯與芝加哥之間的文化交流項目。
這樣的技術使GraphRAG在處理信息時能夠展現出更為豐富的洞察力和更深層次的分析能力。
3 設置環境
源碼地址:
??https://github.com/aniket-work/why_graphRAG_such_game_changer??
創建虛擬環境:
python -m venv why_graphRAG_such_game_changer
激活環境:
why_graphRAG_such_game_changer\Scripts\activate (Windows)
source why_graphRAG_such_game_changer/bin/activate (Unix/macOS
安裝依賴項:
cd path/to/your/project
pip install -r requirements.txt
使用Ollama拉取必要的模型:
ollama pull mistral
ollama pull nomic-embed-text
安裝Ollama:
- 訪問Ollama官方網站:https://ollama.ai/
- 下載適合的操作系統的版本(Windows、macOS或Linux)。
- 按照操作系統提供的安裝說明進行操作。
- 安裝完成后,打開終端或命令提示符。
- 通過運行以下命令來驗證安裝:
ollama --version
初始化和使用GraphRAG:
python -m graphrag.index --init --root ragtest
下載數據
你可以下載任何你喜歡的數據,已經將一個小型的、基于場景的、面向關系的故事情節檢查并放入了“input”文件夾中。
4 初始化過程
運行命令python -m graphrag.index --init --root ragtest初始化GraphRAG時,以下一系列操作將會自動進行:
創建配置文件:
- .env:此文件包含運行GraphRAG管道所需的環境變量。它通常包括用于OpenAI API或Azure OpenAI端點的API密鑰。例如:
GRAPHRAG_API_KEY=<API_KEY>
- settings.yaml:此文件保存GraphRAG管道的設置??梢孕薷拇宋募哉{整各種管道設置,例如Azure OpenAI的API基礎、版本和部署名稱。例如:
llm:
type: azure_openai_chat
api_base: https://<instance>.openai.azure.com
api_version: 2024-02-15-preview
deployment_name: <azure_model_deployment_name>
- prompts/:此目錄包含GraphRAG使用的默認提示。這些提示指導大型語言模型(LLM)生成回答。可以修改這些提示或運行自動提示調整命令以生成適應你數據的新提示。
5 目的和用途
- .env 文件:
目的:存儲環境變量,包括用于驗證對OpenAI或Azure OpenAI服務請求的API密鑰。
用途:此文件由GraphRAG系統引用,以訪問必要的憑據和配置設置。
- settings.yaml 文件:
- 目的:包含GraphRAG管道的詳細配置設置,如API端點、模型版本和部署名稱。
- 用途:此文件用于自定義GraphRAG管道的行為,允許用戶指定使用哪個LLM以及如何與之交互。
- prompts/ 目錄:
- 目的:保存默認的LLM提示,指導模型生成回答。這些提示可以根據你的數據的具體需求進行定制。
- 用途:用戶可以修改提示以提高生成回答的準確性和相關性。該目錄還支持運行自動提示調整命令以創建新的、特定于數據的提示。
6 修改 settings.yaml
由于我們打算在本地運行graphRAG,需要對默認的 settings.yaml 文件進行一些更改。
encoding_model: cl100k_base
skip_workflows: []
llm:
api_key: ${GRAPHRAG_API_KEY}
type: openai_chat
model: mistral
model_supports_json: true
api_base: http://localhost:11434/v1
parallelization:
stagger: 0.3
async_mode: threaded
embeddings:
async_mode: threaded
llm:
api_key: ${GRAPHRAG_API_KEY}
type: openai_embedding
model: nomic_embed_text
api_base: http://localhost:11434/api
7 修改以使用 Ollama 嵌入
GraphRAG 本身不支持 Ollama 嵌入模型,但可以通過修改 GraphRAG 庫中的特定文件來添加此支持。通過編輯 openai_embeddings_llm.py 文件,我們可以啟用使用 Ollama 嵌入模型。這涉及導入必要的模塊并更新代碼以調用 Ollama 的嵌入函數,允許我們在 GraphRAG 管道中利用高級嵌入。
以下是如何更新 openai_embeddings_llm.py 文件的方法:
from typing_extensions import Unpack
from graphrag.llm.base import BaseLLM
from graphrag.llm.types import EmbeddingInput, EmbeddingOutput, LLMInput
from .openai_configuration import OpenAIConfiguration
from .types import OpenAIClientTypes
import ollama
class OpenAIEmbeddingsLLM(BaseLLM[EmbeddingInput, EmbeddingOutput]):
"""
使用 Ollama 進行嵌入的自定義 LLM(大型語言模型)實現。
"""
def __init__(self, client: OpenAIClientTypes, configuration: OpenAIConfiguration):
"""
初始化 OpenAIEmbeddingsLLM 實例。
參數:
client (OpenAIClientTypes): 與AI服務交互的客戶端。
configuration (OpenAIConfiguration): AI服務的配置設置。
"""
self._client = client
self._configuration = configuration
async def _execute_llm(
self, input: EmbeddingInput, **kwargs: Unpack[LLMInput]
) -> EmbeddingOutput | None:
"""
使用 Ollama 嵌入執行大型語言模型。
參數:
input (EmbeddingInput): 嵌入模型的輸入數據。
**kwargs (Unpack[LLMInput]): 模型參數的附加關鍵字參數。
返回:
EmbeddingOutput | None: 模型的輸出嵌入或如果沒有輸出則為 None。
"""
args = {
"model": self._configuration.model,
**(kwargs.get("model_parameters") or {}),
}
embedding_list = []
for inp in input:
embedding = ollama.embeddings(model="nomic-embed-text", prompt=inp)
embedding_list.append(embedding["embedding"])
return embedding_list
8 使用 GraphRAG 運行查詢
使用以下命令索引數據:
python -m graphrag.index --root .\ragtest
輸出
圖片
運行查詢以測試設置:
python -m graphrag.query --root .\ragtest --method global "How was the impact of Lily's action on villagers"
輸出
圖片
9 結語
未來,人工智能在商業領域的影響力將日益增強。那些能夠將人工智能技術有效融入其業務運營的公司,將具備更快的創新速度、更優質的客戶服務體驗,以及更高效的流程優化能力。GraphRAG技術的出現,僅是人工智能潛力的冰山一角。
隨著時間推移,人工智能將變得更加精密復雜。它將不僅能夠理解問題,還能生成貼近人類思維的回答。預計不久的將來,企業將見證一種新型人工智能系統的誕生——這些系統不僅能夠回答問題,還能基于海量數據分析提供戰略性的見解和建議。因此,對于任何希望在競爭中保持領先地位的企業而言,積極擁抱人工智能并持續關注其最新發展,顯得尤為關鍵。這不僅是一個選擇,更是一個必然的趨勢。
本文轉載自 ??AI科技論談??,作者: AI科技論談
