最近在折腾企业私有化落地应用大模型的场景与方案,绕不开 RAG。笔记记录一下,方便后续查阅。
什么是 RAG?
Retrieval-augmented generation (RAG) is a technique for enhancing the accuracy and reliability of generative AI models with facts fetched from external sources.
RAG 是 Retrieval Augmented Generation 的缩写,检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。在 LLM 本就强大的功能基础上,RAG 将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进 LLM 输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。
从名字上来看 RAG 三大部分,检索、增强、生成,表面理解就是:
1、去知识库检索相关的专业内容
2、把检索出来的信息,融合到 prompt 中,增强输入
3、最后让大模型生成更符合事实性的回答

为何要用 RAG?
LLM 是一项关键的人工智能(AI)技术,为智能聊天机器人和其他自然语言处理(NLP)应用提供支持。目标是通过交叉引用权威知识来源,创建能够在各种环境中回答用户问题的机器人。不幸的是,LLM 技术的本质在 LLM 响应中引入了不可预测性。此外,LLM 训练数据是静态的,所掌握的知识大而全,有截止日期。LLM面临的挑战包括:
- 在没有答案的情况下提供虚假信息(大模型幻觉)
- 当用户需要特定的当前响应时,提供过时的或者通用的信息
- 从非权威来源创建答案
- 由于术语混淆,不同的训练来源使用相同的术语谈论不同的事,产生不准确的响应
将大语言模型看作是一个过于热情的同事,他拒绝随时了解最新八卦,但总是会自信的回答谈论每一个问题。而 RAG 是解决其中一些挑战的一种方法。它会重定向 LLM,从权威的、预先确定的知识来源中检索相关信息,企业可以更好的控制生成的文本输出,并且用户可以深入了解 LLM 如何生成响应。
可以看到,RAG为组织专业领域的生成式人工智能落地带来了很多优势。
节约成本提高效率
聊天机器人开发通常从基础模型开始。基础模型(FM)是在广泛的广义和未标记数据上训练的 API 可访问 LLM。针对组织或领域特定信息重新训练 FM 的计算和成本很高。RAG 是一种将新数据引入 LLM 的更加经济高效的方法。外挂知识库,随时增删改和更新,使生成式人工智能技术更广泛地获得和使用。
访问更新的信息
RAG 允许我们为生成模型提供最新的研究、统计数据或新闻。他们可以使用 RAG 将 LLM 直接连接到实时社交媒体提要、新闻网站或其他经常更新的信息来源。然后,LLM 可以向用户提供最新信息,从而确保回答的准确性和及时性。
增加用户信任度
RAG 允许LLM 通过来源归属来呈现准确的信息。输出可以包括对来源的引文或引用。如果需要进一步说明或更详细的信息,用户也可以自己查找源文档。这可以增加对您的生成式人工智能解决方案的信任和信心。
更多控制权
借助 RAG,可以更高效的测试和改进应用。控制和调整 LLM 的信息来源,针对特定问题引用错误信息来源,还可以进行故障排除并进行修复。企业可以更自信的为业务应用落地生成式人工智能技术。
RAG 的工作原理
如果没有 RAG,LLM 会接受用户输入,并根据它所接受训练的信息或它已经知道的信息创建响应。RAG 引入了一个信息检索组件,该组件利用用户输入首先从新数据源提取信息。用户查询和相关信息都提供给 LLM。LLM 使用新知识及其训练数据来创建更好的响应。
创建外部数据
LLM 原始训练数据集之外的新数据称为外部数据。它可以来自多个数据来源,例如 API、数据库或文档存储库。数据可能以各种格式存在,例如文件、数据库记录或长篇文本。另一种称为嵌入语言模型的 AI 技术将数据转换为数字表示形式并将其存储在向量数据库中。这个过程会创建一个生成式人工智能模型可以理解的知识库。
检索相关信息
执行相关性搜索。用户查询将转换为向量表示形式,并与向量数据库匹配。例如,考虑一个可以回答组织的人力资源问题的智能聊天机器人。如果员工搜索_:“我有多少年假?”_,系统将检索年假政策文件以及员工个人过去的休假记录。这些特定文件将被退回,因为它们与员工输入的内容高度相关。相关性是使用数学向量计算和表示法计算和建立的。
增强 LLM 提示
RAG 模型通过在上下文中添加检索到的相关数据来增强用户输入(或提示)。此步骤使用提示工程技术与 LLM 进行有效沟通。增强提示允许大型语言模型为用户查询生成准确的答案。
更新外部数据
下一个问题可能是——如果外部数据过时了怎么办?要维护当前信息以供检索,请异步更新文档并更新文档的嵌入表示形式。
下图显示了将 RAG 与 LLM 配合使用的概念流程。

