LangChain - Retrieval

news2024/11/20 4:33:55

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.ContextualCompressionRetrieverRetriever that wraps a base retriever and compresses the results.
retrievers.document_compressors.base.DocumentCompressorPipelineDocument compressor that uses a pipeline of Transformers.
retrievers.document_compressors.chain_extract.LLMChainExtractorDocument compressor that uses an LLM chain to extract the relevant parts of documents.
retrievers.document_compressors.chain_extract.NoOutputParserParse outputs that could return a null string of some sort.
retrievers.document_compressors.chain_filter.LLMChainFilterFilter 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.CrossEncoderRerankerDocument compressor that uses CrossEncoder for reranking.
retrievers.document_compressors.embeddings_filter.EmbeddingsFilterDocument compressor that uses embeddings to drop documents unrelated to the query.
retrievers.document_compressors.flashrank_rerank.FlashrankRerankDocument compressor using Flashrank interface.
retrievers.ensemble.EnsembleRetrieverRetriever that ensembles the multiple retrievers.
retrievers.merger_retriever.MergerRetrieverRetriever that merges the results of multiple retrievers.
retrievers.multi_query.LineListOutputParserOutput parser for a list of lines.
retrievers.multi_query.MultiQueryRetrieverGiven a query, use an LLM to write a set of queries.
retrievers.multi_vector.MultiVectorRetrieverRetrieve 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.ParentDocumentRetrieverRetrieve small chunks then retrieve their parent documents.
retrievers.re_phraser.RePhraseQueryRetrieverGiven 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.SelfQueryRetrieverRetriever 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.TimeWeightedVectorStoreRetrieverRetriever that combines embedding similarity with recency in retrieving values.
retrievers.web_research.QuestionListOutputParserOutput parser for a list of numbered questions.
retrievers.web_research.SearchQueriesSearch queries to research for the user’s goal.
retrievers.web_research.WebResearchRetrieverGoogle 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(三) 晴天

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1572908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IJKPLAYER源码分析-mediacodec硬解

前言 近期腾出了点时间&#xff0c;拟对IJKPLAYER做更完整的源码分析&#xff0c;并对关键实现细节&#xff0c;作为技术笔记&#xff0c;记录下来。包括Android端硬解码/AudioTrack/OpenSL播放&#xff0c;以及iOS端硬解码/AudioUnit播放&#xff0c;以及OpenGL渲染和Android/…

文件服务器之二:SAMBA服务器

文章目录 什么是SAMBASAMBA的发展历史与名称的由来SAMBA常见的应用 SAMBA服务器基础配置配置共享资源Windows挂载共享Linux挂载共享 什么是SAMBA 下图来自百度百科 SAMBA的发展历史与名称的由来 Samba是一款开源的文件共享软件&#xff0c;它基于SMB&#xff08;Server Messa…

使用Element Plus

1. 官网安装 安装 | Element Plus (gitee.io) 安装&#xff1a; npm install element-plus --save 在main.ts中全局注册ElementPlus并使用 //加入element-plus import ElementPlus from element-plus; //加入element-plus样式 import element-plus/dist/index.css; import…

Day106:代码审计-PHP原生开发篇文件安全上传监控功能定位关键搜索1day挖掘

目录 emlog-文件上传&文件删除 emlog-模板文件上传 emlog-插件文件上传 emlog-任意文件删除 通达OA-文件上传&文件包含 知识点&#xff1a; PHP审计-原生开发-文件上传&文件删除-Emlog PHP审计-原生开发-文件上传&文件包含-通达OA emlog-文件上传&文件…

Unknown redis exception; event execu tor terminated;解决

最近查看服务器日记是不是报发现有台服务器报错&#xff1a; rocessing failed; nested exception is org.springframework.data.redis.RedisSystemException: Unknown redis exception; nested exception is java.util.concurrent.RejectedExecutionException: event execu …

Stale Diffusion、Drag Your Noise、PhysReaction、CityGaussian

本文首发于公众号&#xff1a;机器感知 Stale Diffusion、Drag Your Noise、PhysReaction、CityGaussian Drag Your Noise: Interactive Point-based Editing via Diffusion Semantic Propagation Point-based interactive editing serves as an essential tool to compleme…

Python实现特征模态分解(FMD)

大家好&#xff0c;我是带我去滑雪&#xff01; 特征模态分解&#xff08;Feature Mode Decomposition&#xff0c;FMD&#xff09;是一种信号处理技术&#xff0c;用于从数据中提取特征&#xff0c;并将其表示为一组特定的模态成分。与其他分解方法类似&#xff0c;如小波变换…

RUST语言值所有权之内存复制与移动

