掌握RAG系統的7個最佳GitHub儲存庫

掌握RAG系統的7個最佳GitHub儲存庫

文章目录

  • 為何您應該掌握RAG系統
  • RAG框架的作用是什麼?
  • 掌握RAG系統的頂級程式碼庫
  • 1. LangChain
  • 2. Haystack by deepset-ai
  • 3. LlamaIndex
  • 4. RAGFlow
  • 5. txtai
  • 6. LLMWare
  • 7. Cognita
  • 小結

RAG系統

檢索增強生成 (RAG) 的生態系統在過去幾年中蓬勃發展。如今,網際網路上出現了越來越多旨在幫助開發者構建 RAG 應用程式的開源專案。這有何不可?RAG 是一種利用外部知識源增強大型語言模型 (LLM) 的有效方法。因此,我們想,為什麼不與讀者分享一些掌握 RAG 系統的最佳 GitHub 程式碼庫呢?

在此之前,我們先來簡單介紹一下 RAG 及其應用。

RAG 流程的執行方式如下:

  • 系統檢索文件或資料;
  • 檢索對完成使用者提示的上下文資訊豐富或有用的資料;
  • 系統將該上下文輸入 LLM,以生成準確且符合該上下文知識的響應。

如上所述,我們將在此探討不同的開源 RAG 框架及其 GitHub 程式碼庫,幫助使用者輕鬆構建 RAG 系統。其目的是幫助開發者、學生和技術愛好者選擇適合自身需求的 RAG 工具包並加以利用。

為何您應該掌握RAG系統

檢索增強生成 (RAG) 已迅速成為人工智慧領域最具影響力的創新之一。隨著企業越來越注重實現具有情境感知功能的智慧系統,掌握它已不再是可有可無的選擇。許多企業正在將 RAG 管道用於聊天機器人、知識助理和企業自動化。這是為了確保他們的人工智慧模型能夠利用即時、特定領域的資料,而不是僅僅依賴於預先訓練的知識。

在 RAG 被用於自動化更智慧的聊天機器人、助理和企業工具的時代,徹底理解它可以為您帶來巨大的競爭優勢。瞭解如何構建和最佳化 RAG 管道可以為人工智慧開發、資料工程和自動化領域開啟無數的大門。這最終將提升您的市場競爭力,併為您的職業生涯提供面向未來的保障。

RAG 的優勢

RAG 的優勢

為了精通 RAG,以下是 GitHub 上 RAG 系統的熱門程式碼庫。在此之前,我們先來了解一下這些 RAG 框架的實際作用。

RAG框架的作用是什麼?

檢索增強生成 (RAG) 框架是一種先進的 AI 架構,旨在透過將外部資訊整合到響應生成過程中來提升 LLM 的功能。這使得 LLM 的響應比最初構建語言模型時使用的資料更具資訊量或時間相關性。該模型可以從外部資料庫或知識庫 (API) 中檢索相關文件或資料。然後,它可以使用它來根據使用者查詢生成響應,而不是僅僅依賴於最初訓練的模型中的資料。

RAG 架構

RAG 架構

這使得模型能夠處理問題並生成正確、日期敏感或與上下文相關的答案。同時,它們還可以緩解與知識中斷、錯覺或對提示的錯誤響應相關的問題。透過連線通用和特定領域的知識源,RAG 使 AI 系統能夠提供負責任且值得信賴的響應。

RAG 系統的應用範圍廣泛,例如客戶支援、搜尋、合規性、資料分析等等。RAG 系統還消除了頻繁重新訓練模型或嘗試透過正在訓練的模型來處理單個使用者響應的需要。

掌握RAG系統的頂級程式碼庫

現在我們瞭解了 RAG 系統如何提供幫助,讓我們探索頂級 GitHub 程式碼庫,其中包含用於掌握 RAG 系統的詳細教程、程式碼和資源。這些 GitHub 程式碼庫將幫助您掌握使用 RAG 系統所需的工具、技能、框架和理論。

1. LangChain

LangChain 是一款完整的 LLM 工具包,支援開發者建立複雜的應用程式,並具備提示符、記憶庫、代理和資料聯結器等功能。從文件載入到文字拆分、嵌入和檢索以及生成輸出,LangChain 為 RAG 流程的每個步驟提供了模組。

LangChain 擁有豐富的生態系統,與 OpenAI、Hugging Face、Azure 等眾多供應商整合。它還支援多種語言,包括 Python、JavaScript 和 TypeScript。LangChain 採用循序漸進的流程設計,允許您混合搭配工具、構建代理工作流並使用內建鏈。

  • LangChain 的核心功能包括工具鏈系統、豐富的提示符模板以及對代理和記憶庫的卓越支援。
  • LangChain 是開源的(遵循 MIT 許可證),擁有龐大的社羣(GitHub 上超過 7 萬顆星)。
  • 元件:提示模板、LLM 包裝器、向量儲存聯結器、代理(工具 + 推理)、記憶庫等。
  • 整合:LangChain 支援眾多 LLM 提供商(OpenAI、Azure、本地 LLM)、嵌入模型和向量儲存(FAISS、Pinecone、Chroma 等)。
  • 用例:自定義聊天機器人、文件問答、多步驟工作流、RAG 和代理任務。

使用示例

LangChain 的高階 API 使簡單的 RAG 流程更加簡潔。例如,我們使用 LangChain 結合 OpenAI 的嵌入和 LLM,使用少量文件來回答問題:

from langchain.embeddings import OpenAIEmbeddings 
from langchain.vectorstores import FAISS 
from langchain.llms import OpenAI 
from langchain.chains import RetrievalQA 
# Sample documents to index 
docs = ["RAG stands for retrieval-augmented generation.", "It combines search and LLMs for better answers."] 
# 1. Create embeddings and vector store 
vectorstore = FAISS.from_texts(docs, OpenAIEmbeddings()) 
# 2. Build a QA chain (LLM + retriever) 
qa = RetrievalQA.from_chain_type( 
llm=OpenAI(model_name="text-davinci-003"),  
retriever=vectorstore.as_retriever() 
) 
# 3. Run the query 
result = qa({"query": "What does RAG mean?"}) 
print(result["result"])

此程式碼獲取文件並使用 OpenAI 嵌入將其載入到 FAISS 向量儲存中。然後,它使用 RetrievalQA 獲取相關上下文並生成答案。LangChain 抽象了檢索和 LLM 呼叫。(更多說明,請參閱 LangChain API 和教程。)

更多資訊,請點選此處檢視 Langchain 的 GitHub 程式碼庫

2. Haystack by deepset-ai

Haystack 由 deepset 開發,是一個專為企業設計的 RAG 框架,圍繞可組合管道構建。其主要思想是構建一個類似圖的管道。在該管道中,您可以將節點(即元件)(例如檢索器、讀取器和生成器)連線在一起,形成一個有向圖。Haystack 專為生產環境部署而設計,並提供多種後端選擇,包括 Elasticsearch、OpenSearch、Milvus、Qdrant 等等,用於文件儲存和檢索。

  • 它提供基於關鍵詞 (BM25) 和密集檢索的功能,並且可以輕鬆插入開源讀取器(Transformers 問答模型)或生成式答案生成器。
  • 它是開源的 (Apache 2.0),並且非常成熟(超過 10,000 顆星)。
  • 架構:以流水線為中心且模組化。節點可以精確插入和交換。
  • 元件包括:文件儲存(Elasticsearch、記憶體等)、檢索器(BM25、密集)、讀取器(例如 Hugging Face 問答模型)和生成器(OpenAI、本地 LLM)。
  • 易於擴充套件:分散式設定(Elasticsearch 叢集)、GPU 支援、REST API 和 Docker。
  • 可能的用例包括:用於搜尋、文件問答、回顧應用程式和監控使用者查詢的 RAG。

使用示例

以下是使用 Haystack 現代 API (v2) 建立小型 RAG 流水線的簡化示例:

