LangChain - Retrieval
文章目录
- LangChain - Retrieval
- 文件装载机 Document loaders
- 文本分割 Text Splitting
- 文本嵌入模型 Text embedding models
- 向量存储
- Retrievers
- 索引
- API
- Classes
- Functions
- 官方文档:https://python.langchain.com/docs/modules/data_connection/
- API : https://api.python.langchain.com/en/latest/langchain_api_reference.html#module-langchain.retrievers
许多LLM申请需要特定于用户的数据,这些数据不属于模型训练集的一部分。
实现这一目标的主要方法是通过检索增强生成(RAG)。
在此过程中,将检索外部数据,然后在执行生成步骤时将其传递给 LLM 。
LangChain 提供了 RAG 应用程序的所有构建模块 - 从简单到复杂。
文档的这一部分涵盖了与检索步骤相关的所有内容 - 例如数据的获取。
虽然这听起来很简单,但实际上可能非常复杂。这包含几个关键模块。
文件装载机 Document loaders
文档加载器加载来自许多不同来源的文档。
LangChain 提供 100 多种不同的文档加载器,并与该领域的其他主要提供商(例如 AirByte 和 Unstructed)集成。
LangChain 提供了从所有类型的位置(私有 S3 存储桶、公共网站)加载所有类型文档(HTML、PDF、代码)的集成。
文本分割 Text Splitting
检索的关键部分是仅获取文档的相关部分。这涉及几个转换步骤来准备文档以供检索。
这里的主要任务之一是将大文档分割(或分块)为更小的块。
LangChain 提供了多种转换算法来执行此操作,以及针对特定文档类型(代码、Markdown 等)优化的逻辑。
文本嵌入模型 Text embedding models
检索的另一个关键部分是为文档创建嵌入。
嵌入捕获文本的语义,使您能够快速有效地找到文本的其他相似部分。
LangChain 提供与超过 25 种不同嵌入提供商和方法的集成,从开源到专有 API,让您可以选择最适合您需求的一种。
LangChain提供了标准的接口,让您可以轻松地在模型之间进行切换。
向量存储
随着嵌入的兴起,需要数据库来支持这些嵌入的高效存储和搜索。
LangChain 提供与 50 多种不同矢量存储的集成,从开源本地矢量存储到云托管专有矢量存储,让您可以选择最适合您需求的一种。
LangChain公开了一个标准接口,让您可以轻松地在向量存储之间进行交换。
Retrievers
一旦数据进入数据库,您仍然需要检索它。
LangChain支持多种不同的检索算法,是我们增加最大价值的地方之一。
LangChain支持易于上手的基本方法——即简单语义搜索。
然而,我们还在此基础上添加了一系列算法以提高性能。
这些包括:
- 父文档检索器:这允许您为每个父文档创建多个嵌入,从而允许您查找较小的块但返回更大的上下文。
- 自查询检索器:用户问题通常包含对某些内容的引用,这些内容不仅是语义的,而且表达了一些最能表示为元数据过滤器的逻辑。自查询允许您从查询中存在的其他元数据过滤器解析出查询的语义部分。
- Ensemble Retriever:有时您可能希望从多个不同的来源或使用多种不同的算法检索文档。集成检索器可以让您轻松地做到这一点。
- 和更多!
索引
LangChain Indexing API将您的数据从任何来源同步到向量存储中,帮助您:
- 避免将重复的内容写入矢量存储
- 避免重写未更改的内容
- 避免在未更改的内容上重新计算嵌入
所有这些都可以节省您的时间和金钱,并改善您的矢量搜索结果。
API
langchain.retrievers
Retriever class returns Documents given a text query.
It is more general than a vector store. A retriever does not need to be able to store documents, only to return (or retrieve) it. Vector stores can be used as the backbone of a retriever, but there are other types of retrievers as well.
Class hierarchy:
BaseRetriever --> <name>Retriever # Examples: ArxivRetriever, MergerRetriever
Main helpers:
Document, Serializable, Callbacks,
CallbackManagerForRetrieverRun, AsyncCallbackManagerForRetrieverRun
Classes
retrievers.contextual_compression.ContextualCompressionRetriever | Retriever that wraps a base retriever and compresses the results. |
---|---|
retrievers.document_compressors.base.DocumentCompressorPipeline | Document compressor that uses a pipeline of Transformers. |
retrievers.document_compressors.chain_extract.LLMChainExtractor | Document compressor that uses an LLM chain to extract the relevant parts of documents. |
retrievers.document_compressors.chain_extract.NoOutputParser | Parse outputs that could return a null string of some sort. |
retrievers.document_compressors.chain_filter.LLMChainFilter | Filter that drops documents that aren’t relevant to the query. |
retrievers.document_compressors.cohere_rerank.CohereRerank | [Deprecated] Document compressor that uses Cohere Rerank API. |
retrievers.document_compressors.cross_encoder_rerank.CrossEncoderReranker | Document compressor that uses CrossEncoder for reranking. |
retrievers.document_compressors.embeddings_filter.EmbeddingsFilter | Document compressor that uses embeddings to drop documents unrelated to the query. |
retrievers.document_compressors.flashrank_rerank.FlashrankRerank | Document compressor using Flashrank interface. |
retrievers.ensemble.EnsembleRetriever | Retriever that ensembles the multiple retrievers. |
retrievers.merger_retriever.MergerRetriever | Retriever that merges the results of multiple retrievers. |
retrievers.multi_query.LineListOutputParser | Output parser for a list of lines. |
retrievers.multi_query.MultiQueryRetriever | Given a query, use an LLM to write a set of queries. |
retrievers.multi_vector.MultiVectorRetriever | Retrieve from a set of multiple embeddings for the same document. |
retrievers.multi_vector.SearchType (value) | Enumerator of the types of search to perform. |
retrievers.parent_document_retriever.ParentDocumentRetriever | Retrieve small chunks then retrieve their parent documents. |
retrievers.re_phraser.RePhraseQueryRetriever | Given a query, use an LLM to re-phrase it. |
retrievers.self_query.astradb.AstraDBTranslator () | Translate AstraDB internal query language elements to valid filters. |
retrievers.self_query.base.SelfQueryRetriever | Retriever that uses a vector store and an LLM to generate the vector store queries. |
retrievers.self_query.chroma.ChromaTranslator () | Translate Chroma internal query language elements to valid filters. |
retrievers.self_query.dashvector.DashvectorTranslator () | Logic for converting internal query language elements to valid filters. |
retrievers.self_query.deeplake.DeepLakeTranslator () | Translate DeepLake internal query language elements to valid filters. |
retrievers.self_query.dingo.DingoDBTranslator () | Translate DingoDB internal query language elements to valid filters. |
retrievers.self_query.elasticsearch.ElasticsearchTranslator () | Translate Elasticsearch internal query language elements to valid filters. |
retrievers.self_query.milvus.MilvusTranslator () | Translate Milvus internal query language elements to valid filters. |
retrievers.self_query.mongodb_atlas.MongoDBAtlasTranslator () | Translate Mongo internal query language elements to valid filters. |
retrievers.self_query.myscale.MyScaleTranslator ([…]) | Translate MyScale internal query language elements to valid filters. |
retrievers.self_query.opensearch.OpenSearchTranslator () | Translate OpenSearch internal query domain-specific language elements to valid filters. |
retrievers.self_query.pgvector.PGVectorTranslator () | Translate PGVector internal query language elements to valid filters. |
retrievers.self_query.pinecone.PineconeTranslator () | Translate Pinecone internal query language elements to valid filters. |
retrievers.self_query.qdrant.QdrantTranslator (…) | Translate Qdrant internal query language elements to valid filters. |
retrievers.self_query.redis.RedisTranslator (schema) | Visitor for translating structured queries to Redis filter expressions. |
retrievers.self_query.supabase.SupabaseVectorTranslator () | Translate Langchain filters to Supabase PostgREST filters. |
retrievers.self_query.timescalevector.TimescaleVectorTranslator () | Translate the internal query language elements to valid filters. |
retrievers.self_query.vectara.VectaraTranslator () | Translate Vectara internal query language elements to valid filters. |
retrievers.self_query.weaviate.WeaviateTranslator () | Translate Weaviate internal query language elements to valid filters. |
retrievers.time_weighted_retriever.TimeWeightedVectorStoreRetriever | Retriever that combines embedding similarity with recency in retrieving values. |
retrievers.web_research.QuestionListOutputParser | Output parser for a list of numbered questions. |
retrievers.web_research.SearchQueries | Search queries to research for the user’s goal. |
retrievers.web_research.WebResearchRetriever | Google Search API retriever. |
Functions
retrievers.document_compressors.chain_extract.default_get_input (…) | Return the compression chain input. |
---|---|
retrievers.document_compressors.chain_filter.default_get_input (…) | Return the compression chain input. |
retrievers.ensemble.unique_by_key (iterable, key) | |
retrievers.self_query.deeplake.can_cast_to_float (string) | Check if a string can be cast to a float. |
retrievers.self_query.milvus.process_value (…) | Convert a value to a string and add double quotes if it is a string. |
retrievers.self_query.vectara.process_value (value) | Convert a value to a string and add single quotes if it is a string. |
2024-04-03(三) 晴天