本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI。
在过去几年中,检索增强生成 (RAG) 的生态系统已经蓬勃发展。互联网上出现了越来越多旨在帮助开发者构建 RAG 应用的开源项目。这也是情理之中的事,因为 RAG 是一种用外部知识源来增强大型语言模型 (LLMs) 的有效方法。
RAG * 管道 (pipelines)* 的运作方式如下:
- 系统检索文档或数据;
- 这些数据对完成用户提示的上下文具有信息价值或实用性;
- 系统将该上下文输入到 LLM 中,以生成准确且基于该上下文的知识性回复。
如前所述,我们将探索不同的开源 RAG 框架及其 GitHub 仓库,这些框架使用户能够轻松构建 RAG 系统。我们的目标是帮助开发者、学生和技术爱好者选择一个符合其需求的 RAG 工具包并加以利用。
为什么需要 RAG 系统
检索增强生成 (Retrieval-Augmented Generation) 已迅速成为 AI 领域最具影响力的创新之一。随着企业越来越重视实施具有上下文感知能力的智能系统,掌握 RAG 不再是可选项。
公司正在利用 RAG 管道来构建聊天机器人 (chatbots) 、知识助手 (knowledge assistants) 和企业自动化 (enterprise automation) 系统。这是为了确保其 AI 模型利用的是实时、特定领域的数据,而不是仅仅依赖预训练的知识。
在这个 RAG 被用于自动化智能聊天机器人、助手和企业工具的时代,彻底理解它能为你带来巨大的竞争优势。掌握如何构建和优化 RAG 管道,可以为你在 AI 开发、数据工程 (data engineering) 和自动化领域打开无数扇大门。这最终将使你更具市场竞争力,并为你的职业生涯面向未来做好准备。
在追求这一精通目标的过程中,以下是用于 RAG 系统的顶级 GitHub 仓库。但在此之前,我们先了解一下这些 RAG 框架究竟有何帮助。
RAG 框架的作用是什么?
检索增强生成 (RAG) 框架是一种先进的 AI 架构,旨在通过将外部信息 整合到回复生成过程中,来提升 LLMs 的能力。这使得 LLM 的回复比其初始训练数据更具信息量或更具时效性。
该模型可以从外部数据库或知识库 (APIs) 中检索相关文档或数据。然后,它可以使用这些信息来生成基于用户查询的回复,而不是仅仅依赖于原始训练模型中的数据。
这使得模型能够处理问题并给出既正确又对时间或上下文敏感的答案。同时,它们还可以缓解 与知识截断 (knowledge cut-off ) 和幻觉 (hallucination ) (即对提示给出不正确回复) 相关的问题。通过连接到通用和领域特定的知识源,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 采用分步流程设计 ,允许你混合搭配工具、构建智能体工作流,并使用内置的链 (chains)。
LangChain 的核心功能集包括一个工具链系统、丰富的提示模板,以及对智能体 (agents) 和记忆 (memory) 的一流支持。
- LangChain 是开源的 (MIT license ) 且拥有庞大的社区 (70K+ GitHub stars)。
- 组件: 提示模板、LLM 封装器 (wrappers )、向量存储连接器 (vectorstore connectors)、智能体 (工具 + 推理)、记忆等。
- 集成:LangChain 支持许多 LLM 提供商 (OpenAI 、Azure 、本地 LLMs )、嵌入模型和向量存储 (FAISS 、Pinecone 、Chroma 等)。
- 用例: 定制聊天机器人、文档问答 (document QA )、多步工作流、RAG 和智能体任务 (agentic tasks)。
使用示例
LangChain 的高级 APIs 使简单的 RAG 管道非常简洁。例如,这里我们使用 LangChain 和 OpenAI 的嵌入及 LLM 来回答一个关于一小组文档的问题:
ini
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"])
此代码获取 docs 并使用 OpenAI 嵌入将其加载到 FAISS 向量存储中。然后,它使用 RetrievalQA 提取相关上下文并生成答案。LangChain 抽象了检索和 LLM 调用。
2. Haystack by deepset-ai
Haystack ,由 deepset 开发,是一个专为企业设计的 RAG 框架,围绕可组合的管道 (composable pipelines) 构建。其核心思想是构建一个类似图的管道,在其中你将检索器、阅读器和生成器等节点 (nodes) 连接成一个有向图 。Haystack 专为在生产环境 (prod ) 中部署而设计,并为文档存储和检索提供了多种后端选择,如 Elasticsearch 、OpenSearch 、Milvus 、Qdrant 等。
它同时提供基于关键词 (BM25) 和密集检索 (dense retrieval),并且很容易接入开源阅读器 (Transformers QA models) 或生成式答案生成器。
- 它是开源的 (Apache 2.0 ) 且非常成熟 (10K+ stars)。
- 架构: 以管道为中心且模块化。节点可以精确地插入和替换。
- 组件包括: 文档存储 (Elasticsearch 、In-Memory 等)、检索器 (BM25 、Dense )、阅读器 (e.g., Hugging Face QA models ),以及生成器 (OpenAI 、本地 LLMs)。
- 易于扩展: 分布式设置 (Elasticsearch clusters )、GPU 支持、REST APIs 和 Docker。
- 可能的用例包括: 用于搜索的 RAG、文档问答、回顾应用和监控用户查询。
使用示例
以下是一个使用 Haystack 现代 API * (v2) * 创建小型 RAG 管道的简化示例:
ini
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=["Query"]) # 修正了原文的 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 负责协调整个流程。
3. LlamaIndex
LlamaIndex ,前身为 GPT Index ,是一个以数据为中心的 RAG 框架,专注于索引 (indexing) 和查询 (querying) 你的数据以供 LLM 使用。可以将 LlamaIndex 视为一套工具,用于在你提供的文档 (向量、关键词索引、图) 上构建自定义索引,然后对它们进行查询。LlamaIndex 是一种强大的方式,它利用索引结构将文本文件、APIs 和 SQL 等不同数据源连接到 LLMs。
例如,你可以为你所有的文件创建一个向量索引,然后使用内置的查询引擎来回答你可能有的任何问题,所有这些都通过 LlamaIndex 实现。LlamaIndex 提供高级 APIs 和低级模块,能够自定义 RAG 过程的每个部分。
- LlamaIndex 是开源的 (MIT License ) 且拥有不断增长的社区 (45K+ stars)。
- 数据连接器: (用于 PDFs 、文档、网络内容),多种索引类型 (vector store 、tree 、graph),以及一个支持高效导航的查询引擎。
- 互操作性: 只需将其插入 LangChain 或其他框架即可。LlamaIndex 可与任何 LLM /Embedding * (OpenAI 、 Hugging Face 、本地 LLMs)* 配合使用。
- 简化 Agent 构建:LlamaIndex 通过自动创建索引并从索引中获取上下文,让你更容易构建自己的 RAG agents。
使用示例
LlamaIndex 使从文档创建可搜索索引变得非常容易。例如,使用其核心 API:
ini
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 以字符串形式返回答案。
4. RAGFlow
RAGFlow 是由 InfiniFlow 设计的 RAG 引擎,旨在应对复杂和大规模的企业数据。它致力于实现"深度文档理解 "的目标,以解析 PDFs、扫描文档、图像或表格等不同格式,并将其总结成有组织的块 (chunks)。
RAGFlow 具有集成的检索模型,以及用于调试的智能体模板和可视化工具。其关键元素是针对文档的高级模板化分块 (chunking) ,以及可追溯的引用 (grounded citations) 概念。这有助于减少幻觉,因为你可以知道哪些来源文本支持哪个答案。
- RAGFlow 是基于(Apache-2.0)开源的 ,拥有强大的社区。
- 亮点: 深度文档解析 (deep documents) (即分解表格、图像和多政策文档)、具有模板规则的文档分块 (用于管理文档的自定义规则),以及引用 (显示文档出处以回答问题)。
- 工作流:RAGFlow 作为服务使用,这意味着你需要启动一个服务器 (使用 Docker) ,然后通过 UI 或 API 索引你的文档。RAGFlow 还具有 CLI 工具和 Python/REST APIs 用于构建聊天机器人。
- 用例: 处理大量文档的大型企业,以及要求代码级可追溯性和准确性的用例。
使用示例
此示例演示了 RAGFlow 的聊天完成 API ,该 API 与 OpenAI 兼容。它向"default"助手发送一条聊天消息,该助手将使用已索引的文档作为上下文。
makefile
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"])
5. txtai
txtai 是一个一体化 (all-in-one) 的 AI 框架,提供语义搜索 (semantic search) 、嵌入和 RAG 管道。它附带一个可嵌入的 、可向量搜索的数据库 (源自 SQLite + FAISS),以及允许你编排 LLM 调用的实用工具。使用 txtai ,一旦你使用文本数据创建了 Embedding index ,你可以手动将其与代码中的 LLM 连接,或使用内置的 RAG 助手。
我非常喜欢 txtai 的简单性:它可以 100% 本地 运行 (无需云),它内置了 RAG 管道的模板,甚至提供了自动生成的 FastAPI 服务。它也是基于(Apache 2.0)开源的 ,易于原型设计和部署。
- 开源的 (Apache-2.0, 7K+ stars) * Python* 包。
- 能力: 语义搜索索引 (vector DB )、RAG 管道和 FastAPI service generation。
- RAG * 支持:txtai * 有一个 RAG 类,它接受一个 Embeddings 实例和一个 LLM ,自动将检索到的上下文粘合到 LLM 提示中。
- LLM * 灵活性: * 可以使用 OpenAI 、Hugging Face transformers 、llama.cpp 或任何带有你自己的 LLM 接口的模型。
使用示例
以下是使用内置管道在 txtai 中运行 RAG 查询的简单示例:
ini
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} 。它将允许你用良好的结构层、APIs 和无代码 UI 来封装你的 RAG 管道代码。
6. LLMWare
LLMWare 是一个完整的 RAG 框架,它强烈倾向于更小、更安全、更快速 的专业模型推理。大多数框架使用大型云 LLM 。LLMWare 可以在桌面或本地服务器上以必要的计算能力运行桌面 RAG 管道。它限制了数据暴露的风险,同时仍利用安全的 LLMs 进行大规模试点研究和各种应用。
LLMWare 提供了用于常见 RAG 功能的无代码向导和模板,包括文档解析和索引功能。它还提供用于各种文档格式 (Office 和 PDF ) 的工具,这些都是认知 AI 功能进行文档分析的有用第一步。
- 针对企业 RAG 的开源产品。
- 专注点: 一种专注于"更小"LLMs * (例如:Llama 7B * 变体) 的方法,推理在设备上运行,同时即使在 ARM 设备上也提供 RAG 功能。
- 工具: 提供 CLI 和 REST APIs 、交互式 UIs 和管道模板。
- 独特特性: 预配置的管道、内置的事实核查功能,以及用于向量搜索和问答的插件功能。
- 示例: 寻求 RAG 但不能将数据发送到云端的企业,例如金融服务、医疗保健或移动/边缘 AI 应用的构建者。
使用示例
LLMWare 的 API 设计得很简单。以下是基于其文档的基本示例:
python
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
Cognita by TrueFoundary 是一个为可扩展性和协作 而构建的、可用于生产的 RAG 框架。它主要关注如何轻松地从笔记本或实验过渡到部署/服务。它支持增量索引 (incremental indexing),并提供一个 Web UI,供非开发者尝试上传文档、选择模型并实时查询。
- 基于Apache-2.0开源协议。
- 架构: 完全基于 API 和容器化 (containerized),可以通过 Docker Compose * (包括 UI)* 在本地完全运行。
- 组件: 用于解析器、加载器、嵌入器、检索器等的可重用库。一切都可以定制和扩展。
- UI - 扩展性: 提供了一个 Web frontend 用于实验,以及一个"model gateway "来管理 LLM /embedder 配置。这有助于开发者和分析师共同构建 RAG 管道组件。
使用示例
Cognita 主要通过其命令行接口和内部 API 进行访问,但这是一个使用其 Python API 的概念性伪代码片段:
ini
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 提供了灵活的 APIs,用于构建定制的管道和索引解决方案。
- Haystack 提供了经过生产环境测试的 NLP 管道,具有数据摄取方面的可扩展性。
- RAGFlow 和 LLMWare 解决了企业需求,其中 LLMWare 偏向于设备上模型和安全性。
- 相比之下,txtai 提供了一个轻量级、简单、一体化的本地 RAG 解决方案,而 Cognita 则通过一个简单、模块化、UI 驱动的平台来解决一切问题。
所有这些 RAG 系统的 GitHub 仓库都得到了维护,并附带了示例,帮助你轻松运行。它们共同表明,RAG 不再是学术研究的前沿,而是可供所有想要构建 AI 应用的人使用的。实际上,"最佳选择"取决于你的需求和优先事项。
学习资源推荐
如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。
本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI。