
检索增强生成 (RAG) 的生态系统在过去几年中蓬勃发展。如今,互联网上出现了越来越多旨在帮助开发者构建 RAG 应用程序的开源项目。这有何不可?RAG 是一种利用外部知识源增强大型语言模型 (LLM) 的有效方法。因此,我们想,为什么不与读者分享一些掌握 RAG 系统的最佳 GitHub 代码库呢?
在此之前,我们先来简单介绍一下 RAG 及其应用。
RAG 流程的运行方式如下:
- 系统检索文档或数据;
- 检索对完成用户提示的上下文信息丰富或有用的数据;
- 系统将该上下文输入 LLM,以生成准确且符合该上下文知识的响应。
如上所述,我们将在此探讨不同的开源 RAG 框架及其 GitHub 代码库,帮助用户轻松构建 RAG 系统。其目的是帮助开发者、学生和技术爱好者选择适合自身需求的 RAG 工具包并加以利用。
为何您应该掌握RAG系统
检索增强生成 (RAG) 已迅速成为人工智能领域最具影响力的创新之一。随着企业越来越注重实现具有情境感知功能的智能系统,掌握它已不再是可有可无的选择。许多企业正在将 RAG 管道用于聊天机器人、知识助理和企业自动化。这是为了确保他们的人工智能模型能够利用实时、特定领域的数据,而不是仅仅依赖于预先训练的知识。
在 RAG 被用于自动化更智能的聊天机器人、助理和企业工具的时代,彻底理解它可以为您带来巨大的竞争优势。了解如何构建和优化 RAG 管道可以为人工智能开发、数据工程和自动化领域打开无数的大门。这最终将提升您的市场竞争力,并为您的职业生涯提供面向未来的保障。

RAG 的优势
为了精通 RAG,以下是 GitHub 上 RAG 系统的热门代码库。在此之前,我们先来了解一下这些 RAG 框架的实际作用。
RAG框架的作用是什么?
检索增强生成 (RAG) 框架是一种先进的 AI 架构,旨在通过将外部信息集成到响应生成过程中来提升 LLM 的功能。这使得 LLM 的响应比最初构建语言模型时使用的数据更具信息量或时间相关性。该模型可以从外部数据库或知识库 (API) 中检索相关文档或数据。然后,它可以使用它来根据用户查询生成响应,而不是仅仅依赖于最初训练的模型中的数据。

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 应用程序的人。实际上,“最佳选择”取决于您的需求和优先级。


评论留言