from haystack.document_stores import InMemoryDocumentStore 
from haystack.nodes import BM25Retriever, OpenAIAnswerGenerator 
from haystack.pipelines import Pipeline 
# 1. Prepare a document store 
doc_store = InMemoryDocumentStore() 
documents = [{"content": "RAG stands for retrieval-augmented generation."}] 
doc_store.write_documents(documents) 
# 2. Set up retriever and generator 
retriever = BM25Retriever(document_store=doc_store) 
generator = OpenAIAnswerGenerator(model_name="text-davinci-003") 
# 3. Build the pipeline 
pipe = Pipeline() 
pipe.add_node(component=retriever, name="Retriever", inputs=[]) 
pipe.add_node(component=generator, name="Generator", inputs=["Retriever"]) 
# 4. Run the RAG query 
result = pipe.run(query="What does RAG mean?") 
print(result["answers"][0].answer)

這段程式碼將一個文件寫入記憶體儲存,使用 BM25 演算法查詢相關文字,然後請求 OpenAI 模型進行回答。Haystack 的 Pipeline 負責協調該流程。更多資訊,請點選此處檢視 deepset 程式碼庫

此外,您還可以點選此處瞭解如何使用 Haystack 構建 Agentic QA RAG 系統

3. LlamaIndex

LlamaIndex(前身為 GPT Index)是一個以資料為中心的 RAG 框架,專注於為 LLM 資料建立索引和查詢。LlamaIndex 是一套用於構建文件自定義索引(向量、關鍵字索引、圖表)並進行查詢的工具。LlamaIndex 是一種強大的方法,可以使用索引結構將不同的資料來源(例如文字檔案、API 和 SQL)連線到 LLM。

例如,您可以為所有檔案建立向量索引,然後使用內建查詢引擎來解答您的任何問題,所有這些都使用 LlamaIndex 完成。 LlamaIndex 提供高階 API 和低階模組,以便您定製 RAG 流程的每個部分。

  • LlamaIndex 是開源的(遵循 MIT 許可證),社羣正在不斷壯大(超過 4.5 萬顆星)。
  • 資料聯結器:(適用於 PDF、文件和 Web 內容)、多種索引型別(向量儲存、樹、圖)以及一個查詢引擎,讓您能夠高效導航。
  • 只需將其插入 LangChain 或其他框架即可。LlamaIndex 可與任何 LLM/嵌入(OpenAI、Hugging Face、本地 LLM)相容。
  • LlamaIndex 允許您透過自動建立索引並從索引中獲取上下文,從而更輕鬆地構建 RAG 代理。

使用示例

LlamaIndex 可以非常輕鬆地從文件建立可搜尋的索引。例如,使用核心 API:

from llama_index import VectorStoreIndex, SimpleDirectoryReader 
# 1. Load documents (all files in the 'data' directory) 
documents = SimpleDirectoryReader("./data").load_data() 
# 2. Build a vector store index from the docs 
index = VectorStoreIndex.from_documents(documents) 
# 3. Create a query engine from the index 
query_engine = index.as_query_engine() 
# 4. Run a query against the index 
response = query_engine.query("What does RAG mean?") 
print(response)

這段程式碼將讀取 ./data 目錄中的檔案,在記憶體中對其進行索引,然後查詢索引。LlamaIndex 會以字串形式返回答案。更多資訊,請點選此處檢視 Llamindex 程式碼庫

4. RAGFlow

RAGFlow 是 InfiniFlow 專為企業設計的 RAG 引擎,用於處理複雜且大規模的資料。它以“深度文件理解”為目標,能夠解析 PDF、掃描文件、影像或表​​格等不同格式的資料,並將其彙總為有序的塊。

RAGFlow 具有整合檢索模型、代理模板和視覺化除錯工具。其關鍵要素是基於模板的高階文件分塊和紮實的引用概念。這有助於減少幻覺,因為您可以知道哪些源文字支援哪個答案。

  • RAGFlow 是開源的 (Apache-2.0),擁有強大的社羣(6.5 萬顆星)。
  • 亮點:深度文件解析(例如,分解表格、圖片和多策略文件)、使用模板規則(用於管理文件的自定義規則)進行文件分塊,以及展示如何記錄來源以解答問題的引文。
  • 工作流程:RAGFlow 以服務形式使用,這意味著您可以啟動伺服器(使用 Docker),然後透過 UI 或 API 為文件編制索引。RAGFlow 還提供用於構建聊天機器人的 CLI 工具和 Python/REST API。
  • 用例:處理海量文件的大型企業,以及需要基於程式碼的可追溯性和準確性的實用用例。

使用示例

import requests 
api_url = "http://localhost:8000/api/v1/chats_openai/default/chat/completions" 
api_key = "YOUR_RAGFLOW_API_KEY" 
headers = {"Authorization": f"Bearer {api_key}"} 
data = { 
"model": "gpt-4o-mini", 
"messages": [{"role": "user", "content": "What is RAG?"}], 
"stream": False 
} 
response = requests.post(api_url, headers=headers, json=data) 
print(response.json()["choices"][0]["message"]["content"])

此示例演示了 RAGFlow 的聊天補全 API,該 API 與 OpenAI 相容。它會向“預設”助手傳送一條聊天訊息,助手會使用已索引的文件作為上下文。更多資訊,請檢視程式碼庫。

5. txtai

txtai 是一個一體化的 AI 框架,提供語義搜尋、嵌入和 RAG 流水線。它附帶一個可嵌入的向量搜尋資料庫(源自 SQLite+FAISS),以及一些允許您編排 LLM 呼叫的實用程式。使用 txtai,一旦您使用文字資料建立了嵌入索引,就可以在程式碼中手動將其連線到 LLM,或者使用內建的 RAG 助手。

我真正喜歡 txtai 的地方在於它的簡潔性:它可以完全在本地執行(無需雲端),它內建了 RAG 流水線模板,甚至還提供自動生成的 FastAPI 服務。它也是開源的(Apache 2.0),易於原型設計和部署。

  • 開源(Apache-2.0,7K+ 星)Python 包。
  • 功能:語義搜尋索引(向量資料庫)、RAG 流水線和 FastAPI 服務生成。
  • RAG 支援:txtai 有一個 RAG 類,它接受一個 Embeddings 例項和一個 LLM,後者會自動將檢索到的上下文貼上到 LLM 提示中。
  • LLM 靈活性:您可以使用 OpenAI、Hugging Face Transformer、llama.cpp 或任何您想要的帶有您自己的 LLM 介面的模型。

使用示例

使用內建流水線在 txtai 中執行 RAG 查詢非常簡單:

from txtai import Embeddings, LLM, RAG 
# 1. Initialize txtai components 
embeddings = Embeddings() # uses a local FAISS+SQLite by default 
embeddings.index([{"id": "doc1", "text": "RAG stands for retrieval-augmented generation."}]) 
llm = LLM("text-davinci-003") # or any model 
# 2. Create a RAG pipeline 
prompt = "Answer the question using only the context below.\n\nQuestion: {question}\nContext: {context}" 
rag = RAG(embeddings, llm, template=prompt) 
# 3. Run the RAG query 
result = rag("What does RAG mean?", maxlength=512) 
print(result["answer"])

此程式碼片段以單個文件為輸入,執行 RAG 流水線。RAG 助手負責從向量索引中檢索相關段落,並將 {context} 填充到提示模板中。它允許您將 RAG 流水線程式碼封裝在一個結構良好的層中,其中包含 API 和無程式碼 UI。Cognita 確實在底層使用了 LangChain/LlamaIndex 模組,但使用結構化的方式組織它們:資料載入器、解析器、嵌入器、檢索器和指標模組。更多資訊,請檢視此處的程式碼庫

6. LLMWare

LLMWare 是一個完整的 RAG 框架,它更傾向於“更小”的專用模型推理,更安全、更快速。大多數框架使用大型雲 LLM。LLMWare 在桌面或本地伺服器上執行具有必要計算能力的桌面 RAG 流水線。它在限制資料洩露風險的同時,仍將安全的 LLM 用於大規模試點研究和各種應用。

LLMWare 提供無程式碼嚮導和模板,用於實現常用的 RAG 功能,包括文件解析和索引功能。它還提供了適用於各種文件格式(Office 和 PDF)的工具,這些工具是將認知 AI 功能應用於文件分析的第一步。

  • 面向企業 RAG 的開源產品(Apache-2.0,超過 14000 顆星)
  • 一種專注於“小型”LLM(例如:Llama 7B 變體)並在裝置上執行推理的方法,即使在 ARM 裝置上也能提供 RAG 功能。
  • 工具:提供 CLI 和 REST API、互動式 UI 和流水線模板
  • 獨特之處:預配置流水線、內建事實核查功能以及用於向量搜尋和問答的外掛功能。
  • 示例:追求 RAG 但無法將資料傳送到雲端的企業,例如金融服務、醫療保健或移動/邊緣 AI 應用程式的構建者。

