008-langchain-retrieval-overview
最后更新于
最后更新于
在大型语言模型(LLM)领域,越来越多的应用需要生成用户特定的数据,这些数据通常超出了模型的训练数据范围。
因为大模型在训练的过程中,因为受到训练数据的影响,可能并没没有用户所需要的数据,所以可能会导致大语言模型在某些特定数据上的行为缺失。
为了满足这一需求,检索增强生成 Retrieval Augmented Generation(RAG)已经成为一项关键技术。通过RAG,外部数据可以通过被检索,然后在生成过程中与大语言模型(LLM)无缝集成。
通俗点来说就是用户先通过Retrieval技术获取到所需的数据,然后再喂给大模型,由大模型组装,最后生成经由大模型处理过的数据。
langchain提供了一整套的工具和功能来让我们实现整个RAG的功能,以支持从简单到复杂的RAG应用。
首先,我们来看下他提供的各种组件和组合的流程图:
从图中我们可以看到数据首先是在各个数据源中。
数据源可以有多种多样,这些数据源就是外部数据源,存储着我们需要的,但是大模型却没有的数据。
对于这些数据,我们通过load把数据加载进来。然后通过transform对数据进行转换成合适的格式。接下来使用embedding模型对数据进行转换,并存储到Store中,最后通过retrieve调用使用。
这样一个完整的RAG流程就完成了。
在上面的图中,除了sourse部分是我们自己的数据,不属于langchain之外,其他的部分langchain都提供了强有力的支持。
RAG中的检索步骤涉及获取外部数据并无缝集成到语言模型中。虽然这可能看起来很简单,但它包含一系列复杂性和微妙之处。LangChain提供了一个强大的框架来应对这些挑战,它包括多个重要模块,以简化检索过程。
具体而言,有下面几个部分。
LangChain为开发人员提供了超过100种不同的文档加载器。
这些加载器可以与多种来源轻松连接,包括流行的提供商,如AirByte和Unstructured等。
无论您需要从私有的S3 buckets或公共网站提供的HTML、PDF或者是代码片段,LangChain都可以胜任。
这种灵活性确保您可以轻松地从几乎任何位置检索数据。
检索过程的一个重要部分是确保只获取到文档中的有用的部分。
LangChain通过各种转换步骤来简化这项任务,从而对文档进行相应的转换。
其中一个关键转换是将大型文档分割成更小的块。LangChain提供多种用于此目的的算法,以及针对特定文档类型(例如代码或Markdown)进行优化的逻辑。这确保了检索到的数据能够得到高效处理并能够提供给下一个步骤进行使用。
我们知道大语言模型实际上对自然语言的语音进行理解。对于输入的自然语言来讲,我们需要一个方式来通过语义进行相似度查找,这种方式就是embedding。
为了实现这一点,LangChain集成了25多种不同的文本嵌入提供商和方法。这些嵌入是理解文本数据潜在含义的强大工具,使您能够快速高效地找到其他类似的文本。
无论您偏好开源解决方案还是专有API,LangChain都提供了广泛的选择,让您选择最适合您需求的解决方案。此外,LangChain提供了标准化的接口,简化了在不同嵌入模型之间切换的过程。
随着文本嵌入技术的兴起,需要支持这些向量的高效存储和检索的数据库也应运而生。
LangChain集成了50多种不同的向量存储选项,涵盖了从开源本地解决方案到云托管专有解决方案的所有内容,让您可以选择最适合您需求的存储方式。LangChain提供了一致的接口,使您可以轻松切换不同的向量存储。
一旦数据存储在数据库中,下一步是高效地检索它。LangChain支持多种不同的检索算法,langchain不仅支持易于入门的基本方法,如简单的语义搜索。langchain还在此基础上引入了一系列性能优化算法,包括:
父文档检索器:
此功能允许您为每个父文档生成多个嵌入,使您能够查找更小的文本块并返回更大的上下文。
自查询检索器:
用户的查询中,通常包含的不仅仅是语义上的查询,还可能包含一些类似元数据判断的筛选逻辑。自查询允许您从查询中提取出你需要的部分。
集成检索器:
有时,您可能希望从多个不同的来源检索文档,或者使用多个不同的检索算法。集成检索器允许您轻松实现这一目标,以满足特定的需求。
LangChain是一个功能丰富的平台,为检索增强生成(RAG)提供了广泛的工具和功能。无论您是需要访问各种数据源,对文档进行复杂的转换,还是寻找高效的文本嵌入和存储解决方案,LangChain都能满足您的需求。检索器模块使您能够高效地检索存储在数据库中的数据,进一步增强了LangChain的功能。无论您的应用是简单还是复杂,LangChain都为RAG应用提供了强大的基础。
在后面的文章中,我们会详细介绍这几个部分的具体使用,尽请期待。