RAG 开源框架
对于个人研究,是否需要重复造轮子呢?现在有那么多开源框架可以方便的做这个事情,当然是拿来主义了。但也要了解目前市面上有哪些开源的 RAG 框架,都有什么特点,能否满足开发需求和应用场景。
这里总结了一些场景 RAG 框架,有其他的可以评论区留言。
一、LangChain
LangChain 是一个用于开发由大型语言模型(LLM)支持的应用程序的框架。
项目地址:https://github.com/langchain-ai/langchain/
LangChain简化了LLM 应用整个生命周期的每个阶段:
- 开发:使用LangChain的开源构建块、组件和第三方集成来构建应用程序。
- 生产化:使用 LangSmith 检查、监控和评估您的应用,以便您可以充满信心地持续优化和部署。
- 部署:使用 LangGraph Cloud 将您的 LangGraph 应用程序转变为生产环境的 API 和助手。
现在市面上有很多人用 LangChain 结合 LLM 构造 RAG 流程,因为 Langchain 里面包含了各种组件,向量检索、文本分割、大模型调用,还有很多其他的都在里面。

文档资料:https://python.langchain.com/v0.2/docs/tutorials/rag/
二、LangChain-Chatchat
基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开源、可离线部署的 RAG 与 Agent 应用项目。利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
项目地址:https://github.com/chatchat-space/Langchain-Chatchat
该项目是一个可以实现完全本地化推理的知识库增强方案, 重点解决数据安全保护,私域化部署的企业痛点。支持市面上主流的本地大语言模型和Embedding模型,支持开源的本地向量数据库。 本开源方案采用Apache License,可以免费商用,无需付费。

硬件要求:
硬件方面,因 0.3.0 版本已修改为支持不同模型部署框架接入,因此可在 CPU、GPU、NPU、MPS 等不同硬件条件下使用。
文档资料:https://github.com/chatchat-space/Langchain-Chatchat/wiki
三、RAGFlow
RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。
项目地址:https://github.com/infiniflow/ragflow
兼容各种异构数据源
支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据、网页等。
有理有据、最大程度降低幻觉
文本切片过程可视化,支持手动调整。有理有据:答案提供关键引用的快照并支持追根溯源。
基于模板的文本切片
不仅仅是智能,更重要的是可控可解释。多种文本模板可供选择。
”Quality in, quality out”
基于深度文档理解,能够从各类复杂格式的非结构化数据中提取真知灼见。真正在无限上下文(token)的场景下快速完成大海捞针测试。

硬件要求:
- CPU >= 4 核
- RAM >= 16 GB
- Disk >= 50 GB
- Docker >= 24.0.0 & Docker Compose >= v2.26.1
文档资料:https://ragflow.io/docs/v0.9.0/
四、QAnything
QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。
您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。
目前已支持格式: PDF(pdf),Word(docx),PPT(pptx),XLS(xlsx),Markdown(md),电子邮件(eml),TXT(txt),图片(jpg,jpeg,png),CSV(csv),网页链接(html)
项目地址:https://github.com/netease-youdao/QAnything/tree/master
特点:
- 数据安全,支持全程拔网线安装使用。
- 支持跨语种问答,中英文问答随意切换,无所谓文件是什么语种。
- 支持海量数据问答,两阶段向量排序,解决了大规模数据检索退化的问题,数据越多,效果越好。
- 高性能生产级系统,可直接部署企业应用。
- 易用性,无需繁琐的配置,一键安装部署,拿来就用。
- 支持选择多知识库问答。
架构如下:

两阶段检索关键亮点
知识库数据量大的场景下两阶段优势非常明显,如果只用一阶段 embedding 检索,随着数据量增大会出现检索退化的问题,如下图中绿线所示,二阶段 rerank 重排后能实现准确率稳定增长,即数据越多,效果越好。

硬件要求:
最低CPU即可;使用GPU环境需要NVIDIA GPU Memory >= 4GB (use OpenAI API) & Docker Desktop >= 4.26.1(131620)
文档资料:https://qanything.ai/docs/introduce
当然,还有很多框架暂时还没看,后面有时间再补充。其中,QAnything 的 Rerank 模块设计的最好,RAGFlow的多源文档处理最好,综合考虑,接下来以 RAGFlow 框架进一步实践企业级大模型应用场景。
参考:
What Is Retrieval-Augmented Generation aka RAG?