使用示例

LLMWare 的 API 設計簡潔易用。以下是基於其文件的基本示例:

from llmware.prompts import Prompt 
from llmware.models import ModelCatalog 
# 1. Load a model for prompting 
prompter = Prompt().load_model("llmware/bling-tiny-llama-v0")  
# 2. (Optionally) index a document to use as context 
prompter.add_source_document("./data", "doc.pdf", query="What is RAG?") 
# 3. Run the query with context 
response = prompter.prompt_with_source("What is RAG?") 
print(response)

此程式碼使用 LLMWare Prompt 物件。我們首先指定一個模型(例如,來自 Hugging Face 的小型 Llama 模型)。然後,我們新增一個包含源文件的資料夾。LLMWare 將“doc.pdf”解析成塊,並根據與使用者問題的相關性進行過濾。然後,prompt_with_source 函式發出請求,傳遞來自源的相關上下文。這將返回文字答案和後設資料響應。更多資訊,請點選此處檢視程式碼庫

7. Cognita

TrueFoundary 的 Cognita 是一個專為可擴充套件性和協作而構建的生產級 RAG 框架。它主要致力於簡化從筆記本或實驗到部署/服務的轉換。它支援增量索引,並具有一個 Web UI,非開發人員可以嘗試上傳文件、選擇模型並即時查詢。

  • 這是開源的 (Apache-2.0)。
  • 架構:完全基於 API 並容器化,可以透過 Docker Compose(包括 UI)完全在本地執行。
  • 元件:可重用的庫,用於解析器、載入器、嵌入器、檢索器等。所有元件均可定製和擴充套件。
  • UI – 可擴充套件性:提供用於實驗的 Web 前端以及用於管理 LLM/嵌入器配置的“模型閘道器”。這有助於開發人員和分析師共同構建 RAG 流水線元件。

使用示例

Cognita 主要透過其命令列介面和內部 API 訪問,但以下是使用其 Python API 擷取的概念程式碼片段:

from cognita.pipeline import Pipeline 
from cognita.schema import Document 
# Initialize a new RAG pipeline 
pipeline = Pipeline.create("rag") 
# Add documents (with text content) 
docs = [Document(id="1", text="RAG stands for retrieval-augmented generation.")] 
pipeline.index_documents(docs) 
# Query the pipeline 
result = pipeline.query("What does RAG mean?") 
print(result['answer'])

在實際實施中,您可以使用 YAML 配置 Cognita,或者使用其 CLI 載入資料並啟動服務。前面的程式碼片段描述了整個流程:建立管道、索引資料,然後提出問題。Cognita 文件提供了更多詳細資訊。更多資訊,請在此處檢視完整文件。這將返回文字答案和後設資料響應。更多資訊,請在此處檢視程式碼庫

小結

這些用於 RAG 系統的開源 GitHub 程式碼庫為開發者、研究人員和業餘愛好者提供了豐富的工具包。

  • LangChain 和 LlamaIndex 提供了靈活的 API,用於構建定製的管道和索引解決方案。
  • Haystack 提供的 NLP 管道已在生產環境中針對資料提取的可擴充套件性進行了測試。
  • RAGFlow 和 LLMWare 滿足企業需求,而 LLMWare 則在一定程度上受限於裝置端模型和安全性。
  • 相比之下,txtai 提供輕量級、簡單、一體化的本地 RAG 解決方案,而 Cognita 則透過一個簡單易用的模組化 UI 驅動平臺來處理所有事務。

以上所有用於 RAG 系統的 GitHub 程式碼庫均已維護,並附帶示例,幫助您輕鬆執行。它們共同證明了 RAG 不再只是學術研究的前沿,而是面向所有想要構建 AI 應用程式的人。實際上,“最佳選擇”取決於您的需求和優先順序。

評論留言