1.RUST中每个值都有一个所有者,每次只能有一个所有者 String::from函数会为字符串hello分配一块内存 内存示例如下: 在内存分配前调用s1正常输出 在分配s1给s2后调用报错 因为s1分配给s2后,s1的指向自动失效 s1被move到s2 s1自动释放 字符串克隆使用

Oracle 中 where 和 on 的区别

1.Oracle 中 where 和 on 的区别 on&#xff1a;会先根据on后面的条件进行筛选&#xff0c;条件为真时返回该行&#xff0c;由于on的优先级高于left join&#xff0c;所以left join关键字会把左表中没有匹配的所有行也都返回&#xff0c;然后生成临时表返回,执行优先级高于…

Python 基于列表实现的通讯录管理系统(有完整源码)

目录 通讯录管理系统 PersonInformation类 ContactList类 menu函数 main函数 程序的运行流程 完整代码 运行示例 通讯录管理系统 这是一个基于文本的界面程序&#xff0c;用户可以通过命令行与之交互&#xff0c;它使用了CSV文件来存储和读取联系人信息&#xff0c;这…

C++进阶--C++11(2)

C11第一篇 C11是C编程语言的一个版本&#xff0c;于2011年发布。C11引入了许多新特性&#xff0c;为C语言提供了更强大和更现代化的编程能力。 可变参数模板 在C11中&#xff0c;可变参数模板可以定义接受任意数量和类型参数的函数模板或类模板。它可以表示0到任意个数&…

数据库基础:概念、分类、作用和特点

文章目录 概要DB-Engines 排名数据库的分类数据库的作用数据库的特点数据库的应用小结 概要 数据库是按照数据结构来组织、存储和管理数据的仓库。它是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库可以被视为电子化的文件柜&#xff0c;用…

40.基于SpringBoot + Vue实现的前后端分离-摄影分享网站(项目 + 论文)

项目介绍 随着互联网时代的发展&#xff0c;传统的线下管理技术已无法高效、便捷的管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;国家在环境要求不断提高的前提下&#xff0c;摄影分享网站管理系统建设也逐渐进入了信…

Lanelets_ 高效的自动驾驶地图表达方式

Lanelets: 高效的自动驾驶地图表达方式 附赠自动驾驶学习资料和量产经验&#xff1a;链接 LaneLets是自动驾驶领域高精度地图的一种高效表达方式&#xff0c;它以彼此相互连接的LaneLets来描述自动驾驶可行驶区域&#xff0c;不仅可以表达车道几何&#xff0c;也可以完整表述车…

考研高数(平面图形的面积,旋转体的体积)

1.平面图形的面积 纠正&#xff1a;参数方程求面积 2.旋转体的体积&#xff08;做题时&#xff0c;若以x为自变量不好计算&#xff0c;可以求反函数&#xff0c;y为自变量进行计算&#xff09;

正排索引 vs 倒排索引 - 搜索引擎具体原理

阅读导航 一、正排索引1. 概念2. 实例 二、倒排索引1. 概念2. 实例 三、正排 VS 倒排1. 正排索引优缺点2. 倒排索引优缺点3. 应用场景 三、搜索引擎原理1. 宏观原理2. 具体原理 一、正排索引 1. 概念 正排索引是一种索引机制&#xff0c;它将文档或数据记录按照某种特定的顺序…

【cpp】快速排序优化

标题&#xff1a;【cpp】快速排序 水墨不写bug 正文开始&#xff1a; 快速排序的局限性&#xff1a; 虽然快速排序是一种高效的排序算法&#xff0c;但也存在一些局限性&#xff1a; 最坏情况下的时间复杂度&#xff1a;如果选择的基准元素不合适&#xff0c;或者数组中存在大…

“张衡一号”卫星成功监测太阳活动引起的空间天气事件

太阳出现耀斑和日冕物质抛射等短时间尺度的剧烈活动&#xff0c;造成地球磁层、电离层和中高层大气的强烈扰动&#xff0c;这类活动通常称之为空间天气事件。空间天气事件会对现代高技术系统&#xff0c;如航空、航天、导航通信、电力油气管网等&#xff0c;造成严重影响&#…

Rust---复合数据类型之元组

目录 元组的使用输出结果 元组的使用 fn main() {// 创建一个元组let my_tuple : (i32, &str, f64) (10, "hello", 3.14);// 打印元组中的元素println!("{:?}", my_tuple);// 访问元组中的元素let first_element my_tuple.0; // 访问第一个元素let…

阿里云最新活动及优惠券领取指南

随着云计算技术的快速发展&#xff0c;越来越多的企业选择将业务部署在云平台上。阿里云作为国内领先的云服务提供商&#xff0c;不断推出各种优惠活动及优惠券&#xff0c;旨在帮助用户降低成本&#xff0c;提升运营效率。本文将为大家详细介绍阿里云的最新活动及优惠券领取指…