微信扫码
与创始人交个朋友
我要投稿
在前面的课程介绍里,我向大家讲解了大语言模型里的三大概念——预训练、微调以及提示词工程。相信大家看完后应该对大语言模型已经有了初步的了解。那这节课我们学习另一个在大语言模型大火后非常重要的概念——RAG(Retrieval-Augmented Generation)检索增强生产。
RAG是一种结合信息检索与生成模型的架构。它通过先从数据库或文档中检索相关信息,然后将这些信息与生成模型结合,生成更准确、上下文相关的回答。这种方法在处理开放域问答、对话系统等任务时,能显著提升生成内容的质量和相关性。
在RAG中,也有很多的开源框架可供使用,比如说从开始就很火的LangChain,有现在后期比较常用的LlamaIndex。那在这门课程中,我们将基于LangChain来实现一些基本的工作。
LangChain是一个基于Python的开源框架,旨在简化构建基于语言模型的应用,具有模块化设计、数据源集成和链式调用等特点。它支持多种语言模型的使用,适合开发聊天机器人、问答系统等自然语言处理应用,提供了丰富的文档和示例,便于快速上手。
根据LangChain 的主要组件可以分为以下几类,那我们在这门课主要学习的是关于Indexes索引部分的内容:
这些组件共同构成了LangChain的核心架构,帮助开发者轻松构建复杂的语言模型应用。
RAG 的全流程可以分为两个主要阶段:向量存储加载和检索生成。
其实我一直觉得说,RAG(检索增强生成)应用的基础搭建确实相对简单。通过利用现有的开源框架,我们只需要将文档导入系统,选择一个合适的嵌入模型进行向量化处理,然后将这些向量存储在RAG库中。调用模型时,先把用户问题传递给RAG模块,检索出相关的信息,再结合大语言模型生成回答即可。这一过程使我们能够轻松将大语言模型与现有数据结合,提供更精准的回答。
例如,像我之前参与过的超星集团培训项目中的AI助教,其能在平台上与学生进行对话,并基于课程资源反馈问题的答案。很多老师以为这些AI助教在上传数据后经过了重新训练,使模型更专业化,但其实,背后的原理是将老师上传的内容作为知识库,通过RAG技术检索相关信息,并将其传递给大语言模型,生成回答。整个过程中,大语言模型本身并没有发生变化,唯一变化的部分是通过RAG检索后传入模型的提示词内容变得更为精准。
类似的情况我也在装配式建筑企业的调研中见到过,他们开发的RAG系统通过收集大量装配式建筑的资料,实现了更专业化的问答功能。RAG的火爆不仅在于其技术实现门槛相对较低,还因为它能够明显提升语言模型的应用效果。
但要真正做好RAG并不是一件容易的事。“茴香豆”项目的负责人白座曾多次提到,虽然RAG系统的基础搭建很简单,但要实现高效、稳定,并且符合安全性要求,尤其是保证内容符合社会主义核心价值观,仍然需要在输入输出的各个环节投入大量的精力和心思。简而言之,尽管技术门槛不高,但想要打造一个效果优异、安全性强的RAG系统,依然是一项复杂且精细的工作。
在LangChain中其实支持非常多种来源的文件,包括了网页,Youtube等等。那这里面具体的数据类型就包括PDF文件、HTML、JSON以及Word等等。
我们可以以公开和专有的信息以及结构化和非结构化的数据来对这些进行划分。
结构化数据通常是有规则且格式化的数据,容易存储和查询。表格化的格式意味着数据已经组织好,可以轻松地在数据库或电子表格中进行处理。图中右侧列举的结构化数据示例包括:
非结构化数据指的是没有固定格式或规则的数据,难以直接通过数据库查询处理。它包括文本、图片、视频等各种形式的内容。图中左侧列举的非结构化数据示例包括:
我们就可以通过langChain的方式将大量的文件放进来了。Loader就相当于是提前把文件放到一个容器里面,我们就可以基于这个容器对文件内部进行更改。
但是总的来说,Langchain是可以帮我们节省很多的整理文档的时间,我们常见的PDF、CSV、Word等等类型的文档都是能够直接导入的,甚至我们只需要给其Youtube视频链接就可以把整个视频的文本作为数据库然后来实现对话,这还是非常方便的一件事情。
下面我就用代码实战一下,以下是我用的关键库的版本,假如各位想要亲自实践的话务必按照以下版本,不然可能回出现报错情况!
langchain 0.3.0
langchain-community 0.3.0
pypdf 5.0.0
openai 1.47.0
beautifulsoup4 4.12.3
那首先假如我们需要将pdf载入,目前最新的版本已经不再是通过from langchain.document_loaders import PyPDFLoader
的方式,而是通过from langchain_community.document_loaders import PyPDFLoader
的方式实现。那完整的代码如下,我们就可以打印出文件内所有的内容和信息。
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(r"D:\langchain\test1.pdf")
pages = loader.load()
print(pages)
其实本质上就是langchain调用了PyPDF这个库来实现了这个事情,类似的我们也可以对一些URL链接来转变为我们的Document。
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://zh.d2l.ai/")
docs = loader.load()
print(docs[0].page_content[:500])
这个URL并非所有链接都可以实现爬虫抓取,这里我用的是李沐老师写的《动手学深度学习》的开源代码官网,这个官网没有使用太多反爬虫的技巧。但是国内很多其他的网页其实都使用了动态加载技术、需要用户登录,或是有特定的反爬虫机制。WebBaseLoader
主要用于抓取静态 HTML 内容,对于动态生成的内容(例如由 JavaScript 加载的内容),它无法直接处理。
除了PDF和URL以外,其实我们可以在Langchain在API官网上找到更多相关的信息。在下面图片右边都是一系列的Loader,包括Arxiv等等。但是我之前开发的时候就发现有些其实虽然写了但是用不了,还是得自己重新爬。又有一些其实是需要额外花费的,比如Google系列的很多可能初期是免费的,后期是需要额外花钱买key的额度的。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-01-06
GraphRAG:基于知识图谱的RAG,好用,贼贵!
2025-01-06
RAG成为过去式?缓存增强生成(CAG)is All You Need?
2025-01-06
GraphRAG × AutoGen × Ollama × Chainlit = 本地免费多代理 RAG 超级 AI 助手
2025-01-05
装上记忆,Agent牛了!
2025-01-04
检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?
2025-01-04
我如何利用 ChromaDB 和 Chainlit 构建基于 Graph-RAG 系统的 LLM 应用程序
2025-01-04
吴恩达DeepLearning.AI课程系列 —— 大模型检索增强生成(二):文档划分技术简介
2025-01-04
吴恩达DeepLearning.AI课程系列 —— 大模型检索增强生成(三):向量数据库及嵌入
2024-07-18
2024-09-04
2024-05-05
2024-06-20
2024-05-19
2024-07-09
2024-07-09
2024-06-13
2024-07-07
2024-07-07
2025-01-06
2025-01-04
2024-12-30
2024-12-27
2024-12-26
2024-12-24
2024-12-21
2024